[
  {
    "path": ".dockerignore",
    "content": "models/\nvectorstore/\nembeddings/\ndata/\ngradio_cached_examples/\nsentence-transformers/\ntry-*/\ntests/tmp/\ndocker-compose.prod.yml\n/main.py\ndocuments/*.txt\ndocuments/*.eml\ndocs/dist/\n\n# Python artefacts\nbuild/\n*.egg-info\n.eggs/\ndist/\n__pycache__/\n.pytest_cache/\n.ruff_cache/\n.mypy_cache/\n.coverage*\ncoverage.xml\ncoverage/\n\n# Virtual envs\n.venv/\nvenv/\n\n# Notebooks\n.ipynb_checkpoints\n.virtual_documents/\n.cache/\n.config/\n.ipython/\n.jupyter/\n.local/\n.npm/\n.bash_history\n__pycache__/\n\n# MacOS\n.DS_Store\n\n# IDEs\n.idea/\n.vscode/\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug.yml",
    "content": "name: 🐞 Bug Report\ndescription: Report a bug\nlabels: ['bug']\n\nbody:\n  - type: markdown\n    attributes:\n      value: |\n        Please search for [existing issues](https://github.com/vemonet/libre-chat/issues?q=is%3Aissue) about this problem first.\n\n  - type: textarea\n    id: description\n    attributes:\n      label: Describe the bug\n      description: What are you trying to get done, what has happened, what went wrong, and what did you expect?\n      placeholder: Bug description\n    validations:\n      required: true\n\n  - type: textarea\n    id: reproduction\n    attributes:\n      label: Reproduction\n      description: A link to a reproduction repo or steps to reproduce the behaviour.\n      placeholder: |\n        Paste a log of command(s) you ran, output, tracebacks, etc, here\n\n  - type: input\n    id: os\n    attributes:\n      label: Operating System\n    validations:\n      required: true\n\n  - type: input\n    id: version\n    attributes:\n      label: Libre Chat version\n    validations:\n      required: true\n\n  - type: textarea\n    id: context\n    attributes:\n      label: Additional context\n      description: Add any other context about the problem here.\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.yml",
    "content": "name: 💡 Feature request\ndescription: Suggest an idea.\nlabels: ['enhancement']\n\nbody:\n  - type: textarea\n    id: description\n    attributes:\n      label: Describe the feature\n      description: What do you want to improve? Why?\n      placeholder: Feature description\n    validations:\n      required: true\n\n  - type: textarea\n    id: implementation\n    attributes:\n      label: An idea of implementation\n      description: Describe how you would implement it, if you have some ideas\n      placeholder: |\n        Your ideas, link to relevant packages...\n\n  - type: textarea\n    id: context\n    attributes:\n      label: Additional context\n      description: Add any other context or comment here.\n"
  },
  {
    "path": ".github/workflows/release.yml",
    "content": "name: Release\non:\n  workflow_dispatch:\n  release:\n    types: [published]\n\njobs:\n\n  tests:\n    uses: vemonet/libre-chat/.github/workflows/test.yml@main\n    secrets: inherit\n    permissions:\n      security-events: write\n      actions: read\n      contents: read\n      packages: write\n      id-token: write\n      pages: write\n      statuses: write\n\n  publish:\n    needs: tests\n    runs-on: ubuntu-latest\n\n    steps:\n    - uses: actions/checkout@v4\n\n    - name: Set up Python\n      uses: actions/setup-python@v4\n      with:\n        python-version: '3.x'\n\n    - name: Install dependencies\n      run: |\n        pip install build\n\n    - name: Build package\n      run: python -m build\n\n    - name: Publish package\n      uses: pypa/gh-action-pypi-publish@release/v1\n      with:\n        user: __token__\n        password: ${{ secrets.PYPI_TOKEN }}\n"
  },
  {
    "path": ".github/workflows/test.yml",
    "content": "name: Tests\non:\n  push:\n    branches: [ \"main\" ]\n  pull_request:\n  workflow_call:\n  workflow_dispatch:\n\njobs:\n\n  tests:\n    name: ✅ Run tests\n    runs-on: ${{ matrix.os }}\n    strategy:\n      fail-fast: false\n      matrix:\n        include:\n          - python-version: \"3.8\"\n            os: ubuntu-latest\n          - python-version: \"3.9\"\n            os: ubuntu-latest\n          - python-version: \"3.10\"\n            os: ubuntu-latest\n          - python-version: \"3.11\"\n            os: ubuntu-latest\n          # - python-version: \"3.11\"\n          #   os: windows-latest\n          # - python-version: \"3.11\"\n          #   os: macos-latest  # Consistently 10min+ slower than all other platforms\n\n    services:\n      qdrant:\n        image: qdrant/qdrant\n        ports:\n          - 6333:6333\n\n    steps:\n    - uses: actions/checkout@v4\n\n    - name: ♻️ Cache models\n      # if: ${{ matrix.python-version != '3.10' }}\n      uses: actions/cache@v3\n      with:\n        path: models\n        key: ${{ runner.os }}-models\n\n    - name: Set up Python ${{ matrix.python-version }}\n      uses: actions/setup-python@v4\n      with:\n        python-version: ${{ matrix.python-version }}\n\n    - name: Install dependencies\n      run: |\n        pipx install hatch\n\n    - name: Test with coverage\n      run: |\n        hatch run test\n\n    - name: Rename coverage per os/version\n      run: mv .coverage \".coverage.${{ matrix.os }}.${{ matrix.python-version }}\"\n\n    - name: ☂️ Upload coverage files\n      uses: actions/upload-artifact@v3\n      if: ${{ matrix.os == 'ubuntu-latest' }}\n      with:\n        name: coverage\n        path: .coverage.*\n\n\n  publish-coverage:\n    name: ☂️ Publish coverage\n    needs: [ tests ]\n    runs-on: ubuntu-latest\n    permissions:\n      statuses: write\n    steps:\n      - uses: actions/checkout@v4\n      - uses: actions/setup-python@v4\n        with:\n          python-version: '3.11'\n      - name: Get coverage files\n        uses: actions/download-artifact@v3\n        with:\n          name: coverage\n          path: coverage\n      - run: pip install coverage[toml] smokeshow\n      - run: ls -la coverage\n      - run: coverage combine coverage\n      - run: coverage report\n      - run: coverage html --show-contexts --title \"☂️ Coverage for vemonet/libre-chat [${{ github.sha }}]\"\n      - name: Store coverage HTML\n        uses: actions/upload-artifact@v3\n        with:\n          name: coverage-html\n          path: htmlcov\n\n      - run: smokeshow upload htmlcov\n        env:\n          SMOKESHOW_GITHUB_STATUS_DESCRIPTION: Coverage {coverage-percentage}\n          SMOKESHOW_GITHUB_COVERAGE_THRESHOLD: 90\n          SMOKESHOW_GITHUB_CONTEXT: coverage\n          SMOKESHOW_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n          SMOKESHOW_GITHUB_PR_HEAD_SHA: ${{ github.sha }}\n          SMOKESHOW_AUTH_KEY: ${{ secrets.SMOKESHOW_AUTH_KEY }}\n\n\n  publish-docs:\n    name: 📚 Update docs website\n    if: github.event_name != 'pull_request'\n    needs: [ tests, codeql ]\n    runs-on: ubuntu-latest\n    permissions:\n      contents: read\n      pages: write\n      id-token: write\n    concurrency:\n      group: \"pages\"\n      cancel-in-progress: false\n\n    steps:\n      - uses: actions/checkout@v4\n\n      - name: Set up Python\n        uses: actions/setup-python@v4\n        with:\n          python-version: 3.11\n\n      - name: Install dependencies\n        run: pip install \".[doc]\"\n\n      - name: Deploy mkdocs on GitHub Pages\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n        run: mkdocs build -f docs/mkdocs.yml -d dist  # mkdocs gh-deploy dont support new pages\n\n      - name: Setup Pages\n        uses: actions/configure-pages@v3\n\n      - name: Upload artifact\n        uses: actions/upload-pages-artifact@v2\n        with:\n          path: './docs/dist'\n\n      - name: Deploy to GitHub Pages\n        id: deployment\n        uses: actions/deploy-pages@v2\n\n\n  publish-docker:\n    name: 🐳 Publish docker image\n    needs: [ tests, codeql ]\n    runs-on: ubuntu-latest\n    permissions:\n      contents: read\n      packages: write\n      id-token: write # This is used to complete the identity challenge with sigstore/fulcio\n    env:\n      REGISTRY: ghcr.io\n      IMAGE_NAME: ${{ github.repository }}\n\n    steps:\n      - name: Checkout repository\n        uses: actions/checkout@v4\n\n      # Enabling the cache causes the build to go out of storage space\n      # - name: ♻️ Cache models\n      #   uses: actions/cache@v3\n      #   with:\n      #     path: models\n      #     key: ${{ runner.os }}-models\n\n      # Install the cosign tool except on PR\n      - name: Install cosign\n        if: github.event_name != 'pull_request'\n        uses: sigstore/cosign-installer@v3.1.1\n        with:\n          cosign-release: 'v2.1.1'\n\n      - name: Setup Docker buildx\n        uses: docker/setup-buildx-action@v2\n\n      # Login against a Docker registry except on PR\n      - name: Log into registry ${{ env.REGISTRY }}\n        if: github.event_name != 'pull_request'\n        uses: docker/login-action@v2\n        with:\n          registry: ${{ env.REGISTRY }}\n          username: ${{ github.actor }}\n          password: ${{ secrets.GITHUB_TOKEN }}\n\n      # Extract metadata (tags, labels) for Docker\n      - name: Extract Docker metadata\n        id: meta\n        uses: docker/metadata-action@v4\n        with:\n          images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}\n          tags: |\n            type=ref,event=branch\n            type=semver,pattern={{version}}\n\n      # Build and push Docker image with Buildx (don't push on PR)\n      - name: Build and push Docker image\n        id: build-and-push\n        uses: docker/build-push-action@v4\n        with:\n          context: .\n          push: ${{ github.event_name != 'pull_request' }}\n          tags: ${{ steps.meta.outputs.tags }}\n          labels: ${{ steps.meta.outputs.labels }}\n          cache-from: type=gha\n          cache-to: type=gha,mode=max\n\n      # Sign the resulting Docker image digest except on PRs https://github.com/sigstore/cosign\n      - name: Sign the published Docker image\n        if: ${{ github.event_name != 'pull_request' }}\n        env:\n          # https://docs.github.com/en/actions/security-guides/security-hardening-for-github-actions#using-an-intermediate-environment-variable\n          TAGS: ${{ steps.meta.outputs.tags }}\n          DIGEST: ${{ steps.build-and-push.outputs.digest }}\n        # This step uses the identity token to provision an ephemeral certificate against the sigstore community Fulcio instance.\n        run: echo \"${TAGS}\" | xargs -I {} cosign sign --yes {}@${DIGEST}\n\n\n  # Commented because it was hanging for 20min, probably servers issues\n  codeql:\n    name: 🔎 CodeQL analysis\n    runs-on: ubuntu-latest\n    permissions:\n      security-events: write\n      actions: read\n      contents: read\n    steps:\n      - name: Checkout repository\n        uses: actions/checkout@v4\n      - name: Initialize CodeQL\n        uses: github/codeql-action/init@v2\n        with:\n          languages: python\n      - name: Perform CodeQL Analysis\n        uses: github/codeql-action/analyze@v2\n"
  },
  {
    "path": ".gitignore",
    "content": "models/\nvectorstore/\nembeddings/\ndata/\ngradio_cached_examples/\nsentence-transformers/\ntry-*/\ntests/tmp/\ndocker-compose.prod.yml\n/main.py\ndocuments/*.txt\ndocuments/*.eml\ndocs/dist/\n\n# Python artefacts\nbuild/\n*.egg-info\n.eggs/\ndist/\n__pycache__/\n.pytest_cache/\n.ruff_cache/\n.mypy_cache/\n.coverage*\ncoverage.xml\ncoverage/\n\n# Virtual envs\n.venv/\nvenv/\n.env\n\n# Notebooks\n.ipynb_checkpoints\n.virtual_documents/\n.cache/\n.config/\n.ipython/\n.jupyter/\n.local/\n.npm/\n.bash_history\n__pycache__/\n\n# MacOS\n.DS_Store\n\n# IDEs\n.idea/\n.vscode/\n"
  },
  {
    "path": ".pre-commit-config.yaml",
    "content": "# See https://pre-commit.com for more information\nrepos:\n  - repo: https://github.com/pre-commit/pre-commit-hooks\n    rev: v4.4.0\n    hooks:\n    - id: check-added-large-files\n      name: \" 🐘 Check for added large files\"\n    - id: check-toml\n      name: \" ✔️  Check TOML\"\n    - id: check-yaml\n      name: \" ✔️  Check YAML\"\n      args:\n      - --unsafe\n    - id: check-json\n      name: \" ✔️  Check JSON\"\n    - id: end-of-file-fixer\n      name: \" 🪚 Fix end of files\"\n    - id: trailing-whitespace\n      name: \" ✂️  Trim trailing whitespaces\"\n  - repo: https://github.com/psf/black\n    rev: 23.3.0\n    hooks:\n      - id: black\n        name: \" ✒️  Formatting code with Black\"\n  - repo: https://github.com/charliermarsh/ruff-pre-commit\n    rev: v0.0.277\n    hooks:\n      - id: ruff\n        name: \" ⚡️ Formatting code with Ruff\"\n        args:\n        - --fix\n\nci:\n    autofix_commit_msg: 🎨 [pre-commit] Auto format\n    autoupdate_commit_msg: ⬆ [pre-commit] pre-commit auto update\n"
  },
  {
    "path": "CITATION.cff",
    "content": "cff-version: 1.2.0\nmessage: \"If you use this software, please cite it as below.\"\nauthors:\n  - orcid:  https://orcid.org/0000-0002-1501-1082\n    email: vincent.emonet@gmail.com\n    given-names: Vincent Emonet\n    # affiliation: Institute of Data Science, Maastricht University\ntitle: \"Libre Chat\"\nrepository-code: https://github.com/vemonet/libre-chat\ndate-released: 2023-07-26\nurl: https://pypi.org/project/libre-chat\n# doi: 10.48550/arXiv.2206.13787\n"
  },
  {
    "path": "Dockerfile",
    "content": "ARG BASE_IMAGE=nvcr.io/nvidia/cuda:12.1.0-runtime-ubuntu22.04\n\n# ARG BASE_IMAGE=python:3.11\n# 2.7GB cf. https://ngc.nvidia.com/catalog/containers/nvidia:cuda\n# ARG BASE_IMAGE=nvcr.io/nvidia/pytorch:23.06-py3\n# 8.5GB cf. https://ngc.nvidia.com/catalog/containers/nvidia:pytorch\n\n# CUDA image: https://github.com/oobabooga/text-generation-webui/blob/main/docker/Dockerfile\n\nFROM ${BASE_IMAGE}\n\nARG DEBIAN_FRONTEND=noninteractive\nENV LIBRECHAT_WORKERS=1\n\n# CUDA image requires to install python\nRUN apt-get update && \\\n    apt-get install -y software-properties-common git vim build-essential python3-dev wget unzip && \\\n    wget https://bootstrap.pypa.io/get-pip.py && \\\n    python3 get-pip.py && \\\n    rm get-pip.py && \\\n    pip3 install --upgrade pip\n\n# Install app in /app\nWORKDIR /app\n\n# Pre-install requirements to use cache when re-building\nADD scripts/requirements.txt .\nRUN pip3 install -r requirements.txt && \\\n    rm requirements.txt\n\nADD . .\nRUN pip3 install -e .[gpu]\n\n# We use /data as workdir for models, embeddings, vectorstore\nWORKDIR /data\n\nVOLUME [ \"/data\" ]\n\nENTRYPOINT [ \"/app/scripts/start.sh\" ]\n"
  },
  {
    "path": "LICENSE.txt",
    "content": "MIT License\n\nCopyright (c) 2023-present Vincent Emonet <vincent.emonet@gmail.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "<div align=\"center\">\n\n# <span><img height=\"30\" src=\"https://raw.github.com/vemonet/libre-chat/main/docs/docs/assets/logo.png\"></span> Libre Chat\n\n[![Test package](https://github.com/vemonet/libre-chat/actions/workflows/test.yml/badge.svg)](https://github.com/vemonet/libre-chat/actions/workflows/test.yml) [![Coverage](https://coverage-badge.samuelcolvin.workers.dev/vemonet/libre-chat.svg)](https://coverage-badge.samuelcolvin.workers.dev/redirect/vemonet/libre-chat)\n\n[![PyPI - Version](https://img.shields.io/pypi/v/libre-chat.svg?logo=pypi&label=PyPI&logoColor=silver)](https://pypi.org/project/libre-chat/)\n[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/libre-chat.svg?logo=python&label=Python&logoColor=silver)](https://pypi.org/project/libre-chat/)\n[![License](https://img.shields.io/pypi/l/libre-chat)](https://github.com/vemonet/libre-chat/blob/main/LICENSE.txt) [![Pull requests welcome](https://img.shields.io/badge/pull%20requests-welcome-brightgreen)](https://github.com/vemonet/libre-chat/fork)\n\nEasily configure and deploy a **fully self-hosted chatbot web service** based on open source Large Language Models (LLMs), such as [Mixtral](https://mistral.ai/news/mixtral-of-experts) or [Llama 2](https://ai.meta.com/llama/), without the need for knowledge in machine learning.\n\n</div>\n\n- 🌐 Free and Open Source chatbot web service with UI and API.\n- 🏡 Fully self-hosted, not tied to any service, and offline capable. Forget about API keys! Models and embeddings can be pre-downloaded, and the training and inference processes can run off-line if necessary.\n- 🔌 Web API described using OpenAPI specs: GET/POST operations, websocket for streaming response\n- 🪶 Chat web UI working well on desktop and mobile, with streaming response, and markdown rendering. Alternative gradio-based UI also available.\n- 🚀 Easy to setup, no need to program, just configure the service with a [YAML](https://yaml.org/) file, and start it with 1 command\n- 📦 Available as a `pip` package 🐍, or `docker` image 🐳\n- 🐌 No need for GPU, this will work even on your laptop CPU! That said, just running on CPUs can be quite slow (up to 1min to answer a documents-base question on recent laptops).\n- 🦜 Powered by [`LangChain`](https://python.langchain.com) and [`llama.cpp`](https://github.com/ggerganov/llama.cpp) to perform inference locally.\n- 🤖 Various types of agents can be deployed:\n  - **💬 Generic conversation**: do not need any additional training, just configure settings such as the template prompt\n  - **📚 Documents-based question answering** (experimental): automatically build similarity vectors from documents uploaded through the API UI, the chatbot will use them to answer your question, and return which documents were used to generate the answer (PDF, CSV, HTML, JSON, markdown, and more supported).\n- 🔍 Readable logs to understand what is going on.\n\n## 📖 Documentation\n\nFor more details on how to use Libre Chat check the documentation at **[vemonet.github.io/libre-chat](http://vemonet.github.io/libre-chat)**\n\n\n![UI screenshot](https://raw.github.com/vemonet/libre-chat/main/docs/docs/assets/screenshot.png)\n\n![UI screenshot](https://raw.github.com/vemonet/libre-chat/main/docs/docs/assets/screenshot-light.png)\n\n## 🏗️ Work in progress\n\n> [!WARNING]\n> This project is a work in progress, use it with caution.\n\nThose checkpoints are features we plan to work on in the future, feel free to let us know in the issues if you have any comment or request.\n\n- [x] Stream response to the websocket to show words as they are generated\n- [ ] Add button to let the user stop the chatbot generation\n- [ ] Add authentication mechanisms? (OAuth/OpenID Connect) https://github.com/vemonet/libre-chat/issues/5\n- [ ] Add conversational history? https://milvus.io/blog/conversational-memory-in-langchain.md\n- [ ] Add an admin dashboard web UI to enable users to upload/inspect/delete documents for QA, see/edit the config of the chatbot.\n- [ ] Kubernetes deployment (Helm chart?)\n\n## 🐳 Deploy with docker\n\nIf you just want to quickly deploy it using the pre-trained model `Mixtral-8x7B-Instruct`, you can use docker:\n\n```bash\ndocker run -it -p 8000:8000 ghcr.io/vemonet/libre-chat:main\n```\n\nYou can configure the deployment using environment variables. For this using a `docker compose` and a `.env` file is easier, first create the `docker-compose.yml` file:\n\n```yaml\nversion: \"3\"\nservices:\n  libre-chat:\n    image: ghcr.io/vemonet/libre-chat:main\n    volumes:\n      # ⚠️ Share folders from the current directory to the /data dir in the container\n      - ./chat.yml:/data/chat.yml\n      - ./models:/data/models\n      - ./documents:/data/documents\n      - ./embeddings:/data/embeddings\n      - ./vectorstore:/data/vectorstore\n    ports:\n      - 8000:8000\n```\n\nAnd create a `chat.yml` file with your configuration in the same folder as the `docker-compose.yml`:\n\n```yaml\nllm:\n  model_path: ./models/mixtral-8x7b-instruct-v0.1.Q2_K.gguf\n  model_download: https://huggingface.co/TheBloke/Mixtral-8x7B-Instruct-v0.1-GGUF/resolve/main/mixtral-8x7b-instruct-v0.1.Q2_K.gguf\n  temperature: 0.01    # Config how creative, but also potentially wrong, the model can be. 0 is safe, 1 is adventurous\n  max_new_tokens: 1024 # Max number of words the LLM can generate\n  # Always use input for the human input variable with a generic agent\n  prompt_variables: [input, history]\n  prompt_template: |\n    Your are an assistant, please help me\n\n    {history}\n    User: {input}\n    AI Assistant:\n\nvector:\n  vector_path: null # Path to the vectorstore to do QA retrieval, e.g. ./vectorstore/db_faiss\n  # Set to null to deploy a generic conversational agent\n  vector_download: null\n  embeddings_path: ./embeddings/all-MiniLM-L6-v2 # Path to embeddings used to generate the vectors, or use directly from HuggingFace: sentence-transformers/all-MiniLM-L6-v2\n  embeddings_download: https://public.ukp.informatik.tu-darmstadt.de/reimers/sentence-transformers/v0.2/all-MiniLM-L6-v2.zip\n  documents_path: ./documents # Path to documents to vectorize\n  chunk_size: 500             # Maximum size of chunks, in terms of number of characters\n  chunk_overlap: 50           # Overlap in characters between chunks\n  chain_type: stuff           # Or: map_reduce, reduce, map_rerank. More details: https://docs.langchain.com/docs/components/chains/index_related_chains\n  search_type: similarity     # Or: similarity_score_threshold, mmr. More details: https://python.langchain.com/docs/modules/data_connection/retrievers/vectorstore\n  return_sources_count: 2     # Number of sources to return when generating an answer\n  score_threshold: null       # If using the similarity_score_threshold search type. Between 0 and 1\n\ninfo:\n  title: \"Libre Chat\"\n  version: \"0.1.0\"\n  description: |\n    Open source and free chatbot powered by [LangChain](https://python.langchain.com) and [llama.cpp](https://github.com/ggerganov/llama.cpp)\n  examples:\n  - What is the capital of the Netherlands?\n  - Which drugs are approved by the FDA to mitigate Alzheimer symptoms?\n  - How can I create a logger with timestamp using python logging?\n  favicon: https://raw.github.com/vemonet/libre-chat/main/docs/docs/assets/logo.png\n  repository_url: https://github.com/vemonet/libre-chat\n  public_url: https://chat.semanticscience.org\n  contact:\n    name: Vincent Emonet\n    email: vincent.emonet@gmail.com\n  license_info:\n    name: MIT license\n    url: https://raw.github.com/vemonet/libre-chat/main/LICENSE.txt\n```\n\nFinally start your chat service with:\n\n```bash\ndocker compose up\n```\n\n## 📦️ Usage with pip\n\nThis package requires Python >=3.8, simply install it with `pipx` or `pip`:\n\n```bash\npip install libre-chat\n```\n\n### ⌨️ Use as a command-line interface\n\nYou can easily start a new chat web service including UI and API using your terminal:\n\n```bash\nlibre-chat start\n```\n\nProvide a specific config file:\n\n```bash\nlibre-chat start config/chat-vectorstore-qa.yml\n```\n\nFor re-build of the vectorstore:\n\n```bash\nlibre-chat build --vector vectorstore/db_faiss --documents documents\n```\n\nGet a full rundown of the available options with:\n\n```bash\nlibre-chat --help\n```\n\n### 🐍 Use with python\n\nOr you can use this package in python scripts:\n\n```python\nimport logging\n\nimport uvicorn\nfrom libre_chat import ChatConf, ChatEndpoint, Llm\n\nlogging.basicConfig(level=logging.getLevelName(\"INFO\"))\nconf = ChatConf(\n  model_path=\"./models/mixtral-8x7b-instruct-v0.1.Q2_K.gguf\",\n  vector_path=None\n)\nllm = Llm(conf=conf)\nprint(llm.query(\"What is the capital of the Netherlands?\"))\n\n# Create and deploy a FastAPI app based on your LLM\napp = ChatEndpoint(llm=llm, conf=conf)\nuvicorn.run(app)\n```\n\n## 🤝 Credits\n\nInspired by:\n\n- https://github.com/kennethleungty/Llama-2-Open-Source-LLM-CPU-Inference\n- https://github.com/lm-sys/FastChat\n- https://github.com/liltom-eth/llama2-webui\n\n<a href=\"https://www.flaticon.com/free-icons/llama\" title=\"llama icons\">Llama icons created by Freepik - Flaticon</a>\n"
  },
  {
    "path": "chat.yml",
    "content": "# Config for a generic conversational agent\nllm:\n  model_path: ./models/mixtral-8x7b-instruct-v0.1.Q2_K.gguf\n  model_download: https://huggingface.co/TheBloke/Mixtral-8x7B-Instruct-v0.1-GGUF/resolve/main/mixtral-8x7b-instruct-v0.1.Q2_K.gguf\n  temperature: 0.01    # Config how creative, but also potentially wrong, the model can be. 0 is safe, 1 is adventurous\n  max_new_tokens: 1024 # Max number of words the LLM can generate\n  # Always use input for the human input variable with a generic agent\n  prompt_variables: [input, history]\n  prompt_template: |\n    Your are an assistant, answer the question briefly.\n\n    {history}\n    User: {input}\n    AI Assistant:\n\ninfo:\n  title: \"Libre Chat\"\n  version: \"0.1.0\"\n  description: |\n    Open source and free chatbot powered by [LangChain](https://python.langchain.com) and [llama.cpp](https://github.com/ggerganov/llama.cpp)\n  examples:\n  - What is the capital of the Netherlands?\n  - Which drugs are approved by the FDA to mitigate Alzheimer symptoms?\n  - How can I create a logger with timestamp using python logging?\n  favicon: https://raw.github.com/vemonet/libre-chat/main/docs/docs/assets/logo.png\n  repository_url: https://github.com/vemonet/libre-chat\n  public_url: https://chat.semanticscience.org\n  contact:\n    name: Vincent Emonet\n    email: vincent.emonet@gmail.com\n  license_info:\n    name: MIT license\n    url: https://raw.github.com/vemonet/libre-chat/main/LICENSE.txt\n"
  },
  {
    "path": "config/chat-conversation.yml",
    "content": "# Config for a generic conversational agent\nllm:\n  model_path: ./models/mixtral-8x7b-instruct-v0.1.Q2_K.gguf\n  model_download: https://huggingface.co/TheBloke/Mixtral-8x7B-Instruct-v0.1-GGUF/resolve/main/mixtral-8x7b-instruct-v0.1.Q2_K.gguf\n  temperature: 0.01    # Config how creative, but also potentially wrong, the model can be. 0 is safe, 1 is adventurous\n  max_new_tokens: 1024 # Max number of words the LLM can generate\n  # Always use input for the human input variable with a generic agent\n  prompt_variables: [input, history]\n  prompt_template: |\n    Your are an assistant, answer the question briefly.\n\n    {history}\n    User: {input}\n    AI Assistant:\n\ninfo:\n  title: \"Libre Chat\"\n  version: \"0.1.0\"\n  description: |\n    Open source and free chatbot powered by [LangChain](https://python.langchain.com) and [llama.cpp](https://github.com/ggerganov/llama.cpp)\n  examples:\n  - What is the capital of the Netherlands?\n  - Which drugs are approved by the FDA to mitigate Alzheimer symptoms?\n  - How can I create a logger with timestamp using python logging?\n  favicon: https://raw.github.com/vemonet/libre-chat/main/docs/docs/assets/logo.png\n  repository_url: https://github.com/vemonet/libre-chat\n  public_url: https://chat.semanticscience.org\n  contact:\n    name: Vincent Emonet\n    email: vincent.emonet@gmail.com\n  license_info:\n    name: MIT license\n    url: https://raw.github.com/vemonet/libre-chat/main/LICENSE.txt\n"
  },
  {
    "path": "config/chat-vectorstore-qa.yml",
    "content": "# Config for a Question Answering (qa) agent\n# Will answer based on provided documents, and return which docs was used to answer the question\nllm:\n  model_path: ./models/mixtral-8x7b-instruct-v0.1.Q2_K.gguf\n  model_download: https://huggingface.co/TheBloke/Mixtral-8x7B-Instruct-v0.1-GGUF/resolve/main/mixtral-8x7b-instruct-v0.1.Q2_K.gguf\n  temperature: 0.01    # Config how creative (but also potentially wrong) the model can be. 0 is safe, 1 is adventurous\n  max_new_tokens: 1024 # Max number of words the LLM can generate\n  prompt_variables: [\"question\", \"context\"]\n  prompt_template: |\n    Use the following pieces of information to answer the user's question.\n    If you don't know the answer, just say that you don't know, don't try to make up an answer.\n\n    Context: {context}\n    Question: {question}\n\n    Only return the helpful answer below and nothing else.\n    Helpful answer:\n\nvector:\n  # vector_path: http://qdrant:6333\n  vector_path: ./vectorstore/db_faiss # Path to the vectorstore to do QA retrieval\n  vector_download: null\n  embeddings_path: ./embeddings/all-MiniLM-L6-v2 # Embeddings used to generate the vectors. To use from HF: sentence-transformers/all-MiniLM-L6-v2\n  embeddings_download: https://public.ukp.informatik.tu-darmstadt.de/reimers/sentence-transformers/v0.2/all-MiniLM-L6-v2.zip\n  documents_path: ./documents # Path to documents to vectorize\n  # When vectorizing we split the text up into small, semantically meaningful chunks (often sentences):\n  chunk_size: 500             # Maximum size of chunks, in terms of number of characters\n  chunk_overlap: 50           # Overlap in characters between chunks\n  chain_type: stuff           # Or: map_reduce, reduce, map_rerank. More details: https://docs.langchain.com/docs/components/chains/index_related_chains\n  search_type: similarity     # Or: similarity_score_threshold, mmr. More details: https://python.langchain.com/docs/modules/data_connection/retrievers/vectorstore\n  return_sources_count: 2     # Number of sources to return when generating an answer\n  score_threshold: null       # If using the similarity_score_threshold search_type. Between 0 and 1\n\ninfo:\n  title: \"Libre Chat\"\n  version: \"0.1.0\"\n  description: |\n    Open source and free **question-answering** chatbot powered by [LangChain](https://python.langchain.com) and [llama.cpp](https://github.com/ggerganov/llama.cpp)\n  examples:\n  - What is the capital of the Netherlands?\n  - Which drugs are approved by the FDA to mitigate Alzheimer symptoms?\n  - What was the GDP of France in 1998?\n  favicon: https://raw.github.com/vemonet/libre-chat/main/docs/docs/assets/logo.png\n  repository_url: https://github.com/vemonet/libre-chat\n  public_url: https://chat.semanticscience.org\n  contact:\n    name: \"Vincent Emonet\"\n    email: \"vincent.emonet@gmail.com\"\n  license_info:\n    name: \"MIT license\"\n    url: \"https://raw.github.com/vemonet/libre-chat/main/LICENSE.txt\"\n  workers: 4\n"
  },
  {
    "path": "docker-compose.yml",
    "content": "version: \"3\"\nservices:\n\n  libre-chat:\n    # depends_on: [qdrant]\n    build: .\n    # image: ghcr.io/vemonet/libre-chat:main\n    volumes:\n      - ./config/chat-vectorstore-qa.yml:/data/chat.yml\n      # - ./chat.yml:/data/chat.yml\n      - ./data/models:/data/models\n      - ./data/documents:/data/documents\n      - ./data/embeddings:/data/embeddings\n      - ./data/vectorstore:/data/vectorstore\n      # - ./data:/data # Or directly share the data directory with chat.yml, and folders for models, vectorstore, etc\n    shm_size: '16g'\n    # ports:\n    #   - 8000:8000\n    # entrypoint: uvicorn scripts.main:app\n    deploy:  # Enable GPU in the container\n      resources:\n        reservations:\n          devices:\n            - driver: nvidia\n              count: 3\n              capabilities: [gpu]\n    environment:\n      - LIBRECHAT_WORKERS=1\n      # For deployment with nginx-proxy https://github.com/nginx-proxy/nginx-proxy\n      - VIRTUAL_HOST=chat.semanticscience.org\n      - LETSENCRYPT_HOST=chat.semanticscience.org\n      - VIRTUAL_PORT=8000\n      # - CUDA_VISIBLE_DEVICES=0 # Limit which GPU is made available\n      # Configuring proxy manually is required to access internet within UM network\n      - HTTP_PROXY=http://proxy.unimaas.nl:3128\n      - HTTPS_PROXY=http://proxy.unimaas.nl:3128\n      - http_proxy=http://proxy.unimaas.nl:3128\n      - https_proxy=http://proxy.unimaas.nl:3128\n      - NO_PROXY=127.0.0.1,localhost,137.120.0.0/16,qdrant\n    # Containers deployed publicly need to be on the nginx network\n    networks:\n      - nginx\n\n\n  # qdrant:\n  #   # https://hub.docker.com/r/qdrant/qdrant/tags\n  #   image: qdrant/qdrant:v1.5.1\n  #   restart: unless-stopped\n  #   volumes:\n  #     - ./data/vectorstore/qdrant:/qdrant/storage\n  #     # - ./scripts/qdrant_config.yml:/qdrant/config/production.yaml\n  #   environment:\n  #     - QDRANT_ALLOW_RECOVERY_MODE=true\n  #     # - VIRTUAL_HOST=qdrant.137.120.31.148.nip.io\n  #     # - LETSENCRYPT_HOST=qdrant.137.120.31.148.nip.io\n  #     # - VIRTUAL_PORT=6333\n  #   # ports:\n  #   #   - 6333:6333\n  #   # command:\n  #   #   - ./qdrant --config-path /qdrant/qdrant_config.yml\n  #   networks:\n  #     - nginx\n\n\n# Also required to deploy containers publicly\nnetworks:\n  nginx:\n    name: nginx\n    external: true\n"
  },
  {
    "path": "docs/docs/ChatConf.md",
    "content": "# Chat Config\n\n::: libre_chat.conf.ChatConf\n"
  },
  {
    "path": "docs/docs/ChatEndpoint.md",
    "content": "# LLM Endpoint\n\n::: libre_chat.endpoint.ChatEndpoint\n"
  },
  {
    "path": "docs/docs/ChatRouter.md",
    "content": "# Chat Router\n\n::: libre_chat.router.ChatRouter\n"
  },
  {
    "path": "docs/docs/Llm.md",
    "content": "# LLM\n\n::: libre_chat.llm.Llm\n"
  },
  {
    "path": "docs/docs/assets/custom.css",
    "content": "code.highlight {\n    font-size: 18px;\n}\n"
  },
  {
    "path": "docs/docs/configure-conversation.md",
    "content": "Create a `chat.yml` file with your configuration before starting the web service.\n\nBelow is an example of configuration using the Mixtral GGUF model, without vectorstore, to deploy a **generic conversational chatbot**\n\n```yaml title=\"chat.yml\"\nllm:\n  model_path: ./models/mixtral-8x7b-instruct-v0.1.Q2_K.gguf # (1)\n  model_download: https://huggingface.co/TheBloke/Mixtral-8x7B-Instruct-v0.1-GGUF/resolve/main/mixtral-8x7b-instruct-v0.1.Q2_K.gguf\n  temperature: 0.01    # Config how creative, but also potentially wrong, the model can be. 0 is safe, 1 is adventurous\n  max_new_tokens: 1024 # Max number of words the LLM can generate\n  # Always use input for the human input variable with a generic agent\n  prompt_variables: [input, history]\n  prompt_template: |\n    Your are an assistant, please help me\n\n    {history}\n    User: {input}\n    AI Assistant:\n\ninfo:\n  title: \"Libre Chat\"\n  version: \"0.1.0\"\n  description: |\n    Open source and free chatbot powered by [LangChain](https://python.langchain.com) and [llama.cpp](https://github.com/ggerganov/llama.cpp)\n  examples:\n  - What is the capital of the Netherlands?\n  - Which drugs are approved by the FDA to mitigate Alzheimer symptoms?\n  - How can I create a logger with timestamp using python logging?\n  favicon: https://raw.github.com/vemonet/libre-chat/main/docs/docs/assets/logo.png\n  repository_url: https://github.com/vemonet/libre-chat\n  public_url: https://chat.semanticscience.org\n  contact:\n    name: Vincent Emonet\n    email: vincent.emonet@gmail.com\n  license_info:\n    name: MIT license\n    url: https://raw.github.com/vemonet/libre-chat/main/LICENSE.txt\n  workers: 4\n```\n\n1. We recommend to predownload the files, but you can provide download URLs that will be used if the files are not present\n"
  },
  {
    "path": "docs/docs/configure-documents-qa.md",
    "content": "!!! warning \"Experimental\"\n\n    Documents-based question answering is still experimental and subject to changes.\n\nThe deployment can be configured from a YAML file: paths to the model and vectorstore, model settings, web services infos. Create a `chat.yml` file with your configuration before starting the web service.\n\nLibre Chat can be used to train and deploy a **documents-based question answering chatbot**\n\nIt requires to deploy a Qdrant similarity search service beside Libre Chat. We recommend to depoy the 2 services with a [`docker-compose.yml`](https://github.com/vemonet/libre-chat/blob/main/docker-compose.yml) file.\n\nWhen starting the service Libre Chat will automatically check if the `vectorstore` is already available, if not, it will build it from the documents provided in the directory available at the given `documents_path`.\n\nOnce the web service is up you can easily upload more documents through the API UI (green icon at the top right of the chatbot web UI). Zip files will be automatically unzipped, and the vectorstore will be automatically rebuilt with all the files uploaded to the server. You will also find a call to get the list of all the documents uploaded to the server. You can prevent unwanted users to add files by adding a pass key using the environment variable `LIBRECHAT_ADMIN_KEY`\n\n??? abstract \"File types supported\"\n\n    Libre Chat will automatically vectorize the file types below. Let us know if you need anything else in the [issues](https://github.com/vemonet/libre-chat/issues).\n\n    | File type                  | Pattern                 |\n    | -------------------------- | ----------------------- |\n    | PDF                        | `*.pdf`                 |\n    | CSV/TSV/PSV                | `*.csv`/`*.tsv`/`*.psv` |\n    | JSON                       | `*.json*`               |\n    | HTML                       | `.?xhtm?l`              |\n    | Markdown                   | `*.md*`                 |\n    | Text                       | `*.txt`                 |\n    | Open Document Format (ODT) | `*.odt`                 |\n    | Word documents             | `*.doc?x`               |\n    | Excel                      | `*.xls?x`               |\n    | PowerPoint                 | `*.ppt?x`               |\n    | ePub                       | `*.epub`                |\n    | Email                      | `*.eml`                 |\n    | EverNote                   | `*.enex`                |\n\n??? example \"Use custom document loaders\"\n\n    Custom document loaders can be defined when instantiating the `Llm` class:\n\n    ```python\n    from langchain.document_loaders import (\n        CSVLoader,\n        EverNoteLoader,\n        JSONLoader,\n        PyPDFLoader,\n        TextLoader,\n        UnstructuredEmailLoader,\n        UnstructuredEPubLoader,\n        UnstructuredHTMLLoader,\n        UnstructuredMarkdownLoader,\n        UnstructuredODTLoader,\n        UnstructuredPowerPointLoader,\n        UnstructuredWordDocumentLoader,\n        UnstructuredExcelLoader,\n    )\n    from libre_chat import Llm, parse_conf\n\n    loaders = [\n        {\"glob\": \"*.pdf\", \"loader_cls\": PyPDFLoader},\n        {\"glob\": \"*.csv\", \"loader_cls\": CSVLoader, \"loader_kwargs\": {\"encoding\": \"utf8\"}},\n        {\"glob\": \"*.tsv\", \"loader_cls\": CSVLoader, \"loader_kwargs\": {\"encoding\": \"utf8\", \"delimiter\": \"\\t\"}},\n        {\"glob\": \"*.psv\", \"loader_cls\": CSVLoader, \"loader_kwargs\": {\"encoding\": \"utf8\", \"delimiter\": \"\\\\p\"}},\n        {\"glob\": \"*.xls?x\", \"loader_cls\": UnstructuredExcelLoader},\n        {\"glob\": \"*.?xhtm?l\", \"loader_cls\": UnstructuredHTMLLoader},\n        {\"glob\": \"*.xml\", \"loader_cls\": UnstructuredHTMLLoader},\n        {\"glob\": \"*.json*\", \"loader_cls\": JSONLoader},\n        {\"glob\": \"*.md*\", \"loader_cls\": UnstructuredMarkdownLoader},\n        {\"glob\": \"*.txt\", \"loader_cls\": TextLoader, \"loader_kwargs\": {\"encoding\": \"utf8\"}},\n        {\"glob\": \"*.doc?x\", \"loader_cls\": UnstructuredWordDocumentLoader},\n        {\"glob\": \"*.odt\", \"loader_cls\": UnstructuredODTLoader},\n        {\"glob\": \"*.ppt?x\", \"loader_cls\": UnstructuredPowerPointLoader},\n        {\"glob\": \"*.epub\", \"loader_cls\": UnstructuredEPubLoader},\n        {\"glob\": \"*.eml\", \"loader_cls\": UnstructuredEmailLoader},\n        {\"glob\": \"*.enex\", \"loader_cls\": EverNoteLoader},\n    ]\n\n    llm = Llm(\n        conf=parse_conf(\"config/chat-vectorstore-qa.yml\"),\n        document_loaders=loaders\n    )\n    ```\n\n\n\nBelow is an example of configuration using the Mixtral GGUF model, with a Faiss vectorstore, to deploy a question answering agent that will source its answers from the documents provided in the `./documents` folder:\n\n```yaml title=\"chat.yml\"\nllm:\n  model_path: ./models/mixtral-8x7b-instruct-v0.1.Q2_K.gguf # (1)\n  model_download: https://huggingface.co/TheBloke/Mixtral-8x7B-Instruct-v0.1-GGUF/resolve/main/mixtral-8x7b-instruct-v0.1.Q2_K.gguf\n  temperature: 0.01    # Config how creative (but also potentially wrong) the model can be. 0 is safe, 1 is adventurous\n  max_new_tokens: 1024 # Max number of words the LLM can generate\n  prompt_variables: [\"question\", \"context\"]\n  prompt_template: |\n    Use the following pieces of information to answer the user's question.\n    If you don't know the answer, just say that you don't know, don't try to make up an answer.\n\n    Context: {context}\n    Question: {question}\n\n    Only return the helpful answer below and nothing else.\n    Helpful answer:\n\nvector:\n  vector_path: ./vectorstore/db_faiss # Path to the vectorstore to do QA retrieval\n  vector_download: null\n  embeddings_path: ./embeddings/all-MiniLM-L6-v2 # (2)\n  embeddings_download: https://public.ukp.informatik.tu-darmstadt.de/reimers/sentence-transformers/v0.2/all-MiniLM-L6-v2.zip\n  documents_path: ./documents # Path to documents to vectorize (3)\n  chunk_size: 500             # Maximum size of chunks, in terms of number of characters\n  chunk_overlap: 50           # Overlap in characters between chunks\n  chain_type: stuff           # (4)\n  search_type: similarity     # (5)\n  return_sources_count: 2     # Number of sources to return when generating an answer\n  score_threshold: null       # If using the similarity_score_threshold search_type. Between 0 and 1\n\ninfo:\n  title: \"Libre Chat\"\n  version: \"0.1.0\"\n  description: |\n    Open source and free chatbot powered by [LangChain](https://python.langchain.com) and [llama.cpp](https://github.com/ggerganov/llama.cpp)\n  examples:\n  - What is the capital of the Netherlands?\n  - Which drugs are approved by the FDA to mitigate Alzheimer symptoms?\n  - What was the GDP of France in 1998?\n  favicon: https://raw.github.com/vemonet/libre-chat/main/docs/docs/assets/logo.png\n  repository_url: https://github.com/vemonet/libre-chat\n  public_url: https://chat.semanticscience.org\n  contact:\n    name: \"Vincent Emonet\"\n    email: \"vincent.emonet@gmail.com\"\n  license_info:\n    name: \"MIT license\"\n    url: \"https://raw.github.com/vemonet/libre-chat/main/LICENSE.txt\"\n  workers: 4\n```\n\n1. We recommend to predownload the files, but you can provide download URLs that will be used if the files are not present\n2. Embeddings used to generate the vectorstore.<br/>You can also directly use embeddings model from HuggingFace:\n    ```yaml\n    embeddings_path: sentence-transformers/all-MiniLM-L6-v2\n    ```\n3. When vectorizing we split the text up into small, semantically meaningful chunks (often sentences)\n4. Also available: `map_reduce`, `reduce`, `map_rerank`.<br/>More details at [https://docs.langchain.com/docs/components/chains/index_related_chains](https://docs.langchain.com/docs/components/chains/index_related_chains)\n5. Also available: `similarity_score_threshold`, `mmr`.<br/>More details: [https://python.langchain.com/docs/modules/data_connection/retrievers/vectorstore](https://python.langchain.com/docs/modules/data_connection/retrievers/vectorstore)\n\n\nIf no files are found at the path provided, e.g. `model_path`, and a download URL has been defined, e.g. `model_download`, Libre Chat will automatically download the file from the provided URL, and unzip it if it is a `.zip` file.\n"
  },
  {
    "path": "docs/docs/development.md",
    "content": "<div align=\"center\" markdown=\"span\">\n\n[![Version](https://img.shields.io/pypi/v/libre-chat)](https://pypi.org/project/libre-chat) [![Python versions](https://img.shields.io/pypi/pyversions/libre-chat)](https://pypi.org/project/libre-chat) [![Image size](https://ghcr-badge.egpl.dev/vemonet/libre-chat/size)](https://github.com/vemonet/libre-chat/pkgs/container/libre-chat) [![Pull requests welcome](https://img.shields.io/badge/pull%20requests-welcome-brightgreen)](https://github.com/vemonet/libre-chat/fork)\n<br />\n\n[![Test package](https://github.com/vemonet/libre-chat/actions/workflows/test.yml/badge.svg)](https://github.com/vemonet/libre-chat/actions/workflows/test.yml) [![Coverage](https://coverage-badge.samuelcolvin.workers.dev/vemonet/libre-chat.svg)](https://coverage-badge.samuelcolvin.workers.dev/redirect/vemonet/libre-chat) [![Publish package](https://github.com/vemonet/libre-chat/actions/workflows/release.yml/badge.svg)](https://github.com/vemonet/libre-chat/actions/workflows/release.yml)\n<br />\n\n[![Hatch project](https://img.shields.io/badge/%F0%9F%A5%9A-Hatch-4051b5.svg){ loading=lazy .off-glb }](https://github.com/pypa/hatch) [![linting - Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/charliermarsh/ruff/main/assets/badge/v2.json){ loading=lazy .off-glb }](https://github.com/astral-sh/ruff) [![code style - Black](https://img.shields.io/badge/code%20style-black-000000.svg){ loading=lazy .off-glb }](https://github.com/psf/black) [![types - Mypy](https://img.shields.io/badge/types-Mypy-blue.svg){ loading=lazy .off-glb }](https://github.com/python/mypy)\n\n</div>\n\n\n## 📥 Install for development\n\nClone the repository and go to the project folder:\n\n```bash\ngit clone https://github.com/vemonet/libre-chat\ncd libre-chat\n```\n\nFor development we use [Hatch](https://hatch.pypa.io), it will automatically handle virtual environments, and make sure all dependencies are installed when you run a script in the project. Install it with `pipx` or `pip`:\n\n```bash\npipx install hatch\n```\n\n??? info \"Optionally you can enable `hatch` terminal completion\"\n\n    See the [official documentation](https://hatch.pypa.io/latest/cli/about/#tab-completion) for more details. For ZSH you can run these commands:\n\n    ```bash\n    _HATCH_COMPLETE=zsh_source hatch > ~/.hatch-complete.zsh\n    echo \". ~/.hatch-complete.zsh\" >> ~/.zshrc\n    ```\n\n\n## 🧑‍💻 Development workflow\n\nStart a conversational chat web service, without vectorstore:\n\n```bash\nhatch run dev\n```\n\nStart a documents-based question answering service, using a vectorstore:\n\n```bash\nhatch run vector\n```\n\nUse the CLI to build a vectorstore at a specific path:\n\n```bash\nhatch run libre-llm build --documents documents2 --vector vectorstore/db2\n```\n\n## ✅ Run the tests\n\nMake sure the existing tests still work by running the test suite, mypy, and linting checks. .\n\nRun the tests locally:\n\n```bash\nhatch run test\n```\n\nRun only a specific test, and display all logs:\n\n```bash\nhatch run test tests/test_api.py::test_post_prompt_conversation -s\n```\n\n??? example \"Run the tests on the different versions of python available on your machine\"\n\n    Not required as it is done by the GitHub Actions workflow, but can be useful for debugging:\n\n    ```bash\n    hatch run all:test\n    ```\n\n## 📖 Generate the docs\n\nThe documentation (this website) is automatically generated and published by a GitHub Actions workflow from the markdown files in the `docs/` folder, and python `docstring` comments.\n\nTo check the documentation website locally, serve it with:\n\n```bash\nhatch run docs\n```\n\n## ♻️ Reset the environment\n\nIn case you are facing issues with dependencies not updating properly you can easily reset the virtual environment with:\n\n```bash\nhatch env prune\n```\n\nManually trigger the installation of dependencies in a local virtual environment (done automatically when you run any script):\n\n```bash\nhatch -v env create\n```\n\nEnter a new shell with the environment activated:\n\n```bash\nhatch shell\n```\n\n## 🏷️ Publish a new release\n\nThe deployment of new releases is done automatically by a GitHub Actions workflow when a new release is created on GitHub. To release a new version:\n\n1. Make sure the `PYPI_TOKEN` secret has been defined in the GitHub repository (in Settings > Secrets > Actions). You can get an API token from PyPI at [pypi.org/manage/account](https://pypi.org/manage/account).\n\n2. Increment the `version` number in the `src/libre_chat/__init__.py` file:\n\n    ```bash\n    hatch version 0.1.0\n    # Or bump using semver: patch, minor, major\n    hatch version patch\n    ```\n\n3. Commit, push, and create a new release on GitHub, which will automatically trigger a workflow to publish the new release to PyPI.\n\n??? bug \"Or perform the release locally\"\n\n    1. Update the version:\n\n        ```bash\n        hatch version 0.1.0\n        # Or bump using semver: patch, minor, major\n        hatch version patch\n        ```\n\n    2. Build and publish:\n\n        ```bash\n        hatch build\n        hatch publish\n        ```\n\n    3. Create the release on GitHub, [manually](https://github.com/vemonet/libre-chat/releases/new) or with the [`gh` CLI](https://cli.github.com/):\n\n        ```bash\n        gh release create\n        ```\n"
  },
  {
    "path": "docs/docs/index.md",
    "content": "<div align=\"center\" markdown=\"span\">\n\n[![Version](https://img.shields.io/pypi/v/libre-chat)](https://pypi.org/project/libre-chat) [![Python versions](https://img.shields.io/pypi/pyversions/libre-chat)](https://pypi.org/project/libre-chat) [![Image size](https://ghcr-badge.egpl.dev/vemonet/libre-chat/size)](https://github.com/vemonet/libre-chat/pkgs/container/libre-chat) [![MIT license](https://img.shields.io/pypi/l/libre-chat)](https://github.com/vemonet/libre-chat/blob/main/LICENSE.txt)\n<br />\n\n[![Test package](https://github.com/vemonet/libre-chat/actions/workflows/test.yml/badge.svg)](https://github.com/vemonet/libre-chat/actions/workflows/test.yml) [![Coverage](https://coverage-badge.samuelcolvin.workers.dev/vemonet/libre-chat.svg)](https://coverage-badge.samuelcolvin.workers.dev/redirect/vemonet/libre-chat)\n<br /><br />\n\nEasily configure and deploy a **fully self-hosted chatbot web service** based on open source Large Language Models (LLMs), such as [Mixtral](https://mistral.ai/news/mixtral-of-experts) or [Llama 2](https://ai.meta.com/llama/), without the need for knowledge in machine learning.\n\n</div>\n\n- 🌐 Free and Open Source chatbot web service with UI and API.\n- 🏡 Fully self-hosted, not tied to any service, and offline capable. Forget about API keys! Models and embeddings can be pre-downloaded, and the training and inference processes can run off-line if necessary.\n- 🔌 Web API described using OpenAPI specs: GET/POST operations, websocket for streaming response\n- 🪶 Chat web UI working well on desktop and mobile, with streaming response, and markdown rendering. Alternative gradio-based UI also available.\n- 🚀 Easy to setup, no need to program, just configure the service with a [YAML](https://yaml.org/) file, and start it with 1 command\n- 📦 Available as a `pip` package 🐍, or `docker` image 🐳\n- 🐌 No need for GPU, this will work even on your laptop CPU! That said, just running on CPUs can be quite slow (up to 1min to answer a documents-base question on recent laptops).\n- 🦜 Powered by [`LangChain`](https://python.langchain.com) and [`llama.cpp`](https://github.com/ggerganov/llama.cpp) to perform inference locally.\n- 🤖 Various types of agents can be deployed:\n  - **💬 Generic conversation**: do not need any additional training, just configure settings such as the template prompt\n  - **📚 Documents-based question answering** (experimental): automatically build similarity vectors from documents uploaded through the API UI, the chatbot will use them to answer your question, and return which documents were used to generate the answer (PDF, CSV, HTML, JSON, markdown, and more supported).\n- 🔍 Readable logs to understand what is going on.\n\n![UI screenshot](/libre-chat/assets/screenshot.png)\n\n![UI screenshot](/libre-chat/assets/screenshot-light.png)\n\n!!! warning \"Early stage\"\n\tDevelopment on this project has just started, use it with caution. If you are looking for more mature projects check out the bottom of this page.\n\n## ℹ️ How it works\n\nNo need to program! The whole deployment can be configured from a YAML file: paths to the model/documents/vectorstore, model settings, web services infos, etc. Create a `chat.yml` file with your configuration then starts the web service.\n\n1. Install it as a `pip` package 🐍, or create a `docker-compose.yml` file to use the `docker` image 🐳\n\n2. Configure the service in a `chat.yml` file\n\n3. Start the chat web service from the terminal with `libre-chat start` or `docker compose up`. The first time it will take some time to download the model if not already done (models size are around 15+GB)\n\nSeasoned developers can also manipulate LLM models, and deploy the API in python scripts using the `libre_chat` module.\n\n!!! help \"Report issues\"\n\n    Feel free to create [issues on GitHub](https://github.com/vemonet/libre-chat/issues), if you are facing problems, have a question, or would like to see a feature implemented. Pull requests are welcome!\n\n## 📥 Download supported models\n\nAll models supported in GGUF format by [`llama.cpp`](https://github.com/ggerganov/llama.cpp) should work. Preferably search for the `Instruct` version of a model (fine-tuned to better follow instructions), e.g.:\n\n* [Mixtral](https://huggingface.co/TheBloke/Mixtral-8x7B-Instruct-v0.1-GGUF)\n* [Llama 2](https://huggingface.co/TheBloke/Llama-2-7B-32K-Instruct-GGUF)\n\n\n!!! Question \"Supporting other models\"\n\n    Let us know if you managed to run other models with Libre Chat, or if you would like to see a specific model supported.\n\n## 🔎 Technical overview\n\nThe web service is deployed using a [**⚡ FastAPI**](https://fastapi.tiangolo.com) endpoint. It has 4 routes, plus its [OpenAPI](https://www.openapis.org/) documentation available on `/docs`:\n\n- 📮 `GET` and `POST` on `/prompt` to query the model\n- 🔌 Websocket on `/chat` to open a connection with the API, and query the model\n- 🖥️ Chatbot web UI served on the root URL `/`, built with Astro, SolidJS, [Tailwind](https://tailwindcss.com) and daisyUI for styling, and [marked](https://marked.js.org/) for markdown rendering.\n\nAll files required for querying the model are stored and accessed locally using [**🦜🔗 LangChain**](https://python.langchain.com): the main model binary, the embeddings and documents to create the vectors, and the [vectorstore](https://python.langchain.com/docs/modules/data_connection/vectorstores/).\n\n## 🗺️ More mature projects\n\nIf you are looking for more mature tools to play with LLMs locally we recommend to look into those really good projects.\n\nWeb UI for chat:\n\n* [HuggingFace chat-ui](https://github.com/huggingface/chat-ui): a Svelte chat web UI. With multiple conversation history, and OIDC login\n* [chatbot-ui](https://github.com/mckaywrigley/chatbot-ui): a React chat web UI. With multiple conversation history, no login\n* [chat-langchain](https://github.com/langchain-ai/chat-langchain): a React chat web UI for LangChain. Connect well with LangSmith to show trace. No login, no multiple conversation history.\n* [oobabooga/text-generation-webui](https://github.com/oobabooga/text-generation-webui): A Gradio web UI for Large Language Models, with panels to config the LLM params adapted for experimentation.\n* [chainlit](https://github.com/Chainlit/chainlit): build LLM app with your own business logic, with React web UI\n* [FastChat](https://github.com/lm-sys/FastChat): platform for training, serving, and evaluating LLMs in an arena, with Gradio web UI.\n* [GPT4All](https://gpt4all.io): open-source LLM chatbots that you can run anywhere,  with a web UI\n* [localGPT](https://github.com/PromtEngineer/localGPT): Chat with your documents on your local device using GPT models\n* [ChatDocs](https://github.com/marella/chatdocs): UI to Chat with your documents offline\n\nRun LLM inference locally:\n\n* [LocalAI](https://github.com/mudler/LocalAI): OpenAI compatible API. Self-hosted, community-driven and local-first.\n\n* [vLLM](https://github.com/vllm-project/vllm): A high-throughput and memory-efficient inference and serving engine for LLMs (includes OpenAI-compatible server, requires GPU)\n\n* [ollama](https://github.com/jmorganca/ollama): Get up and running with Llama 2 and other large language models locally\n\n* [llm](https://github.com/simonw/llm): Python library for interacting with Large Language Models, both via remote APIs and models that can be installed and run on your own machine, by Simon Willison (checkout their blog [simonwillison.net](https://simonwillison.net), for a lot of really well written articles about LLMs)\n"
  },
  {
    "path": "docs/docs/use-docker.md",
    "content": "[![Image size](https://ghcr-badge.egpl.dev/vemonet/libre-chat/size)](https://github.com/vemonet/libre-chat/pkgs/container/libre-chat)\n\nLibre Chat is available as a [docker image](https://github.com/vemonet/libre-chat/pkgs/container/libre-chat) that will use CUDA when available. It is recommended to use docker for deploying in production as it uses gunicorn to run multiple workers.\n\n## ⚡ Quickstart\n\nIf you just want deploy it using the pre-trained Mixtral model, you can use docker:\n\n```bash\ndocker run -it -p 8000:8000 ghcr.io/vemonet/libre-chat:main\n```\n\n!!! Warning \"Loading the model takes time\"\n\n    Downloading the model will take time the first time, you can also pre-download it manually.\n    If you are using GPU, loading the model when the application starts also takes some time (can take a few minutes)\n\n## ⚙️ Configure with docker compose\n\n1. Create a `chat.yml` file with your chat web service configuration.\n2. Create the `docker-compose.yml` in the same folder:\n\n    ```yaml title=\"docker-compose.yml\"\n    version: \"3\"\n    services:\n      libre-chat:\n        image: ghcr.io/vemonet/libre-chat:main\n        volumes:\n          # ⚠️ Share files from the current directory to the /data dir in the container\n          - ./chat.yml:/data/chat.yml\n          - ./models:/data/models\n          - ./documents:/data/documents\n          - ./embeddings:/data/embeddings\n          - ./vectorstore:/data/vectorstore\n        ports:\n          - 8000:8000\n        environment:\n          - LIBRECHAT_WORKERS=1\n    ```\n\n3. Start your chat web service with:\n\n    ```bash\n    docker compose up\n    ```\n\n??? warning \"Using multiple workers\"\n\n    Using multiple worker is still experimental. When using a documents-based QA chatbot you will need to restart the API after adding new documents to make sure all workers reload the newly built vectorstore.\n"
  },
  {
    "path": "docs/docs/use-pip.md",
    "content": "[![Version](https://img.shields.io/pypi/v/libre-chat)](https://pypi.org/project/libre-chat) [![Python versions](https://img.shields.io/pypi/pyversions/libre-chat)](https://pypi.org/project/libre-chat)\n\n`libre-chat` is tested on Linux, and MacOS, should work on Windows WSL.\n\n!!! Tip \"Production deployment\"\n\n    When deploying in production it is recommended to use [docker](https://www.docker.com), or directly [gunicorn](https://gunicorn.org), to handle many requests. The CLI is mainly used for local testing and building vectorstores.\n\n\n## 📦 Install\n\nInstall from [PyPI](https://pypi.org/project/libre-chat/) with `pipx` or `pip`:\n\n```bash\npip install libre-chat\n```\n\n??? Note \"Installing on Windows\"\n\n    We recommend to use WSL or Docker. Otherwise you can install with an extra dependency:\n\n    ```bash\n    pip install \"libre-chat[windows]\"\n    ```\n\n    Note there are some issues with the `UnstructuredEmailLoader` on Windows. It uses `unstructured`, which uses [`python-magic`](https://pydigger.com/pypi/python-magic) which fails due to a `ctypes` import.\n\n\n## ⌨️ Use as a command-line interface\n\nYou can easily **start a new chat web service** including UI and API from your terminal. If no arguments are provided it will try to parse a `chat.yml` file in the current directory, or use the default configuration:\n\n```bash\nlibre-chat start\n```\n\nProvide a specific **config file**:\n\n```bash\nlibre-chat start config/chat-vectorstore-qa.yml\n```\n\nRe-build the **vectorstore**:\n\n```bash\nlibre-chat build --vector vectorstore/db_faiss --documents documents\n```\n\nGet a full rundown of the available options with the usual:\n\n```bash\nlibre-chat --help\n```\n\n## 🐍 Use in python scripts\n\nAlternatively, you can use this package in python scripts:\n\n```python title=\"main.py\"\nimport logging\n\nimport uvicorn\nfrom libre_chat import ChatConf, ChatEndpoint, Llm\n\nlogging.basicConfig(level=logging.getLevelName(\"INFO\"))\nconf = ChatConf(\n    model_path=\"./models/mixtral-8x7b-instruct-v0.1.Q2_K.gguf\",\n    vector_path=None\n)\nllm = Llm(conf=conf)\nprint(llm.query(\"What is the capital of the Netherlands?\"))\n\n# Create and deploy a FastAPI app based on your LLM\napp = ChatEndpoint(llm=llm, conf=conf)\nuvicorn.run(app)\n```\n\nCheckout the [Code reference](/libre-chat/Llm) for more details on the available classes.\n"
  },
  {
    "path": "docs/includes/abbreviations.md",
    "content": "*[HTML]: Hyper Text Markup Language\n*[LLM]: Large Language Model\n*[LLMs]: Large Language Models\n*[ML]: Machine Learning\n*[DL]: Deep Learning\n*[QA]: Question Answering\n*[API]: Application Programming Interface\n*[UI]: User Interface\n*[CLI]: Command-Line Interface\n*[PyPI]: Python Packaging Index\n*[PyPA]: Python Packaging Authority\n*[PEP]: Python Enhancement Proposal\n*[YAML]: Depending on whom you ask, YAML stands for \"Yet Another Markup Language\", or \"YAML Ain't Markup Language\"\n*[JSON]: JavaScript Object Notation\n*[Faiss]: Faiss is a library for efficient similarity search and clustering of dense vectors. It contains algorithms that search in sets of vectors of any size, up to ones that possibly do not fit in RAM. It also contains supporting code for evaluation and parameter tuning.\n*[GGML]: GGML is a C library for machine learning (ML) - the \"GG\" refers to the initials of its originator (Georgi Gerganov). In addition to defining low-level machine learning primitives (like a tensor type), GGML defines a binary format for distributing large language models (LLMs).\n*[GGUF]: GPT-Generated Unified Format, successor to GGML, is a quantization method that allows users to use the CPU to run a LLM, but also offload some of its layers to the GPU for a speed up.\n*[GPTQ]: GPTQ is a quantization algorithm that lightly reoptimizes the weights during quantization so that the accuracy loss is compensated relative to a round-to-nearest quantization. 4-bit GPTQ models reduce VRAM usage by about 75%.\n*[URL]: Uniform Resource Locator\n*[URI]: Uniform Resource Identifier\n*[vectorstore]: A vector store takes care of storing embedded data, and performing vector search for you\n*[GPU]: Graphics Processing Unit\n*[CPU]: Central Processing Unit\n*[TPU]: Tensor Processing Unit\n*[PDF]: Portable Document Format\n*[ZSH]: The Z shell (Zsh) is a Unix shell that can be used as an interactive login shell, and as a command interpreter for shell scripting.\n*[BASH]: The Bourne-Again SHell (BASH) is a Unix shell that can be used as an interactive login shell, and as a command interpreter for shell scripting.\n*[OpenAPI]: OpenAPI, formerly known as Swagger, is a specification language for HTTP APIs that defines structure and syntax in a way that is not wedded to the programming language the API is created in.\n*[JS]: JavaScript\n*[TS]: TypeScript\n*[CSS]: CSS is the acronym of \"Cascading Style Sheets\". CSS is a computer language for laying out and structuring web pages (HTML or XML)\n*[CSV]: Comma-Separated Value\n*[TSV]: Tab-Separated Value\n*[PSV]: Pipe-Separated Value\n*[ODT]: Open Document Format\n"
  },
  {
    "path": "docs/mkdocs.yml",
    "content": "site_name: Libre Chat\nsite_description: API and UI to deploy LLM models\nsite_author: Vincent Emonet\nsite_url: https://vemonet.github.io/libre-chat\nrepo_name: vemonet/libre-chat\nrepo_url: https://github.com/vemonet/libre-chat\nedit_uri: \"edit/main/docs/\"\ncopyright: Copyright &copy; 2023 Vincent Emonet\n\ntheme:\n  name: \"material\"\n  favicon: assets/logo.png\n  logo: assets/logo.png\n  icon:\n    admonition:\n      server: material/server\n  language: en\n  # https://squidfunk.github.io/mkdocs-material/setup/changing-the-colors/#primary-color\n  palette:\n    - media: \"(prefers-color-scheme: light)\"\n      scheme: default\n      primary: cyan\n      toggle:\n        icon: material/weather-night\n        name: Switch to dark mode\n    - media: \"(prefers-color-scheme: dark)\"\n      scheme: slate\n      primary: cyan\n      toggle:\n        icon: material/weather-sunny\n        name: Switch to light mode\n  features:\n    - content.code.copy\n    - content.code.annotate\n    - content.code.select # Still experimental\n    # - content.tabs.link\n    # - header.autohide\n    # - navigation.expand\n    - navigation.indexes\n    # - navigation.instant\n    - navigation.sections\n    - navigation.tabs\n    # - navigation.tabs.sticky\n    - navigation.top\n    - navigation.tracking\n    - search.highlight\n    - search.share\n    - search.suggest\n    - toc.follow\n\n# https://fontawesome.com/icons/\n# https://squidfunk.github.io/mkdocs-material/reference/icons-emojis/\nnav:\n  - About:\n    - About: index.md\n    - Configure:\n      - 💬 Conversational agent: configure-conversation.md\n      - 📚️ Documents-based QA: configure-documents-qa.md\n    - Deploy:\n      - 🐳 With Docker: use-docker.md\n      - 🐍 With pip: use-pip.md\n    - Advanced:\n      - 🛠️ Development: development.md\n  - Code reference:\n      - LLM: Llm.md\n      - Chat Config: ChatConf.md\n      - Chat Endpoint: ChatEndpoint.md\n      - Chat Router: ChatRouter.md\n  - Issues: https://github.com/vemonet/libre-chat/issues\" target=\"_blank\n\nplugins:\n- search\n- open-in-new-tab\n- autorefs\n- mkdocstrings:\n    default_handler: python\n    handlers:\n      python:\n        options:\n          show_source: true\n    # custom_templates: templates\n\nwatch:\n  - ../src\n  - docs\n\nmarkdown_extensions:\n  - admonition # https://squidfunk.github.io/mkdocs-material/reference/admonitions/#supported-types\n  - pymdownx.highlight:\n      anchor_linenums: true\n  - pymdownx.inlinehilite\n  - pymdownx.snippets\n  - pymdownx.superfences\n  - pymdownx.tabbed:\n      alternate_style: true\n  - pymdownx.details\n  - pymdownx.extra\n  - abbr\n  - pymdownx.snippets:\n      auto_append:\n        - docs/includes/abbreviations.md\n  - attr_list\n  - smarty\n  # - md_in_html\n\n\nextra_css:\n  - assets/custom.css\n\nextra:\n  social:\n    - icon: fontawesome/brands/python\n      link: https://pypi.org/project/libre-chat\n    - icon: fontawesome/brands/docker\n      link: https://github.com/vemonet/libre-chat/pkgs/container/libre-chat\n    - icon: fontawesome/brands/github\n      link: https://github.com/vemonet\n"
  },
  {
    "path": "documents/gdp.csv",
    "content": "Country Name,Country Code,Year,Value\nArab World,ARB,1968,25760683041.0857\nArab World,ARB,1969,28434203615.4829\nArab World,ARB,1970,31385499664.0672\nArab World,ARB,1971,36426909888.3928\nArab World,ARB,1972,43316056615.4562\nArab World,ARB,1973,55018394945.5825\nArab World,ARB,1974,105145803084.377\nArab World,ARB,1975,116337021938.341\nArab World,ARB,1976,144846175400.488\nArab World,ARB,1977,167308327683.593\nArab World,ARB,1978,183555544342.189\nArab World,ARB,1979,248646206367.003\nArab World,ARB,1980,338177454717.54\nArab World,ARB,1981,348592795413.116\nArab World,ARB,1982,324328753765.3\nArab World,ARB,1983,303962539723.08\nArab World,ARB,1984,307940771858.542\nArab World,ARB,1985,303893618415.542\nArab World,ARB,1986,289029150639.442\nArab World,ARB,1987,312681678329.933\nArab World,ARB,1988,307503035642.516\nArab World,ARB,1989,322325140494.725\nArab World,ARB,1990,446877161735.16\nArab World,ARB,1991,439779177865.334\nArab World,ARB,1992,471163515479.771\nArab World,ARB,1993,476513630620.727\nArab World,ARB,1994,487526906267.398\nArab World,ARB,1995,523759898278.581\nArab World,ARB,1996,578231297757.414\nArab World,ARB,1997,613279452463.065\nArab World,ARB,1998,591525594008.239\nArab World,ARB,1999,643889670873.196\nArab World,ARB,2000,735025140326.516\nArab World,ARB,2001,723282816391.284\nArab World,ARB,2002,729051715403.445\nArab World,ARB,2003,823110541440.464\nArab World,ARB,2004,963862340520.581\nArab World,ARB,2005,1184661549595.13\nArab World,ARB,2006,1404113530800.68\nArab World,ARB,2007,1637573196970.62\nArab World,ARB,2008,2078115659876.48\nArab World,ARB,2009,1795819607113.11\nArab World,ARB,2010,2109645821948.41\nArab World,ARB,2011,2501553648412.73\nArab World,ARB,2012,2741238538444.31\nArab World,ARB,2013,2839626635836.57\nArab World,ARB,2014,2906616435186.9\nArab World,ARB,2015,2563301730344.96\nArab World,ARB,2016,2504702625568.63\nCaribbean small states,CSS,1960,2004785088.23708\nCaribbean small states,CSS,1961,2169733054.3289\nCaribbean small states,CSS,1962,2289494617.50319\nCaribbean small states,CSS,1963,2431591781.47075\nCaribbean small states,CSS,1964,2626895911.88936\nCaribbean small states,CSS,1965,2828615453.30014\nCaribbean small states,CSS,1966,3067843648.65076\nCaribbean small states,CSS,1967,3293145006.66893\nCaribbean small states,CSS,1968,3274645643.10132\nCaribbean small states,CSS,1969,3563687634.72661\nCaribbean small states,CSS,1970,3920853183.53033\nCaribbean small states,CSS,1971,4262673219.74986\nCaribbean small states,CSS,1972,4934739944.09331\nCaribbean small states,CSS,1973,5390816069.08124\nCaribbean small states,CSS,1974,7007906856.32259\nCaribbean small states,CSS,1975,8200001223.49872\nCaribbean small states,CSS,1976,8414807199.18667\nCaribbean small states,CSS,1977,9783471923.0628\nCaribbean small states,CSS,1978,9980604018.52617\nCaribbean small states,CSS,1979,11435129604.5471\nCaribbean small states,CSS,1980,14028282040.6689\nCaribbean small states,CSS,1981,15480050142.6008\nCaribbean small states,CSS,1982,17287146828.8967\nCaribbean small states,CSS,1983,17450456929.571\nCaribbean small states,CSS,1984,16436254244.733\nCaribbean small states,CSS,1985,16161316057.0401\nCaribbean small states,CSS,1986,14445145769.2853\nCaribbean small states,CSS,1987,15475346111.2724\nCaribbean small states,CSS,1988,16399795081.909\nCaribbean small states,CSS,1989,16631954337.8926\nCaribbean small states,CSS,1990,17884432804.7622\nCaribbean small states,CSS,1991,17668489746.0183\nCaribbean small states,CSS,1992,17396950391.3169\nCaribbean small states,CSS,1993,18254627213.7717\nCaribbean small states,CSS,1994,19289605582.54\nCaribbean small states,CSS,1995,21134854978.4877\nCaribbean small states,CSS,1996,23041792540.1097\nCaribbean small states,CSS,1997,25732097913.4072\nCaribbean small states,CSS,1998,28249856028.3436\nCaribbean small states,CSS,1999,30022320518.2375\nCaribbean small states,CSS,2000,32256663837.939\nCaribbean small states,CSS,2001,33176931053.7493\nCaribbean small states,CSS,2002,34949444322.9159\nCaribbean small states,CSS,2003,37500825974.468\nCaribbean small states,CSS,2004,41178984265.2063\nCaribbean small states,CSS,2005,46656114031.8673\nCaribbean small states,CSS,2006,52416498942.5771\nCaribbean small states,CSS,2007,58371461971.2934\nCaribbean small states,CSS,2008,66596542818.2652\nCaribbean small states,CSS,2009,55887477076.4319\nCaribbean small states,CSS,2010,60945499584.2842\nCaribbean small states,CSS,2011,66197591876.8357\nCaribbean small states,CSS,2012,70647852492.6344\nCaribbean small states,CSS,2013,71284814647.9944\nCaribbean small states,CSS,2014,71392784816.8765\nCaribbean small states,CSS,2015,69516216246.9776\nCaribbean small states,CSS,2016,66707362091.378\nCentral Europe and the Baltics,CEB,1990,256391119869.734\nCentral Europe and the Baltics,CEB,1991,242844938128.091\nCentral Europe and the Baltics,CEB,1992,260069791613.87\nCentral Europe and the Baltics,CEB,1993,274192522357.49\nCentral Europe and the Baltics,CEB,1994,311016433450.634\nCentral Europe and the Baltics,CEB,1995,386483907816.169\nCentral Europe and the Baltics,CEB,1996,412961998506.857\nCentral Europe and the Baltics,CEB,1997,409177928370.546\nCentral Europe and the Baltics,CEB,1998,447675022512.855\nCentral Europe and the Baltics,CEB,1999,434158663027.362\nCentral Europe and the Baltics,CEB,2000,427826438350.621\nCentral Europe and the Baltics,CEB,2001,468434348786.6\nCentral Europe and the Baltics,CEB,2002,527515753116.019\nCentral Europe and the Baltics,CEB,2003,634885340805.817\nCentral Europe and the Baltics,CEB,2004,763009793236.826\nCentral Europe and the Baltics,CEB,2005,886484956908.554\nCentral Europe and the Baltics,CEB,2006,1002687667760.64\nCentral Europe and the Baltics,CEB,2007,1262018642144.73\nCentral Europe and the Baltics,CEB,2008,1524160100132.74\nCentral Europe and the Baltics,CEB,2009,1281584484589.85\nCentral Europe and the Baltics,CEB,2010,1313815361437.81\nCentral Europe and the Baltics,CEB,2011,1446816247840\nCentral Europe and the Baltics,CEB,2012,1351348603800.8\nCentral Europe and the Baltics,CEB,2013,1422416711189.95\nCentral Europe and the Baltics,CEB,2014,1463360359358.05\nCentral Europe and the Baltics,CEB,2015,1285572776919.07\nCentral Europe and the Baltics,CEB,2016,1312157690492.89\nEarly-demographic dividend,EAR,1960,152378454683.878\nEarly-demographic dividend,EAR,1961,153311493572.423\nEarly-demographic dividend,EAR,1962,158916755209.822\nEarly-demographic dividend,EAR,1963,168090855529.874\nEarly-demographic dividend,EAR,1964,192550820717.691\nEarly-demographic dividend,EAR,1965,209918435940.819\nEarly-demographic dividend,EAR,1966,207192127927.611\nEarly-demographic dividend,EAR,1967,217434760704.496\nEarly-demographic dividend,EAR,1968,235619309639.936\nEarly-demographic dividend,EAR,1969,263378529355.326\nEarly-demographic dividend,EAR,1970,279193504764.852\nEarly-demographic dividend,EAR,1971,301585808664.471\nEarly-demographic dividend,EAR,1972,331593747605.821\nEarly-demographic dividend,EAR,1973,424413916047.314\nEarly-demographic dividend,EAR,1974,595404849057.397\nEarly-demographic dividend,EAR,1975,639433225164.46\nEarly-demographic dividend,EAR,1976,698259612679.885\nEarly-demographic dividend,EAR,1977,781303040617.689\nEarly-demographic dividend,EAR,1978,864922011213.364\nEarly-demographic dividend,EAR,1979,1051436948147.1\nEarly-demographic dividend,EAR,1980,1295401864990.77\nEarly-demographic dividend,EAR,1981,1447517165740.9\nEarly-demographic dividend,EAR,1982,1379491226141.91\nEarly-demographic dividend,EAR,1983,1392376333198.89\nEarly-demographic dividend,EAR,1984,1372231409900.51\nEarly-demographic dividend,EAR,1985,1405011033226.21\nEarly-demographic dividend,EAR,1986,1425838794352.93\nEarly-demographic dividend,EAR,1987,1436813007738.15\nEarly-demographic dividend,EAR,1988,1545908814609.4\nEarly-demographic dividend,EAR,1989,1579986814759.15\nEarly-demographic dividend,EAR,1990,1819896194901.83\nEarly-demographic dividend,EAR,1991,1928919471259.18\nEarly-demographic dividend,EAR,1992,2116361374325.42\nEarly-demographic dividend,EAR,1993,2322855172109.96\nEarly-demographic dividend,EAR,1994,2432160774435.76\nEarly-demographic dividend,EAR,1995,2482548280990.99\nEarly-demographic dividend,EAR,1996,2709494744622.69\nEarly-demographic dividend,EAR,1997,2893194179712.89\nEarly-demographic dividend,EAR,1998,2846298375892.1\nEarly-demographic dividend,EAR,1999,3019867129834.06\nEarly-demographic dividend,EAR,2000,3275876559584.92\nEarly-demographic dividend,EAR,2001,3235006813827.87\nEarly-demographic dividend,EAR,2002,3144218788340.61\nEarly-demographic dividend,EAR,2003,3516151323703.34\nEarly-demographic dividend,EAR,2004,4090111659563.41\nEarly-demographic dividend,EAR,2005,4767620344026.82\nEarly-demographic dividend,EAR,2006,5462304388463.2\nEarly-demographic dividend,EAR,2007,6488823566895.55\nEarly-demographic dividend,EAR,2008,7317501470600.68\nEarly-demographic dividend,EAR,2009,7045911611995.23\nEarly-demographic dividend,EAR,2010,8514322770067.29\nEarly-demographic dividend,EAR,2011,9564928622914.71\nEarly-demographic dividend,EAR,2012,9974410005994.34\nEarly-demographic dividend,EAR,2013,10160722334942.3\nEarly-demographic dividend,EAR,2014,10529872000158.3\nEarly-demographic dividend,EAR,2015,10194970465551.6\nEarly-demographic dividend,EAR,2016,10401989026722.8\nEast Asia & Pacific,EAS,1960,153611968410.868\nEast Asia & Pacific,EAS,1961,154058410879.326\nEast Asia & Pacific,EAS,1962,157634158384.164\nEast Asia & Pacific,EAS,1963,175902438691.371\nEast Asia & Pacific,EAS,1964,202099658345.593\nEast Asia & Pacific,EAS,1965,225097031930.026\nEast Asia & Pacific,EAS,1966,251654220084.227\nEast Asia & Pacific,EAS,1967,272677391514.359\nEast Asia & Pacific,EAS,1968,300494755214.571\nEast Asia & Pacific,EAS,1969,346159376816.483\nEast Asia & Pacific,EAS,1970,407482340310.948\nEast Asia & Pacific,EAS,1971,452155385439.724\nEast Asia & Pacific,EAS,1972,561124915613.103\nEast Asia & Pacific,EAS,1973,739677042363.32\nEast Asia & Pacific,EAS,1974,852154564637.675\nEast Asia & Pacific,EAS,1975,933155076408.682\nEast Asia & Pacific,EAS,1976,1026039624283.15\nEast Asia & Pacific,EAS,1977,1223069163831.1\nEast Asia & Pacific,EAS,1978,1542745010316.58\nEast Asia & Pacific,EAS,1979,1675126322202.62\nEast Asia & Pacific,EAS,1980,1811621650857.12\nEast Asia & Pacific,EAS,1981,2000329444916.93\nEast Asia & Pacific,EAS,1982,1959327051346.86\nEast Asia & Pacific,EAS,1983,2078325205696.09\nEast Asia & Pacific,EAS,1984,2229496400059.14\nEast Asia & Pacific,EAS,1985,2363703214005.83\nEast Asia & Pacific,EAS,1986,3081288169010.05\nEast Asia & Pacific,EAS,1987,3603282407781.65\nEast Asia & Pacific,EAS,1988,4336305608499.4\nEast Asia & Pacific,EAS,1989,4535368154904.11\nEast Asia & Pacific,EAS,1990,4746999011159.47\nEast Asia & Pacific,EAS,1991,5345047818273.24\nEast Asia & Pacific,EAS,1992,5835758398326.51\nEast Asia & Pacific,EAS,1993,6552477292052.35\nEast Asia & Pacific,EAS,1994,7313623815311.39\nEast Asia & Pacific,EAS,1995,8310311039754.74\nEast Asia & Pacific,EAS,1996,8008587857961.38\nEast Asia & Pacific,EAS,1997,7662988542672.2\nEast Asia & Pacific,EAS,1998,6863955800395.99\nEast Asia & Pacific,EAS,1999,7665318632852.15\nEast Asia & Pacific,EAS,2000,8291881372201.96\nEast Asia & Pacific,EAS,2001,7712927229834.08\nEast Asia & Pacific,EAS,2002,7837074972126.93\nEast Asia & Pacific,EAS,2003,8617381783014.6\nEast Asia & Pacific,EAS,2004,9663708744825.51\nEast Asia & Pacific,EAS,2005,10311337123730.3\nEast Asia & Pacific,EAS,2006,10939731186788.5\nEast Asia & Pacific,EAS,2007,12236995324293.9\nEast Asia & Pacific,EAS,2008,14134059989615.9\nEast Asia & Pacific,EAS,2009,14564521831208.3\nEast Asia & Pacific,EAS,2010,16938756587419.1\nEast Asia & Pacific,EAS,2011,19638672525945\nEast Asia & Pacific,EAS,2012,21019132105911.6\nEast Asia & Pacific,EAS,2013,21262544412410.1\nEast Asia & Pacific,EAS,2014,21900031790821.4\nEast Asia & Pacific,EAS,2015,21766948388560.2\nEast Asia & Pacific,EAS,2016,22480427869996.2\nEast Asia & Pacific (excluding high income),EAP,1960,80518696000.8927\nEast Asia & Pacific (excluding high income),EAP,1961,70681455168.9896\nEast Asia & Pacific (excluding high income),EAP,1962,64769510577.3344\nEast Asia & Pacific (excluding high income),EAP,1963,70136390296.0357\nEast Asia & Pacific (excluding high income),EAP,1964,81316003235.6796\nEast Asia & Pacific (excluding high income),EAP,1965,94897351255.7441\nEast Asia & Pacific (excluding high income),EAP,1966,103886511741.267\nEast Asia & Pacific (excluding high income),EAP,1967,100662752164.515\nEast Asia & Pacific (excluding high income),EAP,1968,101693800242.244\nEast Asia & Pacific (excluding high income),EAP,1969,114217932022.435\nEast Asia & Pacific (excluding high income),EAP,1970,127313168493.44\nEast Asia & Pacific (excluding high income),EAP,1971,136878723644.538\nEast Asia & Pacific (excluding high income),EAP,1972,155310934931.674\nEast Asia & Pacific (excluding high income),EAP,1973,195708821541.4\nEast Asia & Pacific (excluding high income),EAP,1974,221300661170.708\nEast Asia & Pacific (excluding high income),EAP,1975,248888152432.607\nEast Asia & Pacific (excluding high income),EAP,1976,253054369682.351\nEast Asia & Pacific (excluding high income),EAP,1977,292610334593.215\nEast Asia & Pacific (excluding high income),EAP,1978,283760709405.779\nEast Asia & Pacific (excluding high income),EAP,1979,328128012802.225\nEast Asia & Pacific (excluding high income),EAP,1980,379504541663.84\nEast Asia & Pacific (excluding high income),EAP,1981,405525611894.783\nEast Asia & Pacific (excluding high income),EAP,1982,425626144074.375\nEast Asia & Pacific (excluding high income),EAP,1983,445707127439.067\nEast Asia & Pacific (excluding high income),EAP,1984,483631332127.725\nEast Asia & Pacific (excluding high income),EAP,1985,529495949770.745\nEast Asia & Pacific (excluding high income),EAP,1986,527664946723.674\nEast Asia & Pacific (excluding high income),EAP,1987,520956352850.569\nEast Asia & Pacific (excluding high income),EAP,1988,577812625861.037\nEast Asia & Pacific (excluding high income),EAP,1989,624706266003.806\nEast Asia & Pacific (excluding high income),EAP,1990,669863020224.736\nEast Asia & Pacific (excluding high income),EAP,1991,727077354112.482\nEast Asia & Pacific (excluding high income),EAP,1992,814592738317.294\nEast Asia & Pacific (excluding high income),EAP,1993,895434641679.377\nEast Asia & Pacific (excluding high income),EAP,1994,1076281227424.21\nEast Asia & Pacific (excluding high income),EAP,1995,1327345521155.67\nEast Asia & Pacific (excluding high income),EAP,1996,1524284386976.58\nEast Asia & Pacific (excluding high income),EAP,1997,1577561090239.87\nEast Asia & Pacific (excluding high income),EAP,1998,1439218353454.99\nEast Asia & Pacific (excluding high income),EAP,1999,1585434255545.34\nEast Asia & Pacific (excluding high income),EAP,2000,1745767476937.47\nEast Asia & Pacific (excluding high income),EAP,2001,1856457750414.03\nEast Asia & Pacific (excluding high income),EAP,2002,2055870453833.16\nEast Asia & Pacific (excluding high income),EAP,2003,2327842621991.4\nEast Asia & Pacific (excluding high income),EAP,2004,2698133042142.66\nEast Asia & Pacific (excluding high income),EAP,2005,3124263676684.17\nEast Asia & Pacific (excluding high income),EAP,2006,3763693516582.98\nEast Asia & Pacific (excluding high income),EAP,2007,4758413352216.66\nEast Asia & Pacific (excluding high income),EAP,2008,6020919293827.75\nEast Asia & Pacific (excluding high income),EAP,2009,6531548165985.69\nEast Asia & Pacific (excluding high income),EAP,2010,7879326684925.74\nEast Asia & Pacific (excluding high income),EAP,2011,9630698001400.21\nEast Asia & Pacific (excluding high income),EAP,2012,10744168691109.2\nEast Asia & Pacific (excluding high income),EAP,2013,11860783587103\nEast Asia & Pacific (excluding high income),EAP,2014,12754057710794.4\nEast Asia & Pacific (excluding high income),EAP,2015,13268242311555\nEast Asia & Pacific (excluding high income),EAP,2016,13512435638588.8\nEast Asia & Pacific (IDA & IBRD countries),TEA,1960,80355307366.8786\nEast Asia & Pacific (IDA & IBRD countries),TEA,1961,70538028275.8111\nEast Asia & Pacific (IDA & IBRD countries),TEA,1962,64638080209.1765\nEast Asia & Pacific (IDA & IBRD countries),TEA,1963,69994069449.1479\nEast Asia & Pacific (IDA & IBRD countries),TEA,1964,81150996704.8732\nEast Asia & Pacific (IDA & IBRD countries),TEA,1965,94704785437.3277\nEast Asia & Pacific (IDA & IBRD countries),TEA,1966,103675705107.666\nEast Asia & Pacific (IDA & IBRD countries),TEA,1967,100458487187.694\nEast Asia & Pacific (IDA & IBRD countries),TEA,1968,101487443061.434\nEast Asia & Pacific (IDA & IBRD countries),TEA,1969,113986160858.47\nEast Asia & Pacific (IDA & IBRD countries),TEA,1970,127054824460\nEast Asia & Pacific (IDA & IBRD countries),TEA,1971,136600969175.171\nEast Asia & Pacific (IDA & IBRD countries),TEA,1972,154995777797.166\nEast Asia & Pacific (IDA & IBRD countries),TEA,1973,195311688967.174\nEast Asia & Pacific (IDA & IBRD countries),TEA,1974,220851597604.965\nEast Asia & Pacific (IDA & IBRD countries),TEA,1975,248383108296.674\nEast Asia & Pacific (IDA & IBRD countries),TEA,1976,252540871453.403\nEast Asia & Pacific (IDA & IBRD countries),TEA,1977,292016569353.064\nEast Asia & Pacific (IDA & IBRD countries),TEA,1978,283184901835.619\nEast Asia & Pacific (IDA & IBRD countries),TEA,1979,327462175047.067\nEast Asia & Pacific (IDA & IBRD countries),TEA,1980,378734450595.004\nEast Asia & Pacific (IDA & IBRD countries),TEA,1981,404702718839.182\nEast Asia & Pacific (IDA & IBRD countries),TEA,1982,424762462994.888\nEast Asia & Pacific (IDA & IBRD countries),TEA,1983,444802698004.171\nEast Asia & Pacific (IDA & IBRD countries),TEA,1984,482649946851.418\nEast Asia & Pacific (IDA & IBRD countries),TEA,1985,528421495957.583\nEast Asia & Pacific (IDA & IBRD countries),TEA,1986,526594208384.08\nEast Asia & Pacific (IDA & IBRD countries),TEA,1987,519899227597.668\nEast Asia & Pacific (IDA & IBRD countries),TEA,1988,576640127791.092\nEast Asia & Pacific (IDA & IBRD countries),TEA,1989,623438611303.322\nEast Asia & Pacific (IDA & IBRD countries),TEA,1990,668503733384.698\nEast Asia & Pacific (IDA & IBRD countries),TEA,1991,725602371007.169\nEast Asia & Pacific (IDA & IBRD countries),TEA,1992,812928625622.756\nEast Asia & Pacific (IDA & IBRD countries),TEA,1993,893590531272.716\nEast Asia & Pacific (IDA & IBRD countries),TEA,1994,1074056919211.37\nEast Asia & Pacific (IDA & IBRD countries),TEA,1995,1324594532297.9\nEast Asia & Pacific (IDA & IBRD countries),TEA,1996,1521124062054.59\nEast Asia & Pacific (IDA & IBRD countries),TEA,1997,1574291540475.98\nEast Asia & Pacific (IDA & IBRD countries),TEA,1998,1436249633913.78\nEast Asia & Pacific (IDA & IBRD countries),TEA,1999,1582148093794.23\nEast Asia & Pacific (IDA & IBRD countries),TEA,2000,1742171982504.69\nEast Asia & Pacific (IDA & IBRD countries),TEA,2001,1852635237278\nEast Asia & Pacific (IDA & IBRD countries),TEA,2002,2051623809834.21\nEast Asia & Pacific (IDA & IBRD countries),TEA,2003,2323064152053.05\nEast Asia & Pacific (IDA & IBRD countries),TEA,2004,2692683574401.69\nEast Asia & Pacific (IDA & IBRD countries),TEA,2005,3118033979234.63\nEast Asia & Pacific (IDA & IBRD countries),TEA,2006,3756261361900.34\nEast Asia & Pacific (IDA & IBRD countries),TEA,2007,4749074666841.02\nEast Asia & Pacific (IDA & IBRD countries),TEA,2008,6009148096611.83\nEast Asia & Pacific (IDA & IBRD countries),TEA,2009,6518684908087.94\nEast Asia & Pacific (IDA & IBRD countries),TEA,2010,7864008890290.72\nEast Asia & Pacific (IDA & IBRD countries),TEA,2011,9612081466761.09\nEast Asia & Pacific (IDA & IBRD countries),TEA,2012,10723388033068.1\nEast Asia & Pacific (IDA & IBRD countries),TEA,2013,11837903738760.8\nEast Asia & Pacific (IDA & IBRD countries),TEA,2014,12729502234335.3\nEast Asia & Pacific (IDA & IBRD countries),TEA,2015,13242748068603.7\nEast Asia & Pacific (IDA & IBRD countries),TEA,2016,13486492444155.4\nEuro area,EMU,1960,245381907805.065\nEuro area,EMU,1961,270100353874.124\nEuro area,EMU,1962,299740225877.789\nEuro area,EMU,1963,336261333718.505\nEuro area,EMU,1964,373998584425.94\nEuro area,EMU,1965,408106362093.821\nEuro area,EMU,1966,445026423668.263\nEuro area,EMU,1967,483426341513.884\nEuro area,EMU,1968,518247421028.116\nEuro area,EMU,1969,572514499522.906\nEuro area,EMU,1970,641498475903.321\nEuro area,EMU,1971,727089210150.568\nEuro area,EMU,1972,878426291558.949\nEuro area,EMU,1973,1140287836231.29\nEuro area,EMU,1974,1292999458724.51\nEuro area,EMU,1975,1499390975405.46\nEuro area,EMU,1976,1564623413591.72\nEuro area,EMU,1977,1779587264420.36\nEuro area,EMU,1978,2179196915279.77\nEuro area,EMU,1979,2639946745927.98\nEuro area,EMU,1980,2956937624588.21\nEuro area,EMU,1981,2569994236426.66\nEuro area,EMU,1982,2488146477597.51\nEuro area,EMU,1983,2427367234241.76\nEuro area,EMU,1984,2328427539433.43\nEuro area,EMU,1985,2392225442302.6\nEuro area,EMU,1986,3357483171959.55\nEuro area,EMU,1987,4153049181612.28\nEuro area,EMU,1988,4567647574591.87\nEuro area,EMU,1989,4665936358488.54\nEuro area,EMU,1990,5872104783694.2\nEuro area,EMU,1991,6104958669574.53\nEuro area,EMU,1992,6735382955564.35\nEuro area,EMU,1993,6169132265627.78\nEuro area,EMU,1994,6516008654972.37\nEuro area,EMU,1995,7520701639391.15\nEuro area,EMU,1996,7612273118735.76\nEuro area,EMU,1997,6959960583589.25\nEuro area,EMU,1998,7151574322430.91\nEuro area,EMU,1999,7119593958729.54\nEuro area,EMU,2000,6487325474099.12\nEuro area,EMU,2001,6593632936725.72\nEuro area,EMU,2002,7174014039603.36\nEuro area,EMU,2003,8851572342338.51\nEuro area,EMU,2004,10152860200757\nEuro area,EMU,2005,10536619657651.6\nEuro area,EMU,2006,11186013472971.5\nEuro area,EMU,2007,12879504293545.5\nEuro area,EMU,2008,14118176482709.8\nEuro area,EMU,2009,12908601410684.9\nEuro area,EMU,2010,12645252803081.6\nEuro area,EMU,2011,13623289150489.6\nEuro area,EMU,2012,12639517177808.2\nEuro area,EMU,2013,13190839006664\nEuro area,EMU,2014,13476466492426.9\nEuro area,EMU,2015,11661892507639.7\nEuro area,EMU,2016,11934055071906\nEurope & Central Asia,ECS,1960,432808366213.619\nEurope & Central Asia,ECS,1961,460716438566.125\nEurope & Central Asia,ECS,1962,503690734064.738\nEurope & Central Asia,ECS,1963,555426322397.083\nEurope & Central Asia,ECS,1964,615091988199.007\nEurope & Central Asia,ECS,1965,669326436809.058\nEurope & Central Asia,ECS,1966,727155773397.975\nEurope & Central Asia,ECS,1967,782354301085.33\nEurope & Central Asia,ECS,1968,815952773736.445\nEurope & Central Asia,ECS,1969,895833562328.926\nEurope & Central Asia,ECS,1970,1007773910663.56\nEurope & Central Asia,ECS,1971,1136565636851.85\nEurope & Central Asia,ECS,1972,1361955987875.99\nEurope & Central Asia,ECS,1973,1729792431547.48\nEurope & Central Asia,ECS,1974,1954412476388.09\nEurope & Central Asia,ECS,1975,2283265896817.75\nEurope & Central Asia,ECS,1976,2373201561892.56\nEurope & Central Asia,ECS,1977,2689501678091\nEurope & Central Asia,ECS,1978,3282691397268.31\nEurope & Central Asia,ECS,1979,4016054634280.08\nEurope & Central Asia,ECS,1980,4549120101079.41\nEurope & Central Asia,ECS,1981,4048966722470.86\nEurope & Central Asia,ECS,1982,3901660951920.75\nEurope & Central Asia,ECS,1983,3784993440409.82\nEurope & Central Asia,ECS,1984,3637906517266.89\nEurope & Central Asia,ECS,1985,3764943790264.45\nEurope & Central Asia,ECS,1986,5138626562504.11\nEurope & Central Asia,ECS,1987,6350049382135.22\nEurope & Central Asia,ECS,1988,7068792325499.52\nEurope & Central Asia,ECS,1989,7225733324752.49\nEurope & Central Asia,ECS,1990,8839404183172.32\nEurope & Central Asia,ECS,1991,9119853534697.57\nEurope & Central Asia,ECS,1992,9781799979487.2\nEurope & Central Asia,ECS,1993,8989614212468.86\nEurope & Central Asia,ECS,1994,9402275190706.82\nEurope & Central Asia,ECS,1995,10845175383743.5\nEurope & Central Asia,ECS,1996,11072726701921.7\nEurope & Central Asia,ECS,1997,10506307834799.2\nEurope & Central Asia,ECS,1998,10765939437357.8\nEurope & Central Asia,ECS,1999,10643148560197.9\nEurope & Central Asia,ECS,2000,10025331255412.2\nEurope & Central Asia,ECS,2001,10122519397601.8\nEurope & Central Asia,ECS,2002,11073970001446.5\nEurope & Central Asia,ECS,2003,13488994424517.5\nEurope & Central Asia,ECS,2004,15722616205763.6\nEurope & Central Asia,ECS,2005,16747765816605.5\nEurope & Central Asia,ECS,2006,18128083129847.2\nEurope & Central Asia,ECS,2007,21178802883227.4\nEurope & Central Asia,ECS,2008,23242038760382.1\nEurope & Central Asia,ECS,2009,20443199631948.9\nEurope & Central Asia,ECS,2010,20924691161658.7\nEurope & Central Asia,ECS,2011,23182627672175.1\nEurope & Central Asia,ECS,2012,22340699161445\nEurope & Central Asia,ECS,2013,23349158951152.4\nEurope & Central Asia,ECS,2014,23654699725965\nEurope & Central Asia,ECS,2015,20364623091493.9\nEurope & Central Asia,ECS,2016,20273841359271\nEurope & Central Asia (excluding high income),ECA,1989,903702469910.518\nEurope & Central Asia (excluding high income),ECA,1990,960438672723.365\nEurope & Central Asia (excluding high income),ECA,1991,926765119090.882\nEurope & Central Asia (excluding high income),ECA,1992,853278424689.082\nEurope & Central Asia (excluding high income),ECA,1993,838260559332.892\nEurope & Central Asia (excluding high income),ECA,1994,727687093069.508\nEurope & Central Asia (excluding high income),ECA,1995,776931366529.201\nEurope & Central Asia (excluding high income),ECA,1996,787851671889.755\nEurope & Central Asia (excluding high income),ECA,1997,820131784781.859\nEurope & Central Asia (excluding high income),ECA,1998,771871770861.064\nEurope & Central Asia (excluding high income),ECA,1999,650450056519.37\nEurope & Central Asia (excluding high income),ECA,2000,720049109208.474\nEurope & Central Asia (excluding high income),ECA,2001,717063459780.74\nEurope & Central Asia (excluding high income),ECA,2002,820431230925.233\nEurope & Central Asia (excluding high income),ECA,2003,1037512319106.79\nEurope & Central Asia (excluding high income),ECA,2004,1367597071745.93\nEurope & Central Asia (excluding high income),ECA,2005,1726462747692.52\nEurope & Central Asia (excluding high income),ECA,2006,2114323841124.1\nEurope & Central Asia (excluding high income),ECA,2007,2727649759198.84\nEurope & Central Asia (excluding high income),ECA,2008,3372332744074.17\nEurope & Central Asia (excluding high income),ECA,2009,2655248450178.57\nEurope & Central Asia (excluding high income),ECA,2010,3156255418573.9\nEurope & Central Asia (excluding high income),ECA,2011,3891866999524.88\nEurope & Central Asia (excluding high income),ECA,2012,4111011203800.41\nEurope & Central Asia (excluding high income),ECA,2013,4369243129067.55\nEurope & Central Asia (excluding high income),ECA,2014,4078845602865.82\nEurope & Central Asia (excluding high income),ECA,2015,3121184116603.81\nEurope & Central Asia (excluding high income),ECA,2016,2991823901020.52\nEurope & Central Asia (IDA & IBRD countries),TEC,1989,960328174371.055\nEurope & Central Asia (IDA & IBRD countries),TEC,1990,1020619449300.74\nEurope & Central Asia (IDA & IBRD countries),TEC,1991,1007801660268.39\nEurope & Central Asia (IDA & IBRD countries),TEC,1992,944312695478.917\nEurope & Central Asia (IDA & IBRD countries),TEC,1993,931235788658.969\nEurope & Central Asia (IDA & IBRD countries),TEC,1994,837243545767.788\nEurope & Central Asia (IDA & IBRD countries),TEC,1995,918930607816.262\nEurope & Central Asia (IDA & IBRD countries),TEC,1996,947704910874.441\nEurope & Central Asia (IDA & IBRD countries),TEC,1997,979132756086.01\nEurope & Central Asia (IDA & IBRD countries),TEC,1998,946228594056.391\nEurope & Central Asia (IDA & IBRD countries),TEC,1999,820213773405.388\nEurope & Central Asia (IDA & IBRD countries),TEC,2000,891934707791.111\nEurope & Central Asia (IDA & IBRD countries),TEC,2001,907584723123.762\nEurope & Central Asia (IDA & IBRD countries),TEC,2002,1019111868180.13\nEurope & Central Asia (IDA & IBRD countries),TEC,2003,1255030961431.3\nEurope & Central Asia (IDA & IBRD countries),TEC,2004,1622699324589.32\nEurope & Central Asia (IDA & IBRD countries),TEC,2005,2032597383286.26\nEurope & Central Asia (IDA & IBRD countries),TEC,2006,2459150271422.24\nEurope & Central Asia (IDA & IBRD countries),TEC,2007,3156899406793.45\nEurope & Central Asia (IDA & IBRD countries),TEC,2008,3906148533547.85\nEurope & Central Asia (IDA & IBRD countries),TEC,2009,3095595026136.47\nEurope & Central Asia (IDA & IBRD countries),TEC,2010,3635513302315.66\nEurope & Central Asia (IDA & IBRD countries),TEC,2011,4420592112570.7\nEurope & Central Asia (IDA & IBRD countries),TEC,2012,4611295207484.79\nEurope & Central Asia (IDA & IBRD countries),TEC,2013,4893444280674.74\nEurope & Central Asia (IDA & IBRD countries),TEC,2014,4623921511711.82\nEurope & Central Asia (IDA & IBRD countries),TEC,2015,3598463764358.51\nEurope & Central Asia (IDA & IBRD countries),TEC,2016,3463188309734.48\nEuropean Union,EUU,1960,358941480685.342\nEuropean Union,EUU,1961,390791519256.294\nEuropean Union,EUU,1962,426910351684.9\nEuropean Union,EUU,1963,470299472386.586\nEuropean Union,EUU,1964,521200319101.867\nEuropean Union,EUU,1965,567593387090.375\nEuropean Union,EUU,1966,615287019323.785\nEuropean Union,EUU,1967,661170320899.702\nEuropean Union,EUU,1968,687217213519.1\nEuropean Union,EUU,1969,754800249691.045\nEuropean Union,EUU,1970,855292146036.516\nEuropean Union,EUU,1971,967486236381.365\nEuropean Union,EUU,1972,1158401562188.61\nEuropean Union,EUU,1973,1470832859740.72\nEuropean Union,EUU,1974,1653028067253.59\nEuropean Union,EUU,1975,1927117026841.85\nEuropean Union,EUU,1976,1995883364685.02\nEuropean Union,EUU,1977,2260221868415.27\nEuropean Union,EUU,1978,2769905163479.49\nEuropean Union,EUU,1979,3382851307190.78\nEuropean Union,EUU,1980,3861239352728.53\nEuropean Union,EUU,1981,3416534450611.25\nEuropean Union,EUU,1982,3288164387534.7\nEuropean Union,EUU,1983,3187220429927.19\nEuropean Union,EUU,1984,3060219815449.45\nEuropean Union,EUU,1985,3162767439491.53\nEuropean Union,EUU,1986,4337015473173.89\nEuropean Union,EUU,1987,5366348328002.87\nEuropean Union,EUU,1988,5985919929295.46\nEuropean Union,EUU,1989,6111982965832.69\nEuropean Union,EUU,1990,7579123917337.64\nEuropean Union,EUU,1991,7865713057341.23\nEuropean Union,EUU,1992,8571123408971.34\nEuropean Union,EUU,1993,7815484531819.77\nEuropean Union,EUU,1994,8299163343409.4\nEuropean Union,EUU,1995,9626424133285.32\nEuropean Union,EUU,1996,9841349845359.83\nEuropean Union,EUU,1997,9289515973951.65\nEuropean Union,EUU,1998,9605566115360.42\nEuropean Union,EUU,1999,9590851414393.62\nEuropean Union,EUU,2000,8912444181839.19\nEuropean Union,EUU,2001,9009859801008.85\nEuropean Union,EUU,2002,9822705393482.28\nEuropean Union,EUU,2003,11957243598418.9\nEuropean Union,EUU,2004,13806710766586\nEuropean Union,EUU,2005,14441217356828.2\nEuropean Union,EUU,2006,15405419702532.5\nEuropean Union,EUU,2007,17795826802969.5\nEuropean Union,EUU,2008,19136672544394.8\nEuropean Union,EUU,2009,17101456870607.7\nEuropean Union,EUU,2010,16992731157166.1\nEuropean Union,EUU,2011,18352575953426.8\nEuropean Union,EUU,2012,17290201940776.9\nEuropean Union,EUU,2013,18026881017254.8\nEuropean Union,EUU,2014,18632423873526.3\nEuropean Union,EUU,2015,16410700117941.6\nEuropean Union,EUU,2016,16487344364513.9\nFragile and conflict affected situations,FCS,2000,216611804087.892\nFragile and conflict affected situations,FCS,2001,199204980648.686\nFragile and conflict affected situations,FCS,2002,194031873673.451\nFragile and conflict affected situations,FCS,2003,220476383127.864\nFragile and conflict affected situations,FCS,2004,254384379904.583\nFragile and conflict affected situations,FCS,2005,308822100936.666\nFragile and conflict affected situations,FCS,2006,364922330440.8\nFragile and conflict affected situations,FCS,2007,448717231807.979\nFragile and conflict affected situations,FCS,2008,579390636982.778\nFragile and conflict affected situations,FCS,2009,539487601072.752\nFragile and conflict affected situations,FCS,2010,643371393579.443\nFragile and conflict affected situations,FCS,2011,700475870799.069\nFragile and conflict affected situations,FCS,2012,756982984497.055\nFragile and conflict affected situations,FCS,2013,810325310133.497\nFragile and conflict affected situations,FCS,2014,852105715991.816\nFragile and conflict affected situations,FCS,2015,770043726631.159\nFragile and conflict affected situations,FCS,2016,744250583417.645\nHeavily indebted poor countries (HIPC),HPC,1960,17473803358.3576\nHeavily indebted poor countries (HIPC),HPC,1961,17924863806.0248\nHeavily indebted poor countries (HIPC),HPC,1962,19538438424.6195\nHeavily indebted poor countries (HIPC),HPC,1963,23684971462.7979\nHeavily indebted poor countries (HIPC),HPC,1964,20979456378.9673\nHeavily indebted poor countries (HIPC),HPC,1965,24348171156.5056\nHeavily indebted poor countries (HIPC),HPC,1966,26567528898.4797\nHeavily indebted poor countries (HIPC),HPC,1967,25931280079.0429\nHeavily indebted poor countries (HIPC),HPC,1968,27114287369.6073\nHeavily indebted poor countries (HIPC),HPC,1969,30297392080.4224\nHeavily indebted poor countries (HIPC),HPC,1970,31764371339.4816\nHeavily indebted poor countries (HIPC),HPC,1971,34259906250.4647\nHeavily indebted poor countries (HIPC),HPC,1972,37115833946.3264\nHeavily indebted poor countries (HIPC),HPC,1973,44704748982.8857\nHeavily indebted poor countries (HIPC),HPC,1974,54845280151.1207\nHeavily indebted poor countries (HIPC),HPC,1975,62227654281.4084\nHeavily indebted poor countries (HIPC),HPC,1976,65977606587.174\nHeavily indebted poor countries (HIPC),HPC,1977,77971412145.8688\nHeavily indebted poor countries (HIPC),HPC,1978,89080486979.1768\nHeavily indebted poor countries (HIPC),HPC,1979,100816612471.748\nHeavily indebted poor countries (HIPC),HPC,1980,105070816410.828\nHeavily indebted poor countries (HIPC),HPC,1981,104722428738.279\nHeavily indebted poor countries (HIPC),HPC,1982,104470999714.143\nHeavily indebted poor countries (HIPC),HPC,1983,97967495415.5474\nHeavily indebted poor countries (HIPC),HPC,1984,97376234702.4767\nHeavily indebted poor countries (HIPC),HPC,1985,102805186198.818\nHeavily indebted poor countries (HIPC),HPC,1986,118063300657.23\nHeavily indebted poor countries (HIPC),HPC,1987,129279648797.364\nHeavily indebted poor countries (HIPC),HPC,1988,130138553201.136\nHeavily indebted poor countries (HIPC),HPC,1989,126907408967.556\nHeavily indebted poor countries (HIPC),HPC,1990,129332509496.38\nHeavily indebted poor countries (HIPC),HPC,1991,133034561577.745\nHeavily indebted poor countries (HIPC),HPC,1992,121554021679.448\nHeavily indebted poor countries (HIPC),HPC,1993,125716795445.415\nHeavily indebted poor countries (HIPC),HPC,1994,111543057646.82\nHeavily indebted poor countries (HIPC),HPC,1995,126833608615.718\nHeavily indebted poor countries (HIPC),HPC,1996,132655593112.174\nHeavily indebted poor countries (HIPC),HPC,1997,139378996056.165\nHeavily indebted poor countries (HIPC),HPC,1998,143540877746.382\nHeavily indebted poor countries (HIPC),HPC,1999,143471305439.965\nHeavily indebted poor countries (HIPC),HPC,2000,155563887045.671\nHeavily indebted poor countries (HIPC),HPC,2001,147865835777.795\nHeavily indebted poor countries (HIPC),HPC,2002,160612026755.468\nHeavily indebted poor countries (HIPC),HPC,2003,182909315345.596\nHeavily indebted poor countries (HIPC),HPC,2004,210715003171.706\nHeavily indebted poor countries (HIPC),HPC,2005,243039696796.659\nHeavily indebted poor countries (HIPC),HPC,2006,291439445833.395\nHeavily indebted poor countries (HIPC),HPC,2007,347724979758.612\nHeavily indebted poor countries (HIPC),HPC,2008,419658073051.163\nHeavily indebted poor countries (HIPC),HPC,2009,423821062294.997\nHeavily indebted poor countries (HIPC),HPC,2010,467851910947.034\nHeavily indebted poor countries (HIPC),HPC,2011,522235870418.369\nHeavily indebted poor countries (HIPC),HPC,2012,562429100212.344\nHeavily indebted poor countries (HIPC),HPC,2013,610041631803.768\nHeavily indebted poor countries (HIPC),HPC,2014,647799966373.646\nHeavily indebted poor countries (HIPC),HPC,2015,638732542973.423\nHeavily indebted poor countries (HIPC),HPC,2016,648289348137.032\nHigh income,HIC,1960,1060258072791.74\nHigh income,HIC,1961,1121996285055.52\nHigh income,HIC,1962,1211792827212.7\nHigh income,HIC,1963,1304620497418.63\nHigh income,HIC,1964,1424603081155.61\nHigh income,HIC,1965,1546710635349.61\nHigh income,HIC,1966,1696368738245.88\nHigh income,HIC,1967,1819351699376.25\nHigh income,HIC,1968,1971291391708.43\nHigh income,HIC,1969,2163827812132.42\nHigh income,HIC,1970,2380595949289.87\nHigh income,HIC,1971,2641741790124.4\nHigh income,HIC,1972,3065239822184.77\nHigh income,HIC,1973,3708269759617.75\nHigh income,HIC,1974,4184574976576.47\nHigh income,HIC,1975,4666187491775.43\nHigh income,HIC,1976,5082771482780.97\nHigh income,HIC,1977,5755311493073.73\nHigh income,HIC,1978,6891607724618.11\nHigh income,HIC,1979,7969743516772.65\nHigh income,HIC,1980,8901501975008.19\nHigh income,HIC,1981,9039466240271.62\nHigh income,HIC,1982,8953452764925.84\nHigh income,HIC,1983,9243982005079.97\nHigh income,HIC,1984,9641528010689.37\nHigh income,HIC,1985,10136233531381\nHigh income,HIC,1986,12302761994061.6\nHigh income,HIC,1987,14248999154625.7\nHigh income,HIC,1988,16050083959668.3\nHigh income,HIC,1989,16811861166559.1\nHigh income,HIC,1990,18904669325644.7\nHigh income,HIC,1991,19993173229920.4\nHigh income,HIC,1992,21511275511532\nHigh income,HIC,1993,21708016177525.8\nHigh income,HIC,1994,23267698841306.7\nHigh income,HIC,1995,25839440231944.2\nHigh income,HIC,1996,26070328906133\nHigh income,HIC,1997,25641643763544.4\nHigh income,HIC,1998,25726539283381\nHigh income,HIC,1999,27026530357967\nHigh income,HIC,2000,27585577029586.3\nHigh income,HIC,2001,27317812538281.7\nHigh income,HIC,2002,28473503000743.8\nHigh income,HIC,2003,31923065054386.2\nHigh income,HIC,2004,35532173604878.7\nHigh income,HIC,2005,37574855319061.9\nHigh income,HIC,2006,39654700828655.5\nHigh income,HIC,2007,43338243118132.2\nHigh income,HIC,2008,46030397500591\nHigh income,HIC,2009,43140742229258.8\nHigh income,HIC,2010,45206818210523.2\nHigh income,HIC,2011,48779671089397.1\nHigh income,HIC,2012,48814556726132.5\nHigh income,HIC,2013,49346301570030.6\nHigh income,HIC,2014,50362403986688.1\nHigh income,HIC,2015,47577512619183.3\nHigh income,HIC,2016,48557463061833.1\nIBRD only,IBD,1960,294957715625.798\nIBRD only,IBD,1961,281784055643.415\nIBRD only,IBD,1962,294099146764.465\nIBRD only,IBD,1963,313571783512.354\nIBRD only,IBD,1964,355118144215.683\nIBRD only,IBD,1965,390096481947.677\nIBRD only,IBD,1966,402242586408.804\nIBRD only,IBD,1967,413245761438.504\nIBRD only,IBD,1968,436906908761.676\nIBRD only,IBD,1969,488450438382.184\nIBRD only,IBD,1970,529816131068.337\nIBRD only,IBD,1971,579022847050.05\nIBRD only,IBD,1972,651685468689.452\nIBRD only,IBD,1973,838687407232.942\nIBRD only,IBD,1974,1058778466899.08\nIBRD only,IBD,1975,1144587686605.96\nIBRD only,IBD,1976,1248656052285.51\nIBRD only,IBD,1977,1416509063968.81\nIBRD only,IBD,1978,1528083460017.87\nIBRD only,IBD,1979,1828890871805.43\nIBRD only,IBD,1980,2144525741602.09\nIBRD only,IBD,1981,2326989982246.21\nIBRD only,IBD,1982,2308664653596.24\nIBRD only,IBD,1983,2277496930910.69\nIBRD only,IBD,1984,2319367661959.1\nIBRD only,IBD,1985,2445112446662.71\nIBRD only,IBD,1986,2558329186780.92\nIBRD only,IBD,1987,2620900784641.03\nIBRD only,IBD,1988,2850097126288.85\nIBRD only,IBD,1989,3051387008971.52\nIBRD only,IBD,1990,3450586169233.02\nIBRD only,IBD,1991,3718939789573.02\nIBRD only,IBD,1992,3704535955509.18\nIBRD only,IBD,1993,3976073581552.04\nIBRD only,IBD,1994,4355401723809.41\nIBRD only,IBD,1995,4890357861496.17\nIBRD only,IBD,1996,5337081837421.85\nIBRD only,IBD,1997,5647276515792.42\nIBRD only,IBD,1998,5479894417383.33\nIBRD only,IBD,1999,5325787480159.51\nIBRD only,IBD,2000,5787180750891.22\nIBRD only,IBD,2001,5864138427158.66\nIBRD only,IBD,2002,5957570111975.94\nIBRD only,IBD,2003,6728237860877.42\nIBRD only,IBD,2004,8009679581710.35\nIBRD only,IBD,2005,9574863191621.96\nIBRD only,IBD,2006,11352987184252.7\nIBRD only,IBD,2007,14128955914663.9\nIBRD only,IBD,2008,16969030260876.9\nIBRD only,IBD,2009,16477638785512.6\nIBRD only,IBD,2010,19973945540448.7\nIBRD only,IBD,2011,23619352272048.5\nIBRD only,IBD,2012,25054597172918.9\nIBRD only,IBD,2013,26510181016987.1\nIBRD only,IBD,2014,27396611247619.6\nIBRD only,IBD,2015,25854305463828.1\nIBRD only,IBD,2016,25981476556760.5\nIDA & IBRD total,IBT,1960,332420099879.097\nIDA & IBRD total,IBT,1961,321960211021.18\nIDA & IBRD total,IBT,1962,337639098485.335\nIDA & IBRD total,IBT,1963,362701026033.953\nIDA & IBRD total,IBT,1964,402888912470.62\nIDA & IBRD total,IBT,1965,444077005175.987\nIDA & IBRD total,IBT,1966,460869446341.786\nIDA & IBRD total,IBT,1967,472420666758.729\nIDA & IBRD total,IBT,1968,499278337173.877\nIDA & IBRD total,IBT,1969,558933567077.315\nIDA & IBRD total,IBT,1970,611855530903.874\nIDA & IBRD total,IBT,1971,661298625984.077\nIDA & IBRD total,IBT,1972,737279697380.946\nIDA & IBRD total,IBT,1973,936640748618.375\nIDA & IBRD total,IBT,1974,1191688150825.68\nIDA & IBRD total,IBT,1975,1303949620697.17\nIDA & IBRD total,IBT,1976,1414314819623.72\nIDA & IBRD total,IBT,1977,1597017022159.75\nIDA & IBRD total,IBT,1978,1732099297291.98\nIDA & IBRD total,IBT,1979,2067282168911.5\nIDA & IBRD total,IBT,1980,2425094762726.23\nIDA & IBRD total,IBT,1981,2614351458203.56\nIDA & IBRD total,IBT,1982,2586535902781.4\nIDA & IBRD total,IBT,1983,2525470175591.81\nIDA & IBRD total,IBT,1984,2559559983318.84\nIDA & IBRD total,IBT,1985,2694824275386.56\nIDA & IBRD total,IBT,1986,2815682890326.31\nIDA & IBRD total,IBT,1987,2898815751592.97\nIDA & IBRD total,IBT,1988,3138724053348.55\nIDA & IBRD total,IBT,1989,3342030430117.54\nIDA & IBRD total,IBT,1990,3760263071705.36\nIDA & IBRD total,IBT,1991,4035816997833.87\nIDA & IBRD total,IBT,1992,4012284192507.96\nIDA & IBRD total,IBT,1993,4275988290608.16\nIDA & IBRD total,IBT,1994,4643315483566.54\nIDA & IBRD total,IBT,1995,5223225373502.85\nIDA & IBRD total,IBT,1996,5703932322881.56\nIDA & IBRD total,IBT,1997,6026677999942.79\nIDA & IBRD total,IBT,1998,5857257663149.43\nIDA & IBRD total,IBT,1999,5711746768836.54\nIDA & IBRD total,IBT,2000,6213004939197.82\nIDA & IBRD total,IBT,2001,6279095049696.93\nIDA & IBRD total,IBT,2002,6402159677650.68\nIDA & IBRD total,IBT,2003,7231716537197.51\nIDA & IBRD total,IBT,2004,8595676908613.7\nIDA & IBRD total,IBT,2005,10252563289337.4\nIDA & IBRD total,IBT,2006,12171329219107.2\nIDA & IBRD total,IBT,2007,15085802941075.8\nIDA & IBRD total,IBT,2008,18119451371651.3\nIDA & IBRD total,IBT,2009,17607503432796.2\nIDA & IBRD total,IBT,2010,21425535721688.5\nIDA & IBRD total,IBT,2011,25267940554152.8\nIDA & IBRD total,IBT,2012,26831458123531.8\nIDA & IBRD total,IBT,2013,28440718308132.7\nIDA & IBRD total,IBT,2014,29482467782135.6\nIDA & IBRD total,IBT,2015,27876686929740.8\nIDA & IBRD total,IBT,2016,27972819139754.5\nIDA blend,IDB,1960,12525680950.9576\nIDA blend,IDB,1961,13386351816.5945\nIDA blend,IDB,1962,14307816104.3043\nIDA blend,IDB,1963,15133348219.3266\nIDA blend,IDB,1964,16543899359.3215\nIDA blend,IDB,1965,18004962168.3536\nIDA blend,IDB,1966,19544706292.4751\nIDA blend,IDB,1967,19667042556.1037\nIDA blend,IDB,1968,20906822494.9082\nIDA blend,IDB,1969,23857220125.2404\nIDA blend,IDB,1970,32837073290.36\nIDA blend,IDB,1971,30359420847.3086\nIDA blend,IDB,1972,33929717613.8687\nIDA blend,IDB,1973,36066821279.9032\nIDA blend,IDB,1974,52377237128.2013\nIDA blend,IDB,1975,60240314536.3242\nIDA blend,IDB,1976,73250340512.4385\nIDA blend,IDB,1977,76778825024.8365\nIDA blend,IDB,1978,83172550736.8087\nIDA blend,IDB,1979,102343390447.38\nIDA blend,IDB,1980,131644491209.18\nIDA blend,IDB,1981,135584627037.35\nIDA blend,IDB,1982,127683940852.885\nIDA blend,IDB,1983,106265348540.911\nIDA blend,IDB,1984,99705701419.0621\nIDA blend,IDB,1985,99635251825.2704\nIDA blend,IDB,1986,96824536112.5831\nIDA blend,IDB,1987,107028115535.764\nIDA blend,IDB,1988,114656536466.96\nIDA blend,IDB,1989,117218646278.359\nIDA blend,IDB,1990,124491404586.038\nIDA blend,IDB,1991,128062928784.71\nIDA blend,IDB,1992,129439244131.401\nIDA blend,IDB,1993,119431418788.406\nIDA blend,IDB,1994,119278991736.472\nIDA blend,IDB,1995,140582479963.877\nIDA blend,IDB,1996,156517602049.483\nIDA blend,IDB,1997,158318501147.493\nIDA blend,IDB,1998,151436686944.96\nIDA blend,IDB,1999,157758167977.6\nIDA blend,IDB,2000,175670535724.267\nIDA blend,IDB,2001,169637750175.563\nIDA blend,IDB,2002,184390856565.303\nIDA blend,IDB,2003,210309399964.325\nIDA blend,IDB,2004,254107331006.866\nIDA blend,IDB,2005,298966157726.575\nIDA blend,IDB,2006,377892170694.759\nIDA blend,IDB,2007,432494229337.87\nIDA blend,IDB,2008,515331066665.508\nIDA blend,IDB,2009,479916707070.375\nIDA blend,IDB,2010,707233865359.817\nIDA blend,IDB,2011,810782537391.527\nIDA blend,IDB,2012,891826340277.914\nIDA blend,IDB,2013,969503885737.184\nIDA blend,IDB,2014,1052620067829.89\nIDA blend,IDB,2015,984508326729.442\nIDA blend,IDB,2016,923606013413.981\nIDA only,IDX,1980,149452950457.482\nIDA only,IDX,1981,152280469182.83\nIDA only,IDX,1982,151393150593.556\nIDA only,IDX,1983,144719716101.73\nIDA only,IDX,1984,144300309666.587\nIDA only,IDX,1985,154705670371.884\nIDA only,IDX,1986,166179914408.842\nIDA only,IDX,1987,176101376349.727\nIDA only,IDX,1988,178968363238.156\nIDA only,IDX,1989,178613242288.329\nIDA only,IDX,1990,187635958013.73\nIDA only,IDX,1991,190582893944.701\nIDA only,IDX,1992,179339325200.688\nIDA only,IDX,1993,181205499863.139\nIDA only,IDX,1994,167439883605.373\nIDA only,IDX,1995,191139487030.569\nIDA only,IDX,1996,209101340746.376\nIDA only,IDX,1997,219709845492.706\nIDA only,IDX,1998,225492475199.991\nIDA only,IDX,1999,228384752868.434\nIDA only,IDX,2000,250496797796.716\nIDA only,IDX,2001,245457279053.403\nIDA only,IDX,2002,260506321914.329\nIDA only,IDX,2003,293490957922.838\nIDA only,IDX,2004,331890668943.604\nIDA only,IDX,2005,378279875004.078\nIDA only,IDX,2006,439667449381.062\nIDA only,IDX,2007,522810471183.771\nIDA only,IDX,2008,633846418352.25\nIDA only,IDX,2009,652748933565.031\nIDA only,IDX,2010,742077497033.099\nIDA only,IDX,2011,831576507631.743\nIDA only,IDX,2012,877952610254.43\nIDA only,IDX,2013,955563577640.96\nIDA only,IDX,2014,1030596428731.83\nIDA only,IDX,2015,1039549171419.7\nIDA only,IDX,2016,1072786488210.4\nIDA total,IDA,1960,38552843708.9354\nIDA total,IDA,1961,40693283773.58\nIDA total,IDA,1962,43887390094.0645\nIDA total,IDA,1963,49429967763.5083\nIDA total,IDA,1964,48314009338.6137\nIDA total,IDA,1965,54527198662.1703\nIDA total,IDA,1966,59160876212.7685\nIDA total,IDA,1967,59734974396.4725\nIDA total,IDA,1968,62963565810.293\nIDA total,IDA,1969,71150741264.5023\nIDA total,IDA,1970,82807754900.386\nIDA total,IDA,1971,83066378876.2017\nIDA total,IDA,1972,86442205439.2379\nIDA total,IDA,1973,98971784199.4293\nIDA total,IDA,1974,134250629861.833\nIDA total,IDA,1975,160984432183.309\nIDA total,IDA,1976,167340358213.323\nIDA total,IDA,1977,182330728312.277\nIDA total,IDA,1978,206076745410.445\nIDA total,IDA,1979,240799007044.617\nIDA total,IDA,1980,283402210725.02\nIDA total,IDA,1981,290342908727.912\nIDA total,IDA,1982,280959587891.783\nIDA total,IDA,1983,251503725681.482\nIDA total,IDA,1984,244016052826.94\nIDA total,IDA,1985,253831737187.656\nIDA total,IDA,1986,261726969533.395\nIDA total,IDA,1987,282047953084.372\nIDA total,IDA,1988,292878032914.381\nIDA total,IDA,1989,295192606453.256\nIDA total,IDA,1990,311501481838.973\nIDA total,IDA,1991,318111129146.48\nIDA total,IDA,1992,308723210809.946\nIDA total,IDA,1993,300031302947.81\nIDA total,IDA,1994,286507832410.8\nIDA total,IDA,1995,331653789329.34\nIDA total,IDA,1996,365670737508.173\nIDA total,IDA,1997,377797938000.412\nIDA total,IDA,1998,376180134271.141\nIDA total,IDA,1999,385587434091.455\nIDA total,IDA,2000,425680459229.063\nIDA total,IDA,2001,414566558489.182\nIDA total,IDA,2002,444398292761.095\nIDA total,IDA,2003,503274924958.026\nIDA total,IDA,2004,585635687953.13\nIDA total,IDA,2005,676966114515.745\nIDA total,IDA,2006,817667343182.622\nIDA total,IDA,2007,955192703165.729\nIDA total,IDA,2008,1148503307752.05\nIDA total,IDA,2009,1128757219790.24\nIDA total,IDA,2010,1455098670264.63\nIDA total,IDA,2011,1649712795941.65\nIDA total,IDA,2012,1779309786690.56\nIDA total,IDA,2013,1935383621726.91\nIDA total,IDA,2014,2094666160482.5\nIDA total,IDA,2015,2032030985340.31\nIDA total,IDA,2016,1999807711387.41\nLate-demographic dividend,LTE,1960,170979365242.809\nLate-demographic dividend,LTE,1961,157896674355.198\nLate-demographic dividend,LTE,1962,165672342325.31\nLate-demographic dividend,LTE,1963,179541877513.652\nLate-demographic dividend,LTE,1964,198101527203.29\nLate-demographic dividend,LTE,1965,220983241522.617\nLate-demographic dividend,LTE,1966,245370182543.278\nLate-demographic dividend,LTE,1967,247714846991.242\nLate-demographic dividend,LTE,1968,253063153518.702\nLate-demographic dividend,LTE,1969,282833389878.531\nLate-demographic dividend,LTE,1970,321365983627.756\nLate-demographic dividend,LTE,1971,357843090756.29\nLate-demographic dividend,LTE,1972,410663946539.173\nLate-demographic dividend,LTE,1973,521689118742.274\nLate-demographic dividend,LTE,1974,614359539540.818\nLate-demographic dividend,LTE,1975,675064297226.859\nLate-demographic dividend,LTE,1976,736554966601.838\nLate-demographic dividend,LTE,1977,854922183289.794\nLate-demographic dividend,LTE,1978,890801447493.197\nLate-demographic dividend,LTE,1979,1064378345450.16\nLate-demographic dividend,LTE,1980,1206588180549.08\nLate-demographic dividend,LTE,1981,1279079526271.61\nLate-demographic dividend,LTE,1982,1308693372660.14\nLate-demographic dividend,LTE,1983,1210830059076.8\nLate-demographic dividend,LTE,1984,1274950873382.07\nLate-demographic dividend,LTE,1985,1362599557653.42\nLate-demographic dividend,LTE,1986,1449309735032.07\nLate-demographic dividend,LTE,1987,1527791941343.19\nLate-demographic dividend,LTE,1988,1682832142063.89\nLate-demographic dividend,LTE,1989,1907371231981.91\nLate-demographic dividend,LTE,1990,2027238777745.44\nLate-demographic dividend,LTE,1991,2230289305088.13\nLate-demographic dividend,LTE,1992,2079918505675.61\nLate-demographic dividend,LTE,1993,2155933467967.38\nLate-demographic dividend,LTE,1994,2468851478670.16\nLate-demographic dividend,LTE,1995,3032822828435.27\nLate-demographic dividend,LTE,1996,3325689514009.88\nLate-demographic dividend,LTE,1997,3480282448432.12\nLate-demographic dividend,LTE,1998,3351287871402.87\nLate-demographic dividend,LTE,1999,3096016890918.91\nLate-demographic dividend,LTE,2000,3400746698943.93\nLate-demographic dividend,LTE,2001,3515173798011.25\nLate-demographic dividend,LTE,2002,3723537029342.66\nLate-demographic dividend,LTE,2003,4246057259568.52\nLate-demographic dividend,LTE,2004,5103484222816.06\nLate-demographic dividend,LTE,2005,6161727739418.01\nLate-demographic dividend,LTE,2006,7436775397223.2\nLate-demographic dividend,LTE,2007,9366207813701.86\nLate-demographic dividend,LTE,2008,11645245415729.3\nLate-demographic dividend,LTE,2009,11258203905362.3\nLate-demographic dividend,LTE,2010,13513745408334.7\nLate-demographic dividend,LTE,2011,16480045678794.9\nLate-demographic dividend,LTE,2012,17631664734747.7\nLate-demographic dividend,LTE,2013,19014316277878.7\nLate-demographic dividend,LTE,2014,19703102026309.7\nLate-demographic dividend,LTE,2015,18456544742036.6\nLate-demographic dividend,LTE,2016,18455074977717.5\nLatin America & Caribbean,LCN,1960,81231814846.363\nLatin America & Caribbean,LCN,1961,86287335349.4088\nLatin America & Caribbean,LCN,1962,99366717908.2988\nLatin America & Caribbean,LCN,1963,99955845906.0715\nLatin America & Caribbean,LCN,1964,111011134837.996\nLatin America & Caribbean,LCN,1965,119371791469.707\nLatin America & Caribbean,LCN,1966,131018820033.415\nLatin America & Caribbean,LCN,1967,134187210192.191\nLatin America & Caribbean,LCN,1968,144510148767.745\nLatin America & Caribbean,LCN,1969,161958447586.971\nLatin America & Caribbean,LCN,1970,176071905100.07\nLatin America & Caribbean,LCN,1971,196968821795.516\nLatin America & Caribbean,LCN,1972,221446080247.827\nLatin America & Caribbean,LCN,1973,289954046146.875\nLatin America & Caribbean,LCN,1974,376428081259.377\nLatin America & Caribbean,LCN,1975,394878139738.537\nLatin America & Caribbean,LCN,1976,439009649467.299\nLatin America & Caribbean,LCN,1977,483105144772.74\nLatin America & Caribbean,LCN,1978,548082288899.465\nLatin America & Caribbean,LCN,1979,653361957732.235\nLatin America & Caribbean,LCN,1980,774610663634.314\nLatin America & Caribbean,LCN,1981,892197077887.729\nLatin America & Caribbean,LCN,1982,834249556962.449\nLatin America & Caribbean,LCN,1983,740171057904.183\nLatin America & Caribbean,LCN,1984,729654325488.334\nLatin America & Caribbean,LCN,1985,751412828440.244\nLatin America & Caribbean,LCN,1986,764534086642.951\nLatin America & Caribbean,LCN,1987,803851944552.642\nLatin America & Caribbean,LCN,1988,919123365001.321\nLatin America & Caribbean,LCN,1989,1006401717319.53\nLatin America & Caribbean,LCN,1990,1170503151627.96\nLatin America & Caribbean,LCN,1991,1440164640565.46\nLatin America & Caribbean,LCN,1992,1358402572233.26\nLatin America & Caribbean,LCN,1993,1564941586767.48\nLatin America & Caribbean,LCN,1994,1797150604612.08\nLatin America & Caribbean,LCN,1995,1916099952742.19\nLatin America & Caribbean,LCN,1996,2060739358051.35\nLatin America & Caribbean,LCN,1997,2255377958184.28\nLatin America & Caribbean,LCN,1998,2271734570154.72\nLatin America & Caribbean,LCN,1999,2050793815133.05\nLatin America & Caribbean,LCN,2000,2262091810679.88\nLatin America & Caribbean,LCN,2001,2204817296105.27\nLatin America & Caribbean,LCN,2002,1976797807992.51\nLatin America & Caribbean,LCN,2003,2035302568313.9\nLatin America & Caribbean,LCN,2004,2350657774176.39\nLatin America & Caribbean,LCN,2005,2845509423691.62\nLatin America & Caribbean,LCN,2006,3337244559997.56\nLatin America & Caribbean,LCN,2007,3936347648225.09\nLatin America & Caribbean,LCN,2008,4576034696193.34\nLatin America & Caribbean,LCN,2009,4302163169714.6\nLatin America & Caribbean,LCN,2010,5334533033072.82\nLatin America & Caribbean,LCN,2011,6064277798886.03\nLatin America & Caribbean,LCN,2012,6121206635064.58\nLatin America & Caribbean,LCN,2013,6272989482508.83\nLatin America & Caribbean,LCN,2014,6391549877362.08\nLatin America & Caribbean,LCN,2015,5459206256454.35\nLatin America & Caribbean,LCN,2016,5299865625774.02\nLatin America & Caribbean (excluding high income),LAC,1960,73257271838.3015\nLatin America & Caribbean (excluding high income),LAC,1961,76976526265.3716\nLatin America & Caribbean (excluding high income),LAC,1962,88753234541.7555\nLatin America & Caribbean (excluding high income),LAC,1963,88910024329.5201\nLatin America & Caribbean (excluding high income),LAC,1964,98849108076.6562\nLatin America & Caribbean (excluding high income),LAC,1965,106853155864.806\nLatin America & Caribbean (excluding high income),LAC,1966,117136947969.298\nLatin America & Caribbean (excluding high income),LAC,1967,120080359870.468\nLatin America & Caribbean (excluding high income),LAC,1968,129699733259.399\nLatin America & Caribbean (excluding high income),LAC,1969,144755178875.731\nLatin America & Caribbean (excluding high income),LAC,1970,157275868995.927\nLatin America & Caribbean (excluding high income),LAC,1971,174869994567.771\nLatin America & Caribbean (excluding high income),LAC,1972,197935255376.821\nLatin America & Caribbean (excluding high income),LAC,1973,258306734902.943\nLatin America & Caribbean (excluding high income),LAC,1974,343441856215.444\nLatin America & Caribbean (excluding high income),LAC,1975,370095266534.958\nLatin America & Caribbean (excluding high income),LAC,1976,410244151113.2\nLatin America & Caribbean (excluding high income),LAC,1977,448352062372.945\nLatin America & Caribbean (excluding high income),LAC,1978,508329063096.249\nLatin America & Caribbean (excluding high income),LAC,1979,601944719169.461\nLatin America & Caribbean (excluding high income),LAC,1980,708704884814.461\nLatin America & Caribbean (excluding high income),LAC,1981,816873638188.249\nLatin America & Caribbean (excluding high income),LAC,1982,768136284782.835\nLatin America & Caribbean (excluding high income),LAC,1983,683173418380.995\nLatin America & Caribbean (excluding high income),LAC,1984,671392237378.637\nLatin America & Caribbean (excluding high income),LAC,1985,694019952730.768\nLatin America & Caribbean (excluding high income),LAC,1986,705374201105.676\nLatin America & Caribbean (excluding high income),LAC,1987,737306149636.792\nLatin America & Caribbean (excluding high income),LAC,1988,845147525282.733\nLatin America & Caribbean (excluding high income),LAC,1989,925574603351.671\nLatin America & Caribbean (excluding high income),LAC,1990,1081353158729.94\nLatin America & Caribbean (excluding high income),LAC,1991,1341594021698.3\nLatin America & Caribbean (excluding high income),LAC,1992,1247729796123.51\nLatin America & Caribbean (excluding high income),LAC,1993,1446291182385.59\nLatin America & Caribbean (excluding high income),LAC,1994,1663902703405.24\nLatin America & Caribbean (excluding high income),LAC,1995,1760538940820.6\nLatin America & Caribbean (excluding high income),LAC,1996,1895254878114.76\nLatin America & Caribbean (excluding high income),LAC,1997,2074269012890.99\nLatin America & Caribbean (excluding high income),LAC,1998,2085413655018.9\nLatin America & Caribbean (excluding high income),LAC,1999,1867635348454.48\nLatin America & Caribbean (excluding high income),LAC,2000,2070772006620.39\nLatin America & Caribbean (excluding high income),LAC,2001,2013631181344.99\nLatin America & Caribbean (excluding high income),LAC,2002,1791362291806.72\nLatin America & Caribbean (excluding high income),LAC,2003,1839436251262.6\nLatin America & Caribbean (excluding high income),LAC,2004,2121459944550.01\nLatin America & Caribbean (excluding high income),LAC,2005,2579728859496.06\nLatin America & Caribbean (excluding high income),LAC,2006,3029713038041.48\nLatin America & Caribbean (excluding high income),LAC,2007,3598139206333.45\nLatin America & Caribbean (excluding high income),LAC,2008,4213483414952.47\nLatin America & Caribbean (excluding high income),LAC,2009,3953155755587.8\nLatin America & Caribbean (excluding high income),LAC,2010,4923605261317.64\nLatin America & Caribbean (excluding high income),LAC,2011,5605037810076.2\nLatin America & Caribbean (excluding high income),LAC,2012,5639934948104.64\nLatin America & Caribbean (excluding high income),LAC,2013,5771411525042.99\nLatin America & Caribbean (excluding high income),LAC,2014,5905518272856.91\nLatin America & Caribbean (excluding high income),LAC,2015,5012592560057.5\nLatin America & Caribbean (excluding high income),LAC,2016,4853042525000.34\nLatin America & the Caribbean (IDA & IBRD countries),TLA,1960,76340051019.9824\nLatin America & the Caribbean (IDA & IBRD countries),TLA,1961,80983672521.946\nLatin America & the Caribbean (IDA & IBRD countries),TLA,1962,93332172395.1245\nLatin America & the Caribbean (IDA & IBRD countries),TLA,1963,93626166816.1974\nLatin America & the Caribbean (IDA & IBRD countries),TLA,1964,103992305875.075\nLatin America & the Caribbean (IDA & IBRD countries),TLA,1965,111682430851.252\nLatin America & the Caribbean (IDA & IBRD countries),TLA,1966,122549825339.491\nLatin America & the Caribbean (IDA & IBRD countries),TLA,1967,125155133957.955\nLatin America & the Caribbean (IDA & IBRD countries),TLA,1968,134570903699.431\nLatin America & the Caribbean (IDA & IBRD countries),TLA,1969,150729643378.263\nLatin America & the Caribbean (IDA & IBRD countries),TLA,1970,163725174761.275\nLatin America & the Caribbean (IDA & IBRD countries),TLA,1971,182610803106.836\nLatin America & the Caribbean (IDA & IBRD countries),TLA,1972,204996510050.965\nLatin America & the Caribbean (IDA & IBRD countries),TLA,1973,270526368032.923\nLatin America & the Caribbean (IDA & IBRD countries),TLA,1974,354486252123.827\nLatin America & the Caribbean (IDA & IBRD countries),TLA,1975,370739061705.359\nLatin America & the Caribbean (IDA & IBRD countries),TLA,1976,413041381928.784\nLatin America & the Caribbean (IDA & IBRD countries),TLA,1977,455475546381.585\nLatin America & the Caribbean (IDA & IBRD countries),TLA,1978,515069093882.068\nLatin America & the Caribbean (IDA & IBRD countries),TLA,1979,616119854958.234\nLatin America & the Caribbean (IDA & IBRD countries),TLA,1980,734465262528.934\nLatin America & the Caribbean (IDA & IBRD countries),TLA,1981,849555797922.206\nLatin America & the Caribbean (IDA & IBRD countries),TLA,1982,790096888081.284\nLatin America & the Caribbean (IDA & IBRD countries),TLA,1983,694445874182.003\nLatin America & the Caribbean (IDA & IBRD countries),TLA,1984,679865930114.882\nLatin America & the Caribbean (IDA & IBRD countries),TLA,1985,701229908476.369\nLatin America & the Caribbean (IDA & IBRD countries),TLA,1986,711095334203.764\nLatin America & the Caribbean (IDA & IBRD countries),TLA,1987,746968952126.707\nLatin America & the Caribbean (IDA & IBRD countries),TLA,1988,856981230259.337\nLatin America & the Caribbean (IDA & IBRD countries),TLA,1989,941810162373.327\nLatin America & the Caribbean (IDA & IBRD countries),TLA,1990,1100843309835.88\nLatin America & the Caribbean (IDA & IBRD countries),TLA,1991,1372317945894.65\nLatin America & the Caribbean (IDA & IBRD countries),TLA,1992,1290654691352.75\nLatin America & the Caribbean (IDA & IBRD countries),TLA,1993,1493678182529.37\nLatin America & the Caribbean (IDA & IBRD countries),TLA,1994,1715751583158.61\nLatin America & the Caribbean (IDA & IBRD countries),TLA,1995,1829060058155.86\nLatin America & the Caribbean (IDA & IBRD countries),TLA,1996,1975504627489.28\nLatin America & the Caribbean (IDA & IBRD countries),TLA,1997,2164600526788.25\nLatin America & the Caribbean (IDA & IBRD countries),TLA,1998,2173777212531.19\nLatin America & the Caribbean (IDA & IBRD countries),TLA,1999,1946393638776\nLatin America & the Caribbean (IDA & IBRD countries),TLA,2000,2150295806683.63\nLatin America & the Caribbean (IDA & IBRD countries),TLA,2001,2083914185316.81\nLatin America & the Caribbean (IDA & IBRD countries),TLA,2002,1851421107080.15\nLatin America & the Caribbean (IDA & IBRD countries),TLA,2003,1903851095836.06\nLatin America & the Caribbean (IDA & IBRD countries),TLA,2004,2210856081192.99\nLatin America & the Caribbean (IDA & IBRD countries),TLA,2005,2694960334574.3\nLatin America & the Caribbean (IDA & IBRD countries),TLA,2006,3171500014377.25\nLatin America & the Caribbean (IDA & IBRD countries),TLA,2007,3760179560980.12\nLatin America & the Caribbean (IDA & IBRD countries),TLA,2008,4392659455813.3\nLatin America & the Caribbean (IDA & IBRD countries),TLA,2009,4116248823879.65\nLatin America & the Caribbean (IDA & IBRD countries),TLA,2010,5142114727040.23\nLatin America & the Caribbean (IDA & IBRD countries),TLA,2011,5863590521693.2\nLatin America & the Caribbean (IDA & IBRD countries),TLA,2012,5912820697142.36\nLatin America & the Caribbean (IDA & IBRD countries),TLA,2013,6058596339699.08\nLatin America & the Caribbean (IDA & IBRD countries),TLA,2014,6171392349445.98\nLatin America & the Caribbean (IDA & IBRD countries),TLA,2015,5247799483621.63\nLatin America & the Caribbean (IDA & IBRD countries),TLA,2016,5094164385266.57\nLeast developed countries: UN classification,LDC,1985,120888467158.606\nLeast developed countries: UN classification,LDC,1986,131569338035.301\nLeast developed countries: UN classification,LDC,1987,143177200301.141\nLeast developed countries: UN classification,LDC,1988,146663532194.935\nLeast developed countries: UN classification,LDC,1989,152201964462.604\nLeast developed countries: UN classification,LDC,1990,156731265034.013\nLeast developed countries: UN classification,LDC,1991,160526313814.694\nLeast developed countries: UN classification,LDC,1992,141269409080.037\nLeast developed countries: UN classification,LDC,1993,143252490707.009\nLeast developed countries: UN classification,LDC,1994,133681898768.999\nLeast developed countries: UN classification,LDC,1995,152281115075.301\nLeast developed countries: UN classification,LDC,1996,168214011924.789\nLeast developed countries: UN classification,LDC,1997,178034867660.155\nLeast developed countries: UN classification,LDC,1998,179028450535.788\nLeast developed countries: UN classification,LDC,1999,181115109652.846\nLeast developed countries: UN classification,LDC,2000,205488833995.821\nLeast developed countries: UN classification,LDC,2001,195584775003.477\nLeast developed countries: UN classification,LDC,2002,211139725878.009\nLeast developed countries: UN classification,LDC,2003,239015609172.029\nLeast developed countries: UN classification,LDC,2004,274530562937.137\nLeast developed countries: UN classification,LDC,2005,321335591433.668\nLeast developed countries: UN classification,LDC,2006,377285037889.66\nLeast developed countries: UN classification,LDC,2007,459887867104.348\nLeast developed countries: UN classification,LDC,2008,571649437542.793\nLeast developed countries: UN classification,LDC,2009,582743051700.049\nLeast developed countries: UN classification,LDC,2010,661934469924.977\nLeast developed countries: UN classification,LDC,2011,751567270665.631\nLeast developed countries: UN classification,LDC,2012,798197144587.788\nLeast developed countries: UN classification,LDC,2013,866105358955.164\nLeast developed countries: UN classification,LDC,2014,938325885613.307\nLeast developed countries: UN classification,LDC,2015,926977420256.862\nLeast developed countries: UN classification,LDC,2016,940734369537.394\nLow & middle income,LMY,1960,324352039781.982\nLow & middle income,LMY,1961,312613286316.151\nLow & middle income,LMY,1962,326841861893.587\nLow & middle income,LMY,1963,351679457721.018\nLow & middle income,LMY,1964,390766765752.802\nLow & middle income,LMY,1965,431926537061.478\nLow & middle income,LMY,1966,447443329876.854\nLow & middle income,LMY,1967,459273990770.987\nLow & middle income,LMY,1968,485885375069.178\nLow & middle income,LMY,1969,543301898276.307\nLow & middle income,LMY,1970,594912900423.441\nLow & middle income,LMY,1971,642020284344.351\nLow & middle income,LMY,1972,717743238064.388\nLow & middle income,LMY,1973,907757167750.166\nLow & middle income,LMY,1974,1160583259859.92\nLow & middle income,LMY,1975,1284246415242.39\nLow & middle income,LMY,1976,1390318678217.07\nLow & middle income,LMY,1977,1564944377834.84\nLow & middle income,LMY,1978,1698527173844.61\nLow & middle income,LMY,1979,2019502691059.32\nLow & middle income,LMY,1980,2357609885446.64\nLow & middle income,LMY,1981,2535533249568.79\nLow & middle income,LMY,1982,2521341858382.09\nLow & middle income,LMY,1983,2474341829262.77\nLow & middle income,LMY,1984,2511374030829.53\nLow & middle income,LMY,1985,2646185053215.37\nLow & middle income,LMY,1986,2767031904610.59\nLow & middle income,LMY,1987,2844095463825.6\nLow & middle income,LMY,1988,3077858862038.17\nLow & middle income,LMY,1989,3273000286676.64\nLow & middle income,LMY,1990,3681363833008.22\nLow & middle income,LMY,1991,3925794817932.42\nLow & middle income,LMY,1992,3880364023640.73\nLow & middle income,LMY,1993,4138348394568.06\nLow & middle income,LMY,1994,4486856393930.34\nLow & middle income,LMY,1995,5019183141467.46\nLow & middle income,LMY,1996,5470746988300.43\nLow & middle income,LMY,1997,5784798609183.6\nLow & middle income,LMY,1998,5602032771918.3\nLow & middle income,LMY,1999,5470956851264.66\nLow & middle income,LMY,2000,5969825199401.42\nLow & middle income,LMY,2001,6026194954918.82\nLow & middle income,LMY,2002,6150931010629.06\nLow & middle income,LMY,2003,6958335915784.35\nLow & middle income,LMY,2004,8260795423054.61\nLow & middle income,LMY,2005,9842306859562.91\nLow & middle income,LMY,2006,11697108619426.9\nLow & middle income,LMY,2007,14509489193858.5\nLow & middle income,LMY,2008,17424746490688.8\nLow & middle income,LMY,2009,17023275071360.4\nLow & middle income,LMY,2010,20751243965021.7\nLow & middle income,LMY,2011,24508424849056.5\nLow & middle income,LMY,2012,26088297830358.7\nLow & middle income,LMY,2013,27661455979444.4\nLow & middle income,LMY,2014,28704762101253.9\nLow & middle income,LMY,2015,27198166090027.9\nLow & middle income,LMY,2016,27299380819539.9\nLow income,LIC,1981,76777083557.2715\nLow income,LIC,1982,80237821909.1611\nLow income,LIC,1983,74796244334.8535\nLow income,LIC,1984,68688047480.5348\nLow income,LIC,1985,71190299392.9494\nLow income,LIC,1986,80779930657.2375\nLow income,LIC,1987,84283995064.5725\nLow income,LIC,1988,90950952690.8586\nLow income,LIC,1989,89980034519.612\nLow income,LIC,1990,95714254328.0519\nLow income,LIC,1991,97729178471.6504\nLow income,LIC,1992,86383121297.092\nLow income,LIC,1993,86051188949.8247\nLow income,LIC,1994,72587455091.5318\nLow income,LIC,1995,83705340575.9305\nLow income,LIC,1996,93313723634.6011\nLow income,LIC,1997,96462655239.641\nLow income,LIC,1998,97516392240.6341\nLow income,LIC,1999,97617718260.914\nLow income,LIC,2000,112687704932.46\nLow income,LIC,2001,101760254592.161\nLow income,LIC,2002,109911457198.004\nLow income,LIC,2003,120719032496.609\nLow income,LIC,2004,137615670728.403\nLow income,LIC,2005,158963779474.829\nLow income,LIC,2006,177840329532.654\nLow income,LIC,2007,212769791288.202\nLow income,LIC,2008,256172725778.412\nLow income,LIC,2009,271232086169.742\nLow income,LIC,2010,292339724487.545\nLow income,LIC,2011,328781234807.069\nLow income,LIC,2012,353927683499.204\nLow income,LIC,2013,382592823547.049\nLow income,LIC,2014,411931481585.539\nLow income,LIC,2015,402390077968.574\nLow income,LIC,2016,402524119028.794\nLower middle income,LMC,1965,137326339591.262\nLower middle income,LMC,1966,124411912027.875\nLower middle income,LMC,1967,132634611148.107\nLower middle income,LMC,1968,142216630532.313\nLower middle income,LMC,1969,158795498474.583\nLower middle income,LMC,1970,174710712969.92\nLower middle income,LMC,1971,181735953363.666\nLower middle income,LMC,1972,193138344594.827\nLower middle income,LMC,1973,230345726832.358\nLower middle income,LMC,1974,296101713075.74\nLower middle income,LMC,1975,328968990523.093\nLower middle income,LMC,1976,356861615692.609\nLower middle income,LMC,1977,408808711659.94\nLower middle income,LMC,1978,458039748301.706\nLower middle income,LMC,1979,522074506932.289\nLower middle income,LMC,1980,648971797083.754\nLower middle income,LMC,1981,685997455750.443\nLower middle income,LMC,1982,692704157982.478\nLower middle income,LMC,1983,675923420884.045\nLower middle income,LMC,1984,673275971022.756\nLower middle income,LMC,1985,708869952231.169\nLower middle income,LMC,1986,738150079103.442\nLower middle income,LMC,1987,809719315471.034\nLower middle income,LMC,1988,845625037859.514\nLower middle income,LMC,1989,860326050891.247\nLower middle income,LMC,1990,920986539698.062\nLower middle income,LMC,1991,887230344637.745\nLower middle income,LMC,1992,925514551252.778\nLower middle income,LMC,1993,940614921412.645\nLower middle income,LMC,1994,1021403738001.33\nLower middle income,LMC,1995,1147028091028.64\nLower middle income,LMC,1996,1259776454855.75\nLower middle income,LMC,1997,1300334144474.94\nLower middle income,LMC,1998,1169702131639.1\nLower middle income,LMC,1999,1270887612899.74\nLower middle income,LMC,2000,1343998928481.28\nLower middle income,LMC,2001,1356231036598.67\nLower middle income,LMC,2002,1458034560193.17\nLower middle income,LMC,2003,1672304190174.43\nLower middle income,LMC,2004,1911857905121\nLower middle income,LMC,2005,2205200074191.19\nLower middle income,LMC,2006,2626264404890.92\nLower middle income,LMC,2007,3232176784206.42\nLower middle income,LMC,2008,3637903033770.54\nLower middle income,LMC,2009,3727811301184.7\nLower middle income,LMC,2010,4666964528535.16\nLower middle income,LMC,2011,5278934620007.28\nLower middle income,LMC,2012,5535327445130.84\nLower middle income,LMC,2013,5774458157744.91\nLower middle income,LMC,2014,6076543198047.11\nLower middle income,LMC,2015,6017050158891.42\nLower middle income,LMC,2016,6263372909106.61\nMiddle East & North Africa,MEA,1968,32598497785.5043\nMiddle East & North Africa,MEA,1969,36384816241.1937\nMiddle East & North Africa,MEA,1970,41243011986.7202\nMiddle East & North Africa,MEA,1971,47614954968.8215\nMiddle East & North Africa,MEA,1972,58137916907.7533\nMiddle East & North Africa,MEA,1973,78314872620.6397\nMiddle East & North Africa,MEA,1974,142659976452.862\nMiddle East & North Africa,MEA,1975,155791345570.2\nMiddle East & North Africa,MEA,1976,193704316864.941\nMiddle East & North Africa,MEA,1977,224691986322.579\nMiddle East & North Africa,MEA,1978,238550083389.823\nMiddle East & North Africa,MEA,1979,311753032318.839\nMiddle East & North Africa,MEA,1980,402410542622.525\nMiddle East & North Africa,MEA,1981,415941395552.503\nMiddle East & North Africa,MEA,1982,414275165387.925\nMiddle East & North Africa,MEA,1983,420830232870.135\nMiddle East & North Africa,MEA,1984,426458764085.173\nMiddle East & North Africa,MEA,1985,432783155355.763\nMiddle East & North Africa,MEA,1986,442829428060.743\nMiddle East & North Africa,MEA,1987,411135918932.23\nMiddle East & North Africa,MEA,1988,408590542564.906\nMiddle East & North Africa,MEA,1989,420719668267.302\nMiddle East & North Africa,MEA,1990,550957452061.798\nMiddle East & North Africa,MEA,1991,553975106196.129\nMiddle East & North Africa,MEA,1992,603445097423.173\nMiddle East & North Africa,MEA,1993,607554327421.48\nMiddle East & North Africa,MEA,1994,633819758524.703\nMiddle East & North Africa,MEA,1995,708751921751.876\nMiddle East & North Africa,MEA,1996,802386209546.278\nMiddle East & North Africa,MEA,1997,832734025493.755\nMiddle East & North Africa,MEA,1998,809445659306.921\nMiddle East & North Africa,MEA,1999,866936558879.285\nMiddle East & North Africa,MEA,2000,967021642510.449\nMiddle East & North Africa,MEA,2001,970615931120.003\nMiddle East & North Africa,MEA,2002,966820093048.206\nMiddle East & North Africa,MEA,2003,1089098416129.6\nMiddle East & North Africa,MEA,2004,1271214902549.4\nMiddle East & North Africa,MEA,2005,1530143773484.47\nMiddle East & North Africa,MEA,2006,1790939429141.46\nMiddle East & North Africa,MEA,2007,2123322295847.04\nMiddle East & North Africa,MEA,2008,2647704729411.95\nMiddle East & North Africa,MEA,2009,2368231329944.26\nMiddle East & North Africa,MEA,2010,2767962267741.37\nMiddle East & North Africa,MEA,2011,3282392899960.52\nMiddle East & North Africa,MEA,2012,3529758430134.79\nMiddle East & North Africa,MEA,2013,3524023587337.77\nMiddle East & North Africa,MEA,2014,3563559183199.12\nMiddle East & North Africa,MEA,2015,3147279271333.8\nMiddle East & North Africa,MEA,2016,3144797691272.85\nMiddle East & North Africa (excluding high income),MNA,1993,291541399331.158\nMiddle East & North Africa (excluding high income),MNA,1994,298977280091.949\nMiddle East & North Africa (excluding high income),MNA,1995,340941052118.941\nMiddle East & North Africa (excluding high income),MNA,1996,395345201743.968\nMiddle East & North Africa (excluding high income),MNA,1997,406065741476.365\nMiddle East & North Africa (excluding high income),MNA,1998,412149531850.818\nMiddle East & North Africa (excluding high income),MNA,1999,435882790040.702\nMiddle East & North Africa (excluding high income),MNA,2000,451660439753.84\nMiddle East & North Africa (excluding high income),MNA,2001,467355993191.64\nMiddle East & North Africa (excluding high income),MNA,2002,453678358083.981\nMiddle East & North Africa (excluding high income),MNA,2003,511780801926.393\nMiddle East & North Africa (excluding high income),MNA,2004,592919911444.81\nMiddle East & North Africa (excluding high income),MNA,2005,698419820703.848\nMiddle East & North Africa (excluding high income),MNA,2006,811375431672.305\nMiddle East & North Africa (excluding high income),MNA,2007,1002832284121.99\nMiddle East & North Africa (excluding high income),MNA,2008,1235366170569.33\nMiddle East & North Africa (excluding high income),MNA,2009,1195903054603.52\nMiddle East & North Africa (excluding high income),MNA,2010,1383517142400.36\nMiddle East & North Africa (excluding high income),MNA,2011,1568522348029.8\nMiddle East & North Africa (excluding high income),MNA,2012,1681554531530.42\nMiddle East & North Africa (excluding high income),MNA,2013,1591675173595.67\nMiddle East & North Africa (excluding high income),MNA,2014,1591556264536.29\nMiddle East & North Africa (excluding high income),MNA,2015,1441977380056.15\nMiddle East & North Africa (excluding high income),MNA,2016,1453901029336.23\nMiddle East & North Africa (IDA & IBRD countries),TMN,1993,288738308055.187\nMiddle East & North Africa (IDA & IBRD countries),TMN,1994,296102694844.496\nMiddle East & North Africa (IDA & IBRD countries),TMN,1995,337619748312.89\nMiddle East & North Africa (IDA & IBRD countries),TMN,1996,391918726612.071\nMiddle East & North Africa (IDA & IBRD countries),TMN,1997,402270579724.805\nMiddle East & North Africa (IDA & IBRD countries),TMN,1998,408028236055.958\nMiddle East & North Africa (IDA & IBRD countries),TMN,1999,431557171032.094\nMiddle East & North Africa (IDA & IBRD countries),TMN,2000,447298299633.383\nMiddle East & North Africa (IDA & IBRD countries),TMN,2001,463334229256.801\nMiddle East & North Africa (IDA & IBRD countries),TMN,2002,450128157153.651\nMiddle East & North Africa (IDA & IBRD countries),TMN,2003,507822139212.327\nMiddle East & North Africa (IDA & IBRD countries),TMN,2004,588620268464.702\nMiddle East & North Africa (IDA & IBRD countries),TMN,2005,693623682832.889\nMiddle East & North Africa (IDA & IBRD countries),TMN,2006,806508983373.845\nMiddle East & North Africa (IDA & IBRD countries),TMN,2007,997382214929.026\nMiddle East & North Africa (IDA & IBRD countries),TMN,2008,1228766298998.44\nMiddle East & North Africa (IDA & IBRD countries),TMN,2009,1188669247677.49\nMiddle East & North Africa (IDA & IBRD countries),TMN,2010,1374620791146.31\nMiddle East & North Africa (IDA & IBRD countries),TMN,2011,1558059481133.08\nMiddle East & North Africa (IDA & IBRD countries),TMN,2012,1670273623778.57\nMiddle East & North Africa (IDA & IBRD countries),TMN,2013,1579070728219.37\nMiddle East & North Africa (IDA & IBRD countries),TMN,2014,1578695250599.14\nMiddle East & North Africa (IDA & IBRD countries),TMN,2015,1429091286052.15\nMiddle East & North Africa (IDA & IBRD countries),TMN,2016,1440244500023.14\nMiddle income,MIC,1960,310437531142.018\nMiddle income,MIC,1961,298648412877.056\nMiddle income,MIC,1962,311468382981.153\nMiddle income,MIC,1963,332421048707.661\nMiddle income,MIC,1964,375226353902.683\nMiddle income,MIC,1965,413375963383.153\nMiddle income,MIC,1966,427131280978.458\nMiddle income,MIC,1967,439772935021.306\nMiddle income,MIC,1968,465609726571.219\nMiddle income,MIC,1969,520593200616.881\nMiddle income,MIC,1970,571051591620.337\nMiddle income,MIC,1971,615837901975.016\nMiddle income,MIC,1972,688744783854.939\nMiddle income,MIC,1973,872905994078.695\nMiddle income,MIC,1974,1118905183097.78\nMiddle income,MIC,1975,1236622245605.82\nMiddle income,MIC,1976,1342534897220.62\nMiddle income,MIC,1977,1509988313453.65\nMiddle income,MIC,1978,1635672670590.98\nMiddle income,MIC,1979,1949883708918.23\nMiddle income,MIC,1980,2283263706870.42\nMiddle income,MIC,1981,2463300015085.58\nMiddle income,MIC,1982,2445934783634.42\nMiddle income,MIC,1983,2403969281851.92\nMiddle income,MIC,1984,2446595238891.12\nMiddle income,MIC,1985,2579016642990.23\nMiddle income,MIC,1986,2691034790438.57\nMiddle income,MIC,1987,2764805339370.34\nMiddle income,MIC,1988,2992285219942.15\nMiddle income,MIC,1989,3188472195720.25\nMiddle income,MIC,1990,3590739499695.05\nMiddle income,MIC,1991,3832851639411.71\nMiddle income,MIC,1992,3797576030038.01\nMiddle income,MIC,1993,4055490739057.9\nMiddle income,MIC,1994,4415239786153.69\nMiddle income,MIC,1995,4936867401153.25\nMiddle income,MIC,1996,5379214787657.32\nMiddle income,MIC,1997,5689936118126.09\nMiddle income,MIC,1998,5506592879356.91\nMiddle income,MIC,1999,5375673183280.96\nMiddle income,MIC,2000,5860476849478.68\nMiddle income,MIC,2001,5926243420202.93\nMiddle income,MIC,2002,6043506326546.43\nMiddle income,MIC,2003,6840046171605.47\nMiddle income,MIC,2004,8125459303288.47\nMiddle income,MIC,2005,9685508836558.34\nMiddle income,MIC,2006,11520622409819.2\nMiddle income,MIC,2007,14297537214845.2\nMiddle income,MIC,2008,17169626138363.2\nMiddle income,MIC,2009,16755625847152.6\nMiddle income,MIC,2010,20458605049763.3\nMiddle income,MIC,2011,24178441710181.1\nMiddle income,MIC,2012,25733320245004.3\nMiddle income,MIC,2013,27278175113689\nMiddle income,MIC,2014,28292772740185.1\nMiddle income,MIC,2015,26796051573771.1\nMiddle income,MIC,2016,26897069180752.8\nNorth America,NAC,1960,584477920198.99\nNorth America,NAC,1961,604157219440.397\nNorth America,NAC,1962,647173002027.413\nNorth America,NAC,1963,683353535761.531\nNorth America,NAC,1964,734790505460.858\nNorth America,NAC,1965,797723909391.131\nNorth America,NAC,1966,875492805408.936\nNorth America,NAC,1967,926623934246.798\nNorth America,NAC,1968,1013409031841.72\nNorth America,NAC,1969,1097952410241.71\nNorth America,NAC,1970,1163966395224.42\nNorth America,NAC,1971,1267253061477.52\nNorth America,NAC,1972,1395767220992.02\nNorth America,NAC,1973,1560140359214.08\nNorth America,NAC,1974,1709546297648.26\nNorth America,NAC,1975,1863102029787.65\nNorth America,NAC,1976,2084548864401.62\nNorth America,NAC,1977,2298010156934.65\nNorth America,NAC,1978,2575679667449.81\nNorth America,NAC,1979,2875732302185.42\nNorth America,NAC,1980,3136972126345.01\nNorth America,NAC,1981,3517909963656.99\nNorth America,NAC,1982,3659283025119.14\nNorth America,NAC,1983,3979574111781.89\nNorth America,NAC,1984,4397051258071.62\nNorth America,NAC,1985,4712529999482.75\nNorth America,NAC,1986,4968766427343.98\nNorth America,NAC,1987,5302830242049.45\nNorth America,NAC,1988,5761398451214.26\nNorth America,NAC,1989,6224250243275.25\nNorth America,NAC,1990,6575110950908.47\nNorth America,NAC,1991,6786006083611.19\nNorth America,NAC,1992,7133366589284.92\nNorth America,NAC,1993,7457709121892.44\nNorth America,NAC,1994,7888761439501.61\nNorth America,NAC,1995,8270122373385.4\nNorth America,NAC,1996,8731442777972.13\nNorth America,NAC,1997,9264273191726.28\nNorth America,NAC,1998,9724112027406.81\nNorth America,NAC,1999,10340031087640.9\nNorth America,NAC,2000,11030552667252.6\nNorth America,NAC,2001,11361884260892.6\nNorth America,NAC,2002,11739401906646.5\nNorth America,NAC,2003,12407237511367.9\nNorth America,NAC,2004,13302608706074.6\nNorth America,NAC,2005,14267952115864.7\nNorth America,NAC,2006,15176717496461.2\nNorth America,NAC,2007,15948507238205.8\nNorth America,NAC,2008,16273823136997.2\nNorth America,NAC,2009,15795698382986.4\nNorth America,NAC,2010,16583580836811.1\nNorth America,NAC,2011,17312124677047.8\nNorth America,NAC,2012,17985081294447.6\nNorth America,NAC,2013,18539718715830.2\nNorth America,NAC,2014,19191755961783.7\nNorth America,NAC,2015,19679438002855\nNorth America,NAC,2016,20160296406469\nOECD members,OED,1960,1071151663882.99\nOECD members,OED,1961,1125836224221.95\nOECD members,OED,1962,1215845014894.6\nOECD members,OED,1963,1310287602701.9\nOECD members,OED,1964,1431891379192.19\nOECD members,OED,1965,1554550842540.55\nOECD members,OED,1966,1706877036393.04\nOECD members,OED,1967,1831606284595.87\nOECD members,OED,1968,1985490670885.15\nOECD members,OED,1969,2179233336624.44\nOECD members,OED,1970,2391320615403.16\nOECD members,OED,1971,2647345043163.25\nOECD members,OED,1972,3072028734454.76\nOECD members,OED,1973,3711074678837.23\nOECD members,OED,1974,4160937326082.87\nOECD members,OED,1975,4661490915492.44\nOECD members,OED,1976,5052200868363.1\nOECD members,OED,1977,5696478213400.13\nOECD members,OED,1978,6839135386296.08\nOECD members,OED,1979,7900438156657.4\nOECD members,OED,1980,8767216244691.62\nOECD members,OED,1981,8925303576239.52\nOECD members,OED,1982,8790114836556.78\nOECD members,OED,1983,9082103807547.21\nOECD members,OED,1984,9498137861435.62\nOECD members,OED,1985,10019910060569.3\nOECD members,OED,1986,12146061684173.7\nOECD members,OED,1987,14059024255587.2\nOECD members,OED,1988,15862084044875.5\nOECD members,OED,1989,16617153794891.2\nOECD members,OED,1990,18724931470880.4\nOECD members,OED,1991,19808187927613.1\nOECD members,OED,1992,21297422608895.7\nOECD members,OED,1993,21614117695209.3\nOECD members,OED,1994,23079926696878.3\nOECD members,OED,1995,25426718095808.1\nOECD members,OED,1996,25649031760273.7\nOECD members,OED,1997,25256524647400.9\nOECD members,OED,1998,25514762246702.8\nOECD members,OED,1999,26812851271077.9\nOECD members,OED,2000,27377494105020.7\nOECD members,OED,2001,27119560819451.4\nOECD members,OED,2002,28300399222991.1\nOECD members,OED,2003,31707727753865\nOECD members,OED,2004,35294013497764.2\nOECD members,OED,2005,37307466029985.7\nOECD members,OED,2006,39332321300368.7\nOECD members,OED,2007,42993214955769.3\nOECD members,OED,2008,45511036479861.9\nOECD members,OED,2009,42579663711880.8\nOECD members,OED,2010,44606246604350.6\nOECD members,OED,2011,47923365513452.4\nOECD members,OED,2012,47828497828091.3\nOECD members,OED,2013,48405202092121.3\nOECD members,OED,2014,49370080089669.8\nOECD members,OED,2015,46659020669553.3\nOECD members,OED,2016,47552622005124.2\nOther small states,OSS,1970,3135485929.05746\nOther small states,OSS,1971,3722050816.43262\nOther small states,OSS,1972,4507335667.09253\nOther small states,OSS,1973,6528025335.16404\nOther small states,OSS,1974,12027202399.3617\nOther small states,OSS,1975,13422131920.7262\nOther small states,OSS,1976,16684803375.7533\nOther small states,OSS,1977,18792081785.7577\nOther small states,OSS,1978,20733786068.7394\nOther small states,OSS,1979,26918040735.5116\nOther small states,OSS,1980,37367820731.31\nOther small states,OSS,1981,37571474568.1661\nOther small states,OSS,1982,35538132656.6907\nOther small states,OSS,1983,33565476345.9185\nOther small states,OSS,1984,33809943282.4754\nOther small states,OSS,1985,32123247560.6555\nOther small states,OSS,1986,32502566977.8393\nOther small states,OSS,1987,38579939947.3423\nOther small states,OSS,1988,43353826990.6721\nOther small states,OSS,1989,45401718442.5696\nOther small states,OSS,1990,54310263044.6248\nOther small states,OSS,1991,55933105364.3667\nOther small states,OSS,1992,61013627265.7437\nOther small states,OSS,1993,58033167762.4571\nOther small states,OSS,1994,60783020994.9157\nOther small states,OSS,1995,69642896354.1044\nOther small states,OSS,1996,73535877988.0817\nOther small states,OSS,1997,76645392483.0042\nOther small states,OSS,1998,75106297715.9465\nOther small states,OSS,1999,80832351746.3218\nOther small states,OSS,2000,91599121612.5562\nOther small states,OSS,2001,91053518663.7084\nOther small states,OSS,2002,98187518524.7255\nOther small states,OSS,2003,121659449226.936\nOther small states,OSS,2004,150738716809.607\nOther small states,OSS,2005,182941015936.82\nOther small states,OSS,2006,215038691231.13\nOther small states,OSS,2007,263061876005.783\nOther small states,OSS,2008,321654726632.743\nOther small states,OSS,2009,276256069732.069\nOther small states,OSS,2010,320785945703.061\nOther small states,OSS,2011,395817095569.3\nOther small states,OSS,2012,413323181283.977\nOther small states,OSS,2013,431007987532.881\nOther small states,OSS,2014,444728412944.398\nOther small states,OSS,2015,369948348463.501\nOther small states,OSS,2016,362079512486.165\nPacific island small states,PSS,1975,1119628656.50705\nPacific island small states,PSS,1976,1122702099.50737\nPacific island small states,PSS,1977,1171337765.53249\nPacific island small states,PSS,1978,1358461653.63425\nPacific island small states,PSS,1979,1664351537.51441\nPacific island small states,PSS,1980,1904927595.90678\nPacific island small states,PSS,1981,1963995650.83804\nPacific island small states,PSS,1982,1918438076.32243\nPacific island small states,PSS,1983,1837237466.17526\nPacific island small states,PSS,1984,2014185769.40517\nPacific island small states,PSS,1985,1906817963.83447\nPacific island small states,PSS,1986,2070081366.108\nPacific island small states,PSS,1987,2033588818.81467\nPacific island small states,PSS,1988,2130603255.0409\nPacific island small states,PSS,1989,2224857784.68561\nPacific island small states,PSS,1990,2396520508.53893\nPacific island small states,PSS,1991,2548876959.76577\nPacific island small states,PSS,1992,2794581115.05935\nPacific island small states,PSS,1993,2946263929.07455\nPacific island small states,PSS,1994,3395406278.25741\nPacific island small states,PSS,1995,3668261062.14152\nPacific island small states,PSS,1996,3939097726.92624\nPacific island small states,PSS,1997,3935303220.26046\nPacific island small states,PSS,1998,3383565222.10163\nPacific island small states,PSS,1999,3685135085.34515\nPacific island small states,PSS,2000,3447191071.35042\nPacific island small states,PSS,2001,3373827097.70278\nPacific island small states,PSS,2002,3545230257.97584\nPacific island small states,PSS,2003,4157082463.76922\nPacific island small states,PSS,2004,4802142869.55194\nPacific island small states,PSS,2005,5271518870.10471\nPacific island small states,PSS,2006,5541929392.89878\nPacific island small states,PSS,2007,6078976595.05599\nPacific island small states,PSS,2008,6554173386.85826\nPacific island small states,PSS,2009,5778915418.32836\nPacific island small states,PSS,2010,6404608139.42234\nPacific island small states,PSS,2011,7589010905.92656\nPacific island small states,PSS,2012,8110535070.84161\nPacific island small states,PSS,2013,8376051896.5881\nPacific island small states,PSS,2014,8769297682.30012\nPacific island small states,PSS,2015,8596930890.68014\nPacific island small states,PSS,2016,9019651488.34122\nPost-demographic dividend,PST,1960,1044694546864.67\nPost-demographic dividend,PST,1961,1104273220370.61\nPost-demographic dividend,PST,1962,1192952502812.39\nPost-demographic dividend,PST,1963,1284268984955.24\nPost-demographic dividend,PST,1964,1401724839472.33\nPost-demographic dividend,PST,1965,1522591664917.55\nPost-demographic dividend,PST,1966,1669676469245.28\nPost-demographic dividend,PST,1967,1791672516868.83\nPost-demographic dividend,PST,1968,1941658821103.07\nPost-demographic dividend,PST,1969,2129887918389.55\nPost-demographic dividend,PST,1970,2341015790196.05\nPost-demographic dividend,PST,1971,2595579358368.19\nPost-demographic dividend,PST,1972,3010702895808.04\nPost-demographic dividend,PST,1973,3633614842108.87\nPost-demographic dividend,PST,1974,4057814746795.36\nPost-demographic dividend,PST,1975,4546622138565.25\nPost-demographic dividend,PST,1976,4933267248975.17\nPost-demographic dividend,PST,1977,5576369051739.66\nPost-demographic dividend,PST,1978,6699713409007.45\nPost-demographic dividend,PST,1979,7702380697690.26\nPost-demographic dividend,PST,1980,8529274582208.96\nPost-demographic dividend,PST,1981,8627934761431.89\nPost-demographic dividend,PST,1982,8586194508706.93\nPost-demographic dividend,PST,1983,8907635675026.94\nPost-demographic dividend,PST,1984,9311345442980.63\nPost-demographic dividend,PST,1985,9820703037814.2\nPost-demographic dividend,PST,1986,11993129678079.9\nPost-demographic dividend,PST,1987,13893300505029.3\nPost-demographic dividend,PST,1988,15650090338734.4\nPost-demographic dividend,PST,1989,16364316163380.8\nPost-demographic dividend,PST,1990,18374666517986.9\nPost-demographic dividend,PST,1991,19372103797078.9\nPost-demographic dividend,PST,1992,20789111705356.5\nPost-demographic dividend,PST,1993,20958411988551.6\nPost-demographic dividend,PST,1994,22430535276119.6\nPost-demographic dividend,PST,1995,24868835052199\nPost-demographic dividend,PST,1996,24999441859313.7\nPost-demographic dividend,PST,1997,24527784149401.8\nPost-demographic dividend,PST,1998,24630990896065.6\nPost-demographic dividend,PST,1999,25855199153753.9\nPost-demographic dividend,PST,2000,26296254682897.8\nPost-demographic dividend,PST,2001,26051043083759.2\nPost-demographic dividend,PST,2002,27170861516880.7\nPost-demographic dividend,PST,2003,30481623264492\nPost-demographic dividend,PST,2004,33868895058424.8\nPost-demographic dividend,PST,2005,35650152444993.6\nPost-demographic dividend,PST,2006,37496417841637.7\nPost-demographic dividend,PST,2007,40892362902172.6\nPost-demographic dividend,PST,2008,43204147782206.9\nPost-demographic dividend,PST,2009,40676229442861.5\nPost-demographic dividend,PST,2010,42413555466432\nPost-demographic dividend,PST,2011,45525572709993.5\nPost-demographic dividend,PST,2012,45453811718316.9\nPost-demographic dividend,PST,2013,45848629855778.7\nPost-demographic dividend,PST,2014,46735043393834.4\nPost-demographic dividend,PST,2015,44242836057681.5\nPost-demographic dividend,PST,2016,45213309475250\nPre-demographic dividend,PRE,1960,10398348179.549\nPre-demographic dividend,PRE,1961,10744202037.2057\nPre-demographic dividend,PRE,1962,11741666829.9021\nPre-demographic dividend,PRE,1963,13703430496.9909\nPre-demographic dividend,PRE,1964,12738674207.236\nPre-demographic dividend,PRE,1965,14368795335.6958\nPre-demographic dividend,PRE,1966,15799001649.5047\nPre-demographic dividend,PRE,1967,14899844603.9385\nPre-demographic dividend,PRE,1968,15708848569.17\nPre-demographic dividend,PRE,1969,17861212683.8571\nPre-demographic dividend,PRE,1970,21854100496.1789\nPre-demographic dividend,PRE,1971,21365342794.9241\nPre-demographic dividend,PRE,1972,24753198262.2301\nPre-demographic dividend,PRE,1973,30347820635.4717\nPre-demographic dividend,PRE,1974,43401484420.1474\nPre-demographic dividend,PRE,1975,49322046233.311\nPre-demographic dividend,PRE,1976,58044815995.8377\nPre-demographic dividend,PRE,1977,64367398025.2324\nPre-demographic dividend,PRE,1978,71557911568.6735\nPre-demographic dividend,PRE,1979,90472481235.2135\nPre-demographic dividend,PRE,1980,110634541736.74\nPre-demographic dividend,PRE,1981,99446432259.5959\nPre-demographic dividend,PRE,1982,96056301100.604\nPre-demographic dividend,PRE,1983,81949458261.8683\nPre-demographic dividend,PRE,1984,80839093482.9974\nPre-demographic dividend,PRE,1985,83918139386.1619\nPre-demographic dividend,PRE,1986,86468659533.8348\nPre-demographic dividend,PRE,1987,98640481086.672\nPre-demographic dividend,PRE,1988,101491555405.13\nPre-demographic dividend,PRE,1989,103556833461.826\nPre-demographic dividend,PRE,1990,166763060661.842\nPre-demographic dividend,PRE,1991,166247954701.582\nPre-demographic dividend,PRE,1992,151742111972.016\nPre-demographic dividend,PRE,1993,140181890979.475\nPre-demographic dividend,PRE,1994,127916911098.575\nPre-demographic dividend,PRE,1995,155730586475.494\nPre-demographic dividend,PRE,1996,173363219243.523\nPre-demographic dividend,PRE,1997,181117325058.646\nPre-demographic dividend,PRE,1998,179147671572.904\nPre-demographic dividend,PRE,1999,181503604085.815\nPre-demographic dividend,PRE,2000,211740549669.908\nPre-demographic dividend,PRE,2001,200656944157.417\nPre-demographic dividend,PRE,2002,236773864107.249\nPre-demographic dividend,PRE,2003,273883007962.629\nPre-demographic dividend,PRE,2004,332472934465.613\nPre-demographic dividend,PRE,2005,411274166611.459\nPre-demographic dividend,PRE,2006,514532516145.455\nPre-demographic dividend,PRE,2007,630727513486.316\nPre-demographic dividend,PRE,2008,805266578757.073\nPre-demographic dividend,PRE,2009,728798829297.898\nPre-demographic dividend,PRE,2010,1009752002887.76\nPre-demographic dividend,PRE,2011,1166443463426.99\nPre-demographic dividend,PRE,2012,1281751975521.8\nPre-demographic dividend,PRE,2013,1401710558076.06\nPre-demographic dividend,PRE,2014,1496971200328.02\nPre-demographic dividend,PRE,2015,1300758076730.85\nPre-demographic dividend,PRE,2016,1207787697187.08\nSmall states,SST,1970,7934786923.25918\nSmall states,SST,1971,8928415780.97344\nSmall states,SST,1972,10537522547.3878\nSmall states,SST,1973,13126879314.3455\nSmall states,SST,1974,20404459472.0772\nSmall states,SST,1975,23223444445.9691\nSmall states,SST,1976,26542237355.2539\nSmall states,SST,1977,30144018492.8051\nSmall states,SST,1978,32393448088.7416\nSmall states,SST,1979,40219637900.6332\nSmall states,SST,1980,53301689401.3476\nSmall states,SST,1981,55004873035.026\nSmall states,SST,1982,54713643064.0958\nSmall states,SST,1983,52815264029.9197\nSmall states,SST,1984,52234388082.1652\nSmall states,SST,1985,50161815201.5064\nSmall states,SST,1986,49006470880.2802\nSmall states,SST,1987,56064140276.8344\nSmall states,SST,1988,61865042439.9101\nSmall states,SST,1989,64248116732.2638\nSmall states,SST,1990,74599350281.0177\nSmall states,SST,1991,76109647373.8511\nSmall states,SST,1992,81024550302.5607\nSmall states,SST,1993,79207007623.0797\nSmall states,SST,1994,83473610537.821\nSmall states,SST,1995,94366389839.5722\nSmall states,SST,1996,100450040957.874\nSmall states,SST,1997,106278152760.984\nSmall states,SST,1998,106764286056.054\nSmall states,SST,1999,114558598920.374\nSmall states,SST,2000,127298727790.748\nSmall states,SST,2001,127600897387.118\nSmall states,SST,2002,136678803904.615\nSmall states,SST,2003,163313573580.072\nSmall states,SST,2004,196715975572.352\nSmall states,SST,2005,234865582860.024\nSmall states,SST,2006,272995523519.706\nSmall states,SST,2007,327512314572.132\nSmall states,SST,2008,394805442837.866\nSmall states,SST,2009,337922462226.829\nSmall states,SST,2010,388136053426.768\nSmall states,SST,2011,469603698352.062\nSmall states,SST,2012,492081568847.453\nSmall states,SST,2013,510668854077.463\nSmall states,SST,2014,524890495443.575\nSmall states,SST,2015,448061495601.159\nSmall states,SST,2016,437803722143.8\nSouth Asia,SAS,1960,46535882349.5353\nSouth Asia,SAS,1961,49639265057.888\nSouth Asia,SAS,1962,52969959487.1425\nSouth Asia,SAS,1963,59564124018.8379\nSouth Asia,SAS,1964,68207240591.276\nSouth Asia,SAS,1965,73302133559.0127\nSouth Asia,SAS,1966,61638106877.0695\nSouth Asia,SAS,1967,67859668331.0437\nSouth Asia,SAS,1968,71227636447.081\nSouth Asia,SAS,1969,78199356804.7733\nSouth Asia,SAS,1970,84723556607.1639\nSouth Asia,SAS,1971,90042201738.5115\nSouth Asia,SAS,1972,90429767477.282\nSouth Asia,SAS,1973,103394104059.765\nSouth Asia,SAS,1974,125253027719.799\nSouth Asia,SAS,1975,134416247897.745\nSouth Asia,SAS,1976,131167736496.194\nSouth Asia,SAS,1977,151656859736.336\nSouth Asia,SAS,1978,172583702486.213\nSouth Asia,SAS,1979,193318644211.614\nSouth Asia,SAS,1980,233086150890.282\nSouth Asia,SAS,1981,247106727889.629\nSouth Asia,SAS,1982,255647758194.56\nSouth Asia,SAS,1983,270545959907.086\nSouth Asia,SAS,1984,269355371620.121\nSouth Asia,SAS,1985,292874261367.599\nSouth Asia,SAS,1986,310147312221.755\nSouth Asia,SAS,1987,344338564247.538\nSouth Asia,SAS,1988,370046274628.889\nSouth Asia,SAS,1989,373481452092.266\nSouth Asia,SAS,1990,402050004575.523\nSouth Asia,SAS,1991,357724016271.72\nSouth Asia,SAS,1992,379830007892.912\nSouth Asia,SAS,1993,376239667457.364\nSouth Asia,SAS,1994,426649315425.987\nSouth Asia,SAS,1995,474034412840.605\nSouth Asia,SAS,1996,518624561849.029\nSouth Asia,SAS,1997,544005563623.853\nSouth Asia,SAS,1998,551628275407.375\nSouth Asia,SAS,1999,590948715637.076\nSouth Asia,SAS,2000,614756473708.65\nSouth Asia,SAS,2001,630828017007.045\nSouth Asia,SAS,2002,663250167513.213\nSouth Asia,SAS,2003,774466662241.158\nSouth Asia,SAS,2004,897926604903.83\nSouth Asia,SAS,2005,1028639938471.39\nSouth Asia,SAS,2006,1176253735122.35\nSouth Asia,SAS,2007,1488693557083.01\nSouth Asia,SAS,2008,1515641609304.52\nSouth Asia,SAS,2009,1665589062548.31\nSouth Asia,SAS,2010,2042141855806.9\nSouth Asia,SAS,2011,2272006394117.54\nSouth Asia,SAS,2012,2297909547839.05\nSouth Asia,SAS,2013,2356659793779.43\nSouth Asia,SAS,2014,2577691553786.73\nSouth Asia,SAS,2015,2682804385971.41\nSouth Asia,SAS,2016,2892480763179.47\nSouth Asia (IDA & IBRD),TSA,1960,46535882349.5353\nSouth Asia (IDA & IBRD),TSA,1961,49639265057.888\nSouth Asia (IDA & IBRD),TSA,1962,52969959487.1425\nSouth Asia (IDA & IBRD),TSA,1963,59564124018.8379\nSouth Asia (IDA & IBRD),TSA,1964,68207240591.2761\nSouth Asia (IDA & IBRD),TSA,1965,73302133559.0127\nSouth Asia (IDA & IBRD),TSA,1966,61638106877.0695\nSouth Asia (IDA & IBRD),TSA,1967,67859668331.0437\nSouth Asia (IDA & IBRD),TSA,1968,71227636447.081\nSouth Asia (IDA & IBRD),TSA,1969,78199356804.7733\nSouth Asia (IDA & IBRD),TSA,1970,84723556607.1639\nSouth Asia (IDA & IBRD),TSA,1971,90042201738.5116\nSouth Asia (IDA & IBRD),TSA,1972,90429767477.282\nSouth Asia (IDA & IBRD),TSA,1973,103394104059.765\nSouth Asia (IDA & IBRD),TSA,1974,125253027719.799\nSouth Asia (IDA & IBRD),TSA,1975,134416247897.745\nSouth Asia (IDA & IBRD),TSA,1976,131167736496.194\nSouth Asia (IDA & IBRD),TSA,1977,151656859736.336\nSouth Asia (IDA & IBRD),TSA,1978,172583702486.213\nSouth Asia (IDA & IBRD),TSA,1979,193318644211.614\nSouth Asia (IDA & IBRD),TSA,1980,233086150890.282\nSouth Asia (IDA & IBRD),TSA,1981,247106727889.629\nSouth Asia (IDA & IBRD),TSA,1982,255647758194.56\nSouth Asia (IDA & IBRD),TSA,1983,270545959907.086\nSouth Asia (IDA & IBRD),TSA,1984,269355371620.121\nSouth Asia (IDA & IBRD),TSA,1985,292874261367.599\nSouth Asia (IDA & IBRD),TSA,1986,310147312221.756\nSouth Asia (IDA & IBRD),TSA,1987,344338564247.538\nSouth Asia (IDA & IBRD),TSA,1988,370046274628.889\nSouth Asia (IDA & IBRD),TSA,1989,373481452092.266\nSouth Asia (IDA & IBRD),TSA,1990,402050004575.523\nSouth Asia (IDA & IBRD),TSA,1991,357724016271.72\nSouth Asia (IDA & IBRD),TSA,1992,379830007892.912\nSouth Asia (IDA & IBRD),TSA,1993,376239667457.364\nSouth Asia (IDA & IBRD),TSA,1994,426649315425.987\nSouth Asia (IDA & IBRD),TSA,1995,474034412840.605\nSouth Asia (IDA & IBRD),TSA,1996,518624561849.029\nSouth Asia (IDA & IBRD),TSA,1997,544005563623.853\nSouth Asia (IDA & IBRD),TSA,1998,551628275407.375\nSouth Asia (IDA & IBRD),TSA,1999,590948715637.076\nSouth Asia (IDA & IBRD),TSA,2000,614756473708.65\nSouth Asia (IDA & IBRD),TSA,2001,630828017007.045\nSouth Asia (IDA & IBRD),TSA,2002,663250167513.213\nSouth Asia (IDA & IBRD),TSA,2003,774466662241.158\nSouth Asia (IDA & IBRD),TSA,2004,897926604903.83\nSouth Asia (IDA & IBRD),TSA,2005,1028639938471.39\nSouth Asia (IDA & IBRD),TSA,2006,1176253735122.35\nSouth Asia (IDA & IBRD),TSA,2007,1488693557083.01\nSouth Asia (IDA & IBRD),TSA,2008,1515641609304.52\nSouth Asia (IDA & IBRD),TSA,2009,1665589062548.31\nSouth Asia (IDA & IBRD),TSA,2010,2042141855806.9\nSouth Asia (IDA & IBRD),TSA,2011,2272006394117.54\nSouth Asia (IDA & IBRD),TSA,2012,2297909547839.05\nSouth Asia (IDA & IBRD),TSA,2013,2356659793779.43\nSouth Asia (IDA & IBRD),TSA,2014,2577691553786.73\nSouth Asia (IDA & IBRD),TSA,2015,2682804385971.41\nSouth Asia (IDA & IBRD),TSA,2016,2892480763179.47\nSub-Saharan Africa,SSF,1960,30293454848.2105\nSub-Saharan Africa,SSF,1961,31465076775.5305\nSub-Saharan Africa,SSF,1962,34104849889.4766\nSub-Saharan Africa,SSF,1963,39106436783.5605\nSub-Saharan Africa,SSF,1964,38154669432.4731\nSub-Saharan Africa,SSF,1965,42511265775.887\nSub-Saharan Africa,SSF,1966,45892007068.4289\nSub-Saharan Africa,SSF,1967,45355789870.4112\nSub-Saharan Africa,SSF,1968,48511689901.6278\nSub-Saharan Africa,SSF,1969,55619101230.4241\nSub-Saharan Africa,SSF,1970,65441663595.2528\nSub-Saharan Africa,SSF,1971,66584540143.7838\nSub-Saharan Africa,SSF,1972,75015704819.2867\nSub-Saharan Africa,SSF,1973,95886132380.8826\nSub-Saharan Africa,SSF,1974,125666113209.184\nSub-Saharan Africa,SSF,1975,138201570744.764\nSub-Saharan Africa,SSF,1976,150065750976.478\nSub-Saharan Africa,SSF,1977,165419484974.18\nSub-Saharan Africa,SSF,1978,182804718774.66\nSub-Saharan Africa,SSF,1979,220049397934.685\nSub-Saharan Africa,SSF,1980,276325613788.158\nSub-Saharan Africa,SSF,1981,278746905466.921\nSub-Saharan Africa,SSF,1982,260407279021.102\nSub-Saharan Africa,SSF,1983,242438533416.832\nSub-Saharan Africa,SSF,1984,230830117319.801\nSub-Saharan Africa,SSF,1985,215111614796.826\nSub-Saharan Africa,SSF,1986,238400378521.777\nSub-Saharan Africa,SSF,1987,280930550942.236\nSub-Saharan Africa,SSF,1988,295523690332.111\nSub-Saharan Africa,SSF,1989,309182519793.758\nSub-Saharan Africa,SSF,1990,309656772694.718\nSub-Saharan Africa,SSF,1991,319139026333.247\nSub-Saharan Africa,SSF,1992,313874505716.532\nSub-Saharan Africa,SSF,1993,300038498591.01\nSub-Saharan Africa,SSF,1994,292189333027.886\nSub-Saharan Africa,SSF,1995,337411634256.534\nSub-Saharan Africa,SSF,1996,348828092040.987\nSub-Saharan Africa,SSF,1997,361006709281.608\nSub-Saharan Africa,SSF,1998,340572456123.532\nSub-Saharan Africa,SSF,1999,342916454500.386\nSub-Saharan Africa,SSF,2000,367679644790.853\nSub-Saharan Africa,SSF,2001,342345476693.071\nSub-Saharan Africa,SSF,2002,366969503176.655\nSub-Saharan Africa,SSF,2003,468505411662.939\nSub-Saharan Africa,SSF,2004,583461060225.834\nSub-Saharan Africa,SSF,2005,685226908393.033\nSub-Saharan Africa,SSF,2006,802075288542.163\nSub-Saharan Africa,SSF,2007,933327105483.533\nSub-Saharan Africa,SSF,2008,1067466936503.72\nSub-Saharan Africa,SSF,2009,1022616202357.64\nSub-Saharan Africa,SSF,2010,1365815003522.17\nSub-Saharan Africa,SSF,2011,1537231271076.8\nSub-Saharan Africa,SSF,2012,1612110026187.15\nSub-Saharan Africa,SSF,2013,1698517981177.86\nSub-Saharan Africa,SSF,2014,1780285270973.27\nSub-Saharan Africa,SSF,2015,1605874046218.37\nSub-Saharan Africa,SSF,2016,1512596044161.42\nSub-Saharan Africa (excluding high income),SSA,1960,30282688202.5902\nSub-Saharan Africa (excluding high income),SSA,1961,31454913188.7513\nSub-Saharan Africa (excluding high income),SSA,1962,34093744323.7056\nSub-Saharan Africa (excluding high income),SSA,1963,39094362715.9907\nSub-Saharan Africa (excluding high income),SSA,1964,38140805165.2228\nSub-Saharan Africa (excluding high income),SSA,1965,42497601517.868\nSub-Saharan Africa (excluding high income),SSA,1966,45877717974.5334\nSub-Saharan Africa (excluding high income),SSA,1967,45341229114.3769\nSub-Saharan Africa (excluding high income),SSA,1968,48498076332.2064\nSub-Saharan Africa (excluding high income),SSA,1969,55605752590.73\nSub-Saharan Africa (excluding high income),SSA,1970,65427015247.3062\nSub-Saharan Africa (excluding high income),SSA,1971,66565970097.9985\nSub-Saharan Africa (excluding high income),SSA,1972,74988052256.6631\nSub-Saharan Africa (excluding high income),SSA,1973,95853382652.8724\nSub-Saharan Africa (excluding high income),SSA,1974,125629150789.938\nSub-Saharan Africa (excluding high income),SSA,1975,138160503656.034\nSub-Saharan Africa (excluding high income),SSA,1976,150024157646.685\nSub-Saharan Africa (excluding high income),SSA,1977,165362050849.068\nSub-Saharan Africa (excluding high income),SSA,1978,182725066759.896\nSub-Saharan Africa (excluding high income),SSA,1979,219925937375.486\nSub-Saharan Africa (excluding high income),SSA,1980,276184722336.96\nSub-Saharan Africa (excluding high income),SSA,1981,278597853235.486\nSub-Saharan Africa (excluding high income),SSA,1982,260264589147.935\nSub-Saharan Africa (excluding high income),SSA,1983,242295997168.792\nSub-Saharan Africa (excluding high income),SSA,1984,230681896256.8\nSub-Saharan Africa (excluding high income),SSA,1985,214943487938.231\nSub-Saharan Africa (excluding high income),SSA,1986,238192518260.502\nSub-Saharan Africa (excluding high income),SSA,1987,280681131373.112\nSub-Saharan Africa (excluding high income),SSA,1988,295238997460.339\nSub-Saharan Africa (excluding high income),SSA,1989,308876668854.173\nSub-Saharan Africa (excluding high income),SSA,1990,309286253188.394\nSub-Saharan Africa (excluding high income),SSA,1991,318762752488.883\nSub-Saharan Africa (excluding high income),SSA,1992,313438008904.04\nSub-Saharan Africa (excluding high income),SSA,1993,299561111282.797\nSub-Saharan Africa (excluding high income),SSA,1994,291699180590.638\nSub-Saharan Africa (excluding high income),SSA,1995,336899828856.759\nSub-Saharan Africa (excluding high income),SSA,1996,348321606632.535\nSub-Saharan Africa (excluding high income),SSA,1997,360439668356.04\nSub-Saharan Africa (excluding high income),SSA,1998,339959239241.738\nSub-Saharan Africa (excluding high income),SSA,1999,342288453546.952\nSub-Saharan Africa (excluding high income),SSA,2000,367060072093.125\nSub-Saharan Africa (excluding high income),SSA,2001,341718203479.383\nSub-Saharan Africa (excluding high income),SSA,2002,366266226628.11\nSub-Saharan Africa (excluding high income),SSA,2003,467794698562.701\nSub-Saharan Africa (excluding high income),SSA,2004,582616004511.318\nSub-Saharan Africa (excluding high income),SSA,2005,684301913492.808\nSub-Saharan Africa (excluding high income),SSA,2006,801052727346.296\nSub-Saharan Africa (excluding high income),SSA,2007,932288287192.586\nSub-Saharan Africa (excluding high income),SSA,2008,1066496449692.34\nSub-Saharan Africa (excluding high income),SSA,2009,1021766938427.26\nSub-Saharan Africa (excluding high income),SSA,2010,1364845197859.64\nSub-Saharan Africa (excluding high income),SSA,2011,1536165615272.17\nSub-Saharan Africa (excluding high income),SSA,2012,1610975894781.15\nSub-Saharan Africa (excluding high income),SSA,2013,1697106498117.33\nSub-Saharan Africa (excluding high income),SSA,2014,1778862267354.27\nSub-Saharan Africa (excluding high income),SSA,2015,1604435981606.03\nSub-Saharan Africa (excluding high income),SSA,2016,1511168024853.82\nSub-Saharan Africa (IDA & IBRD countries),TSS,1960,30293454848.2105\nSub-Saharan Africa (IDA & IBRD countries),TSS,1961,31465076775.5305\nSub-Saharan Africa (IDA & IBRD countries),TSS,1962,34104849889.4766\nSub-Saharan Africa (IDA & IBRD countries),TSS,1963,39106436783.5605\nSub-Saharan Africa (IDA & IBRD countries),TSS,1964,38154669432.4731\nSub-Saharan Africa (IDA & IBRD countries),TSS,1965,42511265775.8869\nSub-Saharan Africa (IDA & IBRD countries),TSS,1966,45892007068.4288\nSub-Saharan Africa (IDA & IBRD countries),TSS,1967,45355789870.4112\nSub-Saharan Africa (IDA & IBRD countries),TSS,1968,48511689901.6278\nSub-Saharan Africa (IDA & IBRD countries),TSS,1969,55619101230.4241\nSub-Saharan Africa (IDA & IBRD countries),TSS,1970,65441663595.2527\nSub-Saharan Africa (IDA & IBRD countries),TSS,1971,66584540143.7838\nSub-Saharan Africa (IDA & IBRD countries),TSS,1972,75015704819.2867\nSub-Saharan Africa (IDA & IBRD countries),TSS,1973,95886132380.8826\nSub-Saharan Africa (IDA & IBRD countries),TSS,1974,125666113209.184\nSub-Saharan Africa (IDA & IBRD countries),TSS,1975,138201570744.764\nSub-Saharan Africa (IDA & IBRD countries),TSS,1976,150065750976.478\nSub-Saharan Africa (IDA & IBRD countries),TSS,1977,165419484974.18\nSub-Saharan Africa (IDA & IBRD countries),TSS,1978,182804718774.66\nSub-Saharan Africa (IDA & IBRD countries),TSS,1979,220049397934.685\nSub-Saharan Africa (IDA & IBRD countries),TSS,1980,276325613788.157\nSub-Saharan Africa (IDA & IBRD countries),TSS,1981,278746905466.921\nSub-Saharan Africa (IDA & IBRD countries),TSS,1982,260407279021.102\nSub-Saharan Africa (IDA & IBRD countries),TSS,1983,242438533416.831\nSub-Saharan Africa (IDA & IBRD countries),TSS,1984,230830117319.8\nSub-Saharan Africa (IDA & IBRD countries),TSS,1985,215111614796.825\nSub-Saharan Africa (IDA & IBRD countries),TSS,1986,238400378521.777\nSub-Saharan Africa (IDA & IBRD countries),TSS,1987,280930550942.236\nSub-Saharan Africa (IDA & IBRD countries),TSS,1988,295523690332.111\nSub-Saharan Africa (IDA & IBRD countries),TSS,1989,309182519793.757\nSub-Saharan Africa (IDA & IBRD countries),TSS,1990,309656772694.718\nSub-Saharan Africa (IDA & IBRD countries),TSS,1991,319139026333.246\nSub-Saharan Africa (IDA & IBRD countries),TSS,1992,313874505716.532\nSub-Saharan Africa (IDA & IBRD countries),TSS,1993,300038498591.01\nSub-Saharan Africa (IDA & IBRD countries),TSS,1994,292189333027.886\nSub-Saharan Africa (IDA & IBRD countries),TSS,1995,337411634256.534\nSub-Saharan Africa (IDA & IBRD countries),TSS,1996,348828092040.987\nSub-Saharan Africa (IDA & IBRD countries),TSS,1997,361006709281.608\nSub-Saharan Africa (IDA & IBRD countries),TSS,1998,340572456123.532\nSub-Saharan Africa (IDA & IBRD countries),TSS,1999,342916454500.386\nSub-Saharan Africa (IDA & IBRD countries),TSS,2000,367679644790.853\nSub-Saharan Africa (IDA & IBRD countries),TSS,2001,342345476693.071\nSub-Saharan Africa (IDA & IBRD countries),TSS,2002,366969503176.656\nSub-Saharan Africa (IDA & IBRD countries),TSS,2003,468505411662.939\nSub-Saharan Africa (IDA & IBRD countries),TSS,2004,583461060225.834\nSub-Saharan Africa (IDA & IBRD countries),TSS,2005,685226908393.033\nSub-Saharan Africa (IDA & IBRD countries),TSS,2006,802075288542.163\nSub-Saharan Africa (IDA & IBRD countries),TSS,2007,933327105483.534\nSub-Saharan Africa (IDA & IBRD countries),TSS,2008,1067466936503.72\nSub-Saharan Africa (IDA & IBRD countries),TSS,2009,1022616202357.64\nSub-Saharan Africa (IDA & IBRD countries),TSS,2010,1365815003522.17\nSub-Saharan Africa (IDA & IBRD countries),TSS,2011,1537231271076.8\nSub-Saharan Africa (IDA & IBRD countries),TSS,2012,1612110026187.15\nSub-Saharan Africa (IDA & IBRD countries),TSS,2013,1698517981177.86\nSub-Saharan Africa (IDA & IBRD countries),TSS,2014,1780285270973.27\nSub-Saharan Africa (IDA & IBRD countries),TSS,2015,1605874046218.37\nSub-Saharan Africa (IDA & IBRD countries),TSS,2016,1512596044161.42\nUpper middle income,UMC,1960,217197228589.06\nUpper middle income,UMC,1961,198161709253.157\nUpper middle income,UMC,1962,208387681588.376\nUpper middle income,UMC,1963,218097128148.794\nUpper middle income,UMC,1964,246118229644.675\nUpper middle income,UMC,1965,274661068385.749\nUpper middle income,UMC,1966,301788034391.807\nUpper middle income,UMC,1967,306048687590.864\nUpper middle income,UMC,1968,322080862813.56\nUpper middle income,UMC,1969,360346863732.29\nUpper middle income,UMC,1970,394709749267.255\nUpper middle income,UMC,1971,432717473893.993\nUpper middle income,UMC,1972,494628928337.531\nUpper middle income,UMC,1973,642136260560.19\nUpper middle income,UMC,1974,822212508130.015\nUpper middle income,UMC,1975,906907625571.622\nUpper middle income,UMC,1976,984879011514.869\nUpper middle income,UMC,1977,1099892763408.74\nUpper middle income,UMC,1978,1175436105563.13\nUpper middle income,UMC,1979,1426455337349\nUpper middle income,UMC,1980,1630708204057.47\nUpper middle income,UMC,1981,1773940105596.22\nUpper middle income,UMC,1982,1749432551997.41\nUpper middle income,UMC,1983,1724507334399.32\nUpper middle income,UMC,1984,1770298964147.93\nUpper middle income,UMC,1985,1866998100513.03\nUpper middle income,UMC,1986,1949717163087.08\nUpper middle income,UMC,1987,1947815210541.88\nUpper middle income,UMC,1988,2143321393959.61\nUpper middle income,UMC,1989,2330509907218.71\nUpper middle income,UMC,1990,2667998768468.1\nUpper middle income,UMC,1991,2945865006368.94\nUpper middle income,UMC,1992,2871277482764.44\nUpper middle income,UMC,1993,3115092888404.34\nUpper middle income,UMC,1994,3394081761536.28\nUpper middle income,UMC,1995,3790084357284.85\nUpper middle income,UMC,1996,4119734461208.99\nUpper middle income,UMC,1997,4389821145553.8\nUpper middle income,UMC,1998,4336843745142.04\nUpper middle income,UMC,1999,4105116372238.13\nUpper middle income,UMC,2000,4516717359655\nUpper middle income,UMC,2001,4570269255613.37\nUpper middle income,UMC,2002,4585341852437.76\nUpper middle income,UMC,2003,5167481933006.5\nUpper middle income,UMC,2004,6213674550938.77\nUpper middle income,UMC,2005,7480336164014.47\nUpper middle income,UMC,2006,8894393230290.41\nUpper middle income,UMC,2007,11065382151621.8\nUpper middle income,UMC,2008,13528506574524.2\nUpper middle income,UMC,2009,13027040456100\nUpper middle income,UMC,2010,15792230570440.2\nUpper middle income,UMC,2011,18897054524211\nUpper middle income,UMC,2012,20194427120059.2\nUpper middle income,UMC,2013,21498865852640\nUpper middle income,UMC,2014,22212201918323.9\nUpper middle income,UMC,2015,20772440074303.6\nUpper middle income,UMC,2016,20623856301266.3\nWorld,WLD,1960,1366678314500.11\nWorld,WLD,1961,1421787954650.66\nWorld,WLD,1962,1526955368819.35\nWorld,WLD,1963,1643751761478.77\nWorld,WLD,1964,1800795995209.43\nWorld,WLD,1965,1961780296080.77\nWorld,WLD,1966,2128450484917.02\nWorld,WLD,1967,2264600480895.74\nWorld,WLD,1968,2443223914097.19\nWorld,WLD,1969,2690797713906.75\nWorld,WLD,1970,2957799684034.88\nWorld,WLD,1971,3266907090008.42\nWorld,WLD,1972,3767673874129.39\nWorld,WLD,1973,4591345929540.29\nWorld,WLD,1974,5296031606150.48\nWorld,WLD,1975,5897205371168.41\nWorld,WLD,1976,6416473081055.61\nWorld,WLD,1977,7257626963722.61\nWorld,WLD,1978,8542924735220.41\nWorld,WLD,1979,9925897437975.24\nWorld,WLD,1980,11172203734232.9\nWorld,WLD,1981,11464351513520.9\nWorld,WLD,1982,11363646516060.8\nWorld,WLD,1983,11623710624558.5\nWorld,WLD,1984,12065068062766.6\nWorld,WLD,1985,12689154578406.4\nWorld,WLD,1986,15022583231149.5\nWorld,WLD,1987,17091694967928.9\nWorld,WLD,1988,19140813953244.6\nWorld,WLD,1989,20092825106288.4\nWorld,WLD,1990,22595007714784.7\nWorld,WLD,1991,23927631710502.6\nWorld,WLD,1992,25409951568921.6\nWorld,WLD,1993,25859044482204.5\nWorld,WLD,1994,27767511728269.1\nWorld,WLD,1995,30872586998056.7\nWorld,WLD,1996,31552679853240.2\nWorld,WLD,1997,31435387611565.4\nWorld,WLD,1998,31338780339102.7\nWorld,WLD,1999,32510834041730.3\nWorld,WLD,2000,33566568243507\nWorld,WLD,2001,33354548715888.5\nWorld,WLD,2002,34635964364193.1\nWorld,WLD,2003,38894058718266\nWorld,WLD,2004,43804823746956.6\nWorld,WLD,2005,47428894542015.9\nWorld,WLD,2006,51363239608528.7\nWorld,WLD,2007,57858970551966.6\nWorld,WLD,2008,63461809858683.9\nWorld,WLD,2009,60168346976208.9\nWorld,WLD,2010,65954532001568.7\nWorld,WLD,2011,73279862292629\nWorld,WLD,2012,74889946508917.8\nWorld,WLD,2013,76990857251851\nWorld,WLD,2014,79049230590610.9\nWorld,WLD,2015,74757745150689.1\nWorld,WLD,2016,75845109381590.5\nAfghanistan,AFG,1960,537777811.111111\nAfghanistan,AFG,1961,548888895.555556\nAfghanistan,AFG,1962,546666677.777778\nAfghanistan,AFG,1963,751111191.111111\nAfghanistan,AFG,1964,800000044.444444\nAfghanistan,AFG,1965,1006666637.77778\nAfghanistan,AFG,1966,1399999966.66667\nAfghanistan,AFG,1967,1673333417.77778\nAfghanistan,AFG,1968,1373333366.66667\nAfghanistan,AFG,1969,1408888922.22222\nAfghanistan,AFG,1970,1748886595.55556\nAfghanistan,AFG,1971,1831108971.11111\nAfghanistan,AFG,1972,1595555475.55556\nAfghanistan,AFG,1973,1733333264.44444\nAfghanistan,AFG,1974,2155555497.77778\nAfghanistan,AFG,1975,2366666615.55556\nAfghanistan,AFG,1976,2555555566.66667\nAfghanistan,AFG,1977,2953333417.77778\nAfghanistan,AFG,1978,3300000108.88889\nAfghanistan,AFG,1979,3697940409.61098\nAfghanistan,AFG,1980,3641723321.99546\nAfghanistan,AFG,1981,3478787909.09091\nAfghanistan,AFG,2001,2461665937.89386\nAfghanistan,AFG,2002,4128820723.04713\nAfghanistan,AFG,2003,4583644246.48061\nAfghanistan,AFG,2004,5285465685.86423\nAfghanistan,AFG,2005,6275073571.54659\nAfghanistan,AFG,2006,7057598406.61553\nAfghanistan,AFG,2007,9843842455.48323\nAfghanistan,AFG,2008,10190529882.4878\nAfghanistan,AFG,2009,12486943505.7381\nAfghanistan,AFG,2010,15936800636.2487\nAfghanistan,AFG,2011,17930239399.8149\nAfghanistan,AFG,2012,20536542736.7297\nAfghanistan,AFG,2013,20046334303.9661\nAfghanistan,AFG,2014,20050189881.6659\nAfghanistan,AFG,2015,19215562179.0117\nAfghanistan,AFG,2016,19469022207.6852\nAlbania,ALB,1984,1924242453.00793\nAlbania,ALB,1985,1965384586.2409\nAlbania,ALB,1986,2173750012.5\nAlbania,ALB,1987,2156624900\nAlbania,ALB,1988,2126000000\nAlbania,ALB,1989,2335124987.5\nAlbania,ALB,1990,2101624962.5\nAlbania,ALB,1991,1139166645.83333\nAlbania,ALB,1992,709452583.880319\nAlbania,ALB,1993,1228071037.84446\nAlbania,ALB,1994,1985673798.10258\nAlbania,ALB,1995,2424499009.14264\nAlbania,ALB,1996,3314898291.75235\nAlbania,ALB,1997,2359903108.38446\nAlbania,ALB,1998,2707123772.16195\nAlbania,ALB,1999,3414760915.27878\nAlbania,ALB,2000,3632043907.97733\nAlbania,ALB,2001,4060758804.12084\nAlbania,ALB,2002,4435078647.74817\nAlbania,ALB,2003,5746945912.58082\nAlbania,ALB,2004,7314865175.6199\nAlbania,ALB,2005,8158548716.68554\nAlbania,ALB,2006,8992642348.7871\nAlbania,ALB,2007,10701011896.7708\nAlbania,ALB,2008,12881352687.7773\nAlbania,ALB,2009,12044212903.8168\nAlbania,ALB,2010,11926953258.916\nAlbania,ALB,2011,12890867538.5302\nAlbania,ALB,2012,12319784787.2987\nAlbania,ALB,2013,12776277515.48\nAlbania,ALB,2014,13228244357.1813\nAlbania,ALB,2015,11335264966.561\nAlbania,ALB,2016,11863865978.0942\nAlgeria,DZA,1960,2723648551.75208\nAlgeria,DZA,1961,2434776645.73628\nAlgeria,DZA,1962,2001468867.73344\nAlgeria,DZA,1963,2703014867.32834\nAlgeria,DZA,1964,2909351792.58659\nAlgeria,DZA,1965,3136258896.9233\nAlgeria,DZA,1966,3039834558.74906\nAlgeria,DZA,1967,3370843065.76735\nAlgeria,DZA,1968,3852115816.97758\nAlgeria,DZA,1969,4257218772.15369\nAlgeria,DZA,1970,4863487492.65763\nAlgeria,DZA,1971,5077222366.97472\nAlgeria,DZA,1972,6761786386.54713\nAlgeria,DZA,1973,8715105930.49101\nAlgeria,DZA,1974,13209713643.3219\nAlgeria,DZA,1975,15557934268.4965\nAlgeria,DZA,1976,17728347374.994\nAlgeria,DZA,1977,20971901273.271\nAlgeria,DZA,1978,26364491313.4471\nAlgeria,DZA,1979,33243422157.6311\nAlgeria,DZA,1980,42345277342.0195\nAlgeria,DZA,1981,44348672667.8715\nAlgeria,DZA,1982,45207088715.6483\nAlgeria,DZA,1983,48801369800.3675\nAlgeria,DZA,1984,53698278905.9678\nAlgeria,DZA,1985,57937868670.1937\nAlgeria,DZA,1986,63696301892.8116\nAlgeria,DZA,1987,66742267773.1959\nAlgeria,DZA,1988,59089067187.3943\nAlgeria,DZA,1989,55631489801.5508\nAlgeria,DZA,1990,62045099642.7774\nAlgeria,DZA,1991,45715367087.1001\nAlgeria,DZA,1992,48003298223.1178\nAlgeria,DZA,1993,49946455210.966\nAlgeria,DZA,1994,42542571305.5136\nAlgeria,DZA,1995,41764052457.8814\nAlgeria,DZA,1996,46941496779.8499\nAlgeria,DZA,1997,48177862501.9495\nAlgeria,DZA,1998,48187747528.899\nAlgeria,DZA,1999,48640574566.6476\nAlgeria,DZA,2000,54790245600.5846\nAlgeria,DZA,2001,54744714396.1666\nAlgeria,DZA,2002,56760288973.6703\nAlgeria,DZA,2003,67863829880.4832\nAlgeria,DZA,2004,85324998813.604\nAlgeria,DZA,2005,103198228458.588\nAlgeria,DZA,2006,117027304746.54\nAlgeria,DZA,2007,134977087734.008\nAlgeria,DZA,2008,171000691877.714\nAlgeria,DZA,2009,137211039898.193\nAlgeria,DZA,2010,161207268655.392\nAlgeria,DZA,2011,200019057307.655\nAlgeria,DZA,2012,209058991952.125\nAlgeria,DZA,2013,209755003250.664\nAlgeria,DZA,2014,213810022462.428\nAlgeria,DZA,2015,165874330876.321\nAlgeria,DZA,2016,159049096745.249\nAmerican Samoa,ASM,2002,514000000\nAmerican Samoa,ASM,2003,527000000\nAmerican Samoa,ASM,2004,512000000\nAmerican Samoa,ASM,2005,503000000\nAmerican Samoa,ASM,2006,496000000\nAmerican Samoa,ASM,2007,520000000\nAmerican Samoa,ASM,2008,563000000\nAmerican Samoa,ASM,2009,678000000\nAmerican Samoa,ASM,2010,576000000\nAmerican Samoa,ASM,2011,574000000\nAmerican Samoa,ASM,2012,644000000\nAmerican Samoa,ASM,2013,641000000\nAmerican Samoa,ASM,2014,643000000\nAmerican Samoa,ASM,2015,659000000\nAmerican Samoa,ASM,2016,658000000\nAndorra,AND,1970,78619206.0850963\nAndorra,AND,1971,89409820.3592814\nAndorra,AND,1972,113408231.944085\nAndorra,AND,1973,150820102.798401\nAndorra,AND,1974,186558696.279204\nAndorra,AND,1975,220127246.376812\nAndorra,AND,1976,227281024.620741\nAndorra,AND,1977,254020153.340635\nAndorra,AND,1978,308008897.569444\nAndorra,AND,1979,411578334.159643\nAndorra,AND,1980,446416105.825017\nAndorra,AND,1981,388958731.302938\nAndorra,AND,1982,375895956.383462\nAndorra,AND,1983,327861832.946636\nAndorra,AND,1984,330070689.298282\nAndorra,AND,1985,346737964.774951\nAndorra,AND,1986,482000594.03588\nAndorra,AND,1987,611316399.407088\nAndorra,AND,1988,721425939.15155\nAndorra,AND,1989,795449332.396346\nAndorra,AND,1990,1029048481.88051\nAndorra,AND,1991,1106928582.86629\nAndorra,AND,1992,1210013651.87713\nAndorra,AND,1993,1007025755.00065\nAndorra,AND,1994,1017549124.33238\nAndorra,AND,1995,1178738991.19295\nAndorra,AND,1996,1223945356.62682\nAndorra,AND,1997,1180597272.72727\nAndorra,AND,1998,1211932397.81713\nAndorra,AND,1999,1239876305.13531\nAndorra,AND,2000,1434429703.33518\nAndorra,AND,2001,1496912751.67785\nAndorra,AND,2002,1733116883.11688\nAndorra,AND,2003,2398645598.19413\nAndorra,AND,2004,2935659299.72684\nAndorra,AND,2005,3255789080.96008\nAndorra,AND,2006,3543256805.92147\nAndorra,AND,2007,4016972351.49192\nAndorra,AND,2008,4007353156.58415\nAndorra,AND,2009,3660530702.97305\nAndorra,AND,2010,3355695364.23841\nAndorra,AND,2011,3442062830.13622\nAndorra,AND,2012,3164615186.94591\nAndorra,AND,2013,3281585236.32501\nAndorra,AND,2014,3350736367.25488\nAndorra,AND,2015,2811489408.89431\nAndorra,AND,2016,2858517699.11504\nAngola,AGO,1985,6684491978.60963\nAngola,AGO,1986,6684491978.60963\nAngola,AGO,1987,6684491978.60963\nAngola,AGO,1988,6684491978.60963\nAngola,AGO,1989,10026737967.9144\nAngola,AGO,1990,10026737967.9144\nAngola,AGO,1991,12118610904.2251\nAngola,AGO,1992,5684291718.77106\nAngola,AGO,1993,5278182970.79618\nAngola,AGO,1994,4059352153.05368\nAngola,AGO,1995,5039552482.42778\nAngola,AGO,1996,7526446605.51712\nAngola,AGO,1997,7648377412.83277\nAngola,AGO,1998,6445041824.66621\nAngola,AGO,1999,6152922942.98032\nAngola,AGO,2000,9129594818.60749\nAngola,AGO,2001,8936063723.20121\nAngola,AGO,2002,12497346669.6684\nAngola,AGO,2003,14188949190.618\nAngola,AGO,2004,19640848728.8937\nAngola,AGO,2005,28233712830.9035\nAngola,AGO,2006,41789478661.3096\nAngola,AGO,2007,60448921272.2326\nAngola,AGO,2008,84178032716.0971\nAngola,AGO,2009,75492384801.3695\nAngola,AGO,2010,82470913120.7314\nAngola,AGO,2011,104115923082.737\nAngola,AGO,2012,115398371427.673\nAngola,AGO,2013,124912063308.202\nAngola,AGO,2014,126776874216.703\nAngola,AGO,2015,102962245246.708\nAngola,AGO,2016,95335111741.2025\nAntigua and Barbuda,ATG,1977,77496740.7407407\nAntigua and Barbuda,ATG,1978,87879333.3333333\nAntigua and Barbuda,ATG,1979,109079962.962963\nAntigua and Barbuda,ATG,1980,131431037.037037\nAntigua and Barbuda,ATG,1981,147841740.740741\nAntigua and Barbuda,ATG,1982,164369296.296296\nAntigua and Barbuda,ATG,1983,182144111.111111\nAntigua and Barbuda,ATG,1984,208372851.851852\nAntigua and Barbuda,ATG,1985,240923925.925926\nAntigua and Barbuda,ATG,1986,290440148.148148\nAntigua and Barbuda,ATG,1987,337174851.851852\nAntigua and Barbuda,ATG,1988,398637740.740741\nAntigua and Barbuda,ATG,1989,438794777.777778\nAntigua and Barbuda,ATG,1990,459469074.074074\nAntigua and Barbuda,ATG,1991,481706333.333333\nAntigua and Barbuda,ATG,1992,499281148.148148\nAntigua and Barbuda,ATG,1993,535172777.777778\nAntigua and Barbuda,ATG,1994,589429592.592593\nAntigua and Barbuda,ATG,1995,577280740.740741\nAntigua and Barbuda,ATG,1996,633730629.62963\nAntigua and Barbuda,ATG,1997,680617111.111111\nAntigua and Barbuda,ATG,1998,727860592.592593\nAntigua and Barbuda,ATG,1999,766198925.925926\nAntigua and Barbuda,ATG,2000,830158768.888889\nAntigua and Barbuda,ATG,2001,800740257.407407\nAntigua and Barbuda,ATG,2002,814615323.703704\nAntigua and Barbuda,ATG,2003,855643099.62963\nAntigua and Barbuda,ATG,2004,919577142.592592\nAntigua and Barbuda,ATG,2005,1022191294.07407\nAntigua and Barbuda,ATG,2006,1157005441.48148\nAntigua and Barbuda,ATG,2007,1311401318.88889\nAntigua and Barbuda,ATG,2008,1368431037.03704\nAntigua and Barbuda,ATG,2009,1224253000\nAntigua and Barbuda,ATG,2010,1152469074.07407\nAntigua and Barbuda,ATG,2011,1142042925.92593\nAntigua and Barbuda,ATG,2012,1211411703.7037\nAntigua and Barbuda,ATG,2013,1192925407.40741\nAntigua and Barbuda,ATG,2014,1280133333.33333\nAntigua and Barbuda,ATG,2015,1364863037.03704\nAntigua and Barbuda,ATG,2016,1460144703.7037\nArgentina,ARG,1962,24450604877.6081\nArgentina,ARG,1963,18272123664.4715\nArgentina,ARG,1964,25605249381.7597\nArgentina,ARG,1965,28344705966.6389\nArgentina,ARG,1966,28630474727.9023\nArgentina,ARG,1967,24256667553.2569\nArgentina,ARG,1968,26436857247.4982\nArgentina,ARG,1969,31256284543.6155\nArgentina,ARG,1970,31584210365.5447\nArgentina,ARG,1971,33293199095.4881\nArgentina,ARG,1972,34733000536.2862\nArgentina,ARG,1973,52544000116.9037\nArgentina,ARG,1974,72436777342.4554\nArgentina,ARG,1975,52438647921.9226\nArgentina,ARG,1976,51169499890.7722\nArgentina,ARG,1977,56781000100.9448\nArgentina,ARG,1978,58082870156.2634\nArgentina,ARG,1979,69252328953.3789\nArgentina,ARG,1980,76961923741.9478\nArgentina,ARG,1981,78676842366.4213\nArgentina,ARG,1982,84307486836.724\nArgentina,ARG,1983,103979106777.911\nArgentina,ARG,1984,79092001998.032\nArgentina,ARG,1985,88416668900.2596\nArgentina,ARG,1986,110934442762.694\nArgentina,ARG,1987,111106191358.197\nArgentina,ARG,1988,126206817196.091\nArgentina,ARG,1989,76636898036.4712\nArgentina,ARG,1990,141352368714.691\nArgentina,ARG,1991,189719984268.485\nArgentina,ARG,1992,228788617201.696\nArgentina,ARG,1993,236741715015.015\nArgentina,ARG,1994,257440000000\nArgentina,ARG,1995,258031750000\nArgentina,ARG,1996,272149750000\nArgentina,ARG,1997,292859000000\nArgentina,ARG,1998,298948250000\nArgentina,ARG,1999,283523000000\nArgentina,ARG,2000,284203750000\nArgentina,ARG,2001,268696750000\nArgentina,ARG,2002,97724004251.8602\nArgentina,ARG,2003,127586973492.177\nArgentina,ARG,2004,164657930452.787\nArgentina,ARG,2005,198737095012.282\nArgentina,ARG,2006,232557260817.308\nArgentina,ARG,2007,287530508430.568\nArgentina,ARG,2008,361558037110.419\nArgentina,ARG,2009,332976484577.619\nArgentina,ARG,2010,423627422092.49\nArgentina,ARG,2011,530163281574.658\nArgentina,ARG,2012,545982375701.128\nArgentina,ARG,2013,552025140252.246\nArgentina,ARG,2014,526319673731.638\nArgentina,ARG,2015,584711485367.267\nArgentina,ARG,2016,545476103427.247\nArmenia,ARM,1990,2256838858.42714\nArmenia,ARM,1991,2068526521.90299\nArmenia,ARM,1992,1272577456.12712\nArmenia,ARM,1993,1201313201.01272\nArmenia,ARM,1994,1315158670.28285\nArmenia,ARM,1995,1468317350.06841\nArmenia,ARM,1996,1596968913.27897\nArmenia,ARM,1997,1639492424.36472\nArmenia,ARM,1998,1893726437.26462\nArmenia,ARM,1999,1845482181.44801\nArmenia,ARM,2000,1911563665.39006\nArmenia,ARM,2001,2118467913.37873\nArmenia,ARM,2002,2376335048.39976\nArmenia,ARM,2003,2807061008.69084\nArmenia,ARM,2004,3576615240.41616\nArmenia,ARM,2005,4900469950.09033\nArmenia,ARM,2006,6384451606.1421\nArmenia,ARM,2007,9206301700.39619\nArmenia,ARM,2008,11662040713.8753\nArmenia,ARM,2009,8647936747.98704\nArmenia,ARM,2010,9260284937.79782\nArmenia,ARM,2011,10142111334.4961\nArmenia,ARM,2012,10619320048.5857\nArmenia,ARM,2013,11121465767.4067\nArmenia,ARM,2014,11609512939.7543\nArmenia,ARM,2015,10553337672.9872\nArmenia,ARM,2016,10572298341.5618\nAruba,ABW,1994,1330167597.76536\nAruba,ABW,1995,1320670391.06145\nAruba,ABW,1996,1379888268.15642\nAruba,ABW,1997,1531843575.41899\nAruba,ABW,1998,1665363128.49162\nAruba,ABW,1999,1722798882.68156\nAruba,ABW,2000,1873452513.96648\nAruba,ABW,2001,1920262569.8324\nAruba,ABW,2002,1941094972.06704\nAruba,ABW,2003,2021301675.97765\nAruba,ABW,2004,2228279329.60894\nAruba,ABW,2005,2331005586.59218\nAruba,ABW,2006,2421474860.3352\nAruba,ABW,2007,2623726256.98324\nAruba,ABW,2008,2791960893.85475\nAruba,ABW,2009,2498932960.89385\nAruba,ABW,2010,2467703910.61453\nAruba,ABW,2011,2584463687.15084\nAustralia,AUS,1960,18593347519.3191\nAustralia,AUS,1961,19666256019.7111\nAustralia,AUS,1962,19911524246.8362\nAustralia,AUS,1963,21527606674.8796\nAustralia,AUS,1964,23787658192.4068\nAustralia,AUS,1965,25962593795.4978\nAustralia,AUS,1966,27288610146.713\nAustralia,AUS,1967,30421099787.2102\nAustralia,AUS,1968,32687870982.1929\nAustralia,AUS,1969,36659200358.3828\nAustralia,AUS,1970,41304737372.6061\nAustralia,AUS,1971,45183111210.6619\nAustralia,AUS,1972,52003504672.8972\nAustralia,AUS,1973,63782190903.2671\nAustralia,AUS,1974,88906411201.1791\nAustralia,AUS,1975,97226546497.3372\nAustralia,AUS,1976,104974158578.092\nAustralia,AUS,1977,110266116081.67\nAustralia,AUS,1978,118400631626.438\nAustralia,AUS,1979,134793820288.538\nAustralia,AUS,1980,149887465181.059\nAustralia,AUS,1981,176804829908.278\nAustralia,AUS,1982,193954540439.148\nAustralia,AUS,1983,177176415535.798\nAustralia,AUS,1984,193503894222.061\nAustralia,AUS,1985,180470967247.066\nAustralia,AUS,1986,182281757134.863\nAustralia,AUS,1987,189375992588.671\nAustralia,AUS,1988,236135768335.274\nAustralia,AUS,1989,299941372852.374\nAustralia,AUS,1990,311425933051.174\nAustralia,AUS,1991,326068597441.331\nAustralia,AUS,1992,325692532492.502\nAustralia,AUS,1993,312372821810.006\nAustralia,AUS,1994,323216879972.328\nAustralia,AUS,1995,368391743391.743\nAustralia,AUS,1996,401819423368.74\nAustralia,AUS,1997,436097980904.68\nAustralia,AUS,1998,399778878111.646\nAustralia,AUS,1999,389146509587.668\nAustralia,AUS,2000,415446209885.072\nAustralia,AUS,2001,378899860470.108\nAustralia,AUS,2002,394635830891.586\nAustralia,AUS,2003,466853232382.062\nAustralia,AUS,2004,613329776639.636\nAustralia,AUS,2005,693764095624.718\nAustralia,AUS,2006,747572626534.891\nAustralia,AUS,2007,853764622752.61\nAustralia,AUS,2008,1055334825425.25\nAustralia,AUS,2009,927168310999.853\nAustralia,AUS,2010,1142876772659.21\nAustralia,AUS,2011,1390557034407.97\nAustralia,AUS,2012,1538194473087.23\nAustralia,AUS,2013,1567178619062.28\nAustralia,AUS,2014,1459597906912.7\nAustralia,AUS,2015,1345383143356.35\nAustralia,AUS,2016,1204616439828.41\nAustria,AUT,1960,6592693841.18495\nAustria,AUT,1961,7311749633.36229\nAustria,AUT,1962,7756110210.11966\nAustria,AUT,1963,8374175257.73075\nAustria,AUT,1964,9169983885.71185\nAustria,AUT,1965,9994070615.85997\nAustria,AUT,1966,10887682273.1014\nAustria,AUT,1967,11579431668.9165\nAustria,AUT,1968,12440625312.8685\nAustria,AUT,1969,13582798556.2404\nAustria,AUT,1970,15373005768.7219\nAustria,AUT,1971,17858485956.6031\nAustria,AUT,1972,22059612417.4058\nAustria,AUT,1973,29515467987.912\nAustria,AUT,1974,35189299985.2768\nAustria,AUT,1975,40059206763.056\nAustria,AUT,1976,42959976068.1138\nAustria,AUT,1977,51545759220.7143\nAustria,AUT,1978,62052258694.2102\nAustria,AUT,1979,73937296654.6577\nAustria,AUT,1980,82058912465.4329\nAustria,AUT,1981,71034228097.4598\nAustria,AUT,1982,71275287327.5793\nAustria,AUT,1983,72121016623.2572\nAustria,AUT,1984,67985345161.9558\nAustria,AUT,1985,69386774474.5943\nAustria,AUT,1986,99036165209.5539\nAustria,AUT,1987,124168442860.253\nAustria,AUT,1988,133339397080.129\nAustria,AUT,1989,133105805928.237\nAustria,AUT,1990,166463386663.439\nAustria,AUT,1991,173794177725.398\nAustria,AUT,1992,195078126346.106\nAustria,AUT,1993,190379720927.481\nAustria,AUT,1994,203535242741.838\nAustria,AUT,1995,241038283062.645\nAustria,AUT,1996,237250948791.266\nAustria,AUT,1997,212790348404.555\nAustria,AUT,1998,218259904401.956\nAustria,AUT,1999,217185787342.851\nAustria,AUT,2000,196799778883.361\nAustria,AUT,2001,197337879194.631\nAustria,AUT,2002,213377771503.858\nAustria,AUT,2003,261695778781.038\nAustria,AUT,2004,300904221504.842\nAustria,AUT,2005,315974418604.651\nAustria,AUT,2006,335998557270.104\nAustria,AUT,2007,388691445387.353\nAustria,AUT,2008,430294287388.311\nAustria,AUT,2009,400172297860.517\nAustria,AUT,2010,391892746544.69\nAustria,AUT,2011,431120310088.82\nAustria,AUT,2012,409425234155.263\nAustria,AUT,2013,430068712971.867\nAustria,AUT,2014,441885415805.825\nAustria,AUT,2015,382065930307.978\nAustria,AUT,2016,390799991147.468\nAzerbaijan,AZE,1990,8858006035.91566\nAzerbaijan,AZE,1991,8792365810.5094\nAzerbaijan,AZE,1992,4991350457.5425\nAzerbaijan,AZE,1993,3973027396.65195\nAzerbaijan,AZE,1994,3313739673.54738\nAzerbaijan,AZE,1995,3052467522.36104\nAzerbaijan,AZE,1996,3176749593.11788\nAzerbaijan,AZE,1997,3962710163.11167\nAzerbaijan,AZE,1998,4446396217.63265\nAzerbaijan,AZE,1999,4581222442.45783\nAzerbaijan,AZE,2000,5272617196.04517\nAzerbaijan,AZE,2001,5707720390.8515\nAzerbaijan,AZE,2002,6235795103.88809\nAzerbaijan,AZE,2003,7276013031.96905\nAzerbaijan,AZE,2004,8680472168.51531\nAzerbaijan,AZE,2005,13245716099.0057\nAzerbaijan,AZE,2006,20983019923.8863\nAzerbaijan,AZE,2007,33050343782.7759\nAzerbaijan,AZE,2008,48852482960.0779\nAzerbaijan,AZE,2009,44291490420.5026\nAzerbaijan,AZE,2010,52902703376.1056\nAzerbaijan,AZE,2011,65951627200.2026\nAzerbaijan,AZE,2012,69684317718.9409\nAzerbaijan,AZE,2013,74164435946.4627\nAzerbaijan,AZE,2014,75244166772.9185\nAzerbaijan,AZE,2015,53074370486.0433\nAzerbaijan,AZE,2016,37847715736.0406\n\"Bahamas, The\",BHS,1960,169803921.568627\n\"Bahamas, The\",BHS,1961,190098039.215686\n\"Bahamas, The\",BHS,1962,212254901.960784\n\"Bahamas, The\",BHS,1963,237745098.039216\n\"Bahamas, The\",BHS,1964,266666666.666667\n\"Bahamas, The\",BHS,1965,300392156.862745\n\"Bahamas, The\",BHS,1966,340000000\n\"Bahamas, The\",BHS,1967,390196078.431373\n\"Bahamas, The\",BHS,1968,444901960.784314\n\"Bahamas, The\",BHS,1969,528137254.901961\n\"Bahamas, The\",BHS,1970,538423153.692615\n\"Bahamas, The\",BHS,1971,573400000\n\"Bahamas, The\",BHS,1972,590900000\n\"Bahamas, The\",BHS,1973,670900000\n\"Bahamas, The\",BHS,1974,632400000\n\"Bahamas, The\",BHS,1975,596200000\n\"Bahamas, The\",BHS,1976,642100000\n\"Bahamas, The\",BHS,1977,713000000\n\"Bahamas, The\",BHS,1978,832400000\n\"Bahamas, The\",BHS,1979,1139800100\n\"Bahamas, The\",BHS,1980,1335300000\n\"Bahamas, The\",BHS,1981,1426500000\n\"Bahamas, The\",BHS,1982,1578300000\n\"Bahamas, The\",BHS,1983,1732800000\n\"Bahamas, The\",BHS,1984,2041100000\n\"Bahamas, The\",BHS,1985,2320699900\n\"Bahamas, The\",BHS,1986,2472500000\n\"Bahamas, The\",BHS,1987,2713999900\n\"Bahamas, The\",BHS,1988,2817900000\n\"Bahamas, The\",BHS,1989,3062000000\n\"Bahamas, The\",BHS,1990,3166000000\n\"Bahamas, The\",BHS,1991,3111160000\n\"Bahamas, The\",BHS,1992,3109000000\n\"Bahamas, The\",BHS,1993,3092000000\n\"Bahamas, The\",BHS,1994,3259000000\n\"Bahamas, The\",BHS,1995,3429000000\n\"Bahamas, The\",BHS,1996,3609000000\n\"Bahamas, The\",BHS,1997,4961119000\n\"Bahamas, The\",BHS,1998,5353524000\n\"Bahamas, The\",BHS,1999,6019972000\n\"Bahamas, The\",BHS,2000,6327552000\n\"Bahamas, The\",BHS,2001,6516651000\n\"Bahamas, The\",BHS,2002,6957996000\n\"Bahamas, The\",BHS,2003,6949317000\n\"Bahamas, The\",BHS,2004,7094413000\n\"Bahamas, The\",BHS,2005,7706222000\n\"Bahamas, The\",BHS,2006,7965588000\n\"Bahamas, The\",BHS,2007,8318996000\n\"Bahamas, The\",BHS,2008,8247000000\n\"Bahamas, The\",BHS,2009,7820000000\n\"Bahamas, The\",BHS,2010,7910000000\n\"Bahamas, The\",BHS,2011,7890000000\n\"Bahamas, The\",BHS,2012,10720500000\n\"Bahamas, The\",BHS,2013,10677200000\n\"Bahamas, The\",BHS,2014,10843800000\n\"Bahamas, The\",BHS,2015,11240000000\n\"Bahamas, The\",BHS,2016,11261800000\nBahrain,BHR,1980,3072698328.46909\nBahrain,BHR,1981,3467819148.93617\nBahrain,BHR,1982,3645744680.85106\nBahrain,BHR,1983,3735106382.97872\nBahrain,BHR,1984,3905585106.38298\nBahrain,BHR,1985,3651861702.12766\nBahrain,BHR,1986,3052393617.02128\nBahrain,BHR,1987,3392021010.6383\nBahrain,BHR,1988,3702393617.02128\nBahrain,BHR,1989,3863563829.78723\nBahrain,BHR,1990,4229787234.04255\nBahrain,BHR,1991,4616223404.25532\nBahrain,BHR,1992,4751063829.78723\nBahrain,BHR,1993,5200265957.44681\nBahrain,BHR,1994,5567553457.44681\nBahrain,BHR,1995,5849467819.14894\nBahrain,BHR,1996,6101861436.17021\nBahrain,BHR,1997,6349202393.61702\nBahrain,BHR,1998,6183776595.74468\nBahrain,BHR,1999,6621010372.34043\nBahrain,BHR,2000,9062906914.89362\nBahrain,BHR,2001,8976207712.76596\nBahrain,BHR,2002,9632155053.19149\nBahrain,BHR,2003,11074822074.4681\nBahrain,BHR,2004,13150166755.3191\nBahrain,BHR,2005,15968726861.7021\nBahrain,BHR,2006,18505053191.4894\nBahrain,BHR,2007,21730000000\nBahrain,BHR,2008,25710877659.5745\nBahrain,BHR,2009,22938218085.1064\nBahrain,BHR,2010,25713271276.5957\nBahrain,BHR,2011,28776595744.6809\nBahrain,BHR,2012,30749308510.6383\nBahrain,BHR,2013,32539547872.3404\nBahrain,BHR,2014,33387712765.9575\nBahrain,BHR,2015,31125851063.8298\nBahrain,BHR,2016,32179069148.9362\nBangladesh,BGD,1960,4274893913.46432\nBangladesh,BGD,1961,4817580183.56657\nBangladesh,BGD,1962,5081413339.74945\nBangladesh,BGD,1963,5319458351.12372\nBangladesh,BGD,1964,5386054619.31076\nBangladesh,BGD,1965,5906636556.95802\nBangladesh,BGD,1966,6439687598.27648\nBangladesh,BGD,1967,7253575399.26882\nBangladesh,BGD,1968,7483685473.4584\nBangladesh,BGD,1969,8471006100.89247\nBangladesh,BGD,1970,8992721809.32801\nBangladesh,BGD,1971,8751842839.73302\nBangladesh,BGD,1972,6288245866.66667\nBangladesh,BGD,1973,8086725729.3407\nBangladesh,BGD,1974,12512460519.7088\nBangladesh,BGD,1975,19448348073.4565\nBangladesh,BGD,1976,10117113333.3333\nBangladesh,BGD,1977,9651149301.8746\nBangladesh,BGD,1978,13281767142.8571\nBangladesh,BGD,1979,15565480321.9448\nBangladesh,BGD,1980,18138049095.6072\nBangladesh,BGD,1981,20249694002.448\nBangladesh,BGD,1982,18525399201.5968\nBangladesh,BGD,1983,17609048821.5488\nBangladesh,BGD,1984,18920840000\nBangladesh,BGD,1985,22278423076.9231\nBangladesh,BGD,1986,21774033333.3333\nBangladesh,BGD,1987,24298032258.0645\nBangladesh,BGD,1988,26579005760.315\nBangladesh,BGD,1989,28781714763.7823\nBangladesh,BGD,1990,31598341233.5793\nBangladesh,BGD,1991,30957483290.541\nBangladesh,BGD,1992,31708873954.9405\nBangladesh,BGD,1993,33166520084.8295\nBangladesh,BGD,1994,33768662171.2233\nBangladesh,BGD,1995,37939748051.3878\nBangladesh,BGD,1996,46438482370.3942\nBangladesh,BGD,1997,48244308274.8086\nBangladesh,BGD,1998,49984559471.3656\nBangladesh,BGD,1999,51270569883.5275\nBangladesh,BGD,2000,53369787318.6245\nBangladesh,BGD,2001,53991289844.3291\nBangladesh,BGD,2002,54724081490.5102\nBangladesh,BGD,2003,60158929188.2556\nBangladesh,BGD,2004,65108544250.0425\nBangladesh,BGD,2005,69442943089.4309\nBangladesh,BGD,2006,71819083683.7403\nBangladesh,BGD,2007,79611888213.148\nBangladesh,BGD,2008,91631278239.3237\nBangladesh,BGD,2009,102477791472.39\nBangladesh,BGD,2010,115279077465.226\nBangladesh,BGD,2011,128637938711.386\nBangladesh,BGD,2012,133355749482.478\nBangladesh,BGD,2013,149990451022.29\nBangladesh,BGD,2014,172885454931.453\nBangladesh,BGD,2015,195078665827.565\nBangladesh,BGD,2016,221415162445.648\nBarbados,BRB,1990,2023318251.8769\nBarbados,BRB,1991,2007109829.46353\nBarbados,BRB,1992,1950900000\nBarbados,BRB,1993,2046189031.96937\nBarbados,BRB,1994,2151295182.22045\nBarbados,BRB,1995,2261969870.23318\nBarbados,BRB,1996,2411872918.01323\nBarbados,BRB,1997,2549296474.91672\nBarbados,BRB,1998,2874459304.92716\nBarbados,BRB,1999,3012081738.17929\nBarbados,BRB,2000,3121500000\nBarbados,BRB,2001,3116650000\nBarbados,BRB,2002,3169600000\nBarbados,BRB,2003,3274850000\nBarbados,BRB,2004,3514350000\nBarbados,BRB,2005,3897300000\nBarbados,BRB,2006,4246600000\nBarbados,BRB,2007,4523750000\nBarbados,BRB,2008,4607300000\nBarbados,BRB,2009,4434050000\nBarbados,BRB,2010,4461650000\nBarbados,BRB,2011,4660900000\nBarbados,BRB,2012,4656350000\nBarbados,BRB,2013,4612500000\nBarbados,BRB,2014,4608350000\nBarbados,BRB,2015,4584150000\nBarbados,BRB,2016,4529050000\nBelarus,BLR,1990,21650000000\nBelarus,BLR,1991,17420000000\nBelarus,BLR,1992,17120370370.3704\nBelarus,BLR,1993,16286280991.7355\nBelarus,BLR,1994,14932192010.7419\nBelarus,BLR,1995,13972630803.5817\nBelarus,BLR,1996,14756861538.4615\nBelarus,BLR,1997,14128412417.193\nBelarus,BLR,1998,15222014828.3039\nBelarus,BLR,1999,12138485328.6267\nBelarus,BLR,2000,12736856827.9847\nBelarus,BLR,2001,12354820143.8849\nBelarus,BLR,2002,14594925392.9691\nBelarus,BLR,2003,17825436034.5366\nBelarus,BLR,2004,23141587717.7633\nBelarus,BLR,2005,30210091836.8294\nBelarus,BLR,2006,36961821893.6976\nBelarus,BLR,2007,45275747860.6442\nBelarus,BLR,2008,60763483146.0674\nBelarus,BLR,2009,49209523809.5238\nBelarus,BLR,2010,57222490768.7143\nBelarus,BLR,2011,61757788944.7236\nBelarus,BLR,2012,65685102554.8759\nBelarus,BLR,2013,75527984234.2342\nBelarus,BLR,2014,78813839984.3506\nBelarus,BLR,2015,56454734396.5842\nBelarus,BLR,2016,47407217531.162\nBelgium,BEL,1960,11658722590.99\nBelgium,BEL,1961,12400145221.595\nBelgium,BEL,1962,13264015675.3193\nBelgium,BEL,1963,14260017387.0492\nBelgium,BEL,1964,15960106680.6732\nBelgium,BEL,1965,17371457607.9374\nBelgium,BEL,1966,18651883472.4808\nBelgium,BEL,1967,19992040788.4593\nBelgium,BEL,1968,21376353113.475\nBelgium,BEL,1969,23710735894.7022\nBelgium,BEL,1970,26849148285.599\nBelgium,BEL,1971,29981290025.4913\nBelgium,BEL,1972,37408591329.8506\nBelgium,BEL,1973,47999363071.8278\nBelgium,BEL,1974,56333010459.8177\nBelgium,BEL,1975,66029748930.5693\nBelgium,BEL,1976,71494539498.4326\nBelgium,BEL,1977,83283328418.6832\nBelgium,BEL,1978,101788475086.461\nBelgium,BEL,1979,116938066868.465\nBelgium,BEL,1980,127508202372.741\nBelgium,BEL,1981,105290614080.834\nBelgium,BEL,1982,92588895020.3073\nBelgium,BEL,1983,87650915976.3314\nBelgium,BEL,1984,83795680815.4147\nBelgium,BEL,1985,86730038793.3963\nBelgium,BEL,1986,120661220335.922\nBelgium,BEL,1987,150194077687.736\nBelgium,BEL,1988,163167853538.124\nBelgium,BEL,1989,165100094594.595\nBelgium,BEL,1990,206430841501.69\nBelgium,BEL,1991,211637816538.689\nBelgium,BEL,1992,236038384441.656\nBelgium,BEL,1993,225924679920.709\nBelgium,BEL,1994,246194938750.904\nBelgium,BEL,1995,289567323481.117\nBelgium,BEL,1996,281358175895.766\nBelgium,BEL,1997,254813599458.728\nBelgium,BEL,1998,260601911535.897\nBelgium,BEL,1999,260202429149.798\nBelgium,BEL,2000,237904919845.218\nBelgium,BEL,2001,237841968680.09\nBelgium,BEL,2002,258860436664.784\nBelgium,BEL,2003,319002821670.429\nBelgium,BEL,2004,370885026074\nBelgium,BEL,2005,387365750528.541\nBelgium,BEL,2006,409813197842.178\nBelgium,BEL,2007,471821105940.323\nBelgium,BEL,2008,518625897172.99\nBelgium,BEL,2009,484552792442.345\nBelgium,BEL,2010,483548031197.108\nBelgium,BEL,2011,527008453886.929\nBelgium,BEL,2012,497884216568.867\nBelgium,BEL,2013,520925468952.938\nBelgium,BEL,2014,531075861047.287\nBelgium,BEL,2015,455200045095.643\nBelgium,BEL,2016,467955709817.539\nBelize,BLZ,1960,28071888.5622288\nBelize,BLZ,1961,29964370.7125857\nBelize,BLZ,1962,31856922.8615428\nBelize,BLZ,1963,33749405.0118998\nBelize,BLZ,1964,36193826.1234775\nBelize,BLZ,1965,40069930.0699301\nBelize,BLZ,1966,44405594.4055944\nBelize,BLZ,1967,47379310.3448276\nBelize,BLZ,1968,44910179.6407186\nBelize,BLZ,1969,47305389.2215569\nBelize,BLZ,1970,53233532.9341317\nBelize,BLZ,1971,59207317.0731707\nBelize,BLZ,1972,66062500\nBelize,BLZ,1973,78343558.2822086\nBelize,BLZ,1974,103216374.269006\nBelize,BLZ,1975,118066298.342541\nBelize,BLZ,1976,96905829.5964126\nBelize,BLZ,1977,117650000\nBelize,BLZ,1978,136300000\nBelize,BLZ,1979,151800000\nBelize,BLZ,1980,194750000\nBelize,BLZ,1981,192900000\nBelize,BLZ,1982,179250000\nBelize,BLZ,1983,189000000\nBelize,BLZ,1984,210900000\nBelize,BLZ,1985,209150000\nBelize,BLZ,1986,227850000\nBelize,BLZ,1987,276550000\nBelize,BLZ,1988,314900000\nBelize,BLZ,1989,363150000\nBelize,BLZ,1990,413050000\nBelize,BLZ,1991,444720750\nBelize,BLZ,1992,518239100\nBelize,BLZ,1993,559858250\nBelize,BLZ,1994,580863700\nBelize,BLZ,1995,620140400\nBelize,BLZ,1996,641383800\nBelize,BLZ,1997,654314350\nBelize,BLZ,1998,688992450\nBelize,BLZ,1999,732732350\nBelize,BLZ,2000,832072450\nBelize,BLZ,2001,871860600\nBelize,BLZ,2002,932551850\nBelize,BLZ,2003,990374050\nBelize,BLZ,2004,1057845500\nBelize,BLZ,2005,1114222550\nBelize,BLZ,2006,1217467600\nBelize,BLZ,2007,1290573400\nBelize,BLZ,2008,1368625150\nBelize,BLZ,2009,1336957250\nBelize,BLZ,2010,1397113450\nBelize,BLZ,2011,1486712300\nBelize,BLZ,2012,1573618750\nBelize,BLZ,2013,1613705850\nBelize,BLZ,2014,1706497950\nBelize,BLZ,2015,1742545900\nBelize,BLZ,2016,1741100000\nBenin,BEN,1960,226195579.35701\nBenin,BEN,1961,235668222.429984\nBenin,BEN,1962,236434906.75427\nBenin,BEN,1963,253927646.475909\nBenin,BEN,1964,269818988.259263\nBenin,BEN,1965,289908720.648622\nBenin,BEN,1966,302925280.773564\nBenin,BEN,1967,306222000.407316\nBenin,BEN,1968,326323097.355964\nBenin,BEN,1969,330748211.459737\nBenin,BEN,1970,333627758.154666\nBenin,BEN,1971,335072975.215766\nBenin,BEN,1972,410331900.950531\nBenin,BEN,1973,504376035.716401\nBenin,BEN,1974,554654786.965107\nBenin,BEN,1975,676870140.341529\nBenin,BEN,1976,698408244.385343\nBenin,BEN,1977,750049739.152238\nBenin,BEN,1978,928843304.783965\nBenin,BEN,1979,1186231265.18417\nBenin,BEN,1980,1405251547.23882\nBenin,BEN,1981,1291119965.11262\nBenin,BEN,1982,1267778489.03079\nBenin,BEN,1983,1095348302.91865\nBenin,BEN,1984,1051133927.00009\nBenin,BEN,1985,1045712703.02696\nBenin,BEN,1986,1336102040.71025\nBenin,BEN,1987,1562412030.34838\nBenin,BEN,1988,1620246187.15171\nBenin,BEN,1989,1502294411.46202\nBenin,BEN,1990,1959965243.76269\nBenin,BEN,1991,1986437859.90346\nBenin,BEN,1992,1695315305.70308\nBenin,BEN,1993,2274557914.07481\nBenin,BEN,1994,1598075932.35432\nBenin,BEN,1995,2169627250.93379\nBenin,BEN,1996,2361116587.86079\nBenin,BEN,1997,2268301537.65128\nBenin,BEN,1998,2455092582.30927\nBenin,BEN,1999,2689787917.50711\nBenin,BEN,2000,2569186642.86999\nBenin,BEN,2001,2680213931.46472\nBenin,BEN,2002,3054571081.6912\nBenin,BEN,2003,3905366187.87017\nBenin,BEN,2004,4521424807.22519\nBenin,BEN,2005,4803702821.08055\nBenin,BEN,2006,5142380779.44103\nBenin,BEN,2007,5969535131.58016\nBenin,BEN,2008,7132787396.66547\nBenin,BEN,2009,7097198711.61023\nBenin,BEN,2010,6970240895.49888\nBenin,BEN,2011,7814081155.64988\nBenin,BEN,2012,8152554487.31321\nBenin,BEN,2013,9156748441.42175\nBenin,BEN,2014,9707432015.61441\nBenin,BEN,2015,8290986804.45245\nBenin,BEN,2016,8583031398.21675\nBermuda,BMU,1960,84466654.0801544\nBermuda,BMU,1961,89249986.7007156\nBermuda,BMU,1962,94149985.9705588\nBermuda,BMU,1963,96366652.3069165\nBermuda,BMU,1964,107566650.637987\nBermuda,BMU,1965,114339048.962736\nBermuda,BMU,1966,134173373.782802\nBermuda,BMU,1967,155102984.621576\nBermuda,BMU,1968,150000000\nBermuda,BMU,1969,164900000\nBermuda,BMU,1970,186300000\nBermuda,BMU,1971,211100000\nBermuda,BMU,1972,235400000\nBermuda,BMU,1973,269500000\nBermuda,BMU,1974,312600000\nBermuda,BMU,1975,345000000\nBermuda,BMU,1976,386300000\nBermuda,BMU,1977,447000000\nBermuda,BMU,1978,475800000\nBermuda,BMU,1979,517200000\nBermuda,BMU,1980,613299968\nBermuda,BMU,1981,739100032\nBermuda,BMU,1982,785500032\nBermuda,BMU,1983,889400000\nBermuda,BMU,1984,985699968\nBermuda,BMU,1985,1039500032\nBermuda,BMU,1986,1173500032\nBermuda,BMU,1987,1296499968\nBermuda,BMU,1988,1415100032\nBermuda,BMU,1989,1501500032\nBermuda,BMU,1990,1592400000\nBermuda,BMU,1991,1634899968\nBermuda,BMU,1992,1679900032\nBermuda,BMU,1993,1820359936\nBermuda,BMU,1994,1867160064\nBermuda,BMU,1995,2030749952\nBermuda,BMU,1996,2695390000\nBermuda,BMU,1997,2932827000\nBermuda,BMU,1998,3130748000\nBermuda,BMU,1999,3324433000\nBermuda,BMU,2000,3480219000\nBermuda,BMU,2001,3680483000\nBermuda,BMU,2002,3937228000\nBermuda,BMU,2003,4186525000\nBermuda,BMU,2004,4484703000\nBermuda,BMU,2005,4868136000\nBermuda,BMU,2006,5414299000\nBermuda,BMU,2007,5895048000\nBermuda,BMU,2008,6109928000\nBermuda,BMU,2009,5806378000\nBermuda,BMU,2010,5744414000\nBermuda,BMU,2011,5550771000\nBermuda,BMU,2012,5537537000\nBermuda,BMU,2013,5573710000\nBhutan,BTN,1980,135653295.165394\nBhutan,BTN,1981,146391639.722864\nBhutan,BTN,1982,148934334.038055\nBhutan,BTN,1983,165585940.594059\nBhutan,BTN,1984,169264991.197183\nBhutan,BTN,1985,172217502.021019\nBhutan,BTN,1986,201375725.614592\nBhutan,BTN,1987,253182453.703704\nBhutan,BTN,1988,283855833.333333\nBhutan,BTN,1989,275949889.09427\nBhutan,BTN,1990,299787275.842376\nBhutan,BTN,1991,250045839.929639\nBhutan,BTN,1992,250794359.567901\nBhutan,BTN,1993,235239570.350935\nBhutan,BTN,1994,270801565.189672\nBhutan,BTN,1995,303053462.843047\nBhutan,BTN,1996,316420860.852385\nBhutan,BTN,1997,365964500.137703\nBhutan,BTN,1998,376955087.251575\nBhutan,BTN,1999,419035810.496981\nBhutan,BTN,2000,439158233.199822\nBhutan,BTN,2001,476360697.181606\nBhutan,BTN,2002,537050133.717342\nBhutan,BTN,2003,622026107.771576\nBhutan,BTN,2004,702682018.976169\nBhutan,BTN,2005,818869145.124717\nBhutan,BTN,2006,897731524.929922\nBhutan,BTN,2007,1196091805.02316\nBhutan,BTN,2008,1258332337.28382\nBhutan,BTN,2009,1264758197.96593\nBhutan,BTN,2010,1585472534.10547\nBhutan,BTN,2011,1820207625.80217\nBhutan,BTN,2012,1823692109.61652\nBhutan,BTN,2013,1798333725.83954\nBhutan,BTN,2014,1944782820.88824\nBhutan,BTN,2015,2059258652.94668\nBhutan,BTN,2016,2212638830.39439\nBolivia,BOL,1960,563110051.920733\nBolivia,BOL,1961,612518906.826491\nBolivia,BOL,1962,669722541.277818\nBolivia,BOL,1963,721142957.311474\nBolivia,BOL,1964,812543072.505384\nBolivia,BOL,1965,908874537.037037\nBolivia,BOL,1966,994044553.872054\nBolivia,BOL,1967,1084059814.81481\nBolivia,BOL,1968,908874537.037037\nBolivia,BOL,1969,964615698.653199\nBolivia,BOL,1970,1017171717.17172\nBolivia,BOL,1971,1095454545.45455\nBolivia,BOL,1972,1257615644.97932\nBolivia,BOL,1973,1263018490.75462\nBolivia,BOL,1974,2100249875.06247\nBolivia,BOL,1975,2404697651.17441\nBolivia,BOL,1976,2732083958.02099\nBolivia,BOL,1977,3227436281.85907\nBolivia,BOL,1978,3758220889.55522\nBolivia,BOL,1979,4421343606.18135\nBolivia,BOL,1980,4537487842.57749\nBolivia,BOL,1981,5891606676.18271\nBolivia,BOL,1982,5594118400.16731\nBolivia,BOL,1983,5422656261.71049\nBolivia,BOL,1984,6169481549.37482\nBolivia,BOL,1985,5377277406.71638\nBolivia,BOL,1986,3959379487.6064\nBolivia,BOL,1987,4347956298.51327\nBolivia,BOL,1988,4597615562.66594\nBolivia,BOL,1989,4715978868.21613\nBolivia,BOL,1990,4867582620.20708\nBolivia,BOL,1991,5343274311.56789\nBolivia,BOL,1992,5643893347.00679\nBolivia,BOL,1993,5734676560.92471\nBolivia,BOL,1994,5981244886.917\nBolivia,BOL,1995,6715220507.05164\nBolivia,BOL,1996,7396966657.47054\nBolivia,BOL,1997,7925673448.41368\nBolivia,BOL,1998,8497545598.08352\nBolivia,BOL,1999,8285075872.27307\nBolivia,BOL,2000,8397912509.09679\nBolivia,BOL,2001,8141537937.61068\nBolivia,BOL,2002,7905485216.17852\nBolivia,BOL,2003,8082364868.39357\nBolivia,BOL,2004,8773451738.91129\nBolivia,BOL,2005,9549077869.1065\nBolivia,BOL,2006,11451869164.7112\nBolivia,BOL,2007,13120159975.5451\nBolivia,BOL,2008,16674324634.2373\nBolivia,BOL,2009,17339992165.2422\nBolivia,BOL,2010,19649631308.1648\nBolivia,BOL,2011,23963033443.8518\nBolivia,BOL,2012,27084497539.7974\nBolivia,BOL,2013,30659338929.0883\nBolivia,BOL,2014,32996187988.4226\nBolivia,BOL,2015,33000198263.3864\nBolivia,BOL,2016,33806395513.7482\nBosnia and Herzegovina,BIH,1994,1255802469.1358\nBosnia and Herzegovina,BIH,1995,1866572953.73666\nBosnia and Herzegovina,BIH,1996,2786045321.63743\nBosnia and Herzegovina,BIH,1997,3671816504.23851\nBosnia and Herzegovina,BIH,1998,4116699437.4041\nBosnia and Herzegovina,BIH,1999,4685729738.56209\nBosnia and Herzegovina,BIH,2000,5505984455.95855\nBosnia and Herzegovina,BIH,2001,5748990666.17862\nBosnia and Herzegovina,BIH,2002,6651226179.01829\nBosnia and Herzegovina,BIH,2003,8370020196.19158\nBosnia and Herzegovina,BIH,2004,10022840634.9206\nBosnia and Herzegovina,BIH,2005,11225138297.1959\nBosnia and Herzegovina,BIH,2006,12866524918.2221\nBosnia and Herzegovina,BIH,2007,15776422673.198\nBosnia and Herzegovina,BIH,2008,19112739664.4697\nBosnia and Herzegovina,BIH,2009,17613836209.9581\nBosnia and Herzegovina,BIH,2010,17176781336.7644\nBosnia and Herzegovina,BIH,2011,18644723860.9709\nBosnia and Herzegovina,BIH,2012,17226849297.07\nBosnia and Herzegovina,BIH,2013,18178503835.4491\nBosnia and Herzegovina,BIH,2014,18558343508.3435\nBosnia and Herzegovina,BIH,2015,16209702863.6235\nBosnia and Herzegovina,BIH,2016,16910277133.6463\nBotswana,BWA,1960,30412308.9864012\nBotswana,BWA,1961,32902336.644746\nBotswana,BWA,1962,35643207.6265246\nBotswana,BWA,1963,38091150.566196\nBotswana,BWA,1964,41613969.0506064\nBotswana,BWA,1965,45790869.7473126\nBotswana,BWA,1966,51464435.1464435\nBotswana,BWA,1967,58646443.5146444\nBotswana,BWA,1968,66248256.6248257\nBotswana,BWA,1969,77356914.0788191\nBotswana,BWA,1970,96245114.4611949\nBotswana,BWA,1971,126957494.407159\nBotswana,BWA,1972,165258093.875959\nBotswana,BWA,1973,244129088.027662\nBotswana,BWA,1974,306033848.417954\nBotswana,BWA,1975,355172413.793103\nBotswana,BWA,1976,372010119.595216\nBotswana,BWA,1977,451603325.415677\nBotswana,BWA,1978,590376720.598889\nBotswana,BWA,1979,819877300.613497\nBotswana,BWA,1980,1060923829.13021\nBotswana,BWA,1981,1073861599.13948\nBotswana,BWA,1982,1014907254.54016\nBotswana,BWA,1983,1172258182.14969\nBotswana,BWA,1984,1240796364.75662\nBotswana,BWA,1985,1114764007.14811\nBotswana,BWA,1986,1392634771.9653\nBotswana,BWA,1987,1965274882.36345\nBotswana,BWA,1988,2644536804.11244\nBotswana,BWA,1989,3083800684.89751\nBotswana,BWA,1990,3790567051.86778\nBotswana,BWA,1991,3942792837.35655\nBotswana,BWA,1992,4146513722.33019\nBotswana,BWA,1993,4160086253.1468\nBotswana,BWA,1994,4259330999.03151\nBotswana,BWA,1995,4730611067.02258\nBotswana,BWA,1996,4847752842.78924\nBotswana,BWA,1997,5020214747.45261\nBotswana,BWA,1998,4790458837.17078\nBotswana,BWA,1999,5484257417.17844\nBotswana,BWA,2000,5788329609.15755\nBotswana,BWA,2001,5489608299.66445\nBotswana,BWA,2002,5438857106.73536\nBotswana,BWA,2003,7511582173.37724\nBotswana,BWA,2004,8957467706.5354\nBotswana,BWA,2005,9931134940.51346\nBotswana,BWA,2006,10126940513.3125\nBotswana,BWA,2007,10939053367.1521\nBotswana,BWA,2008,10945070441.9283\nBotswana,BWA,2009,10267133177.7334\nBotswana,BWA,2010,12786654365.8738\nBotswana,BWA,2011,15682926895.9668\nBotswana,BWA,2012,14686278707.4589\nBotswana,BWA,2013,14915780538.6724\nBotswana,BWA,2014,16259445052.5565\nBotswana,BWA,2015,14430573505.3797\nBotswana,BWA,2016,15581137273.7728\nBrazil,BRA,1960,15165569912.5199\nBrazil,BRA,1961,15236854859.469\nBrazil,BRA,1962,19926293839.0163\nBrazil,BRA,1963,23021477292.2093\nBrazil,BRA,1964,21211892259.9904\nBrazil,BRA,1965,21790035117.19\nBrazil,BRA,1966,27062716577.9111\nBrazil,BRA,1967,30591834053.9653\nBrazil,BRA,1968,33875881876.3672\nBrazil,BRA,1969,37458898243.8609\nBrazil,BRA,1970,42327600098.2412\nBrazil,BRA,1971,49204456700.4516\nBrazil,BRA,1972,58539008786.3684\nBrazil,BRA,1973,79279057730.829\nBrazil,BRA,1974,105136007528.76\nBrazil,BRA,1975,123709376567.89\nBrazil,BRA,1976,152678020452.829\nBrazil,BRA,1977,176171284311.761\nBrazil,BRA,1978,200800891870.164\nBrazil,BRA,1979,224969488835.181\nBrazil,BRA,1980,235024598983.261\nBrazil,BRA,1981,263561088977.129\nBrazil,BRA,1982,281682304161.041\nBrazil,BRA,1983,203304515490.795\nBrazil,BRA,1984,209023912696.839\nBrazil,BRA,1985,222942790435.299\nBrazil,BRA,1986,268137224729.722\nBrazil,BRA,1987,294084112392.66\nBrazil,BRA,1988,330397381998.489\nBrazil,BRA,1989,425595310000\nBrazil,BRA,1990,461951782000\nBrazil,BRA,1991,602860000000\nBrazil,BRA,1992,400599250000\nBrazil,BRA,1993,437798577639.752\nBrazil,BRA,1994,558111997497.263\nBrazil,BRA,1995,785643456467.255\nBrazil,BRA,1996,850425828275.793\nBrazil,BRA,1997,883199443413.729\nBrazil,BRA,1998,863723395088.324\nBrazil,BRA,1999,599388879704.634\nBrazil,BRA,2000,655421153320.579\nBrazil,BRA,2001,559372502338.237\nBrazil,BRA,2002,507962741819.919\nBrazil,BRA,2003,558320116997.075\nBrazil,BRA,2004,669316239316.239\nBrazil,BRA,2005,891629970423.924\nBrazil,BRA,2006,1107640325472.35\nBrazil,BRA,2007,1397084381901.29\nBrazil,BRA,2008,1695824517395.57\nBrazil,BRA,2009,1667019605881.76\nBrazil,BRA,2010,2208871646202.82\nBrazil,BRA,2011,2616201578192.25\nBrazil,BRA,2012,2465188674415.03\nBrazil,BRA,2013,2472806919901.67\nBrazil,BRA,2014,2455993200170\nBrazil,BRA,2015,1803652649613.75\nBrazil,BRA,2016,1796186586414.45\nBrunei Darussalam,BRN,1965,114040245.655299\nBrunei Darussalam,BRN,1966,132758395.400497\nBrunei Darussalam,BRN,1967,139030445.576898\nBrunei Darussalam,BRN,1968,160819286.554292\nBrunei Darussalam,BRN,1969,161211289.690318\nBrunei Darussalam,BRN,1970,179080099.307461\nBrunei Darussalam,BRN,1971,197523179.241883\nBrunei Darussalam,BRN,1972,270818555.823521\nBrunei Darussalam,BRN,1973,433092003.579273\nBrunei Darussalam,BRN,1974,1073577085.64159\nBrunei Darussalam,BRN,1975,1168304305.65513\nBrunei Darussalam,BRN,1976,1423061356.64562\nBrunei Darussalam,BRN,1977,1732721160.94122\nBrunei Darussalam,BRN,1978,1941600703.60598\nBrunei Darussalam,BRN,1979,2803780005.51826\nBrunei Darussalam,BRN,1980,4928824957.9675\nBrunei Darussalam,BRN,1981,4366213849.57637\nBrunei Darussalam,BRN,1982,4264252336.4486\nBrunei Darussalam,BRN,1983,3844723142.45149\nBrunei Darussalam,BRN,1984,3782523088.4628\nBrunei Darussalam,BRN,1985,3523612563.06532\nBrunei Darussalam,BRN,1986,2358592817.12134\nBrunei Darussalam,BRN,1987,2754463437.79677\nBrunei Darussalam,BRN,1988,2690717551.18267\nBrunei Darussalam,BRN,1989,2985467979.28524\nBrunei Darussalam,BRN,1990,3520551724.13793\nBrunei Darussalam,BRN,1991,3701667052.55846\nBrunei Darussalam,BRN,1992,4183548189.07305\nBrunei Darussalam,BRN,1993,4105706151.75145\nBrunei Darussalam,BRN,1994,4087337959.93191\nBrunei Darussalam,BRN,1995,4734020036.68689\nBrunei Darussalam,BRN,1996,5115602836.87943\nBrunei Darussalam,BRN,1997,5197332974.13793\nBrunei Darussalam,BRN,1998,4051147227.53346\nBrunei Darussalam,BRN,1999,4600000000\nBrunei Darussalam,BRN,2000,6001153306.2645\nBrunei Darussalam,BRN,2001,5601090584.36122\nBrunei Darussalam,BRN,2002,5843329107.56171\nBrunei Darussalam,BRN,2003,6557333084.60567\nBrunei Darussalam,BRN,2004,7872333215.00414\nBrunei Darussalam,BRN,2005,9531402847.87311\nBrunei Darussalam,BRN,2006,11470703002.0769\nBrunei Darussalam,BRN,2007,12247694247.2298\nBrunei Darussalam,BRN,2008,14393099068.5859\nBrunei Darussalam,BRN,2009,10732366286.2643\nBrunei Darussalam,BRN,2010,13707370737.0737\nBrunei Darussalam,BRN,2011,18525319977.7407\nBrunei Darussalam,BRN,2012,19048495518.5659\nBrunei Darussalam,BRN,2013,18093829923.2737\nBrunei Darussalam,BRN,2014,17098342541.4365\nBrunei Darussalam,BRN,2015,12930394937.8137\nBrunei Darussalam,BRN,2016,11400653731.9916\nBulgaria,BGR,1980,19839230769.2308\nBulgaria,BGR,1981,19870000000\nBulgaria,BGR,1982,19342000000\nBulgaria,BGR,1983,16563666666.6667\nBulgaria,BGR,1984,17594944444.4444\nBulgaria,BGR,1985,17155421052.6316\nBulgaria,BGR,1986,20249294117.6471\nBulgaria,BGR,1987,28101000000\nBulgaria,BGR,1988,22555941176.4706\nBulgaria,BGR,1989,21988444444.4444\nBulgaria,BGR,1990,20632090909.0909\nBulgaria,BGR,1991,10943548387.0968\nBulgaria,BGR,1992,10350515463.9175\nBulgaria,BGR,1993,10829710144.9275\nBulgaria,BGR,1994,9697416974.16974\nBulgaria,BGR,1995,13063422619.0476\nBulgaria,BGR,1996,10109404159.6402\nBulgaria,BGR,1997,11195630536.8928\nBulgaria,BGR,1998,14630974778.4594\nBulgaria,BGR,1999,13495062850.302\nBulgaria,BGR,2000,13148099185.2305\nBulgaria,BGR,2001,14135393875.5893\nBulgaria,BGR,2002,16360346653.8276\nBulgaria,BGR,2003,21074775206.3254\nBulgaria,BGR,2004,26094622563.6468\nBulgaria,BGR,2005,29821662537.3229\nBulgaria,BGR,2006,34304448149.8108\nBulgaria,BGR,2007,44765733379.986\nBulgaria,BGR,2008,54409138498.3548\nBulgaria,BGR,2009,51884481410.3931\nBulgaria,BGR,2010,50610031135.7791\nBulgaria,BGR,2011,57418391041.5926\nBulgaria,BGR,2012,53903028252.2996\nBulgaria,BGR,2013,55758744571.1183\nBulgaria,BGR,2014,56732006512.0065\nBulgaria,BGR,2015,50199117547.0415\nBulgaria,BGR,2016,53237882472.7108\nBurkina Faso,BFA,1960,330442817.168859\nBurkina Faso,BFA,1961,350247237.11684\nBurkina Faso,BFA,1962,379567178.256898\nBurkina Faso,BFA,1963,394040749.12567\nBurkina Faso,BFA,1964,410321785.631059\nBurkina Faso,BFA,1965,422916848.424208\nBurkina Faso,BFA,1966,433889831.584706\nBurkina Faso,BFA,1967,450753993.176448\nBurkina Faso,BFA,1968,460442864.205949\nBurkina Faso,BFA,1969,478298781.545658\nBurkina Faso,BFA,1970,458404330.125096\nBurkina Faso,BFA,1971,482411278.982439\nBurkina Faso,BFA,1972,578595583.975723\nBurkina Faso,BFA,1973,674773821.151416\nBurkina Faso,BFA,1974,751133642.647461\nBurkina Faso,BFA,1975,939972703.463021\nBurkina Faso,BFA,1976,976547572.215824\nBurkina Faso,BFA,1977,1131225278.77773\nBurkina Faso,BFA,1978,1475584037.28156\nBurkina Faso,BFA,1979,1748480982.18517\nBurkina Faso,BFA,1980,1928720390.28869\nBurkina Faso,BFA,1981,1775842679.94056\nBurkina Faso,BFA,1982,1754450379.2077\nBurkina Faso,BFA,1983,1600278756.43589\nBurkina Faso,BFA,1984,1459880352.6483\nBurkina Faso,BFA,1985,1552493413.98989\nBurkina Faso,BFA,1986,2036303381.20142\nBurkina Faso,BFA,1987,2369835438.62393\nBurkina Faso,BFA,1988,2616040645.87263\nBurkina Faso,BFA,1989,2615588545.68629\nBurkina Faso,BFA,1990,3101301780.95067\nBurkina Faso,BFA,1991,3135045684.1006\nBurkina Faso,BFA,1992,2240264711.54816\nBurkina Faso,BFA,1993,2332018010.55341\nBurkina Faso,BFA,1994,1895290964.80829\nBurkina Faso,BFA,1995,2379518099.2266\nBurkina Faso,BFA,1996,2586550747.09844\nBurkina Faso,BFA,1997,2447669403.89018\nBurkina Faso,BFA,1998,2804902723.73145\nBurkina Faso,BFA,1999,2993753187.09677\nBurkina Faso,BFA,2000,2628920056.10098\nBurkina Faso,BFA,2001,2812845513.57125\nBurkina Faso,BFA,2002,3205592289.79773\nBurkina Faso,BFA,2003,4205691222.11396\nBurkina Faso,BFA,2004,4838551099.70985\nBurkina Faso,BFA,2005,5462709498.45119\nBurkina Faso,BFA,2006,5844669845.53733\nBurkina Faso,BFA,2007,6771277870.96412\nBurkina Faso,BFA,2008,8369637065.40255\nBurkina Faso,BFA,2009,8369175126.25316\nBurkina Faso,BFA,2010,8979966766.07232\nBurkina Faso,BFA,2011,10724063457.8326\nBurkina Faso,BFA,2012,11166063466.5623\nBurkina Faso,BFA,2013,11947176341.9966\nBurkina Faso,BFA,2014,12377391462.6377\nBurkina Faso,BFA,2015,10419303761.3524\nBurkina Faso,BFA,2016,11693235542.0671\nBurundi,BDI,1960,195999990\nBurundi,BDI,1961,202999992\nBurundi,BDI,1962,213500006\nBurundi,BDI,1963,232749998\nBurundi,BDI,1964,260750008\nBurundi,BDI,1965,158994962.962963\nBurundi,BDI,1966,165444571.428571\nBurundi,BDI,1967,178297142.857143\nBurundi,BDI,1968,183200000\nBurundi,BDI,1969,190205714.285714\nBurundi,BDI,1970,242732571.428571\nBurundi,BDI,1971,252842285.714286\nBurundi,BDI,1972,246804571.428571\nBurundi,BDI,1973,304339839.552146\nBurundi,BDI,1974,345263492.063492\nBurundi,BDI,1975,420986666.666667\nBurundi,BDI,1976,448412753.623188\nBurundi,BDI,1977,547535555.555556\nBurundi,BDI,1978,610225555.555556\nBurundi,BDI,1979,782496666.666667\nBurundi,BDI,1980,919726666.666667\nBurundi,BDI,1981,969046666.666667\nBurundi,BDI,1982,1013222222.22222\nBurundi,BDI,1983,1082926304.46477\nBurundi,BDI,1984,987143931.166987\nBurundi,BDI,1985,1149979285.77347\nBurundi,BDI,1986,1201725497.06578\nBurundi,BDI,1987,1131466494.01101\nBurundi,BDI,1988,1082403219.48787\nBurundi,BDI,1989,1113924130.41149\nBurundi,BDI,1990,1132101252.51817\nBurundi,BDI,1991,1167398478.3459\nBurundi,BDI,1992,1083037670.60484\nBurundi,BDI,1993,938632612.026359\nBurundi,BDI,1994,925030590.153683\nBurundi,BDI,1995,1000428393.88528\nBurundi,BDI,1996,869033856.317093\nBurundi,BDI,1997,972896267.915425\nBurundi,BDI,1998,893770806.077641\nBurundi,BDI,1999,808077223.365746\nBurundi,BDI,2000,870486065.883137\nBurundi,BDI,2001,876794723.068586\nBurundi,BDI,2002,825394490.159111\nBurundi,BDI,2003,784654423.620476\nBurundi,BDI,2004,915257323.3961\nBurundi,BDI,2005,1117257279.46188\nBurundi,BDI,2006,1273180597.02711\nBurundi,BDI,2007,1356078278.18821\nBurundi,BDI,2008,1611634331.64869\nBurundi,BDI,2009,1739781488.7457\nBurundi,BDI,2010,2026864469.36388\nBurundi,BDI,2011,2355652125.85184\nBurundi,BDI,2012,2472384906.99793\nBurundi,BDI,2013,2714505634.52629\nBurundi,BDI,2014,3093647226.8107\nBurundi,BDI,2015,3066681386.73841\nBurundi,BDI,2016,3007029030.4001\nCabo Verde,CPV,1980,142246875.536716\nCabo Verde,CPV,1981,139468114.599741\nCabo Verde,CPV,1982,140630758.594899\nCabo Verde,CPV,1983,138476239.366792\nCabo Verde,CPV,1984,132019065.033419\nCabo Verde,CPV,1985,137728155.212661\nCabo Verde,CPV,1986,190651207.999511\nCabo Verde,CPV,1987,235253171.841062\nCabo Verde,CPV,1988,264308140.285149\nCabo Verde,CPV,1989,267448513.108168\nCabo Verde,CPV,1990,306891107.262039\nCabo Verde,CPV,1991,319827058.592875\nCabo Verde,CPV,1992,357160985.327413\nCabo Verde,CPV,1993,490417389.682569\nCabo Verde,CPV,1994,406580652.330537\nCabo Verde,CPV,1995,487148993.533109\nCabo Verde,CPV,1996,501979069.274683\nCabo Verde,CPV,1997,490608657.924976\nCabo Verde,CPV,1998,521910560.524868\nCabo Verde,CPV,1999,592416703.058878\nCabo Verde,CPV,2000,539227277.626411\nCabo Verde,CPV,2001,563024383.296626\nCabo Verde,CPV,2002,620974660.230303\nCabo Verde,CPV,2003,813963830.179217\nCabo Verde,CPV,2004,924318490.7598\nCabo Verde,CPV,2005,971977088.156914\nCabo Verde,CPV,2006,1107891063.43863\nCabo Verde,CPV,2007,1513934037.24782\nCabo Verde,CPV,2008,1789333748.6799\nCabo Verde,CPV,2009,1711817181.52969\nCabo Verde,CPV,2010,1664310769.55229\nCabo Verde,CPV,2011,1864824080.69256\nCabo Verde,CPV,2012,1751888561.72747\nCabo Verde,CPV,2013,1850951315.45564\nCabo Verde,CPV,2014,1858121723.24993\nCabo Verde,CPV,2015,1574288667.69981\nCabo Verde,CPV,2016,1617467435.77007\nCambodia,KHM,1960,637142865.714286\nCambodia,KHM,1961,642857134.285714\nCambodia,KHM,1962,660000008.571429\nCambodia,KHM,1963,728571437.142857\nCambodia,KHM,1964,782857128.571429\nCambodia,KHM,1965,868571428.571429\nCambodia,KHM,1966,914285714.285714\nCambodia,KHM,1967,962857134.285714\nCambodia,KHM,1968,1065714248.57143\nCambodia,KHM,1969,978873232.394366\nCambodia,KHM,1970,718401157.724163\nCambodia,KHM,1971,969911421.394181\nCambodia,KHM,1972,505549441.375077\nCambodia,KHM,1973,702899155.982033\nCambodia,KHM,1974,588443893.689773\nCambodia,KHM,1993,2533727592.04165\nCambodia,KHM,1994,2791435272.26653\nCambodia,KHM,1995,3441205692.9166\nCambodia,KHM,1996,3506695719.57259\nCambodia,KHM,1997,3443413388.6909\nCambodia,KHM,1998,3120425502.58253\nCambodia,KHM,1999,3517242477.2285\nCambodia,KHM,2000,3654031716.26881\nCambodia,KHM,2001,3984000517.02345\nCambodia,KHM,2002,4284028482.53766\nCambodia,KHM,2003,4658246918.27092\nCambodia,KHM,2004,5337833248.03924\nCambodia,KHM,2005,6293046161.83262\nCambodia,KHM,2006,7274595706.67154\nCambodia,KHM,2007,8639235842.18075\nCambodia,KHM,2008,10351914093.1723\nCambodia,KHM,2009,10401851850.6108\nCambodia,KHM,2010,11242275198.9783\nCambodia,KHM,2011,12829541141.0127\nCambodia,KHM,2012,14038383450.186\nCambodia,KHM,2013,15449630418.5486\nCambodia,KHM,2014,16777820332.7059\nCambodia,KHM,2015,18049954289.4229\nCambodia,KHM,2016,20016747754.0192\nCameroon,CMR,1960,618740988.011405\nCameroon,CMR,1961,657597382.759152\nCameroon,CMR,1962,699373701.217138\nCameroon,CMR,1963,723624365.288138\nCameroon,CMR,1964,782384527.813649\nCameroon,CMR,1965,814139855.756458\nCameroon,CMR,1966,853268771.097081\nCameroon,CMR,1967,934079050.346173\nCameroon,CMR,1968,1053077155.17925\nCameroon,CMR,1969,1152418514.82616\nCameroon,CMR,1970,1160002260.94729\nCameroon,CMR,1971,1233991075.11626\nCameroon,CMR,1972,1430951331.85034\nCameroon,CMR,1973,1758727395.18703\nCameroon,CMR,1974,2255496995.49378\nCameroon,CMR,1975,2752771043.88609\nCameroon,CMR,1976,3076592431.27204\nCameroon,CMR,1977,3366368664.59706\nCameroon,CMR,1978,4409920643.6422\nCameroon,CMR,1979,5811444660.65752\nCameroon,CMR,1980,6740756568.91566\nCameroon,CMR,1981,7636345827.34308\nCameroon,CMR,1982,7322914570.15588\nCameroon,CMR,1983,7381854746.91629\nCameroon,CMR,1984,7801858825.18416\nCameroon,CMR,1985,8148223603.58399\nCameroon,CMR,1986,10621158532.5193\nCameroon,CMR,1987,12302471429.4318\nCameroon,CMR,1988,12493286761.7341\nCameroon,CMR,1989,11140055364.1502\nCameroon,CMR,1990,11151578050.7356\nCameroon,CMR,1991,12434370004.9586\nCameroon,CMR,1992,11396310990.2197\nCameroon,CMR,1993,15498179313.0425\nCameroon,CMR,1994,10600157683.8412\nCameroon,CMR,1995,9643953174.77349\nCameroon,CMR,1996,10513387441.6194\nCameroon,CMR,1997,10833497457.5123\nCameroon,CMR,1998,10612847429.35\nCameroon,CMR,1999,11198378749.4719\nCameroon,CMR,2000,10083937740.0624\nCameroon,CMR,2001,10371327756.4548\nCameroon,CMR,2002,11579343088.1613\nCameroon,CMR,2003,14548845764.5325\nCameroon,CMR,2004,17430933517.2998\nCameroon,CMR,2005,17944084201.4901\nCameroon,CMR,2006,19356046327.8995\nCameroon,CMR,2007,22365265025.66\nCameroon,CMR,2008,26409781215.1844\nCameroon,CMR,2009,26017925551.8426\nCameroon,CMR,2010,26143818509.6421\nCameroon,CMR,2011,29337006833.0825\nCameroon,CMR,2012,29104437355.0395\nCameroon,CMR,2013,32348149947.3727\nCameroon,CMR,2014,34942948737.3967\nCameroon,CMR,2015,30916218544.4404\nCameroon,CMR,2016,32217497470.489\nCanada,CAN,1960,41093453544.9096\nCanada,CAN,1961,40767969453.696\nCanada,CAN,1962,41978852041.4426\nCanada,CAN,1963,44657169109.224\nCanada,CAN,1964,48882938810.2204\nCanada,CAN,1965,53909570342.169\nCanada,CAN,1966,60358632035.1532\nCanada,CAN,1967,64768831262.1761\nCanada,CAN,1968,70759031841.7237\nCanada,CAN,1969,77887510241.7083\nCanada,CAN,1970,87896095224.4234\nCanada,CAN,1971,99271961477.5203\nCanada,CAN,1972,113082820992.019\nCanada,CAN,1973,131321859214.079\nCanada,CAN,1974,160408697648.262\nCanada,CAN,1975,173834029787.652\nCanada,CAN,1976,206575564401.623\nCanada,CAN,1977,211612156934.65\nCanada,CAN,1978,218632867449.812\nCanada,CAN,1979,243072102185.419\nCanada,CAN,1980,273853826377.01\nCanada,CAN,1981,306214863624.99\nCanada,CAN,1982,313506525087.136\nCanada,CAN,1983,340547711781.889\nCanada,CAN,1984,355372558103.621\nCanada,CAN,1985,364756499450.751\nCanada,CAN,1986,377437927311.983\nCanada,CAN,1987,431316742081.448\nCanada,CAN,1988,507354351182.254\nCanada,CAN,1989,565055743243.243\nCanada,CAN,1990,593929550908.468\nCanada,CAN,1991,610328183643.188\nCanada,CAN,1992,592387689252.916\nCanada,CAN,1993,577170761956.438\nCanada,CAN,1994,578139279437.61\nCanada,CAN,1995,604031623433.401\nCanada,CAN,1996,628546387972.131\nCanada,CAN,1997,652825364726.275\nCanada,CAN,1998,631813279406.808\nCanada,CAN,1999,676082654640.91\nCanada,CAN,2000,742293448252.643\nCanada,CAN,2001,736379777892.562\nCanada,CAN,2002,757950678646.53\nCanada,CAN,2003,892380986367.854\nCanada,CAN,2004,1023196003074.56\nCanada,CAN,2005,1169357979864.66\nCanada,CAN,2006,1315415197461.21\nCanada,CAN,2007,1464977190205.75\nCanada,CAN,2008,1549131208997.19\nCanada,CAN,2009,1371153004986.44\nCanada,CAN,2010,1613464422811.13\nCanada,CAN,2011,1788647906047.76\nCanada,CAN,2012,1824288757447.57\nCanada,CAN,2013,1842628005830.18\nCanada,CAN,2014,1792883225804.38\nCanada,CAN,2015,1552807652015.37\nCanada,CAN,2016,1529760492201.35\nCayman Islands,CYM,1996,1012444074.07495\nCayman Islands,CYM,2006,3207032512.94205\nCentral African Republic,CAF,1960,112155598.949571\nCentral African Republic,CAF,1961,123134584.467673\nCentral African Republic,CAF,1962,124482748.937917\nCentral African Republic,CAF,1963,129379097.888958\nCentral African Republic,CAF,1964,142025069.461676\nCentral African Republic,CAF,1965,150574816.300764\nCentral African Republic,CAF,1966,157930041.875883\nCentral African Republic,CAF,1967,163820538.867947\nCentral African Republic,CAF,1968,191767436.956884\nCentral African Republic,CAF,1969,188039191.323608\nCentral African Republic,CAF,1970,189106554.521277\nCentral African Republic,CAF,1971,201450768.367553\nCentral African Republic,CAF,1972,230317908.038643\nCentral African Republic,CAF,1973,271183061.359635\nCentral African Republic,CAF,1974,281398668.160613\nCentral African Republic,CAF,1975,378660016.265936\nCentral African Republic,CAF,1976,451152449.984411\nCentral African Republic,CAF,1977,507298120.68315\nCentral African Republic,CAF,1978,610578523.761178\nCentral African Republic,CAF,1979,700764892.704831\nCentral African Republic,CAF,1980,797048028.773247\nCentral African Republic,CAF,1981,694803502.722356\nCentral African Republic,CAF,1982,748312283.726758\nCentral African Republic,CAF,1983,658679394.907969\nCentral African Republic,CAF,1984,637820620.670195\nCentral African Republic,CAF,1985,864849765.059664\nCentral African Republic,CAF,1986,1122265026.38274\nCentral African Republic,CAF,1987,1200991825.95398\nCentral African Republic,CAF,1988,1264899368.20165\nCentral African Republic,CAF,1989,1233930277.04922\nCentral African Republic,CAF,1990,1440711395.67069\nCentral African Republic,CAF,1991,1377375030.52921\nCentral African Republic,CAF,1992,1411917558.45855\nCentral African Republic,CAF,1993,1278781166.72188\nCentral African Republic,CAF,1994,851174350.649409\nCentral African Republic,CAF,1995,1115389731.79119\nCentral African Republic,CAF,1996,1007791186.20106\nCentral African Republic,CAF,1997,937741468.029676\nCentral African Republic,CAF,1998,967338348.658314\nCentral African Republic,CAF,1999,999477510.686632\nCentral African Republic,CAF,2000,914500299.097034\nCentral African Republic,CAF,2001,931833302.752857\nCentral African Republic,CAF,2002,991387870.12463\nCentral African Republic,CAF,2003,1139754799.16304\nCentral African Republic,CAF,2004,1270080250.65268\nCentral African Republic,CAF,2005,1350301057.06866\nCentral African Republic,CAF,2006,1460562038.37097\nCentral African Republic,CAF,2007,1698125617.92304\nCentral African Republic,CAF,2008,1985239276.62611\nCentral African Republic,CAF,2009,1981728140.77833\nCentral African Republic,CAF,2010,1986014845.63184\nCentral African Republic,CAF,2011,2212699746.81377\nCentral African Republic,CAF,2012,2184183758.31567\nCentral African Republic,CAF,2013,1518565219.01061\nCentral African Republic,CAF,2014,1702898939.55483\nCentral African Republic,CAF,2015,1583776759.97697\nCentral African Republic,CAF,2016,1756124677.19671\nChad,TCD,1960,313582727.638108\nChad,TCD,1961,333975336.626596\nChad,TCD,1962,357635713.876856\nChad,TCD,1963,371767002.656036\nChad,TCD,1964,392247517.601949\nChad,TCD,1965,416926302.963497\nChad,TCD,1966,432794922.459759\nChad,TCD,1967,449826322.995107\nChad,TCD,1968,453980096.654412\nChad,TCD,1969,471635620.924368\nChad,TCD,1970,469266736.605101\nChad,TCD,1971,501866730.722503\nChad,TCD,1972,585427545.723598\nChad,TCD,1973,647199482.827982\nChad,TCD,1974,652532796.06664\nChad,TCD,1975,864602103.303074\nChad,TCD,1976,866044961.048354\nChad,TCD,1977,935360466.351488\nChad,TCD,1978,1113920122.61232\nChad,TCD,1979,1004316495.11176\nChad,TCD,1980,1033002401.82543\nChad,TCD,1981,876937559.724954\nChad,TCD,1982,834369860.427317\nChad,TCD,1983,832415805.956265\nChad,TCD,1984,919103735.322906\nChad,TCD,1985,1033069709.99506\nChad,TCD,1986,1067828247.23579\nChad,TCD,1987,1163426850.65024\nChad,TCD,1988,1482597298.88729\nChad,TCD,1989,1433686309.83641\nChad,TCD,1990,1738605558.05436\nChad,TCD,1991,1877138041.64308\nChad,TCD,1992,1881847676.80752\nChad,TCD,1993,1463251055.40068\nChad,TCD,1994,1179837954.72193\nChad,TCD,1995,1445919969.89272\nChad,TCD,1996,1607345450.04578\nChad,TCD,1997,1544689502.82472\nChad,TCD,1998,1744794457.276\nChad,TCD,1999,1534673583.2487\nChad,TCD,2000,1385058161.76746\nChad,TCD,2001,1709347793.32873\nChad,TCD,2002,1987622279.11463\nChad,TCD,2003,2736666515.8294\nChad,TCD,2004,4414929219.99649\nChad,TCD,2005,6646663561.2656\nChad,TCD,2006,7422102655.98832\nChad,TCD,2007,8638711442.7705\nChad,TCD,2008,10351932604.4154\nChad,TCD,2009,9253484108.49701\nChad,TCD,2010,10657705536.4978\nChad,TCD,2011,12156380425.0825\nChad,TCD,2012,12368071038.7362\nChad,TCD,2013,12949854262.8127\nChad,TCD,2014,13922223233.5184\nChad,TCD,2015,10888798113.7866\nChad,TCD,2016,9600761473.78738\nChannel Islands,CHI,1998,5945677376.61477\nChannel Islands,CHI,1999,6262740656.85164\nChannel Islands,CHI,2000,6439703434.71024\nChannel Islands,CHI,2001,6232906290.4851\nChannel Islands,CHI,2002,6663669064.7482\nChannel Islands,CHI,2003,7332244897.95918\nChannel Islands,CHI,2004,8553643354.08275\nChannel Islands,CHI,2005,8827272727.27273\nChannel Islands,CHI,2006,9676172953.08188\nChannel Islands,CHI,2007,11514605842.3369\nChile,CHL,1960,4110000000\nChile,CHL,1961,4609727272.72727\nChile,CHL,1962,5416272727.27273\nChile,CHL,1963,5668187500\nChile,CHL,1964,5982347826.08696\nChile,CHL,1965,6026593750\nChile,CHL,1966,7072641025.64103\nChile,CHL,1967,7013196078.43137\nChile,CHL,1968,7167086956.52174\nChile,CHL,1969,8377093023.25581\nChile,CHL,1970,9126309734.51328\nChile,CHL,1971,10884114754.0984\nChile,CHL,1972,11853817307.6923\nChile,CHL,1973,16836261173.1844\nChile,CHL,1974,16210404183.5358\nChile,CHL,1975,7622217352.34216\nChile,CHL,1976,10341925249.0421\nChile,CHL,1977,13962893421.5413\nChile,CHL,1978,15989933708.1491\nChile,CHL,1979,21803696985.2349\nChile,CHL,1980,29036709871.7949\nChile,CHL,1981,34509878043.5897\nChile,CHL,1982,25325893205.657\nChile,CHL,1983,20355959237.2128\nChile,CHL,1984,19622527479.6913\nChile,CHL,1985,17702885393.5099\nChile,CHL,1986,18891048818.7426\nChile,CHL,1987,22255407684.6999\nChile,CHL,1988,26040229793.0697\nChile,CHL,1989,29885685142.9107\nChile,CHL,1990,33113887817.9731\nChile,CHL,1991,37834793730.3133\nChile,CHL,1992,45964327558.8836\nChile,CHL,1993,49297773130.1185\nChile,CHL,1994,57008425295.8256\nChile,CHL,1995,73447063319.3034\nChile,CHL,1996,78039572221.6024\nChile,CHL,1997,84952360922.4679\nChile,CHL,1998,81577430181.4074\nChile,CHL,1999,75173794497.0321\nChile,CHL,2000,77860932151.8471\nChile,CHL,2001,70979923960.3742\nChile,CHL,2002,69736811435.1032\nChile,CHL,2003,75643459839.6008\nChile,CHL,2004,99210392857.6116\nChile,CHL,2005,122964812046.073\nChile,CHL,2006,154788024805.808\nChile,CHL,2007,173605968179.255\nChile,CHL,2008,179638496278.574\nChile,CHL,2009,172389498444.621\nChile,CHL,2010,218537551220.071\nChile,CHL,2011,252251992029.442\nChile,CHL,2012,267122320056.702\nChile,CHL,2013,278384332694.313\nChile,CHL,2014,260990299051.116\nChile,CHL,2015,242517905161.664\nChile,CHL,2016,247027912574.35\nChina,CHN,1960,59716467625.3148\nChina,CHN,1961,50056868957.6732\nChina,CHN,1962,47209359005.6056\nChina,CHN,1963,50706799902.5103\nChina,CHN,1964,59708343488.5043\nChina,CHN,1965,70436266146.7219\nChina,CHN,1966,76720285969.6157\nChina,CHN,1967,72881631326.6715\nChina,CHN,1968,70846535055.6503\nChina,CHN,1969,79705906247.4612\nChina,CHN,1970,92602973434.0726\nChina,CHN,1971,99800958648.1436\nChina,CHN,1972,113687586299.051\nChina,CHN,1973,138544284708.957\nChina,CHN,1974,144182133387.722\nChina,CHN,1975,163431551779.761\nChina,CHN,1976,153940455341.506\nChina,CHN,1977,174938098826.569\nChina,CHN,1978,149540752829.268\nChina,CHN,1979,178280594413.043\nChina,CHN,1980,191149211575\nChina,CHN,1981,195866382432.54\nChina,CHN,1982,205089699858.779\nChina,CHN,1983,230686747153.257\nChina,CHN,1984,259946510957.143\nChina,CHN,1985,309488028132.653\nChina,CHN,1986,300758100107.246\nChina,CHN,1987,272972974764.574\nChina,CHN,1988,312353631207.819\nChina,CHN,1989,347768051311.741\nChina,CHN,1990,360857912565.966\nChina,CHN,1991,383373318083.624\nChina,CHN,1992,426915712711.146\nChina,CHN,1993,444731282436.762\nChina,CHN,1994,564324670005.917\nChina,CHN,1995,734547898220.508\nChina,CHN,1996,863746717503.789\nChina,CHN,1997,961603952951.82\nChina,CHN,1998,1029043097554.08\nChina,CHN,1999,1093997267271.06\nChina,CHN,2000,1211346869605.24\nChina,CHN,2001,1339395718865.3\nChina,CHN,2002,1470550015081.55\nChina,CHN,2003,1660287965662.68\nChina,CHN,2004,1955347004963.27\nChina,CHN,2005,2285965892360.54\nChina,CHN,2006,2752131773355.16\nChina,CHN,2007,3552182311652.97\nChina,CHN,2008,4598206091384\nChina,CHN,2009,5109953609257.25\nChina,CHN,2010,6100620488867.55\nChina,CHN,2011,7572553836875.34\nChina,CHN,2012,8560547314679.28\nChina,CHN,2013,9607224481532.65\nChina,CHN,2014,10482372109961.9\nChina,CHN,2015,11064666282625.5\nChina,CHN,2016,11199145157649.2\nColombia,COL,1960,4040948153.73022\nColombia,COL,1961,4552914000\nColombia,COL,1962,4968603735.58222\nColombia,COL,1963,4838841455.55556\nColombia,COL,1964,5992169466.66667\nColombia,COL,1965,5790247619.04762\nColombia,COL,1966,5452762962.96296\nColombia,COL,1967,5727195020.23203\nColombia,COL,1968,5918455409.8099\nColombia,COL,1969,6405427873.70755\nColombia,COL,1970,7198360460.19887\nColombia,COL,1971,7820380970.53674\nColombia,COL,1972,8671358732.68486\nColombia,COL,1973,10315760000.3394\nColombia,COL,1974,12370029583.6419\nColombia,COL,1975,13098633901.8673\nColombia,COL,1976,15341403660.4698\nColombia,COL,1977,19470960619.1297\nColombia,COL,1978,23263511958.0509\nColombia,COL,1979,27940411250.2732\nColombia,COL,1980,33400735644.0481\nColombia,COL,1981,36388366869.0309\nColombia,COL,1982,38968039721.748\nColombia,COL,1983,38729822781.5997\nColombia,COL,1984,38253120737.9671\nColombia,COL,1985,34894411351.983\nColombia,COL,1986,34942489683.9712\nColombia,COL,1987,36373307085.0887\nColombia,COL,1988,39212550050.4223\nColombia,COL,1989,39540080200.3938\nColombia,COL,1990,40274204595.2296\nColombia,COL,1991,41239551378.2482\nColombia,COL,1992,49279585355.0948\nColombia,COL,1993,55802538219.0264\nColombia,COL,1994,81703500846.0364\nColombia,COL,1995,92507279383.0387\nColombia,COL,1996,97160109277.8087\nColombia,COL,1997,106659508271.255\nColombia,COL,1998,98443739941.1664\nColombia,COL,1999,86186158684.7685\nColombia,COL,2000,99886577330.7271\nColombia,COL,2001,98203546156.3102\nColombia,COL,2002,97933391976.083\nColombia,COL,2003,94684584162.773\nColombia,COL,2004,117074863821.85\nColombia,COL,2005,146566266310.568\nColombia,COL,2006,162590145579.958\nColombia,COL,2007,207416490982.99\nColombia,COL,2008,243982436734.233\nColombia,COL,2009,233821670220.294\nColombia,COL,2010,287018179193.923\nColombia,COL,2011,335415162155.574\nColombia,COL,2012,369659697842.885\nColombia,COL,2013,380191876348.93\nColombia,COL,2014,378195707612.393\nColombia,COL,2015,291519596338.693\nColombia,COL,2016,282462551366.878\nComoros,COM,1980,123505640.914474\nComoros,COM,1981,114271897.268272\nComoros,COM,1982,107089552.302395\nComoros,COM,1983,111519676.021905\nComoros,COM,1984,107489822.704044\nComoros,COM,1985,114490697.57503\nComoros,COM,1986,162487763.894624\nComoros,COM,1987,196433684.042405\nComoros,COM,1988,207476554.806734\nComoros,COM,1989,198733185.875107\nComoros,COM,1990,250030760.754786\nComoros,COM,1991,246823428.906664\nComoros,COM,1992,266191040.373328\nComoros,COM,1993,263568114.445462\nComoros,COM,1994,185761822.560488\nComoros,COM,1995,231896229.562629\nComoros,COM,1996,230495751.446593\nComoros,COM,1997,212099634.697751\nComoros,COM,1998,215394066.068976\nComoros,COM,1999,222580453.753844\nComoros,COM,2000,203846427.738737\nComoros,COM,2001,220093812.206791\nComoros,COM,2002,246737679.472106\nComoros,COM,2003,317562269.371106\nComoros,COM,2004,368143118.68996\nComoros,COM,2005,380372892.606774\nComoros,COM,2006,406111873.539847\nComoros,COM,2007,462453582.873627\nComoros,COM,2008,523134896.968654\nComoros,COM,2009,524157261.014644\nComoros,COM,2010,530493353.218937\nComoros,COM,2011,586281766.75997\nComoros,COM,2012,570865941.229395\nComoros,COM,2013,618663921.86116\nComoros,COM,2014,647720707.076427\nComoros,COM,2015,565689764.63263\nComoros,COM,2016,616654490.413179\n\"Congo, Dem. Rep.\",COD,1960,3359404132.31797\n\"Congo, Dem. Rep.\",COD,1961,3086746936.39789\n\"Congo, Dem. Rep.\",COD,1962,3779841409.55267\n\"Congo, Dem. Rep.\",COD,1963,6213185773.92265\n\"Congo, Dem. Rep.\",COD,1964,2881545277.14307\n\"Congo, Dem. Rep.\",COD,1965,4043901724.13762\n\"Congo, Dem. Rep.\",COD,1966,4532660145.32842\n\"Congo, Dem. Rep.\",COD,1967,3384063359.82333\n\"Congo, Dem. Rep.\",COD,1968,3909780525.37375\n\"Congo, Dem. Rep.\",COD,1969,5032434970.84174\n\"Congo, Dem. Rep.\",COD,1970,4877684933.12505\n\"Congo, Dem. Rep.\",COD,1971,5594770351.56981\n\"Congo, Dem. Rep.\",COD,1972,6173712809.28569\n\"Congo, Dem. Rep.\",COD,1973,7870239463.58461\n\"Congo, Dem. Rep.\",COD,1974,9596960174.34365\n\"Congo, Dem. Rep.\",COD,1975,10237343153.4311\n\"Congo, Dem. Rep.\",COD,1976,9648583220.47256\n\"Congo, Dem. Rep.\",COD,1977,12344424775.9239\n\"Congo, Dem. Rep.\",COD,1978,15372607995.4061\n\"Congo, Dem. Rep.\",COD,1979,15068422242.0571\n\"Congo, Dem. Rep.\",COD,1980,14394927492.9647\n\"Congo, Dem. Rep.\",COD,1981,12537821039.8252\n\"Congo, Dem. Rep.\",COD,1982,13651667370.5466\n\"Congo, Dem. Rep.\",COD,1983,11006712649.2175\n\"Congo, Dem. Rep.\",COD,1984,7857729192.85629\n\"Congo, Dem. Rep.\",COD,1985,7195042615.84176\n\"Congo, Dem. Rep.\",COD,1986,8095367168.16178\n\"Congo, Dem. Rep.\",COD,1987,7661625472.51189\n\"Congo, Dem. Rep.\",COD,1988,8861299976.68858\n\"Congo, Dem. Rep.\",COD,1989,9021862775.25443\n\"Congo, Dem. Rep.\",COD,1990,9349764580.35198\n\"Congo, Dem. Rep.\",COD,1991,9087965281.52807\n\"Congo, Dem. Rep.\",COD,1992,8206227134.00857\n\"Congo, Dem. Rep.\",COD,1993,10707792340.0276\n\"Congo, Dem. Rep.\",COD,1994,5820383305.54668\n\"Congo, Dem. Rep.\",COD,1995,5643439262.21735\n\"Congo, Dem. Rep.\",COD,1996,5771454939.62404\n\"Congo, Dem. Rep.\",COD,1997,6090840548.18784\n\"Congo, Dem. Rep.\",COD,1998,6215591269.89747\n\"Congo, Dem. Rep.\",COD,1999,4711259427.27273\n\"Congo, Dem. Rep.\",COD,2000,19088046305.7971\n\"Congo, Dem. Rep.\",COD,2001,7438189100.33333\n\"Congo, Dem. Rep.\",COD,2002,8728038525.14034\n\"Congo, Dem. Rep.\",COD,2003,8937567059.87754\n\"Congo, Dem. Rep.\",COD,2004,10297483481.223\n\"Congo, Dem. Rep.\",COD,2005,11964484667.9102\n\"Congo, Dem. Rep.\",COD,2006,14296507096.4135\n\"Congo, Dem. Rep.\",COD,2007,16364029327.3457\n\"Congo, Dem. Rep.\",COD,2008,19206060270.2521\n\"Congo, Dem. Rep.\",COD,2010,20523285374.187\n\"Congo, Dem. Rep.\",COD,2011,23849009737.6669\n\"Congo, Dem. Rep.\",COD,2012,27463220380.0054\n\"Congo, Dem. Rep.\",COD,2013,30014813755.772\n\"Congo, Dem. Rep.\",COD,2014,34028119332.6087\n\"Congo, Dem. Rep.\",COD,2015,36188521106.9294\n\"Congo, Dem. Rep.\",COD,2016,31930856401.9163\n\"Congo, Rep.\",COG,1960,131731862.568997\n\"Congo, Rep.\",COG,1961,151675739.160627\n\"Congo, Rep.\",COG,1962,166521239.863281\n\"Congo, Rep.\",COG,1963,172233430.871502\n\"Congo, Rep.\",COG,1964,185693724.845331\n\"Congo, Rep.\",COG,1965,198318063.860835\n\"Congo, Rep.\",COG,1966,220613582.369827\n\"Congo, Rep.\",COG,1967,237397428.336429\n\"Congo, Rep.\",COG,1968,251247458.012189\n\"Congo, Rep.\",COG,1969,265040036.059116\n\"Congo, Rep.\",COG,1970,274960699.85855\n\"Congo, Rep.\",COG,1971,322128019.323561\n\"Congo, Rep.\",COG,1972,410669262.897929\n\"Congo, Rep.\",COG,1973,541973362.480998\n\"Congo, Rep.\",COG,1974,585364635.354748\n\"Congo, Rep.\",COG,1975,767102679.018622\n\"Congo, Rep.\",COG,1976,754549600.548182\n\"Congo, Rep.\",COG,1977,765224030.636552\n\"Congo, Rep.\",COG,1978,878771771.29105\n\"Congo, Rep.\",COG,1979,1198749665.95066\n\"Congo, Rep.\",COG,1980,1705796849.54655\n\"Congo, Rep.\",COG,1981,1993512325.92286\n\"Congo, Rep.\",COG,1982,2160640566.5396\n\"Congo, Rep.\",COG,1983,2097274289.61512\n\"Congo, Rep.\",COG,1984,2193581366.40722\n\"Congo, Rep.\",COG,1985,2160872541.41887\n\"Congo, Rep.\",COG,1986,1849268214.68184\n\"Congo, Rep.\",COG,1987,2297753649.2798\n\"Congo, Rep.\",COG,1988,2212536313.33492\n\"Congo, Rep.\",COG,1989,2389593021.94866\n\"Congo, Rep.\",COG,1990,2798746050.58236\n\"Congo, Rep.\",COG,1991,2724853507.63856\n\"Congo, Rep.\",COG,1992,2933222705.80382\n\"Congo, Rep.\",COG,1993,1918970177.74925\n\"Congo, Rep.\",COG,1994,1769365438.87155\n\"Congo, Rep.\",COG,1995,2116003868.17928\n\"Congo, Rep.\",COG,1996,2540697537.71673\n\"Congo, Rep.\",COG,1997,2322719101.29807\n\"Congo, Rep.\",COG,1998,1949481380.64044\n\"Congo, Rep.\",COG,1999,2353909441.71514\n\"Congo, Rep.\",COG,2000,3219910666.03357\n\"Congo, Rep.\",COG,2001,2794259783.08097\n\"Congo, Rep.\",COG,2002,3019993738.77492\n\"Congo, Rep.\",COG,2003,3495868808.0512\n\"Congo, Rep.\",COG,2004,4648628921.36969\n\"Congo, Rep.\",COG,2005,6087003176.11624\n\"Congo, Rep.\",COG,2006,7731261310.93322\n\"Congo, Rep.\",COG,2007,8394688284.06224\n\"Congo, Rep.\",COG,2008,11859013280.9951\n\"Congo, Rep.\",COG,2009,9593537550.75063\n\"Congo, Rep.\",COG,2010,12007880438.6232\n\"Congo, Rep.\",COG,2011,14425607179.6639\n\"Congo, Rep.\",COG,2012,13677930123.5919\n\"Congo, Rep.\",COG,2013,14085851348.069\n\"Congo, Rep.\",COG,2014,14177437982.2619\n\"Congo, Rep.\",COG,2015,8553154580.39951\n\"Congo, Rep.\",COG,2016,7833508878.9666\nCosta Rica,CRI,1960,507513829.994855\nCosta Rica,CRI,1961,490325181.614275\nCosta Rica,CRI,1962,479180824.348506\nCosta Rica,CRI,1963,511902136.809973\nCosta Rica,CRI,1964,542578367.242598\nCosta Rica,CRI,1965,592981162.264151\nCosta Rica,CRI,1966,647305630.188679\nCosta Rica,CRI,1967,699456618.867925\nCosta Rica,CRI,1968,773841494.339623\nCosta Rica,CRI,1969,853630203.773585\nCosta Rica,CRI,1970,984830158.490566\nCosta Rica,CRI,1971,1077152902.29104\nCosta Rica,CRI,1972,1238251695.55388\nCosta Rica,CRI,1973,1528916185.23199\nCosta Rica,CRI,1974,1666544754.09836\nCosta Rica,CRI,1975,1960863465.5776\nCosta Rica,CRI,1976,2412555425.90432\nCosta Rica,CRI,1977,3072427012.83547\nCosta Rica,CRI,1978,3523208809.80163\nCosta Rica,CRI,1979,4035519323.22054\nCosta Rica,CRI,1980,4831447001.16686\nCosta Rica,CRI,1981,2623807074.2948\nCosta Rica,CRI,1982,2606621255.01581\nCosta Rica,CRI,1983,3976453966.73983\nCosta Rica,CRI,1984,4593908718.76172\nCosta Rica,CRI,1985,4796628461.38614\nCosta Rica,CRI,1986,5477895474.91039\nCosta Rica,CRI,1987,5841132961.60586\nCosta Rica,CRI,1988,6063759370.62937\nCosta Rica,CRI,1989,6866402028.10997\nCosta Rica,CRI,1990,7403457319.20472\nCosta Rica,CRI,1991,7168999428.24471\nCosta Rica,CRI,1992,8528593084.48749\nCosta Rica,CRI,1993,9537297507.16915\nCosta Rica,CRI,1994,10432619390.3609\nCosta Rica,CRI,1995,11513472693.8707\nCosta Rica,CRI,1996,11618286553.3677\nCosta Rica,CRI,1997,12552071367.1539\nCosta Rica,CRI,1998,13617405420.1174\nCosta Rica,CRI,1999,14195623424.811\nCosta Rica,CRI,2000,14949514585.1585\nCosta Rica,CRI,2001,15913363335.0564\nCosta Rica,CRI,2002,16504795453.2822\nCosta Rica,CRI,2003,17195867540.353\nCosta Rica,CRI,2004,18529767934.4743\nCosta Rica,CRI,2005,19952156474.8454\nCosta Rica,CRI,2006,22600431878.0024\nCosta Rica,CRI,2007,26743874286.8514\nCosta Rica,CRI,2008,30612932802.8991\nCosta Rica,CRI,2009,30562361123.0307\nCosta Rica,CRI,2010,37268635287.0856\nCosta Rica,CRI,2011,42262697840.385\nCosta Rica,CRI,2012,46473128285.5589\nCosta Rica,CRI,2013,49745088111.6953\nCosta Rica,CRI,2014,50656002895.8763\nCosta Rica,CRI,2015,54840103850.265\nCosta Rica,CRI,2016,57435507212.256\nCote d'Ivoire,CIV,1960,546203561.571989\nCote d'Ivoire,CIV,1961,618245639.221382\nCote d'Ivoire,CIV,1962,645284344.684118\nCote d'Ivoire,CIV,1963,761047045.830402\nCote d'Ivoire,CIV,1964,921063266.445521\nCote d'Ivoire,CIV,1965,919771356.426097\nCote d'Ivoire,CIV,1966,1024103034.29198\nCote d'Ivoire,CIV,1967,1082922892.15202\nCote d'Ivoire,CIV,1968,1281281245.67032\nCote d'Ivoire,CIV,1969,1361360157.26999\nCote d'Ivoire,CIV,1970,1455482990.24143\nCote d'Ivoire,CIV,1971,1584128262.08933\nCote d'Ivoire,CIV,1972,1849400599.77558\nCote d'Ivoire,CIV,1973,2508421234.8557\nCote d'Ivoire,CIV,1974,3070151901.06383\nCote d'Ivoire,CIV,1975,3893839190.26806\nCote d'Ivoire,CIV,1976,4662053707.7763\nCote d'Ivoire,CIV,1977,6265067857.86534\nCote d'Ivoire,CIV,1978,7900524897.8644\nCote d'Ivoire,CIV,1979,9142935857.94766\nCote d'Ivoire,CIV,1980,10175615441.8127\nCote d'Ivoire,CIV,1981,8432588483.85263\nCote d'Ivoire,CIV,1982,7567109766.61129\nCote d'Ivoire,CIV,1983,6838185418.53642\nCote d'Ivoire,CIV,1984,6841638714.5454\nCote d'Ivoire,CIV,1985,6977650069.33578\nCote d'Ivoire,CIV,1986,9158302205.36237\nCote d'Ivoire,CIV,1987,10087653189.3287\nCote d'Ivoire,CIV,1988,10255170459.986\nCote d'Ivoire,CIV,1989,9757410614.0812\nCote d'Ivoire,CIV,1990,10795850106.9547\nCote d'Ivoire,CIV,1991,10492628915.4927\nCote d'Ivoire,CIV,1992,11152971316.074\nCote d'Ivoire,CIV,1993,11045759468.9412\nCote d'Ivoire,CIV,1994,8313557450.25213\nCote d'Ivoire,CIV,1995,11000146839.497\nCote d'Ivoire,CIV,1996,12139234938.7863\nCote d'Ivoire,CIV,1997,11722142706.1278\nCote d'Ivoire,CIV,1998,12612033728.8572\nCote d'Ivoire,CIV,1999,12376639822.9265\nCote d'Ivoire,CIV,2000,10717022462.6859\nCote d'Ivoire,CIV,2001,11192560827.2962\nCote d'Ivoire,CIV,2002,12346919216.1359\nCote d'Ivoire,CIV,2003,15306602560.2533\nCote d'Ivoire,CIV,2004,16554441846.5192\nCote d'Ivoire,CIV,2005,17084928927.4555\nCote d'Ivoire,CIV,2006,17800887796.4987\nCote d'Ivoire,CIV,2007,20343635319.6174\nCote d'Ivoire,CIV,2008,24224903099.6283\nCote d'Ivoire,CIV,2009,24277493862.0625\nCote d'Ivoire,CIV,2010,24884505034.5564\nCote d'Ivoire,CIV,2011,25381616734.0693\nCote d'Ivoire,CIV,2012,27040562587.1771\nCote d'Ivoire,CIV,2013,31273049200.243\nCote d'Ivoire,CIV,2014,35372603446.2605\nCote d'Ivoire,CIV,2015,33145096414.0731\nCote d'Ivoire,CIV,2016,36372613022.942\nCroatia,HRV,1995,22387561845.2244\nCroatia,HRV,1996,23678012697.3612\nCroatia,HRV,1997,23822087053.2091\nCroatia,HRV,1998,25432144406.2043\nCroatia,HRV,1999,23386945596.6928\nCroatia,HRV,2000,21774273832.1031\nCroatia,HRV,2001,23289671102.3197\nCroatia,HRV,2002,26878499206.0165\nCroatia,HRV,2003,34658113497.39\nCroatia,HRV,2004,41574530815.5047\nCroatia,HRV,2005,45416358501.9835\nCroatia,HRV,2006,50453577898.4886\nCroatia,HRV,2007,60093155532.7678\nCroatia,HRV,2008,70481451814.3118\nCroatia,HRV,2009,62703095750.5257\nCroatia,HRV,2010,59665427464.5326\nCroatia,HRV,2011,62236751773.0497\nCroatia,HRV,2012,56485301967.4205\nCroatia,HRV,2013,57769872074.883\nCroatia,HRV,2014,57080369367.8021\nCroatia,HRV,2015,48921877447.764\nCroatia,HRV,2016,50714957390.5378\nCuba,CUB,1970,5693005200\nCuba,CUB,1971,6914658400\nCuba,CUB,1972,8135150891.92025\nCuba,CUB,1973,9987709650.18094\nCuba,CUB,1974,11405957317.0732\nCuba,CUB,1975,13027415243.9024\nCuba,CUB,1976,13789579902.5579\nCuba,CUB,1977,14206158674.6988\nCuba,CUB,1978,17844705324.6753\nCuba,CUB,1979,19584443287.6712\nCuba,CUB,1980,19912889861.1111\nCuba,CUB,1981,20150254096.3855\nCuba,CUB,1982,20953510235.2941\nCuba,CUB,1983,22204940512.2235\nCuba,CUB,1984,24039383608.4235\nCuba,CUB,1985,22920490774.102\nCuba,CUB,1986,24226574634.0293\nCuba,CUB,1987,25213935012.0819\nCuba,CUB,1988,27458999472.2955\nCuba,CUB,1989,27023468665.8977\nCuba,CUB,1990,28645436569.1489\nCuba,CUB,1991,24316556025.6585\nCuba,CUB,1992,22085858243.2432\nCuba,CUB,1993,22367254864.8649\nCuba,CUB,1994,28448326756.7568\nCuba,CUB,1995,30429803651.2192\nCuba,CUB,1996,25017300000\nCuba,CUB,1997,25366200000\nCuba,CUB,1998,25736331247.1786\nCuba,CUB,1999,28364615241.6894\nCuba,CUB,2000,30565400000\nCuba,CUB,2001,31682400000\nCuba,CUB,2002,33590500000\nCuba,CUB,2003,35901200000\nCuba,CUB,2004,38203000000\nCuba,CUB,2005,42643836074.8\nCuba,CUB,2006,52742800000\nCuba,CUB,2007,58603900000\nCuba,CUB,2008,60806300000\nCuba,CUB,2009,62080000000\nCuba,CUB,2010,64328000000\nCuba,CUB,2011,68990000000\nCuba,CUB,2012,73141000000\nCuba,CUB,2013,77148000000\nCuba,CUB,2014,80656100000\nCuba,CUB,2015,87132800000\nCyprus,CYP,1975,489914760.682807\nCyprus,CYP,1976,576090073.715036\nCyprus,CYP,1977,734887973.975806\nCyprus,CYP,1978,964026512.197839\nCyprus,CYP,1979,1288715209.58084\nCyprus,CYP,1980,2154311276.94859\nCyprus,CYP,1981,2087496373.77964\nCyprus,CYP,1982,2159242416.76942\nCyprus,CYP,1983,2160364071.19021\nCyprus,CYP,1984,2278248953.14058\nCyprus,CYP,1985,2430411900.19194\nCyprus,CYP,1986,3090734463.27684\nCyprus,CYP,1987,3704813885.50548\nCyprus,CYP,1988,4278792597.23965\nCyprus,CYP,1989,4563482603.5503\nCyprus,CYP,1990,5591130217.66965\nCyprus,CYP,1991,5770197348.48485\nCyprus,CYP,1992,6912150456.32334\nCyprus,CYP,1993,6590291048.29211\nCyprus,CYP,1994,7425703928.57143\nCyprus,CYP,1995,9826778783.9586\nCyprus,CYP,1996,9899623588.45671\nCyprus,CYP,1997,9594298745.72406\nCyprus,CYP,1998,10353506787.3303\nCyprus,CYP,1999,10614455231.931\nCyprus,CYP,2000,10183317624.8822\nCyprus,CYP,2001,10567304189.4353\nCyprus,CYP,2002,11618269230.7692\nCyprus,CYP,2003,14576896942.2424\nCyprus,CYP,2004,17422375000\nCyprus,CYP,2005,18703146374.829\nCyprus,CYP,2006,20403713461.2972\nCyprus,CYP,2007,24077470572.1325\nCyprus,CYP,2008,27839460963.8201\nCyprus,CYP,2009,25942622950.8197\nCyprus,CYP,2010,25562251655.6291\nCyprus,CYP,2011,27427161523.4918\nCyprus,CYP,2012,25041372221.5084\nCyprus,CYP,2013,24084572490.7063\nCyprus,CYP,2014,23359294148.8656\nCyprus,CYP,2015,19676167239.6584\nCyprus,CYP,2016,20047013274.3363\nCzech Republic,CZE,1990,40477403219.5176\nCzech Republic,CZE,1991,29675502269.5661\nCzech Republic,CZE,1992,34590052812.1684\nCzech Republic,CZE,1993,40614350197.2353\nCzech Republic,CZE,1994,47554674590.9328\nCzech Republic,CZE,1995,59775697061.0399\nCzech Republic,CZE,1996,66985765439.1937\nCzech Republic,CZE,1997,61792161168.0011\nCzech Republic,CZE,1998,66490372105.1262\nCzech Republic,CZE,1999,64867483193.1315\nCzech Republic,CZE,2000,61649492816.5201\nCzech Republic,CZE,2001,67523642262.4009\nCzech Republic,CZE,2002,81910771993.9155\nCzech Republic,CZE,2003,99627140274.3805\nCzech Republic,CZE,2004,119162172468.268\nCzech Republic,CZE,2005,136280689891.224\nCzech Republic,CZE,2006,155463807112.889\nCzech Republic,CZE,2007,189227050759.595\nCzech Republic,CZE,2008,235718586901.129\nCzech Republic,CZE,2009,206179982164.402\nCzech Republic,CZE,2010,207477857918.919\nCzech Republic,CZE,2011,227948349666.354\nCzech Republic,CZE,2012,207376427020.815\nCzech Republic,CZE,2013,209402444996.104\nCzech Republic,CZE,2014,207818330723.835\nCzech Republic,CZE,2015,186829940545.759\nCzech Republic,CZE,2016,195305084919.138\nDenmark,DNK,1960,6248946880.2777\nDenmark,DNK,1961,6933842098.84548\nDenmark,DNK,1962,7812968114.40012\nDenmark,DNK,1963,8316692385.77386\nDenmark,DNK,1964,9506678762.77765\nDenmark,DNK,1965,10678897387.0006\nDenmark,DNK,1966,11721248101.0874\nDenmark,DNK,1967,12788479692.1939\nDenmark,DNK,1968,13196541952\nDenmark,DNK,1969,15009384584.5333\nDenmark,DNK,1970,17075466666.6667\nDenmark,DNK,1971,19085681968.1403\nDenmark,DNK,1972,23232411897.6012\nDenmark,DNK,1973,30730638895.7765\nDenmark,DNK,1974,34160363582.6675\nDenmark,DNK,1975,40474400473.3563\nDenmark,DNK,1976,44575847808.1059\nDenmark,DNK,1977,49784281716.4179\nDenmark,DNK,1978,60362854966.8154\nDenmark,DNK,1979,70366280174.8717\nDenmark,DNK,1980,71127592753.5975\nDenmark,DNK,1981,61877755004.6326\nDenmark,DNK,1982,60412846238.7787\nDenmark,DNK,1983,60644833242.2089\nDenmark,DNK,1984,59105208272.9853\nDenmark,DNK,1985,62658544411.3095\nDenmark,DNK,1986,88078729452.4781\nDenmark,DNK,1987,109414353171.645\nDenmark,DNK,1988,115552848547.872\nDenmark,DNK,1989,112409236409.401\nDenmark,DNK,1990,138247261092.977\nDenmark,DNK,1991,139224732275.463\nDenmark,DNK,1992,152915624326.966\nDenmark,DNK,1993,143195607581.857\nDenmark,DNK,1994,156162311731.598\nDenmark,DNK,1995,185006961302.299\nDenmark,DNK,1996,187632400365.599\nDenmark,DNK,1997,173537588008.176\nDenmark,DNK,1998,176992000955.11\nDenmark,DNK,1999,177965224620.854\nDenmark,DNK,2000,164158800460.219\nDenmark,DNK,2001,164791416350.267\nDenmark,DNK,2002,178635160297.415\nDenmark,DNK,2003,218095997085.477\nDenmark,DNK,2004,251373036671.062\nDenmark,DNK,2005,264467308109.19\nDenmark,DNK,2006,282884912894.33\nDenmark,DNK,2007,319423370134.284\nDenmark,DNK,2008,353361056079.716\nDenmark,DNK,2009,321241396034.248\nDenmark,DNK,2010,321995350346.501\nDenmark,DNK,2011,344003209695.606\nDenmark,DNK,2012,327148899962.146\nDenmark,DNK,2013,343584385594.132\nDenmark,DNK,2014,352993633221.281\nDenmark,DNK,2015,301298464861.385\nDenmark,DNK,2016,306899653409.601\nDjibouti,DJI,1985,340989527.967995\nDjibouti,DJI,1987,373371738.286415\nDjibouti,DJI,1988,395794538.630775\nDjibouti,DJI,1989,409220087.102818\nDjibouti,DJI,1990,452328087.282876\nDjibouti,DJI,1991,462421998.525779\nDjibouti,DJI,1992,478058304.871118\nDjibouti,DJI,1993,466048469.22986\nDjibouti,DJI,1994,491689220.744875\nDjibouti,DJI,1995,497723960.589913\nDjibouti,DJI,1996,494004647.73437\nDjibouti,DJI,1997,502675542.001227\nDjibouti,DJI,1998,514267869.300758\nDjibouti,DJI,1999,536080148.097299\nDjibouti,DJI,2000,551230861.856505\nDjibouti,DJI,2001,572417440.820162\nDjibouti,DJI,2002,591122039.601398\nDjibouti,DJI,2003,622044665.515049\nDjibouti,DJI,2004,666072101.777505\nDjibouti,DJI,2005,708633194.726566\nDjibouti,DJI,2006,768873684.032838\nDjibouti,DJI,2007,847918929.107984\nDjibouti,DJI,2008,999105339.267729\nDjibouti,DJI,2009,1049110684.72493\nDjibouti,DJI,2010,1128611700.3618\nDjibouti,DJI,2011,1239144501.77525\nDjibouti,DJI,2012,1353632941.5207\nDjibouti,DJI,2013,1455000000\nDjibouti,DJI,2014,1588000000\nDjibouti,DJI,2015,1727000000\nDominica,DMA,1977,36370370.3703704\nDominica,DMA,1978,45170370.3703704\nDominica,DMA,1979,44296296.2962963\nDominica,DMA,1980,59100000\nDominica,DMA,1981,66218518.5185185\nDominica,DMA,1982,72051851.8518518\nDominica,DMA,1983,79925925.9259259\nDominica,DMA,1984,89848148.1481481\nDominica,DMA,1985,98585185.1851852\nDominica,DMA,1986,112074074.074074\nDominica,DMA,1987,126348148.148148\nDominica,DMA,1988,143766666.666667\nDominica,DMA,1989,153374074.074074\nDominica,DMA,1990,166322222.222222\nDominica,DMA,1991,180437037.037037\nDominica,DMA,1992,191759259.259259\nDominica,DMA,1993,200418518.518519\nDominica,DMA,1994,215459259.259259\nDominica,DMA,1995,224037037.037037\nDominica,DMA,1996,236444444.444444\nDominica,DMA,1997,245781481.481481\nDominica,DMA,1998,258440740.740741\nDominica,DMA,1999,267740740.740741\nDominica,DMA,2000,335845814.814815\nDominica,DMA,2001,343119370.37037\nDominica,DMA,2002,337695740.740741\nDominica,DMA,2003,350091222.222222\nDominica,DMA,2004,374771481.481481\nDominica,DMA,2005,370370370.37037\nDominica,DMA,2006,390370370.37037\nDominica,DMA,2007,421375851.851852\nDominica,DMA,2008,458190185.185185\nDominica,DMA,2009,489074333.333333\nDominica,DMA,2010,493824407.407407\nDominica,DMA,2011,501025303.333333\nDominica,DMA,2012,485997988.148148\nDominica,DMA,2013,501979277.037037\nDominica,DMA,2014,523666347.407407\nDominica,DMA,2015,535095846.296296\nDominica,DMA,2016,581484031.851852\nDominican Republic,DOM,1960,672399700\nDominican Republic,DOM,1961,654100200\nDominican Republic,DOM,1962,824100000\nDominican Republic,DOM,1963,940799900\nDominican Republic,DOM,1964,1025599900\nDominican Republic,DOM,1965,888100000\nDominican Republic,DOM,1966,983900000\nDominican Republic,DOM,1967,1034800000\nDominican Republic,DOM,1968,1079100000\nDominican Republic,DOM,1969,1230500000\nDominican Republic,DOM,1970,1485400100\nDominican Republic,DOM,1971,1666400000\nDominican Republic,DOM,1972,1987300000\nDominican Republic,DOM,1973,2344699900\nDominican Republic,DOM,1974,2925600000\nDominican Republic,DOM,1975,3599300100\nDominican Republic,DOM,1976,3951399900\nDominican Republic,DOM,1977,4587100200\nDominican Republic,DOM,1978,4774400000\nDominican Republic,DOM,1979,5498800100\nDominican Republic,DOM,1980,6631000100\nDominican Republic,DOM,1981,7266999800\nDominican Republic,DOM,1982,7964000300\nDominican Republic,DOM,1983,8622000100\nDominican Republic,DOM,1984,10330399700\nDominican Republic,DOM,1985,5044592912.6775\nDominican Republic,DOM,1986,6122197810.14358\nDominican Republic,DOM,1987,5826987203.49563\nDominican Republic,DOM,1988,5374315190.18405\nDominican Republic,DOM,1989,6686592728.70663\nDominican Republic,DOM,1990,7073674721.12418\nDominican Republic,DOM,1991,9724402004.34906\nDominican Republic,DOM,1992,11277676879.9612\nDominican Republic,DOM,1993,12976408000\nDominican Republic,DOM,1994,14511134920.6349\nDominican Republic,DOM,1995,16358496124.031\nDominican Republic,DOM,1996,18131813000.6281\nDominican Republic,DOM,1997,19593869595.0191\nDominican Republic,DOM,1998,21171523985.0642\nDominican Republic,DOM,1999,21709726722.118\nDominican Republic,DOM,2000,23996063503.0497\nDominican Republic,DOM,2001,24892521236.9553\nDominican Republic,DOM,2002,26571620978.7885\nDominican Republic,DOM,2003,21277165885.6865\nDominican Republic,DOM,2004,22039232609.9553\nDominican Republic,DOM,2005,34004033803.9438\nDominican Republic,DOM,2006,35952845582.5029\nDominican Republic,DOM,2007,44169678153.1566\nDominican Republic,DOM,2008,48288967303.4896\nDominican Republic,DOM,2009,48376555305.6902\nDominican Republic,DOM,2010,53954579003.5277\nDominican Republic,DOM,2011,57746684847.0898\nDominican Republic,DOM,2012,60613645121.3529\nDominican Republic,DOM,2013,61965942056.6828\nDominican Republic,DOM,2014,65231032303.2418\nDominican Republic,DOM,2015,68102618092.1031\nDominican Republic,DOM,2016,71583553487.5646\nEcuador,ECU,1960,1010325138.03016\nEcuador,ECU,1961,979108806.848646\nEcuador,ECU,1962,958598195.033967\nEcuador,ECU,1963,1038389642.31418\nEcuador,ECU,1964,1156150890.06133\nEcuador,ECU,1965,2387048255.45173\nEcuador,ECU,1966,2429309513.80854\nEcuador,ECU,1967,2553596091.82258\nEcuador,ECU,1968,2582180794.1855\nEcuador,ECU,1969,3112166848.3004\nEcuador,ECU,1970,2862504169.99893\nEcuador,ECU,1971,2754220263.02528\nEcuador,ECU,1972,3185987234.84089\nEcuador,ECU,1973,3891755551.94138\nEcuador,ECU,1974,6599259420.99605\nEcuador,ECU,1975,7731677256.80982\nEcuador,ECU,1976,9091924304.83477\nEcuador,ECU,1977,11026346589.5011\nEcuador,ECU,1978,11922502170.6405\nEcuador,ECU,1979,14175166007.5774\nEcuador,ECU,1980,17881514682.8784\nEcuador,ECU,1981,21810767209.3695\nEcuador,ECU,1982,19929853574.6095\nEcuador,ECU,1983,17152483214.3536\nEcuador,ECU,1984,16912515183.2783\nEcuador,ECU,1985,17149094589.9827\nEcuador,ECU,1986,15314143988.0621\nEcuador,ECU,1987,13945431882.2271\nEcuador,ECU,1988,13051886552.3377\nEcuador,ECU,1989,13890828707.6493\nEcuador,ECU,1990,15239278100.3502\nEcuador,ECU,1991,16988535267.6338\nEcuador,ECU,1992,18094238119.0595\nEcuador,ECU,1993,18938717358.6793\nEcuador,ECU,1994,22708673336.6683\nEcuador,ECU,1995,24432884442.2211\nEcuador,ECU,1996,25226393196.5983\nEcuador,ECU,1997,28162053026.5133\nEcuador,ECU,1998,27981896948.4742\nEcuador,ECU,1999,19645272636.3182\nEcuador,ECU,2000,18327764882.4412\nEcuador,ECU,2001,24468324000\nEcuador,ECU,2002,28548945000\nEcuador,ECU,2003,32432859000\nEcuador,ECU,2004,36591661000\nEcuador,ECU,2005,41507085000\nEcuador,ECU,2006,46802044000\nEcuador,ECU,2007,51007777000\nEcuador,ECU,2008,61762635000\nEcuador,ECU,2009,62519686000\nEcuador,ECU,2010,69555367000\nEcuador,ECU,2011,79276664000\nEcuador,ECU,2012,87924544000\nEcuador,ECU,2013,95129659000\nEcuador,ECU,2014,101726331000\nEcuador,ECU,2015,99290381000\nEcuador,ECU,2016,98613972000\n\"Egypt, Arab Rep.\",EGY,1965,5111621013.54303\n\"Egypt, Arab Rep.\",EGY,1966,5339520612.99374\n\"Egypt, Arab Rep.\",EGY,1967,5579168509.50907\n\"Egypt, Arab Rep.\",EGY,1968,6109112149.53271\n\"Egypt, Arab Rep.\",EGY,1969,6861743341.40436\n\"Egypt, Arab Rep.\",EGY,1970,7682491836.22206\n\"Egypt, Arab Rep.\",EGY,1971,8266003570.51773\n\"Egypt, Arab Rep.\",EGY,1972,8763960703.20579\n\"Egypt, Arab Rep.\",EGY,1973,9616725366.34664\n\"Egypt, Arab Rep.\",EGY,1974,9015166839.80885\n\"Egypt, Arab Rep.\",EGY,1975,11437965585.2696\n\"Egypt, Arab Rep.\",EGY,1976,13360476861.9662\n\"Egypt, Arab Rep.\",EGY,1977,14636028766.883\n\"Egypt, Arab Rep.\",EGY,1978,14849909490.6004\n\"Egypt, Arab Rep.\",EGY,1979,18150000571.4286\n\"Egypt, Arab Rep.\",EGY,1980,22912500555.5556\n\"Egypt, Arab Rep.\",EGY,1981,23405404729.7297\n\"Egypt, Arab Rep.\",EGY,1982,25592365394.0887\n\"Egypt, Arab Rep.\",EGY,1983,28137369499.4179\n\"Egypt, Arab Rep.\",EGY,1984,30642873038.0563\n\"Egypt, Arab Rep.\",EGY,1985,34689560464.8728\n\"Egypt, Arab Rep.\",EGY,1986,35880262675.3976\n\"Egypt, Arab Rep.\",EGY,1987,40507934171.249\n\"Egypt, Arab Rep.\",EGY,1988,35044634014.7643\n\"Egypt, Arab Rep.\",EGY,1989,39648442534.0768\n\"Egypt, Arab Rep.\",EGY,1990,43130416913.4141\n\"Egypt, Arab Rep.\",EGY,1991,36970555898.9698\n\"Egypt, Arab Rep.\",EGY,1992,41855986519.4235\n\"Egypt, Arab Rep.\",EGY,1993,46578631452.581\n\"Egypt, Arab Rep.\",EGY,1994,51897983392.6453\n\"Egypt, Arab Rep.\",EGY,1995,60159245060.4542\n\"Egypt, Arab Rep.\",EGY,1996,67629716981.1321\n\"Egypt, Arab Rep.\",EGY,1997,78436578171.0914\n\"Egypt, Arab Rep.\",EGY,1998,84828807556.0803\n\"Egypt, Arab Rep.\",EGY,1999,90710704806.8416\n\"Egypt, Arab Rep.\",EGY,2000,99838543960.0763\n\"Egypt, Arab Rep.\",EGY,2001,97632008709.853\n\"Egypt, Arab Rep.\",EGY,2002,87850683978.6691\n\"Egypt, Arab Rep.\",EGY,2003,82924503942.6381\n\"Egypt, Arab Rep.\",EGY,2004,78845185293.4964\n\"Egypt, Arab Rep.\",EGY,2005,89685725230.2517\n\"Egypt, Arab Rep.\",EGY,2006,107484034870.974\n\"Egypt, Arab Rep.\",EGY,2007,130478960092.499\n\"Egypt, Arab Rep.\",EGY,2008,162818181818.182\n\"Egypt, Arab Rep.\",EGY,2009,188982374700.805\n\"Egypt, Arab Rep.\",EGY,2010,218888324504.753\n\"Egypt, Arab Rep.\",EGY,2011,236001858960.015\n\"Egypt, Arab Rep.\",EGY,2012,279372758361.832\n\"Egypt, Arab Rep.\",EGY,2013,288586231501.877\n\"Egypt, Arab Rep.\",EGY,2014,305529656458.438\n\"Egypt, Arab Rep.\",EGY,2015,332698041030.807\n\"Egypt, Arab Rep.\",EGY,2016,332791045963.807\nEl Salvador,SLV,1965,877720000\nEl Salvador,SLV,1966,929520000\nEl Salvador,SLV,1967,976200000\nEl Salvador,SLV,1968,1009760100\nEl Salvador,SLV,1969,1049400000\nEl Salvador,SLV,1970,1132920000\nEl Salvador,SLV,1971,1186120000\nEl Salvador,SLV,1972,1263720000\nEl Salvador,SLV,1973,1442320000\nEl Salvador,SLV,1974,1665880000\nEl Salvador,SLV,1975,1884120100\nEl Salvador,SLV,1976,2328280100\nEl Salvador,SLV,1977,2941640100\nEl Salvador,SLV,1978,3127960000\nEl Salvador,SLV,1979,3463639900\nEl Salvador,SLV,1980,3573959900\nEl Salvador,SLV,1981,3437200200\nEl Salvador,SLV,1982,3399189100\nEl Salvador,SLV,1983,3506347800\nEl Salvador,SLV,1984,3661683400\nEl Salvador,SLV,1985,3800368600\nEl Salvador,SLV,1986,3771663200\nEl Salvador,SLV,1987,3958045800\nEl Salvador,SLV,1988,4189880000\nEl Salvador,SLV,1989,4372215300\nEl Salvador,SLV,1990,4800900000\nEl Salvador,SLV,1991,5311000000\nEl Salvador,SLV,1992,5954700000\nEl Salvador,SLV,1993,6938000000\nEl Salvador,SLV,1994,8085600000\nEl Salvador,SLV,1995,9500500000\nEl Salvador,SLV,1996,10315500000\nEl Salvador,SLV,1997,11134700000\nEl Salvador,SLV,1998,12008400000\nEl Salvador,SLV,1999,12464700000\nEl Salvador,SLV,2000,13134100000\nEl Salvador,SLV,2001,13812700000\nEl Salvador,SLV,2002,14306700000\nEl Salvador,SLV,2003,15046700000\nEl Salvador,SLV,2004,15798300000\nEl Salvador,SLV,2005,17093800000\nEl Salvador,SLV,2006,18550700000\nEl Salvador,SLV,2007,20104900000\nEl Salvador,SLV,2008,21430950000\nEl Salvador,SLV,2009,20661030000\nEl Salvador,SLV,2010,21418330000\nEl Salvador,SLV,2011,23139040000\nEl Salvador,SLV,2012,23813600000\nEl Salvador,SLV,2013,24350930000\nEl Salvador,SLV,2014,25054230000\nEl Salvador,SLV,2015,26052340000\nEl Salvador,SLV,2016,26797470000\nEquatorial Guinea,GNQ,1962,9122751.45318345\nEquatorial Guinea,GNQ,1963,10840095.1283649\nEquatorial Guinea,GNQ,1964,12712471.3960211\nEquatorial Guinea,GNQ,1965,64748333.3333333\nEquatorial Guinea,GNQ,1966,69110000\nEquatorial Guinea,GNQ,1967,72317446.9327193\nEquatorial Guinea,GNQ,1968,67514285.7142857\nEquatorial Guinea,GNQ,1969,67225714.2857143\nEquatorial Guinea,GNQ,1970,66331428.5714286\nEquatorial Guinea,GNQ,1971,64946954.756798\nEquatorial Guinea,GNQ,1972,65429198.238708\nEquatorial Guinea,GNQ,1973,81203226.9138345\nEquatorial Guinea,GNQ,1974,94159862.7073691\nEquatorial Guinea,GNQ,1975,104295643.388437\nEquatorial Guinea,GNQ,1976,103653049.93797\nEquatorial Guinea,GNQ,1977,103987520.075827\nEquatorial Guinea,GNQ,1980,50642880.7737503\nEquatorial Guinea,GNQ,1981,36731422.8456914\nEquatorial Guinea,GNQ,1982,44294647.733479\nEquatorial Guinea,GNQ,1983,44442456.94764\nEquatorial Guinea,GNQ,1984,50320914.4065688\nEquatorial Guinea,GNQ,1985,62118564.8495425\nEquatorial Guinea,GNQ,1986,76407396.7552964\nEquatorial Guinea,GNQ,1987,93345847.7270323\nEquatorial Guinea,GNQ,1988,100534663.294927\nEquatorial Guinea,GNQ,1989,88265974.5843603\nEquatorial Guinea,GNQ,1990,112119406.548331\nEquatorial Guinea,GNQ,1991,110906032.075075\nEquatorial Guinea,GNQ,1992,134707184.355541\nEquatorial Guinea,GNQ,1993,136047896.155778\nEquatorial Guinea,GNQ,1994,100807001.813926\nEquatorial Guinea,GNQ,1995,141853368.256815\nEquatorial Guinea,GNQ,1996,232463036.435759\nEquatorial Guinea,GNQ,1997,442337849.474377\nEquatorial Guinea,GNQ,1998,370687618.717326\nEquatorial Guinea,GNQ,1999,621117885.668503\nEquatorial Guinea,GNQ,2000,1045998496.43872\nEquatorial Guinea,GNQ,2001,1461139022.02954\nEquatorial Guinea,GNQ,2002,1806742742.27311\nEquatorial Guinea,GNQ,2003,2484745935.09329\nEquatorial Guinea,GNQ,2004,4410764338.66733\nEquatorial Guinea,GNQ,2005,8217369092.65224\nEquatorial Guinea,GNQ,2006,10086528698.8604\nEquatorial Guinea,GNQ,2007,13071718758.7373\nEquatorial Guinea,GNQ,2008,19749893536.3204\nEquatorial Guinea,GNQ,2009,15027795173.2187\nEquatorial Guinea,GNQ,2010,16298542027.9965\nEquatorial Guinea,GNQ,2011,21329395900.871\nEquatorial Guinea,GNQ,2012,22389627294.4179\nEquatorial Guinea,GNQ,2013,21942597765.3631\nEquatorial Guinea,GNQ,2014,21736500712.9638\nEquatorial Guinea,GNQ,2015,12597210657.5048\nEquatorial Guinea,GNQ,2016,10684804794.0361\nEritrea,ERI,1992,477101651.648376\nEritrea,ERI,1993,467872714.755603\nEritrea,ERI,1994,531688311.688312\nEritrea,ERI,1995,578015625\nEritrea,ERI,1996,693535954.190067\nEritrea,ERI,1997,686490090.140141\nEritrea,ERI,1998,745526154.93283\nEritrea,ERI,1999,688921325.712043\nEritrea,ERI,2000,706370815.584416\nEritrea,ERI,2001,752368495.512622\nEritrea,ERI,2002,729321366.651861\nEritrea,ERI,2003,870247703.182758\nEritrea,ERI,2004,1109054005.43971\nEritrea,ERI,2005,1098425900.74116\nEritrea,ERI,2006,1211161879.6748\nEritrea,ERI,2007,1317974491.05691\nEritrea,ERI,2008,1380188800\nEritrea,ERI,2009,1856695551.21951\nEritrea,ERI,2010,2117039512.19512\nEritrea,ERI,2011,2607739837.39837\nEstonia,EST,1995,4373665145.55468\nEstonia,EST,1996,4746109767.1999\nEstonia,EST,1997,5066240419.29666\nEstonia,EST,1998,5617109244.63233\nEstonia,EST,1999,5726897998.29642\nEstonia,EST,2000,5685774808.80862\nEstonia,EST,2001,6245069734.13302\nEstonia,EST,2002,7322069511.16134\nEstonia,EST,2003,9833870709.12376\nEstonia,EST,2004,12059201242.236\nEstonia,EST,2005,14006088297.4754\nEstonia,EST,2006,16963625015.6818\nEstonia,EST,2007,22237061730.0849\nEstonia,EST,2008,24194039255.8957\nEstonia,EST,2009,19652492636.8436\nEstonia,EST,2010,19490936349.1753\nEstonia,EST,2011,23170239900.7654\nEstonia,EST,2012,23043864510.0543\nEstonia,EST,2013,25137153149.4377\nEstonia,EST,2014,26224622450.8302\nEstonia,EST,2015,22566956982.229\nEstonia,EST,2016,23337907618.5174\nEthiopia,ETH,1981,7324903188.4058\nEthiopia,ETH,1982,7707678019.32367\nEthiopia,ETH,1983,8567890821.25604\nEthiopia,ETH,1984,8096302367.14976\nEthiopia,ETH,1985,9480840483.09179\nEthiopia,ETH,1986,9848600869.56522\nEthiopia,ETH,1987,10527338647.343\nEthiopia,ETH,1988,10908935748.7923\nEthiopia,ETH,1989,11476584879.2271\nEthiopia,ETH,1990,12175166763.285\nEthiopia,ETH,1991,13463868357.4879\nEthiopia,ETH,1992,10492993077.6093\nEthiopia,ETH,1993,8830712713.90781\nEthiopia,ETH,1994,6927950564.55657\nEthiopia,ETH,1995,7663984567.90123\nEthiopia,ETH,1996,8547939730.62374\nEthiopia,ETH,1997,8589211390.49612\nEthiopia,ETH,1998,7818224905.55071\nEthiopia,ETH,1999,7700833482.00615\nEthiopia,ETH,2000,8242392103.68061\nEthiopia,ETH,2001,8231326016.47494\nEthiopia,ETH,2002,7850809498.16803\nEthiopia,ETH,2003,8623691300.04079\nEthiopia,ETH,2004,10131187261.4421\nEthiopia,ETH,2005,12401139453.9738\nEthiopia,ETH,2006,15280861834.6024\nEthiopia,ETH,2007,19707616772.7996\nEthiopia,ETH,2008,27066912635.2228\nEthiopia,ETH,2009,32437389116.038\nEthiopia,ETH,2010,29933790334.3418\nEthiopia,ETH,2011,31952763089.33\nEthiopia,ETH,2012,43310721414.0829\nEthiopia,ETH,2013,47648211133.2183\nEthiopia,ETH,2014,55612228233.5179\nEthiopia,ETH,2015,64464547915.2698\nEthiopia,ETH,2016,72374224249.3997\nFaroe Islands,FRO,1998,1105688872.97039\nFaroe Islands,FRO,1999,1125684470.05533\nFaroe Islands,FRO,2000,1062339943.83343\nFaroe Islands,FRO,2001,1154899793.33878\nFaroe Islands,FRO,2002,1268445919.41429\nFaroe Islands,FRO,2003,1486861878.95624\nFaroe Islands,FRO,2004,1683997930.26322\nFaroe Islands,FRO,2005,1730894295.38595\nFaroe Islands,FRO,2006,1970135198.76236\nFaroe Islands,FRO,2007,2278229880.41222\nFaroe Islands,FRO,2008,2413251995.84159\nFaroe Islands,FRO,2009,2257083698.63269\nFaroe Islands,FRO,2010,2301168186.90991\nFaroe Islands,FRO,2011,2468754074.54319\nFaroe Islands,FRO,2012,2356495468.27795\nFaroe Islands,FRO,2013,2613464380.46401\nFaroe Islands,FRO,2014,2810547884.18708\nFaroe Islands,FRO,2015,2476746087.18917\nFiji,FJI,1960,112328422.113084\nFiji,FJI,1961,116987784.913739\nFiji,FJI,1962,122906434.957814\nFiji,FJI,1963,129454728.623599\nFiji,FJI,1964,140032741.468329\nFiji,FJI,1965,147084750.031482\nFiji,FJI,1966,150603925.515853\nFiji,FJI,1967,162625885.863484\nFiji,FJI,1968,166952937.135005\nFiji,FJI,1969,182182067.703568\nFiji,FJI,1970,219878482.173564\nFiji,FJI,1971,247749327.721267\nFiji,FJI,1972,316650508.967523\nFiji,FJI,1973,425963359.355326\nFiji,FJI,1974,558589870.903674\nFiji,FJI,1975,684268280.812751\nFiji,FJI,1976,694552411.718837\nFiji,FJI,1977,719533137.126662\nFiji,FJI,1978,829239489.844119\nFiji,FJI,1979,1019743927.24662\nFiji,FJI,1980,1202567359.4132\nFiji,FJI,1981,1235899836.18067\nFiji,FJI,1982,1194015444.01544\nFiji,FJI,1983,1123107276.30285\nFiji,FJI,1984,1177997413.63384\nFiji,FJI,1985,1141210124.82663\nFiji,FJI,1986,1290228616.82408\nFiji,FJI,1987,1177908191.97685\nFiji,FJI,1988,1109976927.91722\nFiji,FJI,1989,1182686577.22645\nFiji,FJI,1990,1337024782.22702\nFiji,FJI,1991,1383843860.1247\nFiji,FJI,1992,1531803060.54558\nFiji,FJI,1993,1635426125.30808\nFiji,FJI,1994,1825285158.11762\nFiji,FJI,1995,1970347720.96992\nFiji,FJI,1996,2129266728.42585\nFiji,FJI,1997,2093994597.21549\nFiji,FJI,1998,1656784779.545\nFiji,FJI,1999,1942170999.18765\nFiji,FJI,2000,1684109743.49338\nFiji,FJI,2001,1660102345.60309\nFiji,FJI,2002,1842691481.09196\nFiji,FJI,2003,2315935752.71653\nFiji,FJI,2004,2727507212.92556\nFiji,FJI,2005,3006725014.78415\nFiji,FJI,2006,3102741451.01664\nFiji,FJI,2007,3405050611.68726\nFiji,FJI,2008,3523185919.55826\nFiji,FJI,2009,2870624635.68032\nFiji,FJI,2010,3140508835.9485\nFiji,FJI,2011,3774530615.65916\nFiji,FJI,2012,3972012570.53467\nFiji,FJI,2013,4190143206.25611\nFiji,FJI,2014,4469573275.40532\nFiji,FJI,2015,4391113415.33181\nFiji,FJI,2016,4703632978.46947\nFinland,FIN,1960,5224102195.52771\nFinland,FIN,1961,5921659485.03284\nFinland,FIN,1962,6340580854.39073\nFinland,FIN,1963,6885920328.66187\nFinland,FIN,1964,7766655085.78588\nFinland,FIN,1965,8589340019.02985\nFinland,FIN,1966,9208524504.87684\nFinland,FIN,1967,9368954010.3132\nFinland,FIN,1968,8823033880.32993\nFinland,FIN,1969,10070766720.5011\nFinland,FIN,1970,11365953567.3839\nFinland,FIN,1971,12536710287.0134\nFinland,FIN,1972,14754136507.0261\nFinland,FIN,1973,19486826979.9284\nFinland,FIN,1974,24867278714.3532\nFinland,FIN,1975,29494515597.22\nFinland,FIN,1976,31873171718.726\nFinland,FIN,1977,33524682307.8058\nFinland,FIN,1978,36283091407.9422\nFinland,FIN,1979,44498283620.8213\nFinland,FIN,1980,53685049410.2646\nFinland,FIN,1981,52485533204.7396\nFinland,FIN,1982,52832120389.7866\nFinland,FIN,1983,51014090520.9223\nFinland,FIN,1984,52926394934.7052\nFinland,FIN,1985,55914236377.5902\nFinland,FIN,1986,73586676049.7302\nFinland,FIN,1987,91642093872.5822\nFinland,FIN,1988,109103056147.832\nFinland,FIN,1989,119064708327.56\nFinland,FIN,1990,141517648888.198\nFinland,FIN,1991,127866490222.026\nFinland,FIN,1992,112625431377.754\nFinland,FIN,1993,89255751014.885\nFinland,FIN,1994,103321570859.419\nFinland,FIN,1995,134199346405.229\nFinland,FIN,1996,132099404607.818\nFinland,FIN,1997,126833123353.568\nFinland,FIN,1998,133936359590.565\nFinland,FIN,1999,135225868314.511\nFinland,FIN,2000,125539893126.958\nFinland,FIN,2001,129250111856.823\nFinland,FIN,2002,139552983248.635\nFinland,FIN,2003,171071106094.808\nFinland,FIN,2004,196768065557.487\nFinland,FIN,2005,204436015420.968\nFinland,FIN,2006,216552502822.732\nFinland,FIN,2007,255384615384.615\nFinland,FIN,2008,283742493042.332\nFinland,FIN,2009,251499027507.641\nFinland,FIN,2010,247799815768.477\nFinland,FIN,2011,273674236772.815\nFinland,FIN,2012,256706466091.089\nFinland,FIN,2013,269980111642.898\nFinland,FIN,2014,272609288689.575\nFinland,FIN,2015,232439324529.645\nFinland,FIN,2016,238502900311.9\nFrance,FRA,1960,62651474946.6007\nFrance,FRA,1961,68346741504.4257\nFrance,FRA,1962,76313782251.6964\nFrance,FRA,1963,85551113767.3727\nFrance,FRA,1964,94906593388.3107\nFrance,FRA,1965,102160571409.274\nFrance,FRA,1966,110597467198.645\nFrance,FRA,1967,119466139619.589\nFrance,FRA,1968,129847107787.883\nFrance,FRA,1969,140725497222.277\nFrance,FRA,1970,148948860281.091\nFrance,FRA,1971,166564460755.298\nFrance,FRA,1972,204283485045.514\nFrance,FRA,1973,265381555686.506\nFrance,FRA,1974,286526186579.378\nFrance,FRA,1975,362000917852.226\nFrance,FRA,1976,373410270417.919\nFrance,FRA,1977,411464295266.114\nFrance,FRA,1978,508183139534.884\nFrance,FRA,1979,615834104224.484\nFrance,FRA,1980,703525302701.025\nFrance,FRA,1981,617589619794.81\nFrance,FRA,1982,586837009681.605\nFrance,FRA,1983,561852138738.274\nFrance,FRA,1984,532648802822.187\nFrance,FRA,1985,555197109067.017\nFrance,FRA,1986,774556302680.178\nFrance,FRA,1987,938368438284.405\nFrance,FRA,1988,1023504019381.13\nFrance,FRA,1989,1030122352457.33\nFrance,FRA,1990,1275300566196.84\nFrance,FRA,1991,1275563306592.26\nFrance,FRA,1992,1408724907063.2\nFrance,FRA,1993,1330094973361.13\nFrance,FRA,1994,1401636342155.01\nFrance,FRA,1995,1609892232882.11\nFrance,FRA,1996,1614245416078.98\nFrance,FRA,1997,1460709148123.17\nFrance,FRA,1998,1510758283299.98\nFrance,FRA,1999,1500275942893.67\nFrance,FRA,2000,1368438363736.87\nFrance,FRA,2001,1382218344519.02\nFrance,FRA,2002,1500337850555.24\nFrance,FRA,2003,1848124153498.87\nFrance,FRA,2004,2124112242364.04\nFrance,FRA,2005,2203678646934.46\nFrance,FRA,2006,2325011918203.49\nFrance,FRA,2007,2663112510265.54\nFrance,FRA,2008,2923465651091.26\nFrance,FRA,2009,2693827452070.02\nFrance,FRA,2010,2646837111794.78\nFrance,FRA,2011,2862680142625.14\nFrance,FRA,2012,2681416108537.39\nFrance,FRA,2013,2808511203185.39\nFrance,FRA,2014,2849305322684.76\nFrance,FRA,2015,2433562015516.21\nFrance,FRA,2016,2465453975282.24\nFrench Polynesia,PYF,1965,176534589.603389\nFrench Polynesia,PYF,1966,215659455.017302\nFrench Polynesia,PYF,1967,220984369.12915\nFrench Polynesia,PYF,1968,259590076.293001\nFrench Polynesia,PYF,1969,242943776.862299\nFrench Polynesia,PYF,1970,254035999.217197\nFrench Polynesia,PYF,1971,296613496.873269\nFrench Polynesia,PYF,1972,325843254.667123\nFrench Polynesia,PYF,1973,431254103.046477\nFrench Polynesia,PYF,1974,555337985.682991\nFrench Polynesia,PYF,1975,690319754.911192\nFrench Polynesia,PYF,1976,732286143.34291\nFrench Polynesia,PYF,1977,793193187.41557\nFrench Polynesia,PYF,1978,1005573294.20763\nFrench Polynesia,PYF,1979,1215031775.26795\nFrench Polynesia,PYF,1980,1362151523.68993\nFrench Polynesia,PYF,1981,1279972866.38172\nFrench Polynesia,PYF,1982,1286462642.63697\nFrench Polynesia,PYF,1983,1335895286.3918\nFrench Polynesia,PYF,1984,1378991403.37881\nFrench Polynesia,PYF,1985,1507230778.89921\nFrench Polynesia,PYF,1986,2301514717.29807\nFrench Polynesia,PYF,1987,2543199148.3893\nFrench Polynesia,PYF,1988,2687472829.62988\nFrench Polynesia,PYF,1989,2636461517.1052\nFrench Polynesia,PYF,1990,3181206304.81549\nFrench Polynesia,PYF,1991,3267367609.89528\nFrench Polynesia,PYF,1992,3558215110.24809\nFrench Polynesia,PYF,1993,3694600399.89225\nFrench Polynesia,PYF,1994,3522272321.40766\nFrench Polynesia,PYF,1995,3982374845.92709\nFrench Polynesia,PYF,1996,3954696873.74892\nFrench Polynesia,PYF,1997,3567062511.87293\nFrench Polynesia,PYF,1998,3775160797.38928\nFrench Polynesia,PYF,1999,3797016068.69688\nFrench Polynesia,PYF,2000,3447543137.9415\nGabon,GAB,1960,141468977.570007\nGabon,GAB,1961,167637907.381723\nGabon,GAB,1962,182796536.499884\nGabon,GAB,1963,154480244.246844\nGabon,GAB,1964,215679855.272516\nGabon,GAB,1965,226474285.587109\nGabon,GAB,1966,245849781.7159\nGabon,GAB,1967,271543680.279285\nGabon,GAB,1968,294468564.534369\nGabon,GAB,1969,318124701.048949\nGabon,GAB,1970,323802475.480977\nGabon,GAB,1971,381687073.058558\nGabon,GAB,1972,430508357.723916\nGabon,GAB,1973,722780701.123251\nGabon,GAB,1974,1544216003.9841\nGabon,GAB,1975,2157592936.60712\nGabon,GAB,1976,3009409970.90514\nGabon,GAB,1977,2809349074.17738\nGabon,GAB,1978,2389479269.18878\nGabon,GAB,1979,3030251116.35999\nGabon,GAB,1980,4279637933.85126\nGabon,GAB,1981,3862269126.92642\nGabon,GAB,1982,3618007844.44919\nGabon,GAB,1983,3391275731.31834\nGabon,GAB,1984,3561451562.23569\nGabon,GAB,1985,3339914759.37269\nGabon,GAB,1986,3403638193.57912\nGabon,GAB,1987,3281797038.66591\nGabon,GAB,1988,3834503378.35525\nGabon,GAB,1989,4186411457.4569\nGabon,GAB,1990,5952293765.84484\nGabon,GAB,1991,5402919956.93831\nGabon,GAB,1992,5592390848.52648\nGabon,GAB,1993,4378645081.01769\nGabon,GAB,1994,4190819314.02958\nGabon,GAB,1995,4958845906.34769\nGabon,GAB,1996,5694040336.82571\nGabon,GAB,1997,5326816858.99586\nGabon,GAB,1998,4483417119.83928\nGabon,GAB,1999,4662992036.2073\nGabon,GAB,2000,5067865320.7979\nGabon,GAB,2001,5018874179.18704\nGabon,GAB,2002,5310381151.35952\nGabon,GAB,2003,6497305662.09274\nGabon,GAB,2004,7756293574.98077\nGabon,GAB,2005,9578973591.00958\nGabon,GAB,2006,10318424464.3377\nGabon,GAB,2007,12438956756.4455\nGabon,GAB,2008,15508574820.3516\nGabon,GAB,2009,12065138272.7538\nGabon,GAB,2010,14358585195.7591\nGabon,GAB,2011,18186479172.7992\nGabon,GAB,2012,17171446922.2104\nGabon,GAB,2013,17590745688.6082\nGabon,GAB,2014,18179717776.1597\nGabon,GAB,2015,14262032470.9041\nGabon,GAB,2016,14213558130.1817\n\"Gambia, The\",GMB,1966,44212353.6988296\n\"Gambia, The\",GMB,1967,46695363.1558873\n\"Gambia, The\",GMB,1968,41160658.5705371\n\"Gambia, The\",GMB,1969,45168722.6995632\n\"Gambia, The\",GMB,1970,52296836.749388\n\"Gambia, The\",GMB,1971,55728608.974983\n\"Gambia, The\",GMB,1972,59161544.9957528\n\"Gambia, The\",GMB,1973,75187969.924812\n\"Gambia, The\",GMB,1974,95797533.4619206\n\"Gambia, The\",GMB,1975,115182522.123894\n\"Gambia, The\",GMB,1976,112189468.481826\n\"Gambia, The\",GMB,1977,138094243.349324\n\"Gambia, The\",GMB,1978,171836793.402694\n\"Gambia, The\",GMB,1979,207114382.546071\n\"Gambia, The\",GMB,1980,241080708.89018\n\"Gambia, The\",GMB,1981,218764445.784343\n\"Gambia, The\",GMB,1982,216051495.959817\n\"Gambia, The\",GMB,1983,213446562.57106\n\"Gambia, The\",GMB,1984,177338801.93075\n\"Gambia, The\",GMB,1985,225724851.691107\n\"Gambia, The\",GMB,1986,185646209.386282\n\"Gambia, The\",GMB,1987,220626484.224811\n\"Gambia, The\",GMB,1988,266673126.229801\n\"Gambia, The\",GMB,1989,284119692.49433\n\"Gambia, The\",GMB,1990,317083373.524559\n\"Gambia, The\",GMB,1991,690314321.374999\n\"Gambia, The\",GMB,1992,714255460.503389\n\"Gambia, The\",GMB,1993,755042548.055824\n\"Gambia, The\",GMB,1994,746491692.583857\n\"Gambia, The\",GMB,1995,785996982.492168\n\"Gambia, The\",GMB,1996,848237108.56163\n\"Gambia, The\",GMB,1997,803630742.53446\n\"Gambia, The\",GMB,1998,840285264.631545\n\"Gambia, The\",GMB,1999,814723460.08372\n\"Gambia, The\",GMB,2000,782915402.421095\n\"Gambia, The\",GMB,2001,687408804.630527\n\"Gambia, The\",GMB,2002,578236035.104279\n\"Gambia, The\",GMB,2003,487038821.611959\n\"Gambia, The\",GMB,2004,578785279.422876\n\"Gambia, The\",GMB,2005,624174724.414496\n\"Gambia, The\",GMB,2006,655068695.799848\n\"Gambia, The\",GMB,2007,798870875.671046\n\"Gambia, The\",GMB,2008,965769127.133068\n\"Gambia, The\",GMB,2009,900628061.631727\n\"Gambia, The\",GMB,2010,951804226.881426\n\"Gambia, The\",GMB,2011,898283477.506705\n\"Gambia, The\",GMB,2012,910026287.341901\n\"Gambia, The\",GMB,2013,898957682.737216\n\"Gambia, The\",GMB,2014,833240810.182065\n\"Gambia, The\",GMB,2015,907652509.581682\n\"Gambia, The\",GMB,2016,964599178.129102\nGeorgia,GEO,1990,7753501867.76095\nGeorgia,GEO,1991,6357615894.03974\nGeorgia,GEO,1992,3690328963.64086\nGeorgia,GEO,1993,2701181331.30816\nGeorgia,GEO,1994,2513870586.73344\nGeorgia,GEO,1995,2693731865.97036\nGeorgia,GEO,1996,3094915505.9093\nGeorgia,GEO,1997,3510540809.24855\nGeorgia,GEO,1998,3613500117.24928\nGeorgia,GEO,1999,2800024313.95144\nGeorgia,GEO,2000,3057453482.55826\nGeorgia,GEO,2001,3219487824.87911\nGeorgia,GEO,2002,3395778673.79183\nGeorgia,GEO,2003,3991374548.50512\nGeorgia,GEO,2004,5125273880.74998\nGeorgia,GEO,2005,6410941012.59189\nGeorgia,GEO,2006,7745406200.85374\nGeorgia,GEO,2007,10172869679.7366\nGeorgia,GEO,2008,12795044472.7663\nGeorgia,GEO,2009,10766809099.0721\nGeorgia,GEO,2010,11638536834.4274\nGeorgia,GEO,2011,14434619982.2117\nGeorgia,GEO,2012,15846474595.773\nGeorgia,GEO,2013,16140047012.1438\nGeorgia,GEO,2014,16509305827.7171\nGeorgia,GEO,2015,13993546732.4726\nGeorgia,GEO,2016,14378016729.1587\nGermany,DEU,1970,215021806498.156\nGermany,DEU,1971,249039217364.635\nGermany,DEU,1972,298667219346.133\nGermany,DEU,1973,396866742553.97\nGermany,DEU,1974,443618642959.716\nGermany,DEU,1975,488780155338.262\nGermany,DEU,1976,517787921003.573\nGermany,DEU,1977,598226205424.071\nGermany,DEU,1978,737668356280.428\nGermany,DEU,1979,878010536975.776\nGermany,DEU,1980,946695355820.96\nGermany,DEU,1981,797443405711.813\nGermany,DEU,1982,773638200773.757\nGermany,DEU,1983,767768378016.086\nGermany,DEU,1984,722367608343.069\nGermany,DEU,1985,729763282952.432\nGermany,DEU,1986,1042300769791.95\nGermany,DEU,1987,1293264353318.82\nGermany,DEU,1988,1395931548502.06\nGermany,DEU,1989,1393674332154.37\nGermany,DEU,1990,1764967948916.6\nGermany,DEU,1991,1861873895109.02\nGermany,DEU,1992,2123130870381.97\nGermany,DEU,1993,2068555542410.98\nGermany,DEU,1994,2205966011811.5\nGermany,DEU,1995,2591620035485.19\nGermany,DEU,1996,2503665193657.4\nGermany,DEU,1997,2218689375140.99\nGermany,DEU,1998,2243225519617.65\nGermany,DEU,1999,2199957383336.88\nGermany,DEU,2000,1949953934033.54\nGermany,DEU,2001,1950648769574.94\nGermany,DEU,2002,2079136081309.99\nGermany,DEU,2003,2505733634311.51\nGermany,DEU,2004,2819245095604.67\nGermany,DEU,2005,2861410272354.18\nGermany,DEU,2006,3002446368084.31\nGermany,DEU,2007,3439953462907.2\nGermany,DEU,2008,3752365607148.09\nGermany,DEU,2009,3418005001389.27\nGermany,DEU,2010,3417094562648.95\nGermany,DEU,2011,3757698281117.55\nGermany,DEU,2012,3543983909148.01\nGermany,DEU,2013,3752513503278.41\nGermany,DEU,2014,3890606893346.69\nGermany,DEU,2015,3375611100742.22\nGermany,DEU,2016,3477796274496.8\nGhana,GHA,1960,1217230094.97205\nGhana,GHA,1961,1302674324.88378\nGhana,GHA,1962,1382515654.47343\nGhana,GHA,1963,1540797588.57221\nGhana,GHA,1964,1731296199.52296\nGhana,GHA,1965,2053462968.0426\nGhana,GHA,1966,2126300672.22965\nGhana,GHA,1967,1747187644.9031\nGhana,GHA,1968,1666909517.65205\nGhana,GHA,1969,1962050555.7775\nGhana,GHA,1970,2215028588.45646\nGhana,GHA,1971,2417108577.52739\nGhana,GHA,1972,2112293279.98507\nGhana,GHA,1973,2465493032.25878\nGhana,GHA,1974,2894409912.1709\nGhana,GHA,1975,2810106390.10618\nGhana,GHA,1976,2765254360.20623\nGhana,GHA,1977,3189428571.42857\nGhana,GHA,1978,3662478172.79996\nGhana,GHA,1979,4020227931.15097\nGhana,GHA,1980,4445228057.45354\nGhana,GHA,1981,4222441673.17049\nGhana,GHA,1982,4035994383.38367\nGhana,GHA,1983,4057275077.68156\nGhana,GHA,1984,4412279865.40315\nGhana,GHA,1985,4504342152.98679\nGhana,GHA,1986,5727602648.75537\nGhana,GHA,1987,5074829931.97279\nGhana,GHA,1988,5197840972.6857\nGhana,GHA,1989,5251764269.91812\nGhana,GHA,1990,5889174833.90034\nGhana,GHA,1991,6596546195.65217\nGhana,GHA,1992,6413901601.83066\nGhana,GHA,1993,5966255778.12018\nGhana,GHA,1994,5444560669.45607\nGhana,GHA,1995,6465137614.6789\nGhana,GHA,1996,6934984709.48012\nGhana,GHA,1997,6891308593.75\nGhana,GHA,1998,7480968858.13149\nGhana,GHA,1999,7719354838.70968\nGhana,GHA,2000,4983024408.14828\nGhana,GHA,2001,5314909953.92992\nGhana,GHA,2002,6166330136.2948\nGhana,GHA,2003,7632406552.83803\nGhana,GHA,2004,8881368538.07671\nGhana,GHA,2005,10731634116.7384\nGhana,GHA,2006,20409257610.4746\nGhana,GHA,2007,24758819717.7074\nGhana,GHA,2008,28526891010.4925\nGhana,GHA,2009,25977847813.7422\nGhana,GHA,2010,32174772955.9748\nGhana,GHA,2011,39566292432.8615\nGhana,GHA,2012,41939728978.7281\nGhana,GHA,2013,47805069494.9081\nGhana,GHA,2014,38616536131.648\nGhana,GHA,2015,37543361203.5609\nGhana,GHA,2016,42689783733.873\nGreece,GRC,1960,4446528164.67559\nGreece,GRC,1961,5016048786.22753\nGreece,GRC,1962,5327573509.09843\nGreece,GRC,1963,5949478034.88751\nGreece,GRC,1964,6680298250.57961\nGreece,GRC,1965,7600579093.1158\nGreece,GRC,1966,8455611129.27936\nGreece,GRC,1967,9136711287.82434\nGreece,GRC,1968,9915140546.35072\nGreece,GRC,1969,11266091570.5718\nGreece,GRC,1970,13139862500\nGreece,GRC,1971,14591755681.8182\nGreece,GRC,1972,16885506818.1818\nGreece,GRC,1973,22347844649.0219\nGreece,GRC,1974,25351305681.8182\nGreece,GRC,1975,28525872476.0893\nGreece,GRC,1976,31152840485.0746\nGreece,GRC,1977,36176233117.4838\nGreece,GRC,1978,44270203153.9889\nGreece,GRC,1979,54481875804.9678\nGreece,GRC,1980,56829663469.2246\nGreece,GRC,1981,52346507380.0738\nGreece,GRC,1982,54617991326.5306\nGreece,GRC,1983,49428872678.0186\nGreece,GRC,1984,48020024788.3918\nGreece,GRC,1985,47820850974.5867\nGreece,GRC,1986,56379593719.5716\nGreece,GRC,1987,65652751132.3603\nGreece,GRC,1988,76261278404.9964\nGreece,GRC,1989,79169043642.4675\nGreece,GRC,1990,97891090928.6328\nGreece,GRC,1991,105143232379.884\nGreece,GRC,1992,116224673042.546\nGreece,GRC,1993,108809058858.502\nGreece,GRC,1994,116601802106.742\nGreece,GRC,1995,136878366230.328\nGreece,GRC,1996,145861612825.595\nGreece,GRC,1997,143157600024.959\nGreece,GRC,1998,144428172835.236\nGreece,GRC,1999,142540728958.023\nGreece,GRC,2000,130133845771.144\nGreece,GRC,2001,136191353467.562\nGreece,GRC,2002,153830947016.751\nGreece,GRC,2003,201924270316.027\nGreece,GRC,2004,240521260988.329\nGreece,GRC,2005,247783001865.44\nGreece,GRC,2006,273317737046.795\nGreece,GRC,2007,318497936901.177\nGreece,GRC,2008,354460802548.704\nGreece,GRC,2009,330000252153.376\nGreece,GRC,2010,299361576558.217\nGreece,GRC,2011,287797822093.178\nGreece,GRC,2012,245670666639.047\nGreece,GRC,2013,239862011450.103\nGreece,GRC,2014,237029579260.722\nGreece,GRC,2015,195541761243.144\nGreece,GRC,2016,192690813126.86\nGreenland,GRL,1970,69520026.6666667\nGreenland,GRL,1971,88570952.8688525\nGreenland,GRL,1972,106101175.65798\nGreenland,GRL,1973,140153748.243656\nGreenland,GRL,1974,169918948.629182\nGreenland,GRL,1975,211194305.702999\nGreenland,GRL,1976,240780413.56493\nGreenland,GRL,1977,282269373.001066\nGreenland,GRL,1978,355989047.256374\nGreenland,GRL,1979,420642463.409998\nGreenland,GRL,1980,476055288.418886\nGreenland,GRL,1981,435746974.759244\nGreenland,GRL,1982,402405069.367769\nGreenland,GRL,1983,416183706.943685\nGreenland,GRL,1984,379371608.442925\nGreenland,GRL,1985,412876071.118493\nGreenland,GRL,1986,603015696.452849\nGreenland,GRL,1987,787392365.831908\nGreenland,GRL,1988,898611007.947709\nGreenland,GRL,1989,929796722.387896\nGreenland,GRL,1990,1018970364.86443\nGreenland,GRL,1991,1016493394.8253\nGreenland,GRL,1992,1037921836.9477\nGreenland,GRL,1993,927219728.866886\nGreenland,GRL,1994,1005879948.43254\nGreenland,GRL,1995,1208946165.92889\nGreenland,GRL,1996,1197509786.67632\nGreenland,GRL,1997,1072147778.03013\nGreenland,GRL,1998,1149862702.96084\nGreenland,GRL,1999,1131561595.13775\nGreenland,GRL,2000,1068030829.75591\nGreenland,GRL,2001,1086172922.57413\nGreenland,GRL,2002,1169138789.31435\nGreenland,GRL,2003,1407866174.84099\nGreenland,GRL,2004,1621822369.84861\nGreenland,GRL,2005,1656172355.71712\nGreenland,GRL,2006,1818759669.06572\nGreenland,GRL,2007,2049139372.11823\nGreenland,GRL,2008,2310743218.06163\nGreenland,GRL,2009,2324870823.92882\nGreenland,GRL,2010,2306502373.71313\nGreenland,GRL,2011,2515245776.44495\nGreenland,GRL,2012,2408666378.93828\nGreenland,GRL,2013,2483396542.2075\nGreenland,GRL,2014,2551126948.77506\nGreenland,GRL,2015,2220380802.33059\nGrenada,GRD,1977,71494481.4814815\nGrenada,GRD,1978,88322370.3703704\nGrenada,GRD,1979,102244370.37037\nGrenada,GRD,1980,110900444.444444\nGrenada,GRD,1981,115651925.925926\nGrenada,GRD,1982,125435592.592593\nGrenada,GRD,1983,131803555.555556\nGrenada,GRD,1984,145533296.296296\nGrenada,GRD,1985,167728444.444444\nGrenada,GRD,1986,187589518.518519\nGrenada,GRD,1987,215009555.555556\nGrenada,GRD,1988,236357518.518519\nGrenada,GRD,1989,267327629.62963\nGrenada,GRD,1990,278098777.777778\nGrenada,GRD,1991,300757888.888889\nGrenada,GRD,1992,310160444.444444\nGrenada,GRD,1993,309812185.185185\nGrenada,GRD,1994,325111814.814815\nGrenada,GRD,1995,342172518.518519\nGrenada,GRD,1996,366911444.444444\nGrenada,GRD,1997,392190592.592593\nGrenada,GRD,1998,445903592.592593\nGrenada,GRD,1999,482009370.37037\nGrenada,GRD,2000,520044370.37037\nGrenada,GRD,2001,520444185.185185\nGrenada,GRD,2002,540336925.925926\nGrenada,GRD,2003,591018407.407407\nGrenada,GRD,2004,599118592.592593\nGrenada,GRD,2005,695370296.296296\nGrenada,GRD,2006,698700655.925926\nGrenada,GRD,2007,758683598.518519\nGrenada,GRD,2008,825977888.888889\nGrenada,GRD,2009,771278111.111111\nGrenada,GRD,2010,771015888.888889\nGrenada,GRD,2011,778648666.666667\nGrenada,GRD,2012,799882148.148148\nGrenada,GRD,2013,842620111.111111\nGrenada,GRD,2014,911481481.481481\nGrenada,GRD,2015,997007925.925926\nGrenada,GRD,2016,1056188592.59259\nGuam,GUM,2002,3385000000\nGuam,GUM,2003,3560000000\nGuam,GUM,2004,3857000000\nGuam,GUM,2005,4197000000\nGuam,GUM,2006,4213000000\nGuam,GUM,2007,4375000000\nGuam,GUM,2008,4621000000\nGuam,GUM,2009,4781000000\nGuam,GUM,2010,4895000000\nGuam,GUM,2011,4928000000\nGuam,GUM,2012,5199000000\nGuam,GUM,2013,5337000000\nGuam,GUM,2014,5531000000\nGuam,GUM,2015,5697000000\nGuam,GUM,2016,5793000000\nGuatemala,GTM,1960,1043599900\nGuatemala,GTM,1961,1076699900\nGuatemala,GTM,1962,1143600000\nGuatemala,GTM,1963,1262800000\nGuatemala,GTM,1964,1299099900\nGuatemala,GTM,1965,1331399900\nGuatemala,GTM,1966,1390700000\nGuatemala,GTM,1967,1453500000\nGuatemala,GTM,1968,1610500000\nGuatemala,GTM,1969,1715399900\nGuatemala,GTM,1970,1904000000\nGuatemala,GTM,1971,1984800000\nGuatemala,GTM,1972,2101300000\nGuatemala,GTM,1973,2569200100\nGuatemala,GTM,1974,3161499900\nGuatemala,GTM,1975,3645900000\nGuatemala,GTM,1976,4365300200\nGuatemala,GTM,1977,5480500200\nGuatemala,GTM,1978,6070600200\nGuatemala,GTM,1979,6902600200\nGuatemala,GTM,1980,7878700000\nGuatemala,GTM,1981,8607500300\nGuatemala,GTM,1982,8716999700\nGuatemala,GTM,1983,9050000400\nGuatemala,GTM,1984,9470000100\nGuatemala,GTM,1985,9721652086.95652\nGuatemala,GTM,1986,7231963515.98173\nGuatemala,GTM,1987,7084399840\nGuatemala,GTM,1988,7841602824.42748\nGuatemala,GTM,1989,8410724360.79546\nGuatemala,GTM,1990,7650125217.35253\nGuatemala,GTM,1991,9406097735.09117\nGuatemala,GTM,1992,10440842165.3193\nGuatemala,GTM,1993,11399942453.0646\nGuatemala,GTM,1994,12983235568.2292\nGuatemala,GTM,1995,14655487455.7333\nGuatemala,GTM,1996,15674852771.1356\nGuatemala,GTM,1997,17790095900.9809\nGuatemala,GTM,1998,19395461989.5391\nGuatemala,GTM,1999,18318512501.0256\nGuatemala,GTM,2000,19288926545.3759\nGuatemala,GTM,2001,18702802394.8286\nGuatemala,GTM,2002,20776669466.6053\nGuatemala,GTM,2003,21917706490.5299\nGuatemala,GTM,2004,23965275995.7214\nGuatemala,GTM,2005,27211377225.2715\nGuatemala,GTM,2006,30231249362.0604\nGuatemala,GTM,2007,34113107085.6085\nGuatemala,GTM,2008,39136893345.1501\nGuatemala,GTM,2009,37733994976.4137\nGuatemala,GTM,2010,41338595380.8159\nGuatemala,GTM,2011,47654841112.8523\nGuatemala,GTM,2012,50388454861.1111\nGuatemala,GTM,2013,53851058955.2999\nGuatemala,GTM,2014,58722323918.1604\nGuatemala,GTM,2015,63767597193.9175\nGuatemala,GTM,2016,68763255963.8943\nGuinea,GIN,1986,1922600899.3841\nGuinea,GIN,1987,2041538057.02893\nGuinea,GIN,1988,2384295763.72549\nGuinea,GIN,1989,2432029380.43694\nGuinea,GIN,1990,2666616176.91609\nGuinea,GIN,1991,3014890569.04099\nGuinea,GIN,1992,3284625277.16186\nGuinea,GIN,1993,3279063317.63475\nGuinea,GIN,1994,3383218922.79336\nGuinea,GIN,1995,3693753379.05992\nGuinea,GIN,1996,3869032270.91633\nGuinea,GIN,1997,3783788551.0819\nGuinea,GIN,1998,3588376057.01536\nGuinea,GIN,1999,3461282293.64624\nGuinea,GIN,2000,2995360969.16199\nGuinea,GIN,2001,2833442750.43639\nGuinea,GIN,2002,2949637039.04424\nGuinea,GIN,2003,3446442218.89829\nGuinea,GIN,2004,3666349049.42641\nGuinea,GIN,2005,2937071767.25576\nGuinea,GIN,2006,4220053411.02209\nGuinea,GIN,2007,6281695536.08693\nGuinea,GIN,2008,6963961726.24368\nGuinea,GIN,2009,6716817571.50136\nGuinea,GIN,2010,6861546075.83455\nGuinea,GIN,2011,6785188889.09399\nGuinea,GIN,2012,7387103675.30283\nGuinea,GIN,2013,8376667793.25478\nGuinea,GIN,2014,8791353804.84288\nGuinea,GIN,2015,8767143622.83101\nGuinea,GIN,2016,8200248003.02206\nGuinea-Bissau,GNB,1970,78733594.8444943\nGuinea-Bissau,GNB,1971,78540057.1428572\nGuinea-Bissau,GNB,1972,87702828.5714286\nGuinea-Bissau,GNB,1973,89374237.2881356\nGuinea-Bissau,GNB,1974,98775328.9473684\nGuinea-Bissau,GNB,1975,108985740.159382\nGuinea-Bissau,GNB,1976,112386489.013558\nGuinea-Bissau,GNB,1977,114971207.198201\nGuinea-Bissau,GNB,1978,122666858.789625\nGuinea-Bissau,GNB,1979,118537875.125881\nGuinea-Bissau,GNB,1980,110653830.726033\nGuinea-Bissau,GNB,1981,154731969.69697\nGuinea-Bissau,GNB,1982,165523634.49692\nGuinea-Bissau,GNB,1983,163577538.330494\nGuinea-Bissau,GNB,1984,138478900.626886\nGuinea-Bissau,GNB,1985,143856253.125\nGuinea-Bissau,GNB,1986,130225018.751674\nGuinea-Bissau,GNB,1987,173836362.010107\nGuinea-Bissau,GNB,1988,164458120.314078\nGuinea-Bissau,GNB,1989,213143016.443434\nGuinea-Bissau,GNB,1990,243961995.509711\nGuinea-Bissau,GNB,1991,257150573.215747\nGuinea-Bissau,GNB,1992,226313492.713567\nGuinea-Bissau,GNB,1993,236880813.821765\nGuinea-Bissau,GNB,1994,235619994.759074\nGuinea-Bissau,GNB,1995,253966919.939838\nGuinea-Bissau,GNB,1996,270419779.418107\nGuinea-Bissau,GNB,1997,268551010.941186\nGuinea-Bissau,GNB,1998,206457553.397101\nGuinea-Bissau,GNB,1999,224446652.14622\nGuinea-Bissau,GNB,2000,370173851.946119\nGuinea-Bissau,GNB,2001,392278168.199897\nGuinea-Bissau,GNB,2002,415843481.998691\nGuinea-Bissau,GNB,2003,476388260.639232\nGuinea-Bissau,GNB,2004,531109356.165462\nGuinea-Bissau,GNB,2005,586791883.717707\nGuinea-Bissau,GNB,2006,591829908.426264\nGuinea-Bissau,GNB,2007,695606288.605845\nGuinea-Bissau,GNB,2008,864136712.986648\nGuinea-Bissau,GNB,2009,825828703.628208\nGuinea-Bissau,GNB,2010,850633309.814482\nGuinea-Bissau,GNB,2011,1099385895.08056\nGuinea-Bissau,GNB,2012,989875559.094599\nGuinea-Bissau,GNB,2013,1046117071.03831\nGuinea-Bissau,GNB,2014,1055186196.27993\nGuinea-Bissau,GNB,2015,1036130506.53639\nGuinea-Bissau,GNB,2016,1164944509.94419\nGuyana,GUY,1960,170215248.206265\nGuyana,GUY,1961,185848451.262906\nGuyana,GUY,1962,194948375.430205\nGuyana,GUY,1963,175756868.692761\nGuyana,GUY,1964,194773376.888526\nGuyana,GUY,1965,213235294.117647\nGuyana,GUY,1966,228705882.352941\nGuyana,GUY,1967,250176470.588235\nGuyana,GUY,1968,229750000\nGuyana,GUY,1969,249300000\nGuyana,GUY,1970,267800000\nGuyana,GUY,1971,282050000\nGuyana,GUY,1972,285380952.380952\nGuyana,GUY,1973,307047619.047619\nGuyana,GUY,1974,433954545.454545\nGuyana,GUY,1975,494791666.666667\nGuyana,GUY,1976,454440000\nGuyana,GUY,1977,449880000\nGuyana,GUY,1978,507080000\nGuyana,GUY,1979,530440000\nGuyana,GUY,1980,603200000\nGuyana,GUY,1981,570357107.142857\nGuyana,GUY,1982,482000000\nGuyana,GUY,1983,489333333.333333\nGuyana,GUY,1984,437631605.263158\nGuyana,GUY,1985,453488372.093023\nGuyana,GUY,1986,504651139.534884\nGuyana,GUY,1987,354591846.938775\nGuyana,GUY,1988,413799990\nGuyana,GUY,1989,379779389.705882\nGuyana,GUY,1990,396582263.291139\nGuyana,GUY,1991,336708419.499106\nGuyana,GUY,1992,368281378.896883\nGuyana,GUY,1993,442273433.179724\nGuyana,GUY,1994,540874934.201012\nGuyana,GUY,1995,621626785.915493\nGuyana,GUY,1996,705406001.424501\nGuyana,GUY,1997,749138009.564539\nGuyana,GUY,1998,717530683.169567\nGuyana,GUY,1999,694754988.258295\nGuyana,GUY,2000,712667896.727512\nGuyana,GUY,2001,696281471.678532\nGuyana,GUY,2002,722460886.371384\nGuyana,GUY,2003,741929342.788749\nGuyana,GUY,2004,785918769.587635\nGuyana,GUY,2005,824880550.343965\nGuyana,GUY,2006,1458449453.19951\nGuyana,GUY,2007,1740334781.83731\nGuyana,GUY,2008,1922598121.23066\nGuyana,GUY,2009,2061323853.88576\nGuyana,GUY,2010,2273225041.96217\nGuyana,GUY,2011,2576024115.57832\nGuyana,GUY,2012,2861562265.88301\nGuyana,GUY,2013,2987684170.24434\nGuyana,GUY,2014,3077643313.70623\nGuyana,GUY,2015,3197225181.59806\nGuyana,GUY,2016,3502397094.43099\nHaiti,HTI,1991,3473562850.25798\nHaiti,HTI,1992,2257129873.66261\nHaiti,HTI,1993,1878253818.07845\nHaiti,HTI,1994,2167569095.11746\nHaiti,HTI,1995,2813313281.80715\nHaiti,HTI,1996,2907517543.3645\nHaiti,HTI,1997,3338949151.59927\nHaiti,HTI,1998,3723903723.63772\nHaiti,HTI,1999,4153725966.87677\nHaiti,HTI,2000,3953839593.78427\nHaiti,HTI,2001,3596448035.44747\nHaiti,HTI,2002,3472194099.40131\nHaiti,HTI,2003,2960306120.93557\nHaiti,HTI,2004,3537721020.41158\nHaiti,HTI,2005,4310356252.83669\nHaiti,HTI,2006,4756204069.61876\nHaiti,HTI,2007,5885321655.91684\nHaiti,HTI,2008,6548530572.35291\nHaiti,HTI,2009,6584649419.28348\nHaiti,HTI,2010,6622541528.56888\nHaiti,HTI,2011,7516834160.25277\nHaiti,HTI,2012,7890216507.68913\nHaiti,HTI,2013,8452509315.87722\nHaiti,HTI,2014,8776360623.29898\nHaiti,HTI,2015,8724656126.49849\nHaiti,HTI,2016,8022638721.92013\nHonduras,HND,1960,335650000\nHonduras,HND,1961,356200000\nHonduras,HND,1962,387750000\nHonduras,HND,1963,410200000\nHonduras,HND,1964,457000000\nHonduras,HND,1965,508650000\nHonduras,HND,1966,549950000\nHonduras,HND,1967,598100000\nHonduras,HND,1968,646800000\nHonduras,HND,1969,668000050\nHonduras,HND,1970,723000000\nHonduras,HND,1971,731000000\nHonduras,HND,1972,802999950\nHonduras,HND,1973,912499950\nHonduras,HND,1974,1034500000\nHonduras,HND,1975,1124000000\nHonduras,HND,1976,1347999950\nHonduras,HND,1977,1669499950\nHonduras,HND,1978,1929499950\nHonduras,HND,1979,2251499950\nHonduras,HND,1980,2566000050\nHonduras,HND,1981,2819500000\nHonduras,HND,1982,2903500050\nHonduras,HND,1983,3076999950\nHonduras,HND,1984,3319000000\nHonduras,HND,1985,3639499950\nHonduras,HND,1986,3808500050\nHonduras,HND,1987,4152499950\nHonduras,HND,1988,3970386266.09442\nHonduras,HND,1989,3563448310.34483\nHonduras,HND,1990,3048881322.9572\nHonduras,HND,1991,3068444711.94538\nHonduras,HND,1992,3419487440.65916\nHonduras,HND,1993,3481990761.34498\nHonduras,HND,1994,3432356578.82219\nHonduras,HND,1995,3911053180.39625\nHonduras,HND,1996,4034037162.16216\nHonduras,HND,1997,4663193916.34981\nHonduras,HND,1998,5202215657.31167\nHonduras,HND,1999,5372543554.00697\nHonduras,HND,2000,7103529494.37412\nHonduras,HND,2001,7565869927.73763\nHonduras,HND,2002,7775078402.92785\nHonduras,HND,2003,8140271080.5604\nHonduras,HND,2004,8772194250.27021\nHonduras,HND,2005,9672035709.39793\nHonduras,HND,2006,10841742347.7968\nHonduras,HND,2007,12275501784.2971\nHonduras,HND,2008,13789715132.502\nHonduras,HND,2009,14587496229.1811\nHonduras,HND,2010,15839344591.9842\nHonduras,HND,2011,17710315005.9999\nHonduras,HND,2012,18528506894.0586\nHonduras,HND,2013,18496438641.4768\nHonduras,HND,2014,19756494434.7031\nHonduras,HND,2015,20844284855.0025\nHonduras,HND,2016,21516938909.5686\n\"Hong Kong SAR, China\",HKG,1960,1320796651.69457\n\"Hong Kong SAR, China\",HKG,1961,1383681651.13776\n\"Hong Kong SAR, China\",HKG,1962,1612346412.26475\n\"Hong Kong SAR, China\",HKG,1963,1935298266.45384\n\"Hong Kong SAR, China\",HKG,1964,2206466461.26434\n\"Hong Kong SAR, China\",HKG,1965,2435078534.03141\n\"Hong Kong SAR, China\",HKG,1966,2489845016.64894\n\"Hong Kong SAR, China\",HKG,1967,2692474989.12571\n\"Hong Kong SAR, China\",HKG,1968,2716964388.42418\n\"Hong Kong SAR, China\",HKG,1969,3189740055.13982\n\"Hong Kong SAR, China\",HKG,1970,3800766535.62088\n\"Hong Kong SAR, China\",HKG,1971,4476001946.01486\n\"Hong Kong SAR, China\",HKG,1972,5710107420.14394\n\"Hong Kong SAR, China\",HKG,1973,8030117555.62033\n\"Hong Kong SAR, China\",HKG,1974,9388663645.7588\n\"Hong Kong SAR, China\",HKG,1975,10048022369.9141\n\"Hong Kong SAR, China\",HKG,1976,12876366008.8077\n\"Hong Kong SAR, China\",HKG,1977,15719433719.4337\n\"Hong Kong SAR, China\",HKG,1978,18315007365.9713\n\"Hong Kong SAR, China\",HKG,1979,22526035940.5921\n\"Hong Kong SAR, China\",HKG,1980,28861759209.0191\n\"Hong Kong SAR, China\",HKG,1981,31055409443.043\n\"Hong Kong SAR, China\",HKG,1982,32291306281.8168\n\"Hong Kong SAR, China\",HKG,1983,29907091339.5364\n\"Hong Kong SAR, China\",HKG,1984,33511383985.6741\n\"Hong Kong SAR, China\",HKG,1985,35699543050.7778\n\"Hong Kong SAR, China\",HKG,1986,41075570591.9291\n\"Hong Kong SAR, China\",HKG,1987,50622571586.1149\n\"Hong Kong SAR, China\",HKG,1988,59707404560.5944\n\"Hong Kong SAR, China\",HKG,1989,68790369107.2962\n\"Hong Kong SAR, China\",HKG,1990,76928290841.8701\n\"Hong Kong SAR, China\",HKG,1991,88959620135.8864\n\"Hong Kong SAR, China\",HKG,1992,104272278634.731\n\"Hong Kong SAR, China\",HKG,1993,120353947980.764\n\"Hong Kong SAR, China\",HKG,1994,135812069768.646\n\"Hong Kong SAR, China\",HKG,1995,144652912433.103\n\"Hong Kong SAR, China\",HKG,1996,159717233621.659\n\"Hong Kong SAR, China\",HKG,1997,177352785419.977\n\"Hong Kong SAR, China\",HKG,1998,168886163221.567\n\"Hong Kong SAR, China\",HKG,1999,165768095391.557\n\"Hong Kong SAR, China\",HKG,2000,171668164082.555\n\"Hong Kong SAR, China\",HKG,2001,169403241524.337\n\"Hong Kong SAR, China\",HKG,2002,166349228737.386\n\"Hong Kong SAR, China\",HKG,2003,161384522525.299\n\"Hong Kong SAR, China\",HKG,2004,169099768875.193\n\"Hong Kong SAR, China\",HKG,2005,181570082162.19\n\"Hong Kong SAR, China\",HKG,2006,193536265094.364\n\"Hong Kong SAR, China\",HKG,2007,211597405593.868\n\"Hong Kong SAR, China\",HKG,2008,219279678430.164\n\"Hong Kong SAR, China\",HKG,2009,214046415026.187\n\"Hong Kong SAR, China\",HKG,2010,228637697575.04\n\"Hong Kong SAR, China\",HKG,2011,248513617677.287\n\"Hong Kong SAR, China\",HKG,2012,262629441493.476\n\"Hong Kong SAR, China\",HKG,2013,275696879834.966\n\"Hong Kong SAR, China\",HKG,2014,291459356985.337\n\"Hong Kong SAR, China\",HKG,2015,309403880389.071\n\"Hong Kong SAR, China\",HKG,2016,320914302646.157\nHungary,HUN,1991,34748508332.1068\nHungary,HUN,1992,38724945367.8583\nHungary,HUN,1993,40119073326.3573\nHungary,HUN,1994,43160392123.6053\nHungary,HUN,1995,46418916500.3536\nHungary,HUN,1996,46659796772.5473\nHungary,HUN,1997,47290180588.5993\nHungary,HUN,1998,48770466838.6491\nHungary,HUN,1999,49170434390.9949\nHungary,HUN,2000,47310623887.2319\nHungary,HUN,2001,53821315066.1024\nHungary,HUN,2002,67716887203.4136\nHungary,HUN,2003,85324771841.4118\nHungary,HUN,2004,104066609517.928\nHungary,HUN,2005,113035361316.749\nHungary,HUN,2006,115295199391.606\nHungary,HUN,2007,139850794387.281\nHungary,HUN,2008,157998423131.739\nHungary,HUN,2009,130593960612.172\nHungary,HUN,2010,130922638689.071\nHungary,HUN,2011,140782064609.187\nHungary,HUN,2012,127856647107.82\nHungary,HUN,2013,135215704418.963\nHungary,HUN,2014,140118140454.711\nHungary,HUN,2015,122879042001.915\nHungary,HUN,2016,125816640420.569\nIceland,ISL,1960,248434096.968726\nIceland,ISL,1961,253885656.329253\nIceland,ISL,1962,284916516.159537\nIceland,ISL,1963,340061650.119898\nIceland,ISL,1964,434267936.914583\nIceland,ISL,1965,523694949.370689\nIceland,ISL,1966,628893310.399926\nIceland,ISL,1967,621225962.154708\nIceland,ISL,1968,474399471.622359\nIceland,ISL,1969,414709311.35296\nIceland,ISL,1970,531004659.090909\nIceland,ISL,1971,675722954.545455\nIceland,ISL,1972,846506911.398142\nIceland,ISL,1973,1163864529.01365\nIceland,ISL,1974,1527559579.78989\nIceland,ISL,1975,1418360312.29668\nIceland,ISL,1976,1683117417.79656\nIceland,ISL,1977,2226538693.61895\nIceland,ISL,1978,2532331673.49047\nIceland,ISL,1979,2876729410.09643\nIceland,ISL,1980,3409023699.34967\nIceland,ISL,1981,3521512388.91504\nIceland,ISL,1982,3232804218.11116\nIceland,ISL,1983,2788530415.2511\nIceland,ISL,1984,2887825523.68452\nIceland,ISL,1985,3008412959.52317\nIceland,ISL,1986,4022192403.69597\nIceland,ISL,1987,5565384032.45323\nIceland,ISL,1988,6156487920.21202\nIceland,ISL,1989,5718878001.74609\nIceland,ISL,1990,6521544489.20626\nIceland,ISL,1991,6966138525.63635\nIceland,ISL,1992,7138787995.32199\nIceland,ISL,1993,6269347502.78093\nIceland,ISL,1994,6441621297.77366\nIceland,ISL,1995,7181787873.86945\nIceland,ISL,1996,7501950115.78947\nIceland,ISL,1997,7596126045.95208\nIceland,ISL,1998,8468339855.94356\nIceland,ISL,1999,8931365460.57043\nIceland,ISL,2000,8946079678.43696\nIceland,ISL,2001,8146073989.52626\nIceland,ISL,2002,9199643907.97902\nIceland,ISL,2003,11304084266.5137\nIceland,ISL,2004,13703315349.2507\nIceland,ISL,2005,16691213479.471\nIceland,ISL,2006,17043245939.014\nIceland,ISL,2007,21295012098.9774\nIceland,ISL,2008,17640375722.4448\nIceland,ISL,2009,12887072301.1621\nIceland,ISL,2010,13254818331.1893\nIceland,ISL,2011,14674650434.6757\nIceland,ISL,2012,14218575093.024\nIceland,ISL,2013,15479256844.8708\nIceland,ISL,2014,17178962757.4324\nIceland,ISL,2015,16783714958.4498\nIceland,ISL,2016,20047413006.3471\nIndia,IND,1960,36535925029.925\nIndia,IND,1961,38709096075.0961\nIndia,IND,1962,41599070245.0702\nIndia,IND,1963,47776000903.0009\nIndia,IND,1964,55726873075.8731\nIndia,IND,1965,58760424674.5065\nIndia,IND,1966,45253641300\nIndia,IND,1967,49466168893.3333\nIndia,IND,1968,52377324280\nIndia,IND,1969,57668330026.6667\nIndia,IND,1970,61589800520\nIndia,IND,1971,66452561868.4154\nIndia,IND,1972,70509913046.8528\nIndia,IND,1973,84374541625.3338\nIndia,IND,1974,98198276856.9136\nIndia,IND,1975,97159222028.3357\nIndia,IND,1976,101346972433.237\nIndia,IND,1977,119866746569.343\nIndia,IND,1978,135468782810.558\nIndia,IND,1979,150950826964.984\nIndia,IND,1980,183839864648.794\nIndia,IND,1981,190909548793.872\nIndia,IND,1982,198037712680.328\nIndia,IND,1983,215350771423.861\nIndia,IND,1984,209328156804.186\nIndia,IND,1985,229410293755.209\nIndia,IND,1986,245664654064.834\nIndia,IND,1987,275311425330.609\nIndia,IND,1988,292632656261.441\nIndia,IND,1989,292093308316.929\nIndia,IND,1990,316697337894.532\nIndia,IND,1991,266502281092.721\nIndia,IND,1992,284363884079.92\nIndia,IND,1993,275570363432.31\nIndia,IND,1994,322909902308.131\nIndia,IND,1995,355475984176.175\nIndia,IND,1996,387656017799.599\nIndia,IND,1997,410320300471.227\nIndia,IND,1998,415730874172.06\nIndia,IND,1999,452699998386.955\nIndia,IND,2000,462146799336.77\nIndia,IND,2001,478965491061.694\nIndia,IND,2002,508068952065.959\nIndia,IND,2003,599592902016.212\nIndia,IND,2004,699688852930.441\nIndia,IND,2005,808901077222.092\nIndia,IND,2006,920316529729.61\nIndia,IND,2007,1201111768409.39\nIndia,IND,2008,1186952757635.85\nIndia,IND,2009,1323940295874.9\nIndia,IND,2010,1656617073124.21\nIndia,IND,2011,1823049927771.46\nIndia,IND,2012,1827637859135.7\nIndia,IND,2013,1856722121394.53\nIndia,IND,2014,2035393459979.46\nIndia,IND,2015,2089865410867.82\nIndia,IND,2016,2263792499341.01\nIndonesia,IDN,1967,6034609851.75251\nIndonesia,IDN,1968,7534499073.05895\nIndonesia,IDN,1969,8877074302.05972\nIndonesia,IDN,1970,9742975377.80066\nIndonesia,IDN,1971,9937662111.85081\nIndonesia,IDN,1972,11709424257.1698\nIndonesia,IDN,1973,17326561301.1328\nIndonesia,IDN,1974,27472505465.7699\nIndonesia,IDN,1975,32435669625.6067\nIndonesia,IDN,1976,39681453146.0051\nIndonesia,IDN,1977,48773959624.4034\nIndonesia,IDN,1978,54786260043.9282\nIndonesia,IDN,1979,54727132892.9311\nIndonesia,IDN,1980,77173854592.3758\nIndonesia,IDN,1981,91053516660.2765\nIndonesia,IDN,1982,95994076757.7566\nIndonesia,IDN,1983,86298501963.1287\nIndonesia,IDN,1984,90345970377.6713\nIndonesia,IDN,1985,90809969344.1952\nIndonesia,IDN,1986,85129207948.2281\nIndonesia,IDN,1987,80844264668.1222\nIndonesia,IDN,1988,89756617173.8387\nIndonesia,IDN,1989,100564924188.698\nIndonesia,IDN,1990,113010829349.049\nIndonesia,IDN,1991,124170512498.061\nIndonesia,IDN,1992,136313684977.643\nIndonesia,IDN,1993,168233897471.964\nIndonesia,IDN,1994,188341726958.271\nIndonesia,IDN,1995,215215297396.313\nIndonesia,IDN,1996,242086489086.889\nIndonesia,IDN,1997,229713644057.536\nIndonesia,IDN,1998,101623389921.636\nIndonesia,IDN,1999,149063127838.066\nIndonesia,IDN,2000,175702220055.465\nIndonesia,IDN,2001,170832093270.882\nIndonesia,IDN,2002,208325008592.98\nIndonesia,IDN,2003,249968428761.572\nIndonesia,IDN,2004,273460989078.419\nIndonesia,IDN,2005,304371850794.764\nIndonesia,IDN,2006,388167833438.821\nIndonesia,IDN,2007,460192550124.261\nIndonesia,IDN,2008,543253873101.753\nIndonesia,IDN,2009,574505139225.44\nIndonesia,IDN,2010,755094160363.071\nIndonesia,IDN,2011,892969107923.094\nIndonesia,IDN,2012,917869910105.749\nIndonesia,IDN,2013,912524136718.018\nIndonesia,IDN,2014,890814755233.225\nIndonesia,IDN,2015,861256351277.359\nIndonesia,IDN,2016,932259177765.307\n\"Iran, Islamic Rep.\",IRN,1960,4199134389.43894\n\"Iran, Islamic Rep.\",IRN,1961,4426949094.38944\n\"Iran, Islamic Rep.\",IRN,1962,4693566415.84158\n\"Iran, Islamic Rep.\",IRN,1963,4928628018.48185\n\"Iran, Islamic Rep.\",IRN,1964,5379845647.52475\n\"Iran, Islamic Rep.\",IRN,1965,6197319928.71287\n\"Iran, Islamic Rep.\",IRN,1966,6789938671.9472\n\"Iran, Islamic Rep.\",IRN,1967,7555383689.76898\n\"Iran, Islamic Rep.\",IRN,1968,8623172959.73597\n\"Iran, Islamic Rep.\",IRN,1969,9743089607.92079\n\"Iran, Islamic Rep.\",IRN,1970,10976245153.7954\n\"Iran, Islamic Rep.\",IRN,1971,13731801564.3564\n\"Iran, Islamic Rep.\",IRN,1972,17153463263.3663\n\"Iran, Islamic Rep.\",IRN,1973,27081698249.1798\n\"Iran, Islamic Rep.\",IRN,1974,46209092072.4584\n\"Iran, Islamic Rep.\",IRN,1975,51776222349.8518\n\"Iran, Islamic Rep.\",IRN,1976,68055295080.4565\n\"Iran, Islamic Rep.\",IRN,1977,80600122702.2202\n\"Iran, Islamic Rep.\",IRN,1978,77994316621.497\n\"Iran, Islamic Rep.\",IRN,1979,90391877325.2927\n\"Iran, Islamic Rep.\",IRN,1980,94362275579.4621\n\"Iran, Islamic Rep.\",IRN,1981,100499312749.447\n\"Iran, Islamic Rep.\",IRN,1982,125948756439.161\n\"Iran, Islamic Rep.\",IRN,1983,156365156618.288\n\"Iran, Islamic Rep.\",IRN,1984,162276728619.617\n\"Iran, Islamic Rep.\",IRN,1985,180183629600.037\n\"Iran, Islamic Rep.\",IRN,1986,209094561834.095\n\"Iran, Islamic Rep.\",IRN,1987,134009995922.987\n\"Iran, Islamic Rep.\",IRN,1988,123057861333.933\n\"Iran, Islamic Rep.\",IRN,1989,120496362916.372\n\"Iran, Islamic Rep.\",IRN,1990,124813263926.374\n\"Iran, Islamic Rep.\",IRN,1993,63743623232.012\n\"Iran, Islamic Rep.\",IRN,1994,71841461172.5964\n\"Iran, Islamic Rep.\",IRN,1995,96419225743.6737\n\"Iran, Islamic Rep.\",IRN,1996,120403931885.441\n\"Iran, Islamic Rep.\",IRN,1997,113919163421.155\n\"Iran, Islamic Rep.\",IRN,1998,110276913362.508\n\"Iran, Islamic Rep.\",IRN,1999,113848450088.351\n\"Iran, Islamic Rep.\",IRN,2000,109591707802.216\n\"Iran, Islamic Rep.\",IRN,2001,126878750295.944\n\"Iran, Islamic Rep.\",IRN,2002,128626917503.72\n\"Iran, Islamic Rep.\",IRN,2003,153544751395.43\n\"Iran, Islamic Rep.\",IRN,2004,190043433964.841\n\"Iran, Islamic Rep.\",IRN,2005,226452138291.542\n\"Iran, Islamic Rep.\",IRN,2006,266298911661.144\n\"Iran, Islamic Rep.\",IRN,2007,349881601458.56\n\"Iran, Islamic Rep.\",IRN,2008,406070949553.875\n\"Iran, Islamic Rep.\",IRN,2009,414059094949.063\n\"Iran, Islamic Rep.\",IRN,2010,487069570463.768\n\"Iran, Islamic Rep.\",IRN,2011,583500357530.417\n\"Iran, Islamic Rep.\",IRN,2012,598853401276.104\n\"Iran, Islamic Rep.\",IRN,2013,467414852231.298\n\"Iran, Islamic Rep.\",IRN,2014,434474616831.914\n\"Iran, Islamic Rep.\",IRN,2015,385874474398.59\n\"Iran, Islamic Rep.\",IRN,2016,418976679728.567\nIraq,IRQ,1960,1684121534.58415\nIraq,IRQ,1961,1831700364.04369\nIraq,IRQ,1962,1954634836.18034\nIraq,IRQ,1963,1978437692.5231\nIraq,IRQ,1964,2340521142.5371\nIraq,IRQ,1968,2896947633.71605\nIraq,IRQ,1969,3008120974.51694\nIraq,IRQ,1970,3281713805.65668\nIraq,IRQ,1971,3865346534.65347\nIraq,IRQ,1972,4113848002.40312\nIraq,IRQ,1973,5134367778.1446\nIraq,IRQ,1974,11516762614.2906\nIraq,IRQ,1975,13458516762.6143\nIraq,IRQ,1976,17754825601.0836\nIraq,IRQ,1977,19838130714.5276\nIraq,IRQ,1978,23762275651.8794\nIraq,IRQ,1979,37816457839.4853\nIraq,IRQ,1980,53405689129.6986\nIraq,IRQ,1981,38424991534.0332\nIraq,IRQ,1982,42595309882.7471\nIraq,IRQ,1983,40595046638.7906\nIraq,IRQ,1984,46802508845.2879\nIraq,IRQ,1985,48284979092.9559\nIraq,IRQ,1986,47127693792.2161\nIraq,IRQ,1987,56609842393.0524\nIraq,IRQ,1988,62503055644.9019\nIraq,IRQ,1989,65641363782.5668\nIraq,IRQ,1990,179885815374.719\nIraq,IRQ,2004,36627901762.063\nIraq,IRQ,2005,49954890353.2609\nIraq,IRQ,2006,65140293687.5395\nIraq,IRQ,2007,88840050497.0957\nIraq,IRQ,2008,131613661510.475\nIraq,IRQ,2009,111660855042.735\nIraq,IRQ,2010,138516722649.573\nIraq,IRQ,2011,185749664444.444\nIraq,IRQ,2012,218000986222.639\nIraq,IRQ,2013,234648370497.427\nIraq,IRQ,2014,234648370497.427\nIraq,IRQ,2015,179640210726.448\nIraq,IRQ,2016,171489001692.047\nIreland,IRL,1960,1939329775.43739\nIreland,IRL,1961,2088012282.35667\nIreland,IRL,1962,2260349684.08625\nIreland,IRL,1963,2430843768.44553\nIreland,IRL,1964,2766608945.87402\nIreland,IRL,1965,2945704142.99765\nIreland,IRL,1966,3104034393.23162\nIreland,IRL,1967,3343636773.36759\nIreland,IRL,1968,3278584478.33023\nIreland,IRL,1969,3787077343.72783\nIreland,IRL,1970,4401259497.2595\nIreland,IRL,1971,5104355308.54734\nIreland,IRL,1972,6325627655.38946\nIreland,IRL,1973,7490132355.77851\nIreland,IRL,1974,7906317068.6798\nIreland,IRL,1975,9495165853.65854\nIreland,IRL,1976,9465078120.57741\nIreland,IRL,1977,11261810825.6629\nIreland,IRL,1978,14665538205.9801\nIreland,IRL,1979,18341273533.2044\nIreland,IRL,1980,21773901116.6855\nIreland,IRL,1981,20694944226.1377\nIreland,IRL,1982,21500471495.6405\nIreland,IRL,1983,20790917196.8288\nIreland,IRL,1984,20130728273.8603\nIreland,IRL,1985,21295485883.2348\nIreland,IRL,1986,28748959728.6986\nIreland,IRL,1987,33961141502.809\nIreland,IRL,1988,37818133413.3173\nIreland,IRL,1989,39285384083.045\nIreland,IRL,1990,49364680083.3659\nIreland,IRL,1991,49847127265.8132\nIreland,IRL,1992,55985505158.7833\nIreland,IRL,1993,52480251889.7546\nIreland,IRL,1994,57166035689.0459\nIreland,IRL,1995,69222624494.9495\nIreland,IRL,1996,75880630040.3226\nIreland,IRL,1997,82826141714.4222\nIreland,IRL,1998,90082029830.6605\nIreland,IRL,1999,98691939590.88\nIreland,IRL,2000,99853528745.1631\nIreland,IRL,2001,109133515615.213\nIreland,IRL,2002,127945378411.444\nIreland,IRL,2003,164285114672.686\nIreland,IRL,2004,193870345294.264\nIreland,IRL,2005,211650759109.563\nIreland,IRL,2006,232085533684.607\nIreland,IRL,2007,269917518477.963\nIreland,IRL,2008,275020018163.176\nIreland,IRL,2009,236311338427.341\nIreland,IRL,2010,221951353966.878\nIreland,IRL,2011,239018540057.01\nIreland,IRL,2012,225571857948.338\nIreland,IRL,2013,239389337002.814\nIreland,IRL,2014,258099015103.504\nIreland,IRL,2015,290617006703.972\nIreland,IRL,2016,304819020500.641\nIsle of Man,IMN,1995,914727080.643268\nIsle of Man,IMN,1996,1023086918.62768\nIsle of Man,IMN,1997,1180919719.40764\nIsle of Man,IMN,1998,1382548249.78303\nIsle of Man,IMN,1999,1567465656.8505\nIsle of Man,IMN,2000,1563667799.61578\nIsle of Man,IMN,2001,1614595290.9182\nIsle of Man,IMN,2002,1897606791.43353\nIsle of Man,IMN,2003,2264911806.90354\nIsle of Man,IMN,2004,2758117365.04863\nIsle of Man,IMN,2005,2971167185.35511\nIsle of Man,IMN,2006,3344402193.24608\nIsle of Man,IMN,2007,5685988395.35814\nIsle of Man,IMN,2008,5827468750\nIsle of Man,IMN,2009,5487083657.89064\nIsle of Man,IMN,2010,5920177688.50433\nIsle of Man,IMN,2011,6142169524.11473\nIsle of Man,IMN,2012,6433357030.0158\nIsle of Man,IMN,2013,6754330154.76004\nIsle of Man,IMN,2014,7428280401.5139\nIsle of Man,IMN,2015,6792417112.29947\nIsrael,ISR,1960,2598500000\nIsrael,ISR,1961,3138500000\nIsrael,ISR,1962,2510000000\nIsrael,ISR,1963,2992333333.33333\nIsrael,ISR,1964,3405333333.33333\nIsrael,ISR,1965,3663333333.33333\nIsrael,ISR,1966,3980000000\nIsrael,ISR,1967,4030000000\nIsrael,ISR,1968,4619000000\nIsrael,ISR,1969,5329333333.33333\nIsrael,ISR,1970,7045666666.66667\nIsrael,ISR,1971,6709000000\nIsrael,ISR,1972,8771500000\nIsrael,ISR,1973,11321750000\nIsrael,ISR,1974,16334250000\nIsrael,ISR,1975,15353833333.3333\nIsrael,ISR,1976,15176875000\nIsrael,ISR,1977,17365700000\nIsrael,ISR,1978,16836235294.1176\nIsrael,ISR,1979,21505200000\nIsrael,ISR,1980,24154568627.451\nIsrael,ISR,1981,25568701754.386\nIsrael,ISR,1982,27826057613.1687\nIsrael,ISR,1983,31079439501.7794\nIsrael,ISR,1984,29148462482.9468\nIsrael,ISR,1985,27493591483.5864\nIsrael,ISR,1986,34083532195.1875\nIsrael,ISR,1987,40946424369.7479\nIsrael,ISR,1988,50078767902.9333\nIsrael,ISR,1989,49881433990.8161\nIsrael,ISR,1990,58986997916.8733\nIsrael,ISR,1991,67530220218.5073\nIsrael,ISR,1992,75575902931.967\nIsrael,ISR,1993,75954641355.4291\nIsrael,ISR,1994,86307135996.8118\nIsrael,ISR,1995,100343219506.525\nIsrael,ISR,1996,109957321960.084\nIsrael,ISR,1997,114724862033.977\nIsrael,ISR,1998,115979230546.565\nIsrael,ISR,1999,117189920211.61\nIsrael,ISR,2000,132339311284.428\nIsrael,ISR,2001,130706147870.747\nIsrael,ISR,2002,121069378150.196\nIsrael,ISR,2003,126864966908.939\nIsrael,ISR,2004,135445033199.465\nIsrael,ISR,2005,142462925574.348\nIsrael,ISR,2006,153966916311.325\nIsrael,ISR,2007,178706717752.732\nIsrael,ISR,2008,215840354626.533\nIsrael,ISR,2009,207419370241.335\nIsrael,ISR,2010,233609522091.468\nIsrael,ISR,2011,261628548084.179\nIsrael,ISR,2012,257296579579.346\nIsrael,ISR,2013,292489185194.417\nIsrael,ISR,2014,308416982140.362\nIsrael,ISR,2015,299096404728.826\nIsrael,ISR,2016,317744784695.1\nItaly,ITA,1960,40385288344.1911\nItaly,ITA,1961,44842760293.1924\nItaly,ITA,1962,50383891898.9911\nItaly,ITA,1963,57710743059.8341\nItaly,ITA,1964,63175417019.0094\nItaly,ITA,1965,67978153850.5191\nItaly,ITA,1966,73654870011.2757\nItaly,ITA,1967,81133120065.4202\nItaly,ITA,1968,87942231678.3505\nItaly,ITA,1969,97085082807.3751\nItaly,ITA,1970,113021271995.043\nItaly,ITA,1971,124261125468.165\nItaly,ITA,1972,144780887782.205\nItaly,ITA,1973,174913182331.451\nItaly,ITA,1974,198906210777.017\nItaly,ITA,1975,226944777283.511\nItaly,ITA,1976,223976030937.427\nItaly,ITA,1977,256746610489.357\nItaly,ITA,1978,314019078256.902\nItaly,ITA,1979,392378584945.234\nItaly,ITA,1980,475682506443.59\nItaly,ITA,1981,429282143246.466\nItaly,ITA,1982,425863251968.504\nItaly,ITA,1983,441580962901.581\nItaly,ITA,1984,436443280912.497\nItaly,ITA,1985,450725816042.998\nItaly,ITA,1986,638273986102.091\nItaly,ITA,1987,803055418882.581\nItaly,ITA,1988,888667913418.625\nItaly,ITA,1989,925598068021.451\nItaly,ITA,1990,1177326294440.85\nItaly,ITA,1991,1242109397533.95\nItaly,ITA,1992,1315806985860.17\nItaly,ITA,1993,1061445225790.57\nItaly,ITA,1994,1095590833693.56\nItaly,ITA,1995,1170787352906.22\nItaly,ITA,1996,1308929351236.04\nItaly,ITA,1997,1239050932241.93\nItaly,ITA,1998,1266309245009.48\nItaly,ITA,1999,1248563179203.07\nItaly,ITA,2000,1141759996314.72\nItaly,ITA,2001,1162317852348.99\nItaly,ITA,2002,1266510634293.24\nItaly,ITA,2003,1569649661399.55\nItaly,ITA,2004,1798314750434.57\nItaly,ITA,2005,1852661982340.5\nItaly,ITA,2006,1942633797516\nItaly,ITA,2007,2203053380782.92\nItaly,ITA,2008,2390729163615.06\nItaly,ITA,2009,2185160183384.27\nItaly,ITA,2010,2125058244242.92\nItaly,ITA,2011,2276292404600.52\nItaly,ITA,2012,2072823157059.76\nItaly,ITA,2013,2130491320658.68\nItaly,ITA,2014,2151732868243.21\nItaly,ITA,2015,1832347450961.51\nItaly,ITA,2016,1858913163927.72\nJamaica,JAM,1960,699050678.98642\nJamaica,JAM,1961,748028839.423211\nJamaica,JAM,1962,777712445.751085\nJamaica,JAM,1963,826690466.190676\nJamaica,JAM,1964,897931401.371972\nJamaica,JAM,1965,972140557.188856\nJamaica,JAM,1966,1096738065.2387\nJamaica,JAM,1967,1148025407.34604\nJamaica,JAM,1968,1083883355.33421\nJamaica,JAM,1969,1191287651.50606\nJamaica,JAM,1970,1404776071.04284\nJamaica,JAM,1971,1539865513.92891\nJamaica,JAM,1972,1875048859.93485\nJamaica,JAM,1973,1905917553.19149\nJamaica,JAM,1974,2375096249.03751\nJamaica,JAM,1975,2860411285.88714\nJamaica,JAM,1976,2966010229.8977\nJamaica,JAM,1977,3249697393.02607\nJamaica,JAM,1978,2644449232.29321\nJamaica,JAM,1979,2425033998.18676\nJamaica,JAM,1980,2679409453.23903\nJamaica,JAM,1981,2979061412.37229\nJamaica,JAM,1982,3293533288.42483\nJamaica,JAM,1983,3619294120.69144\nJamaica,JAM,1984,2373566957.49214\nJamaica,JAM,1985,2100223149.71396\nJamaica,JAM,1986,2754566176.20212\nJamaica,JAM,1987,3286987551.71597\nJamaica,JAM,1988,3828310734.97795\nJamaica,JAM,1989,4404970058.83786\nJamaica,JAM,1990,4592224067.37194\nJamaica,JAM,1991,4071219198.03601\nJamaica,JAM,1992,3530892749.02131\nJamaica,JAM,1993,4859766160.89207\nJamaica,JAM,1994,4907861405.82758\nJamaica,JAM,1995,5779285207.92079\nJamaica,JAM,1996,6504445801.34228\nJamaica,JAM,1997,7450324787.38384\nJamaica,JAM,1998,8718300136.42565\nJamaica,JAM,1999,8795765306.12245\nJamaica,JAM,2000,8929375580.31569\nJamaica,JAM,2001,9087918836.80556\nJamaica,JAM,2002,9694161516.27524\nJamaica,JAM,2003,9399452787.8474\nJamaica,JAM,2004,10150978154.5484\nJamaica,JAM,2005,11204416000\nJamaica,JAM,2006,11905525197.3285\nJamaica,JAM,2007,12824094989.8639\nJamaica,JAM,2008,13678606692.2655\nJamaica,JAM,2009,12038829246.2425\nJamaica,JAM,2010,13191645685.5116\nJamaica,JAM,2011,14439910353.0576\nJamaica,JAM,2012,14800165406.7733\nJamaica,JAM,2013,14274983015.9485\nJamaica,JAM,2014,13897723431.3942\nJamaica,JAM,2015,14186886642.6685\nJamaica,JAM,2016,14056908749.3505\nJapan,JPN,1960,44307342950.4\nJapan,JPN,1961,53508617739.3778\nJapan,JPN,1962,60723018683.7333\nJapan,JPN,1963,69498131797.3333\nJapan,JPN,1964,81749006381.5111\nJapan,JPN,1965,90950278257.7778\nJapan,JPN,1966,105628070343.111\nJapan,JPN,1967,123781880217.6\nJapan,JPN,1968,146601072685.511\nJapan,JPN,1969,172204199480.889\nJapan,JPN,1970,211514189326.389\nJapan,JPN,1971,238914956436.922\nJapan,JPN,1972,316393344649.993\nJapan,JPN,1973,429857320166.565\nJapan,JPN,1974,477155786487.722\nJapan,JPN,1975,518855814542.728\nJapan,JPN,1976,583142956487.974\nJapan,JPN,1977,717696307916.651\nJapan,JPN,1978,1008391778690.25\nJapan,JPN,1979,1049578503045.09\nJapan,JPN,1980,1099692917412.75\nJapan,JPN,1981,1215508719880.85\nJapan,JPN,1982,1129894523635.09\nJapan,JPN,1983,1232343804284.17\nJapan,JPN,1984,1309740021609.74\nJapan,JPN,1985,1400714806812.65\nJapan,JPN,1986,2075034242192.31\nJapan,JPN,1987,2514283894261.86\nJapan,JPN,1988,3050637784817.52\nJapan,JPN,1989,3052315661954.82\nJapan,JPN,1990,3139974443543\nJapan,JPN,1991,3578139437172.02\nJapan,JPN,1992,3897826229662.86\nJapan,JPN,1993,4466565327401.26\nJapan,JPN,1994,4907039384469.68\nJapan,JPN,1995,5449116304981.1\nJapan,JPN,1996,4833712542207.1\nJapan,JPN,1997,4414732843544.43\nJapan,JPN,1998,4032509760872.94\nJapan,JPN,1999,4562078822335.45\nJapan,JPN,2000,4887519660744.86\nJapan,JPN,2001,4303544259842.72\nJapan,JPN,2002,4115116279069.77\nJapan,JPN,2003,4445658071221.86\nJapan,JPN,2004,4815148854362.11\nJapan,JPN,2005,4755410630912.14\nJapan,JPN,2006,4530377224970.4\nJapan,JPN,2007,4515264514430.57\nJapan,JPN,2008,5037908465114.48\nJapan,JPN,2009,5231382674593.7\nJapan,JPN,2010,5700098114744.41\nJapan,JPN,2011,6157459594823.72\nJapan,JPN,2012,6203213121334.12\nJapan,JPN,2013,5155717056270.83\nJapan,JPN,2014,4848733415523.53\nJapan,JPN,2015,4383076298081.86\nJapan,JPN,2016,4940158776617.16\nJordan,JOR,1965,599831979.837581\nJordan,JOR,1966,658078969.476337\nJordan,JOR,1967,631755810.697284\nJordan,JOR,1968,561187342.481098\nJordan,JOR,1969,698963875.66508\nJordan,JOR,1970,639596751.610193\nJordan,JOR,1971,678241388.966676\nJordan,JOR,1972,788574628.955475\nJordan,JOR,1973,943700547.778454\nJordan,JOR,1974,1197454206.76808\nJordan,JOR,1975,1363039399.62477\nJordan,JOR,1976,1708734939.75904\nJordan,JOR,1977,2096568478.59095\nJordan,JOR,1978,2602748691.09948\nJordan,JOR,1979,3271728271.72827\nJordan,JOR,1980,3910036925.14267\nJordan,JOR,1981,4384685230.02421\nJordan,JOR,1982,4680567375.88653\nJordan,JOR,1983,4920407601.21179\nJordan,JOR,1984,4966710013.0039\nJordan,JOR,1985,4993829194.12063\nJordan,JOR,1986,6401380000\nJordan,JOR,1987,6755599113.73707\nJordan,JOR,1988,6277197435.2124\nJordan,JOR,1989,4220945005.22102\nJordan,JOR,1990,4160003917.43258\nJordan,JOR,1991,4344250257.01278\nJordan,JOR,1992,5311329067.37276\nJordan,JOR,1993,5605841535.57512\nJordan,JOR,1994,6237739516.24445\nJordan,JOR,1995,6727446632.42009\nJordan,JOR,1996,6928359238.36389\nJordan,JOR,1997,7246188575.45839\nJordan,JOR,1998,7912327362.48237\nJordan,JOR,1999,8149106064.88011\nJordan,JOR,2000,8460424400.56418\nJordan,JOR,2001,8975689844.8519\nJordan,JOR,2002,9582453032.44006\nJordan,JOR,2003,10195660789.8449\nJordan,JOR,2004,11411390409.0268\nJordan,JOR,2005,12588665303.244\nJordan,JOR,2006,15056929760.2257\nJordan,JOR,2007,17110587447.1086\nJordan,JOR,2008,21972004086.2336\nJordan,JOR,2009,23820230000\nJordan,JOR,2010,26425379436.6197\nJordan,JOR,2011,28840263380.2817\nJordan,JOR,2012,30937277605.6338\nJordan,JOR,2013,33593843661.9718\nJordan,JOR,2014,35826925774.6479\nJordan,JOR,2015,37517410281.6901\nJordan,JOR,2016,38654727746.4789\nKazakhstan,KAZ,1990,26932728898.8146\nKazakhstan,KAZ,1991,24881135586.399\nKazakhstan,KAZ,1992,24906939560.1098\nKazakhstan,KAZ,1993,23409027475.6879\nKazakhstan,KAZ,1994,21250839258.0901\nKazakhstan,KAZ,1995,20374307047.115\nKazakhstan,KAZ,1996,21035357832.8019\nKazakhstan,KAZ,1997,22165932062.966\nKazakhstan,KAZ,1998,22135245413.2312\nKazakhstan,KAZ,1999,16870817134.7767\nKazakhstan,KAZ,2000,18291990619.137\nKazakhstan,KAZ,2001,22152694161.8882\nKazakhstan,KAZ,2002,24636593223.3467\nKazakhstan,KAZ,2003,30833699702.7594\nKazakhstan,KAZ,2004,43151647002.6096\nKazakhstan,KAZ,2005,57123671733.8953\nKazakhstan,KAZ,2006,81003884545.4098\nKazakhstan,KAZ,2007,104849886825.584\nKazakhstan,KAZ,2008,133441612246.798\nKazakhstan,KAZ,2009,115308661142.927\nKazakhstan,KAZ,2010,148047348240.643\nKazakhstan,KAZ,2011,192626507971.584\nKazakhstan,KAZ,2012,207998568865.789\nKazakhstan,KAZ,2013,236634552078.102\nKazakhstan,KAZ,2014,221415572819.5\nKazakhstan,KAZ,2015,184388432148.715\nKazakhstan,KAZ,2016,137278320084.171\nKenya,KEN,1960,791265458.813328\nKenya,KEN,1961,792959472.134266\nKenya,KEN,1962,868111400.008864\nKenya,KEN,1963,926589348.567393\nKenya,KEN,1964,998759333.637333\nKenya,KEN,1965,997919319.974061\nKenya,KEN,1966,1164519673.19064\nKenya,KEN,1967,1232559505.9162\nKenya,KEN,1968,1353295457.51798\nKenya,KEN,1969,1458379415.39403\nKenya,KEN,1970,1603447357.24209\nKenya,KEN,1971,1778391289.20054\nKenya,KEN,1972,2107279157.38336\nKenya,KEN,1973,2502142444.14182\nKenya,KEN,1974,2973309272.02986\nKenya,KEN,1975,3259344935.75357\nKenya,KEN,1976,3474542392.04597\nKenya,KEN,1977,4494378855.32203\nKenya,KEN,1978,5303734882.5116\nKenya,KEN,1979,6234390975.29871\nKenya,KEN,1980,7265315331.62273\nKenya,KEN,1981,6854491453.91471\nKenya,KEN,1982,6431579357.30273\nKenya,KEN,1983,5979198463.82274\nKenya,KEN,1984,6191437070.43467\nKenya,KEN,1985,6135034338.30431\nKenya,KEN,1986,7239126716.93219\nKenya,KEN,1987,7970820530.76691\nKenya,KEN,1988,8355380879.12955\nKenya,KEN,1989,8283114648.38116\nKenya,KEN,1990,8572359162.86876\nKenya,KEN,1991,8151479004.21334\nKenya,KEN,1992,8209129171.73649\nKenya,KEN,1993,5751789915.05363\nKenya,KEN,1994,7148145375.78545\nKenya,KEN,1995,9046326059.98857\nKenya,KEN,1996,12045858436.2399\nKenya,KEN,1997,13115773737.5664\nKenya,KEN,1998,14093998843.7334\nKenya,KEN,1999,12896013576.7324\nKenya,KEN,2000,12705357103.0056\nKenya,KEN,2001,12986007425.8781\nKenya,KEN,2002,13147743910.7241\nKenya,KEN,2003,14904517649.8476\nKenya,KEN,2004,16095337093.8366\nKenya,KEN,2005,18737897744.7948\nKenya,KEN,2006,25825524820.8064\nKenya,KEN,2007,31958195182.2406\nKenya,KEN,2008,35895153327.8497\nKenya,KEN,2009,37021512048.8158\nKenya,KEN,2010,39999659233.7555\nKenya,KEN,2011,41953433591.4101\nKenya,KEN,2012,50412754821.9795\nKenya,KEN,2013,55097343447.5616\nKenya,KEN,2014,61445345999.0765\nKenya,KEN,2015,63767539356.6051\nKenya,KEN,2016,70529014778.3251\nKiribati,KIR,1970,14295279.5446937\nKiribati,KIR,1971,15278632.4786325\nKiribati,KIR,1972,18936526.9461078\nKiribati,KIR,1973,31710657.7257811\nKiribati,KIR,1974,85637174.3722131\nKiribati,KIR,1975,55081816.9917528\nKiribati,KIR,1976,41109617.4996945\nKiribati,KIR,1977,38748059.4366822\nKiribati,KIR,1978,45210026.3248255\nKiribati,KIR,1979,42620165.4370668\nKiribati,KIR,1980,38715554.5433842\nKiribati,KIR,1981,41369800.0459664\nKiribati,KIR,1982,40572066.1324678\nKiribati,KIR,1983,37837837.8378378\nKiribati,KIR,1984,41246160.596753\nKiribati,KIR,1985,32125148.4042182\nKiribati,KIR,1986,32085561.4973262\nKiribati,KIR,1987,33608738.2719507\nKiribati,KIR,1988,42972107.1958747\nKiribati,KIR,1989,41119721.651115\nKiribati,KIR,1990,39809538.6776989\nKiribati,KIR,1991,47515189.2818196\nKiribati,KIR,1992,47737955.346651\nKiribati,KIR,1993,46919624.6430029\nKiribati,KIR,1994,54832577.8622606\nKiribati,KIR,1995,56338028.1690141\nKiribati,KIR,1996,66515376.7900462\nKiribati,KIR,1997,67537479.5903221\nKiribati,KIR,1998,65334841.0604347\nKiribati,KIR,1999,69032258.0645161\nKiribati,KIR,2000,67254174.3970315\nKiribati,KIR,2001,63101272.3699183\nKiribati,KIR,2002,72196457.6768445\nKiribati,KIR,2003,90231856.8000519\nKiribati,KIR,2004,102367039.270481\nKiribati,KIR,2005,112133944.253532\nKiribati,KIR,2006,108545632.53012\nKiribati,KIR,2007,130754915.906619\nKiribati,KIR,2008,139125482.301627\nKiribati,KIR,2009,130465372.016846\nKiribati,KIR,2010,153275912.676573\nKiribati,KIR,2011,177142135.121196\nKiribati,KIR,2012,188045661.627666\nKiribati,KIR,2013,187153601.08129\nKiribati,KIR,2014,178869341.205462\nKiribati,KIR,2015,169140538.696106\nKiribati,KIR,2016,181551484.895269\n\"Korea, Rep.\",KOR,1960,3957873925.93719\n\"Korea, Rep.\",KOR,1961,2417237753.94419\n\"Korea, Rep.\",KOR,1962,2813933899.74577\n\"Korea, Rep.\",KOR,1963,3988246108.63888\n\"Korea, Rep.\",KOR,1964,3458518493.92483\n\"Korea, Rep.\",KOR,1965,3120307807.80781\n\"Korea, Rep.\",KOR,1966,3928171298.00251\n\"Korea, Rep.\",KOR,1967,4854576371.4328\n\"Korea, Rep.\",KOR,1968,6117260075.90819\n\"Korea, Rep.\",KOR,1969,7675805108.27318\n\"Korea, Rep.\",KOR,1970,8999227202.47295\n\"Korea, Rep.\",KOR,1971,9889961111.91128\n\"Korea, Rep.\",KOR,1972,10842220468.8335\n\"Korea, Rep.\",KOR,1973,13841885920.8676\n\"Korea, Rep.\",KOR,1974,19482038222.8595\n\"Korea, Rep.\",KOR,1975,21704752066.1157\n\"Korea, Rep.\",KOR,1976,29779338842.9752\n\"Korea, Rep.\",KOR,1977,38265082644.6281\n\"Korea, Rep.\",KOR,1978,51700619834.7107\n\"Korea, Rep.\",KOR,1979,66567975206.6116\n\"Korea, Rep.\",KOR,1980,64980820835.3226\n\"Korea, Rep.\",KOR,1981,72425590649.4574\n\"Korea, Rep.\",KOR,1982,77773431088.253\n\"Korea, Rep.\",KOR,1983,87024427972.9294\n\"Korea, Rep.\",KOR,1984,96597434179.5082\n\"Korea, Rep.\",KOR,1985,100273097170.18\n\"Korea, Rep.\",KOR,1986,115537126325.94\n\"Korea, Rep.\",KOR,1987,146133338196.141\n\"Korea, Rep.\",KOR,1988,196964195387.371\n\"Korea, Rep.\",KOR,1989,243526047716.915\n\"Korea, Rep.\",KOR,1990,279349355713.801\n\"Korea, Rep.\",KOR,1991,325734233312.879\n\"Korea, Rep.\",KOR,1992,350051111253.443\n\"Korea, Rep.\",KOR,1993,386302839273.923\n\"Korea, Rep.\",KOR,1994,455602962225.403\n\"Korea, Rep.\",KOR,1995,556130926912.754\n\"Korea, Rep.\",KOR,1996,598099073901.423\n\"Korea, Rep.\",KOR,1997,557503074772.151\n\"Korea, Rep.\",KOR,1998,374241351752.483\n\"Korea, Rep.\",KOR,1999,485248229336.653\n\"Korea, Rep.\",KOR,2000,561633125839.994\n\"Korea, Rep.\",KOR,2001,533052076313.527\n\"Korea, Rep.\",KOR,2002,609020054512.465\n\"Korea, Rep.\",KOR,2003,680520724062.403\n\"Korea, Rep.\",KOR,2004,764880644710.649\n\"Korea, Rep.\",KOR,2005,898137194716.188\n\"Korea, Rep.\",KOR,2006,1011797457138.5\n\"Korea, Rep.\",KOR,2007,1122679154632.41\n\"Korea, Rep.\",KOR,2008,1002219052967.54\n\"Korea, Rep.\",KOR,2009,901934953364.711\n\"Korea, Rep.\",KOR,2010,1094499338702.72\n\"Korea, Rep.\",KOR,2011,1202463682633.85\n\"Korea, Rep.\",KOR,2012,1222807284485.31\n\"Korea, Rep.\",KOR,2013,1305604981271.91\n\"Korea, Rep.\",KOR,2014,1411333926201.24\n\"Korea, Rep.\",KOR,2015,1382764027113.82\n\"Korea, Rep.\",KOR,2016,1411245589976.63\nKosovo,XKX,2000,1849196082.05507\nKosovo,XKX,2001,2535333631.88536\nKosovo,XKX,2002,2702427046.9355\nKosovo,XKX,2003,3355083116.58939\nKosovo,XKX,2004,3639935347.50715\nKosovo,XKX,2005,3736599925.38241\nKosovo,XKX,2006,4078158323.92423\nKosovo,XKX,2007,4833561456.33726\nKosovo,XKX,2008,5687488208.58357\nKosovo,XKX,2009,5653792720.20006\nKosovo,XKX,2010,5829933774.83444\nKosovo,XKX,2011,6649291075.89658\nKosovo,XKX,2012,6473724784.78736\nKosovo,XKX,2013,7072092405.73553\nKosovo,XKX,2014,7386891336.07536\nKosovo,XKX,2015,6440501275.36875\nKosovo,XKX,2016,6649888888.88889\nKuwait,KWT,1965,2097451694.2033\nKuwait,KWT,1966,2391486978.43741\nKuwait,KWT,1967,2441893027.16326\nKuwait,KWT,1968,2663119574.34892\nKuwait,KWT,1969,2769532343.88127\nKuwait,KWT,1970,2873984878.18538\nKuwait,KWT,1971,3880370401.57259\nKuwait,KWT,1972,4451200972.9401\nKuwait,KWT,1973,5408293998.65138\nKuwait,KWT,1974,13004774556.6166\nKuwait,KWT,1975,12024138275.8621\nKuwait,KWT,1976,13131668946.6484\nKuwait,KWT,1977,14135729588.2763\nKuwait,KWT,1978,15500908760.4507\nKuwait,KWT,1979,24746019536.903\nKuwait,KWT,1980,28638550499.4451\nKuwait,KWT,1981,25056672166.4275\nKuwait,KWT,1982,21577977770.059\nKuwait,KWT,1983,20869434305.3173\nKuwait,KWT,1984,21697297872.3404\nKuwait,KWT,1985,21442619680.8511\nKuwait,KWT,1986,17903681693.0489\nKuwait,KWT,1987,22365734481.5213\nKuwait,KWT,1988,20692472759.8566\nKuwait,KWT,1989,24312117767.1886\nKuwait,KWT,1990,18427777777.7778\nKuwait,KWT,1991,11008793176.2223\nKuwait,KWT,1992,19858555214.7239\nKuwait,KWT,1993,23941391390.7285\nKuwait,KWT,1994,24848483838.3838\nKuwait,KWT,1995,27191689008.0429\nKuwait,KWT,1996,31493987641.9506\nKuwait,KWT,1997,30354434553.2476\nKuwait,KWT,1998,25941929461.9423\nKuwait,KWT,1999,30121879434.954\nKuwait,KWT,2000,37711864406.7797\nKuwait,KWT,2001,34890772742.0933\nKuwait,KWT,2002,38137545245.1464\nKuwait,KWT,2003,47875838926.1745\nKuwait,KWT,2004,59440108585.0017\nKuwait,KWT,2005,80797945205.4795\nKuwait,KWT,2006,101550654720.882\nKuwait,KWT,2007,114641097818.438\nKuwait,KWT,2008,147395833333.333\nKuwait,KWT,2009,105899930507.297\nKuwait,KWT,2010,115419050942.08\nKuwait,KWT,2011,154027536231.884\nKuwait,KWT,2012,174070025008.932\nKuwait,KWT,2013,174161495063.47\nKuwait,KWT,2014,162631763879.129\nKuwait,KWT,2015,114567298105.683\nKuwait,KWT,2016,110875579086.698\nKyrgyz Republic,KGZ,1990,2674000000\nKyrgyz Republic,KGZ,1991,2570833333.33333\nKyrgyz Republic,KGZ,1992,2316562500\nKyrgyz Republic,KGZ,1993,2028295454.54545\nKyrgyz Republic,KGZ,1994,1681006993.00699\nKyrgyz Republic,KGZ,1995,1661018518.51852\nKyrgyz Republic,KGZ,1996,1827570586.16784\nKyrgyz Republic,KGZ,1997,1767864035.71943\nKyrgyz Republic,KGZ,1998,1645963749.83146\nKyrgyz Republic,KGZ,1999,1249062025.13805\nKyrgyz Republic,KGZ,2000,1369693171.43504\nKyrgyz Republic,KGZ,2001,1525112241.84376\nKyrgyz Republic,KGZ,2002,1605640633.42189\nKyrgyz Republic,KGZ,2003,1919012780.97086\nKyrgyz Republic,KGZ,2004,2211535311.62834\nKyrgyz Republic,KGZ,2005,2460248026.17783\nKyrgyz Republic,KGZ,2006,2834168889.42019\nKyrgyz Republic,KGZ,2007,3802566170.81543\nKyrgyz Republic,KGZ,2008,5139957784.91084\nKyrgyz Republic,KGZ,2009,4690062255.12247\nKyrgyz Republic,KGZ,2010,4794357795.07139\nKyrgyz Republic,KGZ,2011,6197766118.59856\nKyrgyz Republic,KGZ,2012,6605139933.41063\nKyrgyz Republic,KGZ,2013,7335027591.91628\nKyrgyz Republic,KGZ,2014,7468096566.71158\nKyrgyz Republic,KGZ,2015,6678178340.45121\nKyrgyz Republic,KGZ,2016,6551287937.62632\nLao PDR,LAO,1984,1757142805.71429\nLao PDR,LAO,1985,2366666615.55556\nLao PDR,LAO,1986,1776842041.05263\nLao PDR,LAO,1987,1087273103.69639\nLao PDR,LAO,1988,598961269.297879\nLao PDR,LAO,1989,714046821.093797\nLao PDR,LAO,1990,865559856.1639\nLao PDR,LAO,1991,1028087972.31085\nLao PDR,LAO,1992,1127806944.61513\nLao PDR,LAO,1993,1327748654.65969\nLao PDR,LAO,1994,1543606345.11684\nLao PDR,LAO,1995,1763536304.53964\nLao PDR,LAO,1996,1873671550.34636\nLao PDR,LAO,1997,1747011857.33107\nLao PDR,LAO,1998,1280177838.71905\nLao PDR,LAO,1999,1454430642.49183\nLao PDR,LAO,2000,1731198022.45494\nLao PDR,LAO,2001,1768619058.34647\nLao PDR,LAO,2002,1758176653.07746\nLao PDR,LAO,2003,2023324407.30316\nLao PDR,LAO,2004,2366398119.8821\nLao PDR,LAO,2005,2735558726.25625\nLao PDR,LAO,2006,3452882514.00166\nLao PDR,LAO,2007,4222962987.53859\nLao PDR,LAO,2008,5443915120.50795\nLao PDR,LAO,2009,5832915387.08908\nLao PDR,LAO,2010,7127792629.58294\nLao PDR,LAO,2011,8261299199.6817\nLao PDR,LAO,2012,10191350119.6796\nLao PDR,LAO,2013,11942230508.3344\nLao PDR,LAO,2014,13268458231.9295\nLao PDR,LAO,2015,14390395149.7773\nLao PDR,LAO,2016,15903329472.9904\nLatvia,LVA,1995,5788368511.12379\nLatvia,LVA,1996,5970044665.64574\nLatvia,LVA,1997,6525676264.21486\nLatvia,LVA,1998,7174985106.63648\nLatvia,LVA,1999,7533187605.09248\nLatvia,LVA,2000,7937758980.30127\nLatvia,LVA,2001,8350252966.19655\nLatvia,LVA,2002,9546441564.34743\nLatvia,LVA,2003,11748433157.0533\nLatvia,LVA,2004,14373269155.7174\nLatvia,LVA,2005,16922504044.804\nLatvia,LVA,2006,21447021570.1028\nLatvia,LVA,2007,30901399261.387\nLatvia,LVA,2008,35596016664.2304\nLatvia,LVA,2009,26169854045.0375\nLatvia,LVA,2010,23757368290.0955\nLatvia,LVA,2011,28223552824.7508\nLatvia,LVA,2012,28119996053.2511\nLatvia,LVA,2013,30314363218.6773\nLatvia,LVA,2014,31419072947.902\nLatvia,LVA,2015,27009231911.4428\nLatvia,LVA,2016,27572698481.8766\nLebanon,LBN,1988,3313540067.93246\nLebanon,LBN,1989,2717998687.71002\nLebanon,LBN,1990,2838485353.96187\nLebanon,LBN,1991,4451497288.27108\nLebanon,LBN,1992,5545921947.46583\nLebanon,LBN,1993,7535259851.03597\nLebanon,LBN,1994,9599127049.9375\nLebanon,LBN,1995,11718795528.4939\nLebanon,LBN,1996,13690217333.2697\nLebanon,LBN,1997,15751867489.4446\nLebanon,LBN,1998,17247179005.5219\nLebanon,LBN,1999,17391056369.2265\nLebanon,LBN,2000,17260364842.4544\nLebanon,LBN,2001,17649751243.7811\nLebanon,LBN,2002,19152238805.9701\nLebanon,LBN,2003,20082918739.6352\nLebanon,LBN,2004,20955223880.597\nLebanon,LBN,2005,21287562189.0547\nLebanon,LBN,2006,21796351575.4561\nLebanon,LBN,2007,24577114427.8607\nLebanon,LBN,2008,29227350570.0166\nLebanon,LBN,2009,35477118070.2487\nLebanon,LBN,2010,38419626628.1924\nLebanon,LBN,2011,40075674163.2504\nLebanon,LBN,2012,43868565281.7247\nLebanon,LBN,2013,46014226807.5622\nLebanon,LBN,2014,47833413749.1211\nLebanon,LBN,2015,49459296463.2836\nLebanon,LBN,2016,49598825982.1559\nLesotho,LSO,1960,34579308.4138317\nLesotho,LSO,1961,35699286.0142797\nLesotho,LSO,1962,41859162.8167437\nLesotho,LSO,1963,47039059.2188156\nLesotho,LSO,1964,51938961.2207756\nLesotho,LSO,1965,54878902.4219516\nLesotho,LSO,1966,56698866.0226795\nLesotho,LSO,1967,59260814.7837043\nLesotho,LSO,1968,61444771.1045779\nLesotho,LSO,1969,65966680.6663867\nLesotho,LSO,1970,68738625.2274955\nLesotho,LSO,1971,76482102.9082774\nLesotho,LSO,1972,80915831.9240276\nLesotho,LSO,1973,121181556.195965\nLesotho,LSO,1974,150846210.448859\nLesotho,LSO,1975,149560513.860717\nLesotho,LSO,1976,147654093.836247\nLesotho,LSO,1977,193307267.709292\nLesotho,LSO,1978,266559337.626495\nLesotho,LSO,1979,290142517.814727\nLesotho,LSO,1980,431561376.476631\nLesotho,LSO,1981,434188034.188034\nLesotho,LSO,1982,348746822.619267\nLesotho,LSO,1983,386699308.859169\nLesotho,LSO,1984,333158476.24212\nLesotho,LSO,1985,268626912.549917\nLesotho,LSO,1986,318862888.402626\nLesotho,LSO,1987,402774852.652259\nLesotho,LSO,1988,470389179.678909\nLesotho,LSO,1989,495404888.092424\nLesotho,LSO,1990,596415104.549144\nLesotho,LSO,1991,704329192.771521\nLesotho,LSO,1992,831033941.093969\nLesotho,LSO,1993,835592802.276831\nLesotho,LSO,1994,878250450.602681\nLesotho,LSO,1995,1001889856.91048\nLesotho,LSO,1996,946123275.88212\nLesotho,LSO,1997,997996028.645833\nLesotho,LSO,1998,928458205.958432\nLesotho,LSO,1999,912771290.61298\nLesotho,LSO,2000,887295267.875155\nLesotho,LSO,2001,825706961.238689\nLesotho,LSO,2002,775780697.676625\nLesotho,LSO,2003,1157832934.55127\nLesotho,LSO,2004,1511236655.52047\nLesotho,LSO,2005,1682350934.85132\nLesotho,LSO,2006,1800105589.60349\nLesotho,LSO,2007,1820811281.1196\nLesotho,LSO,2008,1870722800.56166\nLesotho,LSO,2009,1865963014.97575\nLesotho,LSO,2010,2385950663.8256\nLesotho,LSO,2011,2788022889.09394\nLesotho,LSO,2012,2678494689.40317\nLesotho,LSO,2013,2526009072.92519\nLesotho,LSO,2014,2614566292.25907\nLesotho,LSO,2015,2505886024.6573\nLesotho,LSO,2016,2291321667.48246\nLiberia,LBR,1960,190495600\nLiberia,LBR,1961,183920900\nLiberia,LBR,1962,191861800\nLiberia,LBR,1963,200229600\nLiberia,LBR,1964,218929100\nLiberia,LBR,1965,229260800\nLiberia,LBR,1966,244459500\nLiberia,LBR,1967,261024300\nLiberia,LBR,1968,276820700\nLiberia,LBR,1969,306961800\nLiberia,LBR,1970,323099700\nLiberia,LBR,1971,341543100\nLiberia,LBR,1972,368098000\nLiberia,LBR,1973,386968300\nLiberia,LBR,1974,486955000\nLiberia,LBR,1975,577549300\nLiberia,LBR,1976,596675700\nLiberia,LBR,1977,673010600\nLiberia,LBR,1978,717240400\nLiberia,LBR,1979,814067900\nLiberia,LBR,1980,854711500\nLiberia,LBR,1981,846514500\nLiberia,LBR,1982,863933200\nLiberia,LBR,1983,823374900\nLiberia,LBR,1984,848478300\nLiberia,LBR,1985,851296100\nLiberia,LBR,1986,840964400\nLiberia,LBR,1987,972800000\nLiberia,LBR,1988,1038300000\nLiberia,LBR,1989,786300000\nLiberia,LBR,1990,384400000\nLiberia,LBR,1991,348000000\nLiberia,LBR,1992,223500000\nLiberia,LBR,1993,160400000\nLiberia,LBR,1994,132200000\nLiberia,LBR,1995,134800000\nLiberia,LBR,1996,159400000\nLiberia,LBR,1997,295900000\nLiberia,LBR,1998,359600000\nLiberia,LBR,1999,441800000\nLiberia,LBR,2000,529064600\nLiberia,LBR,2001,521000000\nLiberia,LBR,2002,543000000\nLiberia,LBR,2003,416000000\nLiberia,LBR,2004,474700000\nLiberia,LBR,2005,550000000\nLiberia,LBR,2006,604028900\nLiberia,LBR,2007,739027200\nLiberia,LBR,2008,850040500\nLiberia,LBR,2009,1155147400\nLiberia,LBR,2010,1292697100\nLiberia,LBR,2011,1545400000\nLiberia,LBR,2012,1735500000\nLiberia,LBR,2013,1946500000\nLiberia,LBR,2014,2013000000\nLiberia,LBR,2015,2034000000\nLiberia,LBR,2016,2101000000\nLibya,LBY,1990,28901836158.1921\nLibya,LBY,1991,31995012468.8279\nLibya,LBY,1992,33881392045.4545\nLibya,LBY,1993,30657030223.3903\nLibya,LBY,1994,28607921928.8175\nLibya,LBY,1995,25544128198.9955\nLibya,LBY,1996,27884615384.6154\nLibya,LBY,1997,30698633109.1343\nLibya,LBY,1998,27249786142.0017\nLibya,LBY,1999,35976714100.9056\nLibya,LBY,2000,38270206950.41\nLibya,LBY,2001,34110064452.1567\nLibya,LBY,2002,20481889763.7795\nLibya,LBY,2003,26265625000\nLibya,LBY,2004,33122307692.3077\nLibya,LBY,2005,47334148578.4164\nLibya,LBY,2006,54961936662.6066\nLibya,LBY,2007,67516236337.7158\nLibya,LBY,2008,87140405361.2292\nLibya,LBY,2009,63028320702.0343\nLibya,LBY,2010,74773444900.5368\nLibya,LBY,2011,34699395523.6073\nLiechtenstein,LIE,1970,90098330.6654471\nLiechtenstein,LIE,1971,104888628.171944\nLiechtenstein,LIE,1972,124941925.010473\nLiechtenstein,LIE,1973,165930611.729019\nLiechtenstein,LIE,1974,193983720.461869\nLiechtenstein,LIE,1975,246387479.177159\nLiechtenstein,LIE,1976,272493879.020643\nLiechtenstein,LIE,1977,303496276.263782\nLiechtenstein,LIE,1978,436918176.733781\nLiechtenstein,LIE,1979,503180669.994587\nLiechtenstein,LIE,1980,534701915.617354\nLiechtenstein,LIE,1981,511658690.561043\nLiechtenstein,LIE,1982,522090331.478107\nLiechtenstein,LIE,1983,524034109.856605\nLiechtenstein,LIE,1984,502617355.407073\nLiechtenstein,LIE,1985,529078995.563876\nLiechtenstein,LIE,1986,779365167.602424\nLiechtenstein,LIE,1987,1052843347.63948\nLiechtenstein,LIE,1988,1161757671.01756\nLiechtenstein,LIE,1989,1120000916.92646\nLiechtenstein,LIE,1990,1421466239.56234\nLiechtenstein,LIE,1991,1484152022.3152\nLiechtenstein,LIE,1992,1631197909.259\nLiechtenstein,LIE,1993,1673104493.77369\nLiechtenstein,LIE,1994,1948118227.68151\nLiechtenstein,LIE,1995,2428461395.34884\nLiechtenstein,LIE,1996,2504033252.42718\nLiechtenstein,LIE,1997,2298410390.68421\nLiechtenstein,LIE,1998,2479721340.8746\nLiechtenstein,LIE,1999,2664026095.06058\nLiechtenstein,LIE,2000,2483953102.79488\nLiechtenstein,LIE,2001,2491822706.80256\nLiechtenstein,LIE,2002,2688630822.53304\nLiechtenstein,LIE,2003,3070691319.52179\nLiechtenstein,LIE,2004,3454362685.96703\nLiechtenstein,LIE,2005,3659251525.8593\nLiechtenstein,LIE,2006,4000239272.61126\nLiechtenstein,LIE,2007,4601299566.81106\nLiechtenstein,LIE,2008,5081432924.0144\nLiechtenstein,LIE,2009,4504549214.22663\nLiechtenstein,LIE,2010,5082366478.08994\nLiechtenstein,LIE,2011,5739977477.47748\nLiechtenstein,LIE,2012,5456009384.66461\nLiechtenstein,LIE,2013,6391735893.83968\nLiechtenstein,LIE,2014,6657170923.37918\nLiechtenstein,LIE,2015,6289165409.55908\nLithuania,LTU,1995,7870782260.51698\nLithuania,LTU,1996,8385109020.28485\nLithuania,LTU,1997,10120274492.8787\nLithuania,LTU,1998,11240360897.7126\nLithuania,LTU,1999,10972878636.1675\nLithuania,LTU,2000,11539211480.3625\nLithuania,LTU,2001,12252498921.0186\nLithuania,LTU,2002,14278357283.7419\nLithuania,LTU,2003,18802576988.1557\nLithuania,LTU,2004,22649930576.2543\nLithuania,LTU,2005,26125575942.2814\nLithuania,LTU,2006,30216060233.4044\nLithuania,LTU,2007,39738180076.6283\nLithuania,LTU,2008,47850551148.8365\nLithuania,LTU,2009,37440673477.8982\nLithuania,LTU,2010,37120517693.8622\nLithuania,LTU,2011,43476878139.2577\nLithuania,LTU,2012,42847900765.8065\nLithuania,LTU,2013,46473646001.5672\nLithuania,LTU,2014,48545251795.561\nLithuania,LTU,2015,41402022148.2053\nLithuania,LTU,2016,42738875963.3703\nLuxembourg,LUX,1960,703925705.942958\nLuxembourg,LUX,1961,704145671.350213\nLuxembourg,LUX,1962,741509480.796284\nLuxembourg,LUX,1963,791140595.772755\nLuxembourg,LUX,1964,903158753.943622\nLuxembourg,LUX,1965,921600736.304026\nLuxembourg,LUX,1966,968440149.470951\nLuxembourg,LUX,1967,974721762.535327\nLuxembourg,LUX,1968,1066447130.82052\nLuxembourg,LUX,1969,1234878980.502\nLuxembourg,LUX,1970,1509155062.52521\nLuxembourg,LUX,1971,1572310771.77053\nLuxembourg,LUX,1972,1968733021.7212\nLuxembourg,LUX,1973,2701874663.63072\nLuxembourg,LUX,1974,3295861019.05551\nLuxembourg,LUX,1975,3233431611.27564\nLuxembourg,LUX,1976,3544268025.07837\nLuxembourg,LUX,1977,3922895891.95273\nLuxembourg,LUX,1978,4884869091.84066\nLuxembourg,LUX,1979,5711457760.04403\nLuxembourg,LUX,1980,6232005655.95255\nLuxembourg,LUX,1981,5231808670.14342\nLuxembourg,LUX,1982,4764549532.05015\nLuxembourg,LUX,1983,4683697830.37475\nLuxembourg,LUX,1984,4594891580.56409\nLuxembourg,LUX,1985,4738559684.76119\nLuxembourg,LUX,1986,6921264132.20155\nLuxembourg,LUX,1987,8614215559.15721\nLuxembourg,LUX,1988,9750161053.209\nLuxembourg,LUX,1989,10391504709.2547\nLuxembourg,LUX,1990,13229247947.8513\nLuxembourg,LUX,1991,14321878795.0384\nLuxembourg,LUX,1992,16065740777.9172\nLuxembourg,LUX,1993,16486900186.5672\nLuxembourg,LUX,1994,18325791415.4811\nLuxembourg,LUX,1995,21588170498.0843\nLuxembourg,LUX,1996,21776609771.987\nLuxembourg,LUX,1997,19731912494.3617\nLuxembourg,LUX,1998,20209122027.1171\nLuxembourg,LUX,1999,22235929043.2559\nLuxembourg,LUX,2000,21263514833.2412\nLuxembourg,LUX,2001,21272418791.9463\nLuxembourg,LUX,2002,23616328816.1114\nLuxembourg,LUX,2003,29557325056.4334\nLuxembourg,LUX,2004,34685281847.5292\nLuxembourg,LUX,2005,37347394602.6614\nLuxembourg,LUX,2006,42414308116.9239\nLuxembourg,LUX,2007,50888134410.0739\nLuxembourg,LUX,2008,55849686538.7432\nLuxembourg,LUX,2009,51370543206.4462\nLuxembourg,LUX,2010,53212476812.2957\nLuxembourg,LUX,2011,60004630234.4135\nLuxembourg,LUX,2012,56677961787.0717\nLuxembourg,LUX,2013,61739352212.3049\nLuxembourg,LUX,2014,66327344188.889\nLuxembourg,LUX,2015,57784495265.4378\nLuxembourg,LUX,2016,58631324559.4484\n\"Macao SAR, China\",MAC,1982,1130457130.00739\n\"Macao SAR, China\",MAC,1983,1121486562.52512\n\"Macao SAR, China\",MAC,1984,1292297736.23885\n\"Macao SAR, China\",MAC,1985,1348827324.09861\n\"Macao SAR, China\",MAC,1986,1517496131.38322\n\"Macao SAR, China\",MAC,1987,1941246972.45874\n\"Macao SAR, China\",MAC,1988,2269233639.28065\n\"Macao SAR, China\",MAC,1989,2683254708.17411\n\"Macao SAR, China\",MAC,1990,3220920084.77746\n\"Macao SAR, China\",MAC,1991,3735117374.41125\n\"Macao SAR, China\",MAC,1992,4879018601.90911\n\"Macao SAR, China\",MAC,1993,5625533410.31176\n\"Macao SAR, China\",MAC,1994,6265844252.10105\n\"Macao SAR, China\",MAC,1995,6996034036.99892\n\"Macao SAR, China\",MAC,1996,7122539666.59972\n\"Macao SAR, China\",MAC,1997,7211264780.00828\n\"Macao SAR, China\",MAC,1998,6742367273.27418\n\"Macao SAR, China\",MAC,1999,6490571703.85015\n\"Macao SAR, China\",MAC,2000,6720492405.83611\n\"Macao SAR, China\",MAC,2001,6811227982.82193\n\"Macao SAR, China\",MAC,2002,7322677820.10108\n\"Macao SAR, China\",MAC,2003,8195033162.12038\n\"Macao SAR, China\",MAC,2004,10585624890.9277\n\"Macao SAR, China\",MAC,2005,12092222041.9168\n\"Macao SAR, China\",MAC,2006,14789661809.1834\n\"Macao SAR, China\",MAC,2007,18340447242.9971\n\"Macao SAR, China\",MAC,2008,20917444919.6394\n\"Macao SAR, China\",MAC,2009,21475520709.3922\n\"Macao SAR, China\",MAC,2010,28123640998.7253\n\"Macao SAR, China\",MAC,2011,36709860068.3445\n\"Macao SAR, China\",MAC,2012,43031577366.4251\n\"Macao SAR, China\",MAC,2013,51552075901.5183\n\"Macao SAR, China\",MAC,2014,55347998647.8196\n\"Macao SAR, China\",MAC,2015,45415278647.464\n\"Macao SAR, China\",MAC,2016,44802641829.9265\n\"Macedonia, FYR\",MKD,1990,4471828621.90813\n\"Macedonia, FYR\",MKD,1991,4694744897.95918\n\"Macedonia, FYR\",MKD,1992,2316618542.52603\n\"Macedonia, FYR\",MKD,1993,2550195043.10345\n\"Macedonia, FYR\",MKD,1994,3381270207.85219\n\"Macedonia, FYR\",MKD,1995,4449375346.45669\n\"Macedonia, FYR\",MKD,1996,4422160017.54386\n\"Macedonia, FYR\",MKD,1997,3735312142.57028\n\"Macedonia, FYR\",MKD,1998,3571043102.5641\n\"Macedonia, FYR\",MKD,1999,3673288263.62039\n\"Macedonia, FYR\",MKD,2000,3772851420.24763\n\"Macedonia, FYR\",MKD,2001,3709637829.94866\n\"Macedonia, FYR\",MKD,2002,4018365247.44444\n\"Macedonia, FYR\",MKD,2003,4946292774.79046\n\"Macedonia, FYR\",MKD,2004,5682719260.0763\n\"Macedonia, FYR\",MKD,2005,6258600713.82627\n\"Macedonia, FYR\",MKD,2006,6861222331.96317\n\"Macedonia, FYR\",MKD,2007,8336478142.08872\n\"Macedonia, FYR\",MKD,2008,9909548410.82744\n\"Macedonia, FYR\",MKD,2009,9401731495.71661\n\"Macedonia, FYR\",MKD,2010,9407168702.4313\n\"Macedonia, FYR\",MKD,2011,10494632699.3859\n\"Macedonia, FYR\",MKD,2012,9745251126.0109\n\"Macedonia, FYR\",MKD,2013,10817712138.9451\n\"Macedonia, FYR\",MKD,2014,11362272837.8818\n\"Macedonia, FYR\",MKD,2015,10051659161.1733\n\"Macedonia, FYR\",MKD,2016,10899583154.6499\nMadagascar,MDG,1960,673081724.075966\nMadagascar,MDG,1961,699161943.856733\nMadagascar,MDG,1962,739286906.851163\nMadagascar,MDG,1963,759345862.970929\nMadagascar,MDG,1964,802482182.923768\nMadagascar,MDG,1965,833563472.161911\nMadagascar,MDG,1966,900264583.687729\nMadagascar,MDG,1967,956436931.141842\nMadagascar,MDG,1968,1031669636.36062\nMadagascar,MDG,1969,1056391054.53794\nMadagascar,MDG,1970,1111859569.77066\nMadagascar,MDG,1971,1199507629.99222\nMadagascar,MDG,1972,1341590681.586\nMadagascar,MDG,1973,1653062347.36378\nMadagascar,MDG,1974,1917508190.04689\nMadagascar,MDG,1975,2283049233.28581\nMadagascar,MDG,1976,2181844193.92388\nMadagascar,MDG,1977,2358930406.42896\nMadagascar,MDG,1978,2669755115.50372\nMadagascar,MDG,1979,3463565881.42215\nMadagascar,MDG,1980,4042139901.36379\nMadagascar,MDG,1981,3594868208.41664\nMadagascar,MDG,1982,3526198070.09789\nMadagascar,MDG,1983,3511573991.89606\nMadagascar,MDG,1984,2939485471.50097\nMadagascar,MDG,1985,2857889712.4808\nMadagascar,MDG,1986,3258288890.58647\nMadagascar,MDG,1987,2565634382.28729\nMadagascar,MDG,1988,2442507588.38468\nMadagascar,MDG,1989,2498059014.77295\nMadagascar,MDG,1990,3081479800.28735\nMadagascar,MDG,1991,2653141958.52585\nMadagascar,MDG,1992,3024459564.32157\nMadagascar,MDG,1993,3370842210.90955\nMadagascar,MDG,1994,2977040722.47057\nMadagascar,MDG,1995,3159901231.97468\nMadagascar,MDG,1996,3995028592.78722\nMadagascar,MDG,1997,3545776697.12109\nMadagascar,MDG,1998,3738704467.51878\nMadagascar,MDG,1999,3717515282.53319\nMadagascar,MDG,2000,3877673539.09084\nMadagascar,MDG,2001,4529575347.56805\nMadagascar,MDG,2002,4397254607.61164\nMadagascar,MDG,2003,5474030080.24451\nMadagascar,MDG,2004,4363934494.37405\nMadagascar,MDG,2005,5039293030.82367\nMadagascar,MDG,2006,5515884348.54904\nMadagascar,MDG,2007,7342923489.09616\nMadagascar,MDG,2008,9413002920.97008\nMadagascar,MDG,2009,8550363974.79243\nMadagascar,MDG,2010,8729936135.74487\nMadagascar,MDG,2011,9892702357.56691\nMadagascar,MDG,2012,9919780071.28764\nMadagascar,MDG,2013,10601690871.7611\nMadagascar,MDG,2014,10673516672.6664\nMadagascar,MDG,2015,9744243420.48073\nMadagascar,MDG,2016,10001193420.1518\nMalawi,MWI,1960,162960130.465802\nMalawi,MWI,1961,174580139.768776\nMalawi,MWI,1962,183120146.605902\nMalawi,MWI,1963,190820152.770523\nMalawi,MWI,1964,194740155.908875\nMalawi,MWI,1965,229460183.705713\nMalawi,MWI,1966,260400208.476282\nMalawi,MWI,1967,269812781.79847\nMalawi,MWI,1968,245160098.113071\nMalawi,MWI,1969,265800106.373203\nMalawi,MWI,1970,290520116.266151\nMalawi,MWI,1971,365389567.21636\nMalawi,MWI,1972,406084197.385471\nMalawi,MWI,1973,444302221.260027\nMalawi,MWI,1974,548618789.94423\nMalawi,MWI,1975,613196872.560739\nMalawi,MWI,1976,670309252.98248\nMalawi,MWI,1977,806265763.845459\nMalawi,MWI,1978,948983308.780545\nMalawi,MWI,1979,1058297676.33572\nMalawi,MWI,1980,1237662066.78974\nMalawi,MWI,1981,1237686960.55408\nMalawi,MWI,1982,1180094061.48178\nMalawi,MWI,1983,1223225019.32697\nMalawi,MWI,1984,1208026079.75492\nMalawi,MWI,1985,1131349992.22735\nMalawi,MWI,1986,1183671788.12366\nMalawi,MWI,1987,1183071363.00406\nMalawi,MWI,1988,1379923808.24718\nMalawi,MWI,1989,1590201656.14301\nMalawi,MWI,1990,1880784191.81484\nMalawi,MWI,1991,2203536031.03471\nMalawi,MWI,1992,1799529357.0981\nMalawi,MWI,1993,2070647127.03808\nMalawi,MWI,1994,1181801919.66833\nMalawi,MWI,1995,1397454122.24047\nMalawi,MWI,1996,2281039097.69299\nMalawi,MWI,1997,2663238982.8009\nMalawi,MWI,1998,1750585204.44813\nMalawi,MWI,1999,1775920039.58919\nMalawi,MWI,2000,1743506287.41519\nMalawi,MWI,2001,1716502862.2954\nMalawi,MWI,2002,3495748397.63025\nMalawi,MWI,2003,3208837077.25069\nMalawi,MWI,2004,3476094498.87517\nMalawi,MWI,2005,3655909664.1423\nMalawi,MWI,2006,3997852636.24547\nMalawi,MWI,2007,4432192843.58998\nMalawi,MWI,2008,5320925102.29496\nMalawi,MWI,2009,6190991712.12014\nMalawi,MWI,2010,6959697194.02096\nMalawi,MWI,2011,8003300198.30166\nMalawi,MWI,2012,6028470988.53624\nMalawi,MWI,2013,5518901971.40057\nMalawi,MWI,2014,6054750320.3278\nMalawi,MWI,2015,6373201160.03248\nMalawi,MWI,2016,5433038646.51677\nMalaysia,MYS,1960,1916241996.60264\nMalaysia,MYS,1961,1901868548.28172\nMalaysia,MYS,1962,2001502678.6881\nMalaysia,MYS,1963,2510126747.68065\nMalaysia,MYS,1964,2674441395.53116\nMalaysia,MYS,1965,2956356984.18921\nMalaysia,MYS,1966,3143538481.64119\nMalaysia,MYS,1967,3188945511.56409\nMalaysia,MYS,1968,3330393309.81315\nMalaysia,MYS,1969,3664575983.27453\nMalaysia,MYS,1970,3864170913.36731\nMalaysia,MYS,1971,4244340333.51899\nMalaysia,MYS,1972,5043268548.73032\nMalaysia,MYS,1973,7662996766.66803\nMalaysia,MYS,1974,9496074114.07918\nMalaysia,MYS,1975,9298800799.46702\nMalaysia,MYS,1976,11050125904.9418\nMalaysia,MYS,1977,13139397879.1695\nMalaysia,MYS,1978,16358376511.2263\nMalaysia,MYS,1979,21213672089.1976\nMalaysia,MYS,1980,24488033442.0506\nMalaysia,MYS,1981,25004557093.8761\nMalaysia,MYS,1982,26804401815.5348\nMalaysia,MYS,1983,30346788437.5135\nMalaysia,MYS,1984,33943505717.6993\nMalaysia,MYS,1985,31200161095.4491\nMalaysia,MYS,1986,27734562640.4277\nMalaysia,MYS,1987,32181695507.2234\nMalaysia,MYS,1988,35271880250.4964\nMalaysia,MYS,1989,38848567631.4235\nMalaysia,MYS,1990,44024178343.0071\nMalaysia,MYS,1991,49142784405.0044\nMalaysia,MYS,1992,59167157497.9385\nMalaysia,MYS,1993,66894448545.1226\nMalaysia,MYS,1994,74477975918.3051\nMalaysia,MYS,1995,88704944178.6284\nMalaysia,MYS,1996,100854996422.609\nMalaysia,MYS,1997,100005323301.867\nMalaysia,MYS,1998,72167753770.8928\nMalaysia,MYS,1999,79148947368.4211\nMalaysia,MYS,2000,93789736842.1053\nMalaysia,MYS,2001,92783947368.4211\nMalaysia,MYS,2002,100845263157.895\nMalaysia,MYS,2003,110202368421.053\nMalaysia,MYS,2004,124749736842.105\nMalaysia,MYS,2005,143534102611.497\nMalaysia,MYS,2006,162690965596.205\nMalaysia,MYS,2007,193547824063.3\nMalaysia,MYS,2008,230813597937.526\nMalaysia,MYS,2009,202257586267.556\nMalaysia,MYS,2010,255016609232.871\nMalaysia,MYS,2011,297951960784.314\nMalaysia,MYS,2012,314443149443.149\nMalaysia,MYS,2013,323277158906.979\nMalaysia,MYS,2014,338061963396.376\nMalaysia,MYS,2015,296434003328.639\nMalaysia,MYS,2016,296535930381.12\nMaldives,MDV,1980,42463576.1589404\nMaldives,MDV,1981,44781456.9536424\nMaldives,MDV,1982,47935843.7935844\nMaldives,MDV,1983,57829787.2340425\nMaldives,MDV,1984,109503546.099291\nMaldives,MDV,1985,127154929.577465\nMaldives,MDV,1986,141902097.902098\nMaldives,MDV,1987,141268980.477223\nMaldives,MDV,1988,168610478.359909\nMaldives,MDV,1989,189535398.230089\nMaldives,MDV,1990,215089005.235602\nMaldives,MDV,1991,244468292.682927\nMaldives,MDV,1992,284853358.561968\nMaldives,MDV,1993,322326642.335766\nMaldives,MDV,1994,355884383.08887\nMaldives,MDV,1995,398988954.970263\nMaldives,MDV,1996,450382327.952421\nMaldives,MDV,1997,508223602.37893\nMaldives,MDV,1998,540096397.621071\nMaldives,MDV,1999,589239753.610875\nMaldives,MDV,2000,624337145.284622\nMaldives,MDV,2001,870179738.562091\nMaldives,MDV,2002,897031250\nMaldives,MDV,2003,1052121055.97238\nMaldives,MDV,2004,1226829564.81545\nMaldives,MDV,2005,1163362434.32768\nMaldives,MDV,2006,1575200390.9349\nMaldives,MDV,2007,1868383459.84347\nMaldives,MDV,2008,2271646188.14474\nMaldives,MDV,2009,2345294878.6681\nMaldives,MDV,2010,2588176058.41146\nMaldives,MDV,2011,2774351757.78111\nMaldives,MDV,2012,2886170570.48769\nMaldives,MDV,2013,3295011380.8096\nMaldives,MDV,2014,3697351594.22359\nMaldives,MDV,2015,4006531188.26486\nMaldives,MDV,2016,4224209599.22917\nMali,MLI,1967,275494520.141999\nMali,MLI,1968,343771964.662167\nMali,MLI,1969,339913833.096246\nMali,MLI,1970,359772363.262207\nMali,MLI,1971,430096738.369216\nMali,MLI,1972,486617332.387405\nMali,MLI,1973,563683660.31194\nMali,MLI,1974,538747268.333356\nMali,MLI,1975,830710615.179954\nMali,MLI,1976,939227993.66396\nMali,MLI,1977,1049838492.55759\nMali,MLI,1978,1222702356.10946\nMali,MLI,1979,1595423285.64659\nMali,MLI,1980,1759690811.60699\nMali,MLI,1981,1538972158.1782\nMali,MLI,1982,1333754034.23489\nMali,MLI,1983,1297765448.50498\nMali,MLI,1984,1232932008.13719\nMali,MLI,1985,1392195933.33971\nMali,MLI,1986,1852163474.54664\nMali,MLI,1987,2090629722.63611\nMali,MLI,1988,2169040741.55896\nMali,MLI,1989,2181821902.43953\nMali,MLI,1990,2681912030.49384\nMali,MLI,1991,2724131545.16958\nMali,MLI,1992,2830673388.82429\nMali,MLI,1993,2818280876.07615\nMali,MLI,1994,2081846482.74771\nMali,MLI,1995,2706425298.36818\nMali,MLI,1996,2780422212.26995\nMali,MLI,1997,2697105694.07956\nMali,MLI,1998,2920358586.75234\nMali,MLI,1999,3439463140.35541\nMali,MLI,2000,2954129565.82965\nMali,MLI,2001,3465305993.47783\nMali,MLI,2002,3889758023.73699\nMali,MLI,2003,4703504466.53245\nMali,MLI,2004,5444474268.42491\nMali,MLI,2005,6245031690.06808\nMali,MLI,2006,6899799785.8441\nMali,MLI,2007,8145694631.88354\nMali,MLI,2008,9750822511.47988\nMali,MLI,2009,10181021770.4326\nMali,MLI,2010,10678749467.4697\nMali,MLI,2011,12978107560.5982\nMali,MLI,2012,12442747897.2223\nMali,MLI,2013,13246412031.4145\nMali,MLI,2014,14388360064.1162\nMali,MLI,2015,13100058099.804\nMali,MLI,2016,14034980333.6615\nMalta,MLT,1970,250721821.553678\nMalta,MLT,1971,264579879.784878\nMalta,MLT,1972,295118249.324932\nMalta,MLT,1973,345602025.375393\nMalta,MLT,1974,376094108.475331\nMalta,MLT,1975,474620439.58496\nMalta,MLT,1976,527936988.791275\nMalta,MLT,1977,625573345.532174\nMalta,MLT,1978,793675169.878579\nMalta,MLT,1979,1001300838.32335\nMalta,MLT,1980,1250242107.87969\nMalta,MLT,1981,1243469360.56838\nMalta,MLT,1982,1234518125\nMalta,MLT,1983,1165771369.00625\nMalta,MLT,1984,1101828568.76804\nMalta,MLT,1985,1117835285.50512\nMalta,MLT,1986,1435079200.34957\nMalta,MLT,1987,1751247763.41948\nMalta,MLT,1988,2019474244.19359\nMalta,MLT,1989,2118574772.11136\nMalta,MLT,1990,2547163582.33149\nMalta,MLT,1991,2750041434.26295\nMalta,MLT,1992,3021910216.71827\nMalta,MLT,1993,2709178326.78271\nMalta,MLT,1994,2998570146.54095\nMalta,MLT,1995,3439931906.61479\nMalta,MLT,1996,3570271557.88471\nMalta,MLT,1997,3705372038.70537\nMalta,MLT,1998,3923637971.04652\nMalta,MLT,1999,4127313818.33836\nMalta,MLT,2000,4306192435.82207\nMalta,MLT,2001,4331870647.71535\nMalta,MLT,2002,4689832689.83269\nMalta,MLT,2003,5456583589.39342\nMalta,MLT,2004,6062780269.0583\nMalta,MLT,2005,6394851386.64345\nMalta,MLT,2006,6757119558.3992\nMalta,MLT,2007,7880509170.54476\nMalta,MLT,2008,8977149553.24447\nMalta,MLT,2009,8528202278.41067\nMalta,MLT,2010,8741059602.64901\nMalta,MLT,2011,9504797627.39878\nMalta,MLT,2012,9203729739.42371\nMalta,MLT,2013,10145944323.6938\nMalta,MLT,2014,11217780149.3338\nMalta,MLT,2015,10285547954.0777\nMalta,MLT,2016,10999047580.3881\nMarshall Islands,MHL,1981,31020000\nMarshall Islands,MHL,1982,34918000\nMarshall Islands,MHL,1983,41749000\nMarshall Islands,MHL,1984,45144000\nMarshall Islands,MHL,1985,43879000\nMarshall Islands,MHL,1986,55989000\nMarshall Islands,MHL,1987,62983000\nMarshall Islands,MHL,1988,70688000\nMarshall Islands,MHL,1989,72798000\nMarshall Islands,MHL,1990,78476000\nMarshall Islands,MHL,1991,82507000\nMarshall Islands,MHL,1992,91063000\nMarshall Islands,MHL,1993,99461000\nMarshall Islands,MHL,1994,108071000\nMarshall Islands,MHL,1995,120230000\nMarshall Islands,MHL,1996,110858000\nMarshall Islands,MHL,1997,106289100\nMarshall Islands,MHL,1998,108702100\nMarshall Islands,MHL,1999,107978900\nMarshall Islands,MHL,2000,110937700\nMarshall Islands,MHL,2001,115152100\nMarshall Islands,MHL,2002,124735100\nMarshall Islands,MHL,2003,126887600\nMarshall Islands,MHL,2004,131334600\nMarshall Islands,MHL,2005,137928600\nMarshall Islands,MHL,2006,143930000\nMarshall Islands,MHL,2007,150776500\nMarshall Islands,MHL,2008,152788700\nMarshall Islands,MHL,2009,152617500\nMarshall Islands,MHL,2010,164969100\nMarshall Islands,MHL,2011,173260300\nMarshall Islands,MHL,2012,185210500\nMarshall Islands,MHL,2013,190800800\nMarshall Islands,MHL,2014,183121300\nMarshall Islands,MHL,2015,179697900\nMarshall Islands,MHL,2016,194497900\nMauritania,MRT,1960,92609222.6912849\nMauritania,MRT,1961,107726181.218304\nMauritania,MRT,1962,111148585.592024\nMauritania,MRT,1963,113797356.813964\nMauritania,MRT,1964,151897168.106199\nMauritania,MRT,1965,172767213.286516\nMauritania,MRT,1966,180340653.822049\nMauritania,MRT,1967,191221777.800889\nMauritania,MRT,1968,210695183.760251\nMauritania,MRT,1969,199643444.567995\nMauritania,MRT,1970,209348253.60877\nMauritania,MRT,1971,227051054.984972\nMauritania,MRT,1972,265009395.148159\nMauritania,MRT,1973,333731874.379051\nMauritania,MRT,1974,414772351.88069\nMauritania,MRT,1975,475916514.745785\nMauritania,MRT,1976,524407931.940588\nMauritania,MRT,1977,540635389.589072\nMauritania,MRT,1978,544424605.052283\nMauritania,MRT,1979,644070364.889076\nMauritania,MRT,1980,709041452.217718\nMauritania,MRT,1981,747994681.876653\nMauritania,MRT,1982,750214410.723584\nMauritania,MRT,1983,788371855.945127\nMauritania,MRT,1984,726937320.846135\nMauritania,MRT,1985,683193885.003343\nMauritania,MRT,1986,802890746.890756\nMauritania,MRT,1987,909820553.400741\nMauritania,MRT,1988,957377507.476686\nMauritania,MRT,1989,981529400.534373\nMauritania,MRT,1990,1019600770.6038\nMauritania,MRT,1991,1443688869.96039\nMauritania,MRT,1992,1464392416.14671\nMauritania,MRT,1993,1249944999.42056\nMauritania,MRT,1994,1315932644.95246\nMauritania,MRT,1995,1415296704.11812\nMauritania,MRT,1996,1442598431.0096\nMauritania,MRT,1997,1401946853.20672\nMauritania,MRT,1998,1375115534.0733\nMauritania,MRT,1999,1405662878.85296\nMauritania,MRT,2000,1293654175.2102\nMauritania,MRT,2001,1295539448.36484\nMauritania,MRT,2002,1324426606.62378\nMauritania,MRT,2003,1563074859.52173\nMauritania,MRT,2004,1833444740.37736\nMauritania,MRT,2005,2184444848.97637\nMauritania,MRT,2006,3040716679.07669\nMauritania,MRT,2007,3356757497.1208\nMauritania,MRT,2008,3978425880.65663\nMauritania,MRT,2009,3670515287.9948\nMauritania,MRT,2010,4343665075.37898\nMauritania,MRT,2011,5179690135.80186\nMauritania,MRT,2012,5225533499.82893\nMauritania,MRT,2013,5724227185.17784\nMauritania,MRT,2014,5391475277.24326\nMauritania,MRT,2015,4844223106.95469\nMauritania,MRT,2016,4739298730.30837\nMauritius,MUS,1976,706991274.414428\nMauritius,MUS,1977,827094668.018707\nMauritius,MUS,1978,1019630847.11113\nMauritius,MUS,1979,1216229419.31802\nMauritius,MUS,1980,1136543003.2664\nMauritius,MUS,1981,1147192916.68998\nMauritius,MUS,1982,1082939379.16762\nMauritius,MUS,1983,1094857357.63954\nMauritius,MUS,1984,1044928624.74004\nMauritius,MUS,1985,1080642033.34952\nMauritius,MUS,1986,1469046114.77455\nMauritius,MUS,1987,1888754655.15367\nMauritius,MUS,1988,2143484487.67274\nMauritius,MUS,1989,2191096860.28669\nMauritius,MUS,1990,2653480001.34558\nMauritius,MUS,1991,2856890680.60285\nMauritius,MUS,1992,3224267547.80508\nMauritius,MUS,1993,3263368410.01813\nMauritius,MUS,1994,3558137040.37772\nMauritius,MUS,1995,4040345933.29231\nMauritius,MUS,1996,4421943910.49749\nMauritius,MUS,1997,4187367601.73431\nMauritius,MUS,1998,4169664285.38681\nMauritius,MUS,1999,4291172815.63421\nMauritius,MUS,2000,4582555124.64952\nMauritius,MUS,2001,4536538210.66761\nMauritius,MUS,2002,4767303153.99506\nMauritius,MUS,2003,5609831328.0648\nMauritius,MUS,2004,6385695187.0102\nMauritius,MUS,2005,6283803256.01264\nMauritius,MUS,2006,7028803365.70151\nMauritius,MUS,2007,8150138757.15741\nMauritius,MUS,2008,9990370016.30771\nMauritius,MUS,2009,9128843109.15588\nMauritius,MUS,2010,10003670690.3497\nMauritius,MUS,2011,11518393367.2403\nMauritius,MUS,2012,11668685524.1265\nMauritius,MUS,2013,12129642296.4425\nMauritius,MUS,2014,12803445933.5894\nMauritius,MUS,2015,11692287066.381\nMauritius,MUS,2016,12168437744.2644\nMexico,MEX,1960,13056168000\nMexico,MEX,1961,14153952000\nMexico,MEX,1962,15221056000\nMexico,MEX,1963,16936336000\nMexico,MEX,1964,20070136000\nMexico,MEX,1965,21829712000\nMexico,MEX,1966,24337232000\nMexico,MEX,1967,26556376000\nMexico,MEX,1968,29363632000\nMexico,MEX,1969,32515752000\nMexico,MEX,1970,35541712000\nMexico,MEX,1971,39200880000\nMexico,MEX,1972,45178120000\nMexico,MEX,1973,55271304000\nMexico,MEX,1974,71976544000\nMexico,MEX,1975,88003984000\nMexico,MEX,1976,89023915584.4156\nMexico,MEX,1977,81825783185.8407\nMexico,MEX,1978,102517451754.386\nMexico,MEX,1979,134540324561.404\nMexico,MEX,1980,194356826086.957\nMexico,MEX,1981,250083020408.163\nMexico,MEX,1982,173720851063.83\nMexico,MEX,1983,148866910907.577\nMexico,MEX,1984,175632157330.155\nMexico,MEX,1985,184473106267.03\nMexico,MEX,1986,129440194508.009\nMexico,MEX,1987,140263679436.947\nMexico,MEX,1988,183144268180.018\nMexico,MEX,1989,222977035953.687\nMexico,MEX,1990,262709776007.964\nMexico,MEX,1991,314453890803.074\nMexico,MEX,1992,363609256195.677\nMexico,MEX,1993,503962832199.255\nMexico,MEX,1994,527318753518.414\nMexico,MEX,1995,343792792161.261\nMexico,MEX,1996,397404140458.457\nMexico,MEX,1997,480554644187.662\nMexico,MEX,1998,502010250656.743\nMexico,MEX,1999,579459682649.262\nMexico,MEX,2000,683647965226.955\nMexico,MEX,2001,724703603502.349\nMexico,MEX,2002,741559509631.317\nMexico,MEX,2003,713284231624.803\nMexico,MEX,2004,770267585947.191\nMexico,MEX,2005,866345821213.261\nMexico,MEX,2006,965281191371.844\nMexico,MEX,2007,1043471321169.09\nMexico,MEX,2008,1101275278668.79\nMexico,MEX,2009,894948748436.748\nMexico,MEX,2010,1051128603513.77\nMexico,MEX,2011,1171187519660.64\nMexico,MEX,2012,1186598324461.82\nMexico,MEX,2013,1261981728468.52\nMexico,MEX,2014,1298461494903.14\nMexico,MEX,2015,1152263780657.86\nMexico,MEX,2016,1046922702460.87\n\"Micronesia, Fed. Sts.\",FSM,1983,106500000\n\"Micronesia, Fed. Sts.\",FSM,1986,112210000\n\"Micronesia, Fed. Sts.\",FSM,1987,116700000\n\"Micronesia, Fed. Sts.\",FSM,1988,124700000\n\"Micronesia, Fed. Sts.\",FSM,1989,135200000\n\"Micronesia, Fed. Sts.\",FSM,1990,147200000\n\"Micronesia, Fed. Sts.\",FSM,1991,166200000\n\"Micronesia, Fed. Sts.\",FSM,1992,178100000\n\"Micronesia, Fed. Sts.\",FSM,1993,198400000\n\"Micronesia, Fed. Sts.\",FSM,1994,202500000\n\"Micronesia, Fed. Sts.\",FSM,1995,222103600\n\"Micronesia, Fed. Sts.\",FSM,1996,218845700\n\"Micronesia, Fed. Sts.\",FSM,1997,206900300\n\"Micronesia, Fed. Sts.\",FSM,1998,219646200\n\"Micronesia, Fed. Sts.\",FSM,1999,220660500\n\"Micronesia, Fed. Sts.\",FSM,2000,233226300\n\"Micronesia, Fed. Sts.\",FSM,2001,240051900\n\"Micronesia, Fed. Sts.\",FSM,2002,241543400\n\"Micronesia, Fed. Sts.\",FSM,2003,245277400\n\"Micronesia, Fed. Sts.\",FSM,2004,240097000\n\"Micronesia, Fed. Sts.\",FSM,2005,250149400\n\"Micronesia, Fed. Sts.\",FSM,2006,253372300\n\"Micronesia, Fed. Sts.\",FSM,2007,256548100\n\"Micronesia, Fed. Sts.\",FSM,2008,262868600\n\"Micronesia, Fed. Sts.\",FSM,2009,279966700\n\"Micronesia, Fed. Sts.\",FSM,2010,296525300\n\"Micronesia, Fed. Sts.\",FSM,2011,310502100\n\"Micronesia, Fed. Sts.\",FSM,2012,326128700\n\"Micronesia, Fed. Sts.\",FSM,2013,316040600\n\"Micronesia, Fed. Sts.\",FSM,2014,317999400\n\"Micronesia, Fed. Sts.\",FSM,2015,315179700\n\"Micronesia, Fed. Sts.\",FSM,2016,329895600\nMoldova,MDA,1995,1752975841.35916\nMoldova,MDA,1996,1695130456.52174\nMoldova,MDA,1997,1930071406.92641\nMoldova,MDA,1998,1639497206.70391\nMoldova,MDA,1999,1170785047.79461\nMoldova,MDA,2000,1288429150.51394\nMoldova,MDA,2001,1480656884.38462\nMoldova,MDA,2002,1661818168.4226\nMoldova,MDA,2003,1980901553.51226\nMoldova,MDA,2004,2598231467.43671\nMoldova,MDA,2005,2988338439.31553\nMoldova,MDA,2006,3408272498.11516\nMoldova,MDA,2007,4401154128.12297\nMoldova,MDA,2008,6054806100.84681\nMoldova,MDA,2009,5439422031.39627\nMoldova,MDA,2010,5811604051.96737\nMoldova,MDA,2011,7015206498.21955\nMoldova,MDA,2012,7284686576.2835\nMoldova,MDA,2013,7985349731.46471\nMoldova,MDA,2014,7983271110.60446\nMoldova,MDA,2015,6512899540.34594\nMoldova,MDA,2016,6749515654.64419\nMonaco,MCO,1970,293073868.023221\nMonaco,MCO,1971,327651487.962757\nMonaco,MCO,1972,402460333.237637\nMonaco,MCO,1973,523552815.119127\nMonaco,MCO,1974,563939670.704419\nMonaco,MCO,1975,711922994.225545\nMonaco,MCO,1976,735339911.935065\nMonaco,MCO,1977,811250927.388998\nMonaco,MCO,1978,1000535735.38751\nMonaco,MCO,1979,1209898293.46372\nMonaco,MCO,1980,1378130995.65913\nMonaco,MCO,1981,1205166025.51592\nMonaco,MCO,1982,1143229071.77943\nMonaco,MCO,1983,1092551781.01486\nMonaco,MCO,1984,1037314956.25083\nMonaco,MCO,1985,1082851076.52158\nMonaco,MCO,1986,1515209588.2378\nMonaco,MCO,1987,1839095595.25655\nMonaco,MCO,1988,2000674667.08261\nMonaco,MCO,1989,2010116851.20284\nMonaco,MCO,1990,2481316053.85316\nMonaco,MCO,1991,2480497547.84881\nMonaco,MCO,1992,2737066955.91266\nMonaco,MCO,1993,2574439973.17387\nMonaco,MCO,1994,2720297738.93904\nMonaco,MCO,1995,3130270918.79061\nMonaco,MCO,1996,3137848783.08404\nMonaco,MCO,1997,2840182191.77105\nMonaco,MCO,1998,2934578788.86478\nMonaco,MCO,1999,2906009307.6651\nMonaco,MCO,2000,2647883820.18625\nMonaco,MCO,2001,2671401082.76436\nMonaco,MCO,2002,2905973022.1746\nMonaco,MCO,2003,3588988600.70294\nMonaco,MCO,2004,4110348444.49411\nMonaco,MCO,2005,4280072625.97622\nMonaco,MCO,2006,4663488363.0977\nMonaco,MCO,2007,5974371695.95045\nMonaco,MCO,2008,6919241412.09365\nMonaco,MCO,2009,5557245122.31576\nMonaco,MCO,2010,5350674803.33858\nMonaco,MCO,2011,6074884388.58937\nMongolia,MNG,1981,2310099100\nMongolia,MNG,1982,2552401933.33333\nMongolia,MNG,1983,2725736633.33333\nMongolia,MNG,1984,2098734600\nMongolia,MNG,1985,2186505475\nMongolia,MNG,1986,2896178866.66667\nMongolia,MNG,1987,3020611600\nMongolia,MNG,1988,3204461566.66667\nMongolia,MNG,1989,3576966800\nMongolia,MNG,1990,2560785660\nMongolia,MNG,1991,2379018326.31579\nMongolia,MNG,1992,1317611863.84977\nMongolia,MNG,1993,768401634.154573\nMongolia,MNG,1994,925817092.217484\nMongolia,MNG,1995,1452165005.2384\nMongolia,MNG,1996,1345719472.35883\nMongolia,MNG,1997,1180934202.83801\nMongolia,MNG,1998,1124440248.9783\nMongolia,MNG,1999,1057408588.68269\nMongolia,MNG,2000,1136896123.61298\nMongolia,MNG,2001,1267997934.3125\nMongolia,MNG,2002,1396555719.97409\nMongolia,MNG,2003,1595297355.78349\nMongolia,MNG,2004,1992066808.09598\nMongolia,MNG,2005,2523471532.01083\nMongolia,MNG,2006,3414055566.1138\nMongolia,MNG,2007,4234999823.30839\nMongolia,MNG,2008,5623216448.86851\nMongolia,MNG,2009,4583850367.88972\nMongolia,MNG,2010,7189481824.07288\nMongolia,MNG,2011,10409797649.3063\nMongolia,MNG,2012,12292770631.1967\nMongolia,MNG,2013,12582122604.1921\nMongolia,MNG,2014,12226514722.0861\nMongolia,MNG,2015,11749620619.5962\nMongolia,MNG,2016,11183458130.8083\nMontenegro,MNE,2000,984279598.325251\nMontenegro,MNE,2001,1159860290.16658\nMontenegro,MNE,2002,1284446123.33554\nMontenegro,MNE,2003,1707678389.68676\nMontenegro,MNE,2004,2073255525.20487\nMontenegro,MNE,2005,2257174480.78597\nMontenegro,MNE,2006,2696020574.58286\nMontenegro,MNE,2007,3668857103.75034\nMontenegro,MNE,2008,4545674527.61096\nMontenegro,MNE,2009,4159330369.5471\nMontenegro,MNE,2010,4139192052.98013\nMontenegro,MNE,2011,4538198498.74896\nMontenegro,MNE,2012,4087724527.81704\nMontenegro,MNE,2013,4464260488.58205\nMontenegro,MNE,2014,4587928884.17142\nMontenegro,MNE,2015,4052913385.82677\nMontenegro,MNE,2016,4374127212.38938\nMorocco,MAR,1960,2037150716.33238\nMorocco,MAR,1961,2025689536.60705\nMorocco,MAR,1962,2379606422.29029\nMorocco,MAR,1963,2657247327.3392\nMorocco,MAR,1964,2798339768.79755\nMorocco,MAR,1965,2948325264.30195\nMorocco,MAR,1966,2876395613.08171\nMorocco,MAR,1967,3046339294.53611\nMorocco,MAR,1968,3271415867.99723\nMorocco,MAR,1969,3651615453.01848\nMorocco,MAR,1970,3956328426.04486\nMorocco,MAR,1971,4356633663.36634\nMorocco,MAR,1972,5074117544.77482\nMorocco,MAR,1973,6242177798.33938\nMorocco,MAR,1974,7675408485.51421\nMorocco,MAR,1975,8984824182.60333\nMorocco,MAR,1976,9584323309.12136\nMorocco,MAR,1977,11049896742.3889\nMorocco,MAR,1978,13236854105.1672\nMorocco,MAR,1979,15912133569.2852\nMorocco,MAR,1980,21728770055.3777\nMorocco,MAR,1981,17788171722.4446\nMorocco,MAR,1982,17692341358.1272\nMorocco,MAR,1983,16251460689.3254\nMorocco,MAR,1984,14824728528.4604\nMorocco,MAR,1985,14991283215.7408\nMorocco,MAR,1986,19462175321.8224\nMorocco,MAR,1987,21765261041.7265\nMorocco,MAR,1988,25705296183.5037\nMorocco,MAR,1989,26314220188.0257\nMorocco,MAR,1990,30180108561.9305\nMorocco,MAR,1991,32285388165.2999\nMorocco,MAR,1992,33711069430.78\nMorocco,MAR,1993,31655473663.8348\nMorocco,MAR,1994,35604137422.5796\nMorocco,MAR,1995,39030285468.3841\nMorocco,MAR,1996,43161452678.4383\nMorocco,MAR,1997,39147844526.0838\nMorocco,MAR,1998,41806219378.6181\nMorocco,MAR,1999,41632027599.8531\nMorocco,MAR,2000,38857251336.3448\nMorocco,MAR,2001,39459581217.3759\nMorocco,MAR,2002,42236836820.6152\nMorocco,MAR,2003,52064058833.9739\nMorocco,MAR,2004,59626020162.3816\nMorocco,MAR,2005,62343022650.8742\nMorocco,MAR,2006,68640825480.9223\nMorocco,MAR,2007,79041294874.4553\nMorocco,MAR,2008,92507257783.5697\nMorocco,MAR,2009,92897320375.8176\nMorocco,MAR,2010,93216746661.5977\nMorocco,MAR,2011,101370474295.109\nMorocco,MAR,2012,98266306615.3632\nMorocco,MAR,2013,106825649872.108\nMorocco,MAR,2014,110081248587.369\nMorocco,MAR,2015,101187079462.942\nMorocco,MAR,2016,103606321692.582\nMozambique,MOZ,1980,3526287037.03704\nMozambique,MOZ,1981,3537099150.14164\nMozambique,MOZ,1982,3612171957.67196\nMozambique,MOZ,1983,3236430348.25871\nMozambique,MOZ,1984,3376172169.81132\nMozambique,MOZ,1985,4456240740.74074\nMozambique,MOZ,1986,5247193069.30693\nMozambique,MOZ,1987,2354117303.06158\nMozambique,MOZ,1988,2093571673.65612\nMozambique,MOZ,1989,2314159887.23319\nMozambique,MOZ,1990,2512079324.07706\nMozambique,MOZ,1991,3263761937.95748\nMozambique,MOZ,1992,2291175764.66004\nMozambique,MOZ,1993,2394823061.93212\nMozambique,MOZ,1994,2460670287.73707\nMozambique,MOZ,1995,2521738759.58885\nMozambique,MOZ,1996,3523842274.89662\nMozambique,MOZ,1997,4227273069.05991\nMozambique,MOZ,1998,4873242526.06404\nMozambique,MOZ,1999,5302532113.25156\nMozambique,MOZ,2000,5016469068.50898\nMozambique,MOZ,2001,4766928746.6914\nMozambique,MOZ,2002,5031510908.86055\nMozambique,MOZ,2003,5597367853.40358\nMozambique,MOZ,2004,6831808930.39816\nMozambique,MOZ,2005,7723846194.87446\nMozambique,MOZ,2006,8312078525.08582\nMozambique,MOZ,2007,9366742309.49331\nMozambique,MOZ,2008,11494837053.4061\nMozambique,MOZ,2009,10911698208.1015\nMozambique,MOZ,2010,10154238250.1818\nMozambique,MOZ,2011,13131168011.807\nMozambique,MOZ,2012,14534278446.3087\nMozambique,MOZ,2013,16018848990.669\nMozambique,MOZ,2014,16961127045.8266\nMozambique,MOZ,2015,14798439527.2541\nMozambique,MOZ,2016,11014858591.8422\nMyanmar,MMR,2000,8905066163.58643\nMyanmar,MMR,2001,6477790688.22844\nMyanmar,MMR,2002,6777632512.0781\nMyanmar,MMR,2003,10467109977.6717\nMyanmar,MMR,2004,10567354056.4049\nMyanmar,MMR,2005,11986972418.5103\nMyanmar,MMR,2006,14502553709.8303\nMyanmar,MMR,2007,20182477480.5512\nMyanmar,MMR,2008,31862554101.9378\nMyanmar,MMR,2009,36906181380.8127\nMyanmar,MMR,2010,49540813342.4834\nMyanmar,MMR,2011,59977326085.9908\nMyanmar,MMR,2012,59937797559.3295\nMyanmar,MMR,2013,60269734044.526\nMyanmar,MMR,2014,65446402659.1687\nMyanmar,MMR,2015,59687373958.2574\nMyanmar,MMR,2016,63225097051.255\nNamibia,NAM,1980,2434884951.20699\nNamibia,NAM,1981,2259179124.88605\nNamibia,NAM,1982,2128089611.34647\nNamibia,NAM,1983,2308102953.05628\nNamibia,NAM,1984,1960567071.10418\nNamibia,NAM,1985,1615776820.56804\nNamibia,NAM,1986,1816754048.14004\nNamibia,NAM,1987,2310454960.70727\nNamibia,NAM,1988,2506554607.43347\nNamibia,NAM,1989,2547340984.48164\nNamibia,NAM,1990,2804379662.19611\nNamibia,NAM,1991,3012742078.00674\nNamibia,NAM,1992,3448326858.34502\nNamibia,NAM,1993,3218475900.48046\nNamibia,NAM,1994,3636645995.26867\nNamibia,NAM,1995,3942478205.7291\nNamibia,NAM,1996,3945340776.40546\nNamibia,NAM,1997,4102648719.61806\nNamibia,NAM,1998,3826527630.55551\nNamibia,NAM,1999,3818954447.99083\nNamibia,NAM,2000,3908661517.62299\nNamibia,NAM,2001,3546783708.12619\nNamibia,NAM,2002,3361251197.73829\nNamibia,NAM,2003,4931312147.21007\nNamibia,NAM,2004,6606858786.01174\nNamibia,NAM,2005,7261333794.60003\nNamibia,NAM,2006,7978734401.53585\nNamibia,NAM,2007,8740865600.24981\nNamibia,NAM,2008,8486721916.9128\nNamibia,NAM,2009,8876191120.76189\nNamibia,NAM,2010,11282192605.0374\nNamibia,NAM,2011,12409629835.6998\nNamibia,NAM,2012,13016272898.9038\nNamibia,NAM,2013,12717790500.6163\nNamibia,NAM,2014,12786078003.6304\nNamibia,NAM,2015,11571141027.0478\nNamibia,NAM,2016,10947880690.471\nNauru,NRU,2007,20432742.1126982\nNauru,NRU,2008,39333572.3247894\nNauru,NRU,2009,44290951.9252006\nNauru,NRU,2010,49248810.5726872\nNauru,NRU,2011,72751801.046087\nNauru,NRU,2012,103811958.762887\nNauru,NRU,2013,108601538.461538\nNauru,NRU,2014,117020381.931693\nNauru,NRU,2015,100459782.608696\nNauru,NRU,2016,102060129.577055\nNepal,NPL,1960,508334413.965087\nNepal,NPL,1961,531959561.62226\nNepal,NPL,1962,574091101.194382\nNepal,NPL,1963,496947904.443033\nNepal,NPL,1964,496098775.308642\nNepal,NPL,1965,735267082.294264\nNepal,NPL,1966,906811943.824649\nNepal,NPL,1967,841974025.462659\nNepal,NPL,1968,772228643.405428\nNepal,NPL,1969,788641965.432099\nNepal,NPL,1970,865975308.641975\nNepal,NPL,1971,882765471.604938\nNepal,NPL,1972,1024098804.93827\nNepal,NPL,1973,972101724.995368\nNepal,NPL,1974,1217953546.97604\nNepal,NPL,1975,1575789254.46938\nNepal,NPL,1976,1452792989.10865\nNepal,NPL,1977,1382400000\nNepal,NPL,1978,1604162497.45945\nNepal,NPL,1979,1851250008.33333\nNepal,NPL,1980,1945916583.33333\nNepal,NPL,1981,2275583316.66667\nNepal,NPL,1982,2395429852.43076\nNepal,NPL,1983,2447174803.37791\nNepal,NPL,1984,2581207387.79709\nNepal,NPL,1985,2619913955.51556\nNepal,NPL,1986,2850784523.37711\nNepal,NPL,1987,2957255379.54315\nNepal,NPL,1988,3487009748.35638\nNepal,NPL,1989,3525228153.17361\nNepal,NPL,1990,3627562402.66027\nNepal,NPL,1991,3921476084.89072\nNepal,NPL,1992,3401211581.29176\nNepal,NPL,1993,3660041666.66667\nNepal,NPL,1994,4066775510.20408\nNepal,NPL,1995,4401104417.67068\nNepal,NPL,1996,4521580381.47139\nNepal,NPL,1997,4918691916.53516\nNepal,NPL,1998,4856255044.39064\nNepal,NPL,1999,5033642384.10596\nNepal,NPL,2000,5494252207.90502\nNepal,NPL,2001,6007061224.48979\nNepal,NPL,2002,6050875806.66403\nNepal,NPL,2003,6330473096.54071\nNepal,NPL,2004,7273938314.71988\nNepal,NPL,2005,8130258041.46706\nNepal,NPL,2006,9043715355.8881\nNepal,NPL,2007,10325618017.379\nNepal,NPL,2008,12545438605.3959\nNepal,NPL,2009,12854985464.0764\nNepal,NPL,2010,16002656434.4746\nNepal,NPL,2011,18913574370.76\nNepal,NPL,2012,18851513891.066\nNepal,NPL,2013,19271168018.482\nNepal,NPL,2014,20002968837.9471\nNepal,NPL,2015,21410840908.5198\nNepal,NPL,2016,21131983246.1855\nNetherlands,NLD,1960,12276734172.0828\nNetherlands,NLD,1961,13493833739.9949\nNetherlands,NLD,1962,14647057370.1418\nNetherlands,NLD,1963,15891241386.291\nNetherlands,NLD,1964,18699380731.3465\nNetherlands,NLD,1965,21000586933.2041\nNetherlands,NLD,1966,22867203317.4022\nNetherlands,NLD,1967,25087562181.3218\nNetherlands,NLD,1968,27817605743.2503\nNetherlands,NLD,1969,31503868835.1853\nNetherlands,NLD,1970,37677621537.7123\nNetherlands,NLD,1971,44010160463.6591\nNetherlands,NLD,1972,54008338917.8797\nNetherlands,NLD,1973,70924006306.1643\nNetherlands,NLD,1974,86129928026.8875\nNetherlands,NLD,1975,98970041042.175\nNetherlands,NLD,1976,107775403067.178\nNetherlands,NLD,1977,125395875998.923\nNetherlands,NLD,1978,153870462415.971\nNetherlands,NLD,1979,177376289135.45\nNetherlands,NLD,1980,192661371425.405\nNetherlands,NLD,1981,162039376225.382\nNetherlands,NLD,1982,156456858050.673\nNetherlands,NLD,1983,151487045479.114\nNetherlands,NLD,1984,142075910370.879\nNetherlands,NLD,1985,142009922306.263\nNetherlands,NLD,1986,198298498021.227\nNetherlands,NLD,1987,241918791122.715\nNetherlands,NLD,1988,258567751142.825\nNetherlands,NLD,1989,255039560739.894\nNetherlands,NLD,1990,314267667675.178\nNetherlands,NLD,1991,323320449905.705\nNetherlands,NLD,1992,358330385839.599\nNetherlands,NLD,1993,349037818106.312\nNetherlands,NLD,1994,374291430318.44\nNetherlands,NLD,1995,446528959648.641\nNetherlands,NLD,1996,445704575163.399\nNetherlands,NLD,1997,412199006098.938\nNetherlands,NLD,1998,432476116418.574\nNetherlands,NLD,1999,441975282335.393\nNetherlands,NLD,2000,412807259996.315\nNetherlands,NLD,2001,426573601789.709\nNetherlands,NLD,2002,465368906455.863\nNetherlands,NLD,2003,571863431151.242\nNetherlands,NLD,2004,650532654581.574\nNetherlands,NLD,2005,678533764457.157\nNetherlands,NLD,2006,726649102998.369\nNetherlands,NLD,2007,839419655078.018\nNetherlands,NLD,2008,936228211513.11\nNetherlands,NLD,2009,857932759099.75\nNetherlands,NLD,2010,836389937229.197\nNetherlands,NLD,2011,893757287201.688\nNetherlands,NLD,2012,828946812396.788\nNetherlands,NLD,2013,866680000367.264\nNetherlands,NLD,2014,879635084124.987\nNetherlands,NLD,2015,757999453314.269\nNetherlands,NLD,2016,777227541581.307\nNew Caledonia,NCL,1965,159594493.548808\nNew Caledonia,NCL,1966,164206537.561675\nNew Caledonia,NCL,1967,180036768.87301\nNew Caledonia,NCL,1968,215507164.034258\nNew Caledonia,NCL,1969,263108834.536684\nNew Caledonia,NCL,1970,358815681.903215\nNew Caledonia,NCL,1971,413634335.270097\nNew Caledonia,NCL,1972,505892512.861927\nNew Caledonia,NCL,1973,542294864.81243\nNew Caledonia,NCL,1974,637400199.110489\nNew Caledonia,NCL,1975,816647865.83143\nNew Caledonia,NCL,1976,798310509.647434\nNew Caledonia,NCL,1977,837616756.533737\nNew Caledonia,NCL,1978,846007597.720396\nNew Caledonia,NCL,1979,1047225130.24333\nNew Caledonia,NCL,1980,1182457142.60648\nNew Caledonia,NCL,1981,972563810.230325\nNew Caledonia,NCL,1982,904619629.797268\nNew Caledonia,NCL,1983,823832940.450511\nNew Caledonia,NCL,1984,796018978.4713\nNew Caledonia,NCL,1985,854823821.723177\nNew Caledonia,NCL,1986,1201262517.87644\nNew Caledonia,NCL,1987,1488113532.28584\nNew Caledonia,NCL,1988,2072735787.31779\nNew Caledonia,NCL,1989,2185072798.33184\nNew Caledonia,NCL,1990,2529310103.83608\nNew Caledonia,NCL,1991,2653781596.46008\nNew Caledonia,NCL,1992,2923764926.39718\nNew Caledonia,NCL,1993,3070161471.04451\nNew Caledonia,NCL,1994,3038727617.03901\nNew Caledonia,NCL,1995,3628440274.67\nNew Caledonia,NCL,1996,3606968433.92682\nNew Caledonia,NCL,1997,3291489840.57141\nNew Caledonia,NCL,1998,3158806480.26107\nNew Caledonia,NCL,1999,3056999988.09146\nNew Caledonia,NCL,2000,2682347064.3642\nNew Zealand,NZL,1960,5485854791.97096\nNew Zealand,NZL,1961,5670064168.21773\nNew Zealand,NZL,1962,6077496267.76294\nNew Zealand,NZL,1963,6638937283.13963\nNew Zealand,NZL,1964,7274144350.81809\nNew Zealand,NZL,1965,5654463586.00366\nNew Zealand,NZL,1966,5863733230.97616\nNew Zealand,NZL,1967,5961418093.53003\nNew Zealand,NZL,1968,5180597620.64135\nNew Zealand,NZL,1969,5761588761.69421\nNew Zealand,NZL,1971,7912290825.15868\nNew Zealand,NZL,1972,9567331064.65727\nNew Zealand,NZL,1973,12802281897.8712\nNew Zealand,NZL,1974,13940981798.1247\nNew Zealand,NZL,1975,12861983284.3912\nNew Zealand,NZL,1976,13604832424.0062\nNew Zealand,NZL,1977,15446825318.4556\nNew Zealand,NZL,1978,18530518394.6488\nNew Zealand,NZL,1979,20730241410.3977\nNew Zealand,NZL,1980,23245512449.3341\nNew Zealand,NZL,1981,24417617184.2478\nNew Zealand,NZL,1982,24164603058.9949\nNew Zealand,NZL,1983,24308622502.6288\nNew Zealand,NZL,1984,21665456808.0473\nNew Zealand,NZL,1985,24680306905.3708\nNew Zealand,NZL,1986,30605196451.2041\nNew Zealand,NZL,1987,40377592076.7564\nNew Zealand,NZL,1988,45176167471.8196\nNew Zealand,NZL,1989,43920222524.7085\nNew Zealand,NZL,1990,45495727006.5141\nNew Zealand,NZL,1991,42745329732.163\nNew Zealand,NZL,1992,41649298170.9911\nNew Zealand,NZL,1993,46775067750.6775\nNew Zealand,NZL,1994,55315342817.0218\nNew Zealand,NZL,1995,63918703506.9075\nNew Zealand,NZL,1996,70140835299.0148\nNew Zealand,NZL,1997,66074513017.7142\nNew Zealand,NZL,1998,56227169851.0448\nNew Zealand,NZL,1999,58761741657.5847\nNew Zealand,NZL,2000,52623281956.7031\nNew Zealand,NZL,2001,53872425916.6248\nNew Zealand,NZL,2002,66628222189.3637\nNew Zealand,NZL,2003,88250885550.2626\nNew Zealand,NZL,2004,103905882352.941\nNew Zealand,NZL,2005,114719425473.492\nNew Zealand,NZL,2006,111606899682.251\nNew Zealand,NZL,2007,137314617476.299\nNew Zealand,NZL,2008,133279679482.674\nNew Zealand,NZL,2009,121337372727.841\nNew Zealand,NZL,2010,146580949348.893\nNew Zealand,NZL,2011,168461998741.295\nNew Zealand,NZL,2012,176192886551.397\nNew Zealand,NZL,2013,190521142196.379\nNew Zealand,NZL,2014,200696291789.952\nNew Zealand,NZL,2015,175562976175.285\nNew Zealand,NZL,2016,184969146624.47\nNicaragua,NIC,1989,1019966666.66667\nNicaragua,NIC,1990,1009455483.87097\nNicaragua,NIC,1991,1488804123.71134\nNicaragua,NIC,1992,1792800000\nNicaragua,NIC,1993,1756454248.36601\nNicaragua,NIC,1994,3863185119.04762\nNicaragua,NIC,1995,4140470000\nNicaragua,NIC,1996,4308351902.78601\nNicaragua,NIC,1997,4389965590.96538\nNicaragua,NIC,1998,4635267224.84195\nNicaragua,NIC,1999,4855717874.68247\nNicaragua,NIC,2000,5107329007.0922\nNicaragua,NIC,2001,5323146565.70315\nNicaragua,NIC,2002,5224213017.54386\nNicaragua,NIC,2003,5322454925.84746\nNicaragua,NIC,2004,5795568204.64532\nNicaragua,NIC,2005,6321335612.22233\nNicaragua,NIC,2006,6763671610.70006\nNicaragua,NIC,2007,7423377429.05927\nNicaragua,NIC,2008,8496965842.2767\nNicaragua,NIC,2009,8298695144.91507\nNicaragua,NIC,2010,8758622328.66963\nNicaragua,NIC,2011,9774316692.15985\nNicaragua,NIC,2012,10532001129.67\nNicaragua,NIC,2013,10982972256.3787\nNicaragua,NIC,2014,11880438824.4494\nNicaragua,NIC,2015,12747741539.7259\nNicaragua,NIC,2016,13230844686.858\nNiger,NER,1960,449526872.565561\nNiger,NER,1961,485785231.729353\nNiger,NER,1962,531736599.930736\nNiger,NER,1963,586294879.4719\nNiger,NER,1964,582816396.216401\nNiger,NER,1965,673383510.242124\nNiger,NER,1966,702296079.857695\nNiger,NER,1967,665586872.839162\nNiger,NER,1968,641214226.839012\nNiger,NER,1969,625867984.42818\nNiger,NER,1970,649916621.179857\nNiger,NER,1971,693573704.422866\nNiger,NER,1972,742779659.455167\nNiger,NER,1973,946385104.967731\nNiger,NER,1974,1026137112.43707\nNiger,NER,1975,1048690931.5406\nNiger,NER,1976,1064517600.10051\nNiger,NER,1977,1291458043.7403\nNiger,NER,1978,1774365587.86851\nNiger,NER,1979,2109277663.09748\nNiger,NER,1980,2508524715.79516\nNiger,NER,1981,2170893417.98129\nNiger,NER,1982,2017612217.82752\nNiger,NER,1983,1803099561.08393\nNiger,NER,1984,1461243326.83775\nNiger,NER,1985,1440581653.32328\nNiger,NER,1986,1904097000.74963\nNiger,NER,1987,2233006101.94476\nNiger,NER,1988,2280356194.14559\nNiger,NER,1989,2179567111.0004\nNiger,NER,1990,2480673304.74309\nNiger,NER,1991,2327986215.86356\nNiger,NER,1992,2344987614.27441\nNiger,NER,1993,1606581743.78497\nNiger,NER,1994,1563207224.65066\nNiger,NER,1995,1880803361.68562\nNiger,NER,1996,1987770898.54334\nNiger,NER,1997,1845599608.44272\nNiger,NER,1998,2076737356.67897\nNiger,NER,1999,2018193703.06047\nNiger,NER,2000,1798374468.36362\nNiger,NER,2001,1945327564.65042\nNiger,NER,2002,2170481508.86916\nNiger,NER,2003,2731416346.48158\nNiger,NER,2004,3052898739.4678\nNiger,NER,2005,3405134831.8505\nNiger,NER,2006,3646728060.06463\nNiger,NER,2007,4291363390.91295\nNiger,NER,2008,5403363917.3096\nNiger,NER,2009,5397121856.35204\nNiger,NER,2010,5718589799.24366\nNiger,NER,2011,6409169889.50891\nNiger,NER,2012,6942209594.55433\nNiger,NER,2013,7667951987.6933\nNiger,NER,2014,8229730066.64442\nNiger,NER,2015,7217666360.69521\nNiger,NER,2016,7528387858.34739\nNigeria,NGA,1960,4196092258.15484\nNigeria,NGA,1961,4467200335.99328\nNigeria,NGA,1962,4909302953.94092\nNigeria,NGA,1963,5165489010.2198\nNigeria,NGA,1964,5552822483.55033\nNigeria,NGA,1965,5874422511.54977\nNigeria,NGA,1966,6366792664.14672\nNigeria,NGA,1967,5203135937.28125\nNigeria,NGA,1968,5200895982.08036\nNigeria,NGA,1969,6634187316.25367\nNigeria,NGA,1970,12545849083.0183\nNigeria,NGA,1971,9181769911.50443\nNigeria,NGA,1972,12274416017.7976\nNigeria,NGA,1973,15162871287.1287\nNigeria,NGA,1974,24846641318.1242\nNigeria,NGA,1975,27778934624.6973\nNigeria,NGA,1976,36308883248.731\nNigeria,NGA,1977,36035407725.3219\nNigeria,NGA,1978,36527862208.7133\nNigeria,NGA,1979,47259911894.2731\nNigeria,NGA,1980,64201788122.6054\nNigeria,NGA,1981,61076493506.4935\nNigeria,NGA,1982,51397461685.8238\nNigeria,NGA,1983,35451565749.2355\nNigeria,NGA,1984,28500815241.471\nNigeria,NGA,1985,28873977228.1115\nNigeria,NGA,1986,20721499308.4371\nNigeria,NGA,1987,24093203444.564\nNigeria,NGA,1988,23272161396.8853\nNigeria,NGA,1989,24231168858.7187\nNigeria,NGA,1990,30757075595.3681\nNigeria,NGA,1991,27392886872.5547\nNigeria,NGA,1992,29300903643.0584\nNigeria,NGA,1993,15789003752.7594\nNigeria,NGA,1994,18086400535.5777\nNigeria,NGA,1995,28546958641.2735\nNigeria,NGA,1996,34987951375\nNigeria,NGA,1997,35822342617.6978\nNigeria,NGA,1998,32004613750\nNigeria,NGA,1999,35870792987.9432\nNigeria,NGA,2000,46386011231.37\nNigeria,NGA,2001,44137994251.618\nNigeria,NGA,2002,59116847821.5797\nNigeria,NGA,2003,67655813930.0926\nNigeria,NGA,2004,87845420504.485\nNigeria,NGA,2005,112248353104.911\nNigeria,NGA,2006,145429764861.249\nNigeria,NGA,2007,166451213395.64\nNigeria,NGA,2008,208064753766.47\nNigeria,NGA,2009,169481317540.364\nNigeria,NGA,2010,369062464570.387\nNigeria,NGA,2011,411743801711.642\nNigeria,NGA,2012,460953836444.364\nNigeria,NGA,2013,514966287206.505\nNigeria,NGA,2014,568498937588.035\nNigeria,NGA,2015,481066152889.094\nNigeria,NGA,2016,404652720164.859\nNorthern Mariana Islands,MNP,2002,1284000000\nNorthern Mariana Islands,MNP,2003,1239000000\nNorthern Mariana Islands,MNP,2004,1210000000\nNorthern Mariana Islands,MNP,2005,1061000000\nNorthern Mariana Islands,MNP,2006,990000000\nNorthern Mariana Islands,MNP,2007,938000000\nNorthern Mariana Islands,MNP,2008,939000000\nNorthern Mariana Islands,MNP,2009,795000000\nNorthern Mariana Islands,MNP,2010,799000000\nNorthern Mariana Islands,MNP,2011,733000000\nNorthern Mariana Islands,MNP,2012,751000000\nNorthern Mariana Islands,MNP,2013,784000000\nNorthern Mariana Islands,MNP,2014,845000000\nNorthern Mariana Islands,MNP,2015,933000000\nNorthern Mariana Islands,MNP,2016,1242000000\nNorway,NOR,1960,5163271598.15702\nNorway,NOR,1961,5632460936.54576\nNorway,NOR,1962,6066976682.67364\nNorway,NOR,1963,6510239502.76489\nNorway,NOR,1964,7159202706.48027\nNorway,NOR,1965,8058681060.159\nNorway,NOR,1966,8696460205.3397\nNorway,NOR,1967,9514496703.39762\nNorway,NOR,1968,10159934136.7838\nNorway,NOR,1969,11063065083.4888\nNorway,NOR,1970,12814123115.2613\nNorway,NOR,1971,14583114840.0629\nNorway,NOR,1972,17358610849.701\nNorway,NOR,1973,22534253702.8686\nNorway,NOR,1974,27145693810.1341\nNorway,NOR,1975,32877805200.023\nNorway,NOR,1976,35942270686.3374\nNorway,NOR,1977,41508030431.1074\nNorway,NOR,1978,46523091009.6713\nNorway,NOR,1979,53132244623.9213\nNorway,NOR,1980,64439382896.0156\nNorway,NOR,1981,63596654760.8677\nNorway,NOR,1982,62647195537.6511\nNorway,NOR,1983,61627240831.0948\nNorway,NOR,1984,62057955032.7758\nNorway,NOR,1985,65416879914.3907\nNorway,NOR,1986,78693253275.995\nNorway,NOR,1987,94230055658.6271\nNorway,NOR,1988,101900260856.222\nNorway,NOR,1989,102633789557.535\nNorway,NOR,1990,119791683307.507\nNorway,NOR,1991,121872464483.487\nNorway,NOR,1992,130838040067.584\nNorway,NOR,1993,120579072750.596\nNorway,NOR,1994,127131461119.927\nNorway,NOR,1995,152027402449.804\nNorway,NOR,1996,163517783497.163\nNorway,NOR,1997,161354369892.838\nNorway,NOR,1998,154165219811.533\nNorway,NOR,1999,162286003692.686\nNorway,NOR,2000,171315639982.731\nNorway,NOR,2001,174003247439.305\nNorway,NOR,2002,195418347152.985\nNorway,NOR,2003,228752436371.854\nNorway,NOR,2004,264357494659.388\nNorway,NOR,2005,308722079937.912\nNorway,NOR,2006,345424664369.357\nNorway,NOR,2007,401082621082.621\nNorway,NOR,2008,462554432624.114\nNorway,NOR,2009,386622457579.95\nNorway,NOR,2010,429130952709.224\nNorway,NOR,2011,498831558925.86\nNorway,NOR,2012,510229136226.902\nNorway,NOR,2013,523502127659.574\nNorway,NOR,2014,499338534779.159\nNorway,NOR,2015,386663139402.707\nNorway,NOR,2016,371076190476.19\nOman,OMN,1965,63287594.5113414\nOman,OMN,1966,67768132.1758611\nOman,OMN,1967,107152720.243027\nOman,OMN,1968,188864890.808735\nOman,OMN,1969,239980801.535877\nOman,OMN,1970,256299496.040317\nOman,OMN,1971,301010587.102984\nOman,OMN,1972,366857738.40542\nOman,OMN,1973,483033932.135729\nOman,OMN,1974,1645917776.49103\nOman,OMN,1975,2096699189.34569\nOman,OMN,1976,2560220034.74233\nOman,OMN,1977,2741169947.88651\nOman,OMN,1978,2740301389.69311\nOman,OMN,1979,3733352634.62652\nOman,OMN,1980,5981760277.93862\nOman,OMN,1981,7259120150.55009\nOman,OMN,1982,7554719455.70353\nOman,OMN,1983,7932541690.79328\nOman,OMN,1984,8821366531.55762\nOman,OMN,1985,10005500579.0388\nOman,OMN,1986,7323822251.3089\nOman,OMN,1987,7811183094.92848\nOman,OMN,1988,8386215864.75943\nOman,OMN,1989,9372171651.49545\nOman,OMN,1990,11685045513.6541\nOman,OMN,1991,11341482444.7334\nOman,OMN,1992,12452275682.7048\nOman,OMN,1993,12493107932.3797\nOman,OMN,1994,12918855656.697\nOman,OMN,1995,13802600780.2341\nOman,OMN,1996,15277763328.9987\nOman,OMN,1997,15837451235.3706\nOman,OMN,1998,14085373211.9636\nOman,OMN,1999,15710148244.4733\nOman,OMN,2000,19507412223.6671\nOman,OMN,2001,19452015604.6814\nOman,OMN,2002,20142782834.8505\nOman,OMN,2003,21633810143.0429\nOman,OMN,2004,24763589076.723\nOman,OMN,2005,31081924577.3732\nOman,OMN,2006,37215864759.4278\nOman,OMN,2007,42085305591.6775\nOman,OMN,2008,60905331599.4798\nOman,OMN,2009,48388296488.9467\nOman,OMN,2010,58641621846.554\nOman,OMN,2011,67937307412.2237\nOman,OMN,2012,76689583355.0065\nOman,OMN,2013,78938585175.5527\nOman,OMN,2014,81034395058.5175\nOman,OMN,2015,69831770871.2614\nOman,OMN,2016,66293368010.4031\nPakistan,PAK,1960,3707055900.88198\nPakistan,PAK,1961,4054599181.01638\nPakistan,PAK,1962,4233095590.0882\nPakistan,PAK,1963,4540529105.41789\nPakistan,PAK,1964,5130407727.84544\nPakistan,PAK,1965,5884712095.75809\nPakistan,PAK,1966,6466610751.78496\nPakistan,PAK,1967,7403821902.56195\nPakistan,PAK,1968,8090088555.2289\nPakistan,PAK,1969,8632927257.45485\nPakistan,PAK,1970,10027088849.223\nPakistan,PAK,1971,10602058189.8362\nPakistan,PAK,1972,9309109764.07784\nPakistan,PAK,1973,6324884129.38617\nPakistan,PAK,1974,8773030424.24242\nPakistan,PAK,1975,11340000242.4242\nPakistan,PAK,1976,13338484979.798\nPakistan,PAK,1977,15126059646.4646\nPakistan,PAK,1978,17820100626.2626\nPakistan,PAK,1979,19707979303.0303\nPakistan,PAK,1980,23689696767.6768\nPakistan,PAK,1981,28100605515.1515\nPakistan,PAK,1982,30725972786.7299\nPakistan,PAK,1983,28691890433.0709\nPakistan,PAK,1984,31151824658.6524\nPakistan,PAK,1985,31144920554.0897\nPakistan,PAK,1986,31899071053.9368\nPakistan,PAK,1987,33351528115.351\nPakistan,PAK,1988,38472741737.3968\nPakistan,PAK,1989,40171019643.3511\nPakistan,PAK,1990,40010424928.715\nPakistan,PAK,1991,45451960731.7204\nPakistan,PAK,1992,48635176852.7673\nPakistan,PAK,1993,51478304859.5879\nPakistan,PAK,1994,51894781281.8919\nPakistan,PAK,1995,60636022422.6176\nPakistan,PAK,1996,63320122807.1223\nPakistan,PAK,1997,62433300338.0941\nPakistan,PAK,1998,62191955814.3478\nPakistan,PAK,1999,62973855718.8874\nPakistan,PAK,2000,73952374969.7995\nPakistan,PAK,2001,72309738921.3329\nPakistan,PAK,2002,72306820396.2325\nPakistan,PAK,2003,83244801092.7096\nPakistan,PAK,2004,97977766197.6724\nPakistan,PAK,2005,109502102510.883\nPakistan,PAK,2006,137264061106.043\nPakistan,PAK,2007,152385716311.916\nPakistan,PAK,2008,170077814106.305\nPakistan,PAK,2009,168152775283.032\nPakistan,PAK,2010,177406854514.885\nPakistan,PAK,2011,213587413183.996\nPakistan,PAK,2012,224383620829.57\nPakistan,PAK,2013,231218567178.979\nPakistan,PAK,2014,244360888750.807\nPakistan,PAK,2015,270556126820.064\nPakistan,PAK,2016,278913371202.065\nPalau,PLW,1990,76888000\nPalau,PLW,1991,83855000\nPalau,PLW,1992,82451000\nPalau,PLW,1993,75907000\nPalau,PLW,1994,83527000\nPalau,PLW,1995,95237000\nPalau,PLW,1996,108203000\nPalau,PLW,1997,113213000\nPalau,PLW,1998,117320000\nPalau,PLW,1999,113485000\nPalau,PLW,2000,147832600\nPalau,PLW,2001,158159300\nPalau,PLW,2002,161615200\nPalau,PLW,2003,157962700\nPalau,PLW,2004,173373900\nPalau,PLW,2005,191326500\nPalau,PLW,2006,193085900\nPalau,PLW,2007,194767100\nPalau,PLW,2008,196711500\nPalau,PLW,2009,186891100\nPalau,PLW,2010,183335100\nPalau,PLW,2011,200066900\nPalau,PLW,2012,215095100\nPalau,PLW,2013,228012200\nPalau,PLW,2014,246436300\nPalau,PLW,2015,297645400\nPalau,PLW,2016,310248300\nPanama,PAN,1960,537147100\nPanama,PAN,1961,599026300\nPanama,PAN,1962,652120900\nPanama,PAN,1963,722784500\nPanama,PAN,1964,776137500\nPanama,PAN,1965,852485300\nPanama,PAN,1966,928833000\nPanama,PAN,1967,1034376400\nPanama,PAN,1968,1112791100\nPanama,PAN,1969,1221305700\nPanama,PAN,1970,1351006400\nPanama,PAN,1971,1523917200\nPanama,PAN,1972,1673411700\nPanama,PAN,1973,1913793400\nPanama,PAN,1974,2188307600\nPanama,PAN,1975,2435304100\nPanama,PAN,1976,2588106000\nPanama,PAN,1977,2738261900\nPanama,PAN,1978,3244558600\nPanama,PAN,1979,3704551600\nPanama,PAN,1980,4614086400\nPanama,PAN,1981,5222421500\nPanama,PAN,1982,5769767900\nPanama,PAN,1983,5923755900\nPanama,PAN,1984,6183387100\nPanama,PAN,1985,6541517100\nPanama,PAN,1986,6797834200\nPanama,PAN,1987,6827665300\nPanama,PAN,1988,5902783400\nPanama,PAN,1989,5918469800\nPanama,PAN,1990,6433967000\nPanama,PAN,1991,7074675500\nPanama,PAN,1992,8042337700\nPanama,PAN,1993,8782585400\nPanama,PAN,1994,9365289800\nPanama,PAN,1995,9573813700\nPanama,PAN,1996,9870494000\nPanama,PAN,1997,10677286100\nPanama,PAN,1998,11575486400\nPanama,PAN,1999,12130252200\nPanama,PAN,2000,12304115000\nPanama,PAN,2001,12502013400\nPanama,PAN,2002,12994310400\nPanama,PAN,2003,13693981200\nPanama,PAN,2004,15013381700\nPanama,PAN,2005,16374393900\nPanama,PAN,2006,18141666300\nPanama,PAN,2007,20958000000\nPanama,PAN,2008,24522200000\nPanama,PAN,2009,26593500000\nPanama,PAN,2010,28917200000\nPanama,PAN,2011,34373820500\nPanama,PAN,2012,39954761200\nPanama,PAN,2013,44856189500\nPanama,PAN,2014,49165773100\nPanama,PAN,2015,52132289700\nPanama,PAN,2016,55187700000\nPapua New Guinea,PNG,1960,230496032.972722\nPapua New Guinea,PNG,1961,244832035.023504\nPapua New Guinea,PNG,1962,261184037.362676\nPapua New Guinea,PNG,1963,275968039.477545\nPapua New Guinea,PNG,1964,305312043.675238\nPapua New Guinea,PNG,1965,344159480.344943\nPapua New Guinea,PNG,1966,390973233.284802\nPapua New Guinea,PNG,1967,441706910.068317\nPapua New Guinea,PNG,1968,485160824.280435\nPapua New Guinea,PNG,1969,551237316.608803\nPapua New Guinea,PNG,1970,645537126.217941\nPapua New Guinea,PNG,1971,717716130.493883\nPapua New Guinea,PNG,1972,858802035.928144\nPapua New Guinea,PNG,1973,1299105240.73285\nPapua New Guinea,PNG,1974,1467346059.99713\nPapua New Guinea,PNG,1975,1356591176.85561\nPapua New Guinea,PNG,1976,1511856584.25832\nPapua New Guinea,PNG,1977,1640763204.44781\nPapua New Guinea,PNG,1978,1947947524.33347\nPapua New Guinea,PNG,1979,2293621944.3664\nPapua New Guinea,PNG,1980,2545983007.89984\nPapua New Guinea,PNG,1981,2498068350.66865\nPapua New Guinea,PNG,1982,2368584969.53284\nPapua New Guinea,PNG,1983,2562492524.81761\nPapua New Guinea,PNG,1984,2552526263.0759\nPapua New Guinea,PNG,1985,2423373088.07358\nPapua New Guinea,PNG,1986,2648033765.69899\nPapua New Guinea,PNG,1987,3143848331.31402\nPapua New Guinea,PNG,1988,3655979702.45646\nPapua New Guinea,PNG,1989,3546460176.99115\nPapua New Guinea,PNG,1990,3219730365\nPapua New Guinea,PNG,1991,3787352286.66667\nPapua New Guinea,PNG,1992,4377984100\nPapua New Guinea,PNG,1993,4974662910\nPapua New Guinea,PNG,1994,5502648500\nPapua New Guinea,PNG,1995,4636113480.00001\nPapua New Guinea,PNG,1996,5155485419.7\nPapua New Guinea,PNG,1997,4936605079.99998\nPapua New Guinea,PNG,1998,3789428160.00001\nPapua New Guinea,PNG,1999,3477060138.33333\nPapua New Guinea,PNG,2000,3521348154.79666\nPapua New Guinea,PNG,2001,3081024212.42924\nPapua New Guinea,PNG,2002,2999511040.19764\nPapua New Guinea,PNG,2003,3536411824.2958\nPapua New Guinea,PNG,2004,3927157866.96465\nPapua New Guinea,PNG,2005,4865892972.27595\nPapua New Guinea,PNG,2006,8306343442.27435\nPapua New Guinea,PNG,2007,9545071324.99241\nPapua New Guinea,PNG,2008,11670678863.7458\nPapua New Guinea,PNG,2009,11619541940.4014\nPapua New Guinea,PNG,2010,14250726289.854\nPapua New Guinea,PNG,2011,17984816533.1084\nPapua New Guinea,PNG,2012,21295834133.2309\nPapua New Guinea,PNG,2013,21261305413.2323\nPapua New Guinea,PNG,2014,23003575201.1051\nPapua New Guinea,PNG,2015,21060901603.8145\nPapua New Guinea,PNG,2016,20213214171.7204\nParaguay,PRY,1965,400129691.269841\nParaguay,PRY,1966,421700442.063492\nParaguay,PRY,1967,451524124.603175\nParaguay,PRY,1968,477012512.698413\nParaguay,PRY,1969,512728946.031746\nParaguay,PRY,1970,548758098.412698\nParaguay,PRY,1971,609047284.920635\nParaguay,PRY,1972,697291727.777778\nParaguay,PRY,1973,889357059.52381\nParaguay,PRY,1974,1199618980.15873\nParaguay,PRY,1975,1351889403.1746\nParaguay,PRY,1976,1540820245.2381\nParaguay,PRY,1977,1912353339.68254\nParaguay,PRY,1978,2350329157.14286\nParaguay,PRY,1979,3135123879.36508\nParaguay,PRY,1980,4094810488.09524\nParaguay,PRY,1981,5219516810.31746\nParaguay,PRY,1982,5067450002.20588\nParaguay,PRY,1983,5237432542.46575\nParaguay,PRY,1984,4067222369.30652\nParaguay,PRY,1985,2966234106.19469\nParaguay,PRY,1986,3439716561.65443\nParaguay,PRY,1987,3778316380.23952\nParaguay,PRY,1988,4082625952.7381\nParaguay,PRY,1989,4599970618.44348\nParaguay,PRY,1990,5695201563.42495\nParaguay,PRY,1991,6984367762.90371\nParaguay,PRY,1992,7157424031.06045\nParaguay,PRY,1993,7249533620.30614\nParaguay,PRY,1994,7870982170.98217\nParaguay,PRY,1995,9062131307.88275\nParaguay,PRY,1996,9788391732.82899\nParaguay,PRY,1997,9965225496.58839\nParaguay,PRY,1998,9024567484.2013\nParaguay,PRY,1999,8392549702.31511\nParaguay,PRY,2000,8195993230.74275\nParaguay,PRY,2001,7662595075.90241\nParaguay,PRY,2002,6325151760.0669\nParaguay,PRY,2003,6588103836.34739\nParaguay,PRY,2004,8033877360.41697\nParaguay,PRY,2005,8734653809.49561\nParaguay,PRY,2006,10646157920.3209\nParaguay,PRY,2007,13794910633.8518\nParaguay,PRY,2008,18504130752.9922\nParaguay,PRY,2009,15929902138.1363\nParaguay,PRY,2010,20030528042.9171\nParaguay,PRY,2011,25099681460.8943\nParaguay,PRY,2012,24595319573.7548\nParaguay,PRY,2013,28965906502.2306\nParaguay,PRY,2014,30881166852.3116\nParaguay,PRY,2015,27282581335.7964\nParaguay,PRY,2016,27424071382.7244\nPeru,PER,1960,2571908062.07692\nPeru,PER,1961,2899654840.36567\nPeru,PER,1962,3286773187.87687\nPeru,PER,1963,3600957771.15299\nPeru,PER,1964,4356913870.23508\nPeru,PER,1965,5166861068.42164\nPeru,PER,1966,6113607728.15672\nPeru,PER,1967,6204253758.57616\nPeru,PER,1968,5736083835.22481\nPeru,PER,1969,6420909789.63824\nPeru,PER,1970,7432223176.77261\nPeru,PER,1971,8289582883.50129\nPeru,PER,1972,9189413409.01292\nPeru,PER,1973,10994381894.7984\nPeru,PER,1974,13858441211.2196\nPeru,PER,1975,16877163792.1284\nPeru,PER,1976,15947709379.6507\nPeru,PER,1977,14620386673.8544\nPeru,PER,1978,12495779622.071\nPeru,PER,1979,15962459447.2168\nPeru,PER,1980,18134029179.6393\nPeru,PER,1981,21649137620.3055\nPeru,PER,1982,21793496819.3379\nPeru,PER,1983,17345624453.6916\nPeru,PER,1984,17599660054.286\nPeru,PER,1985,16548827018.2872\nPeru,PER,1986,15244232957.876\nPeru,PER,1987,20702298396.9717\nPeru,PER,1988,15439408447.2288\nPeru,PER,1989,22499559086.0343\nPeru,PER,1990,26410386669.3609\nPeru,PER,1991,34672122380.7687\nPeru,PER,1992,36139225287.9079\nPeru,PER,1993,35158109999.4973\nPeru,PER,1994,44882079766.8913\nPeru,PER,1995,53312793687.3836\nPeru,PER,1996,55252414130.3019\nPeru,PER,1997,58147522522.5225\nPeru,PER,1998,55501467877.381\nPeru,PER,1999,50187324567.883\nPeru,PER,2000,51744749133.213\nPeru,PER,2001,52030158775.4055\nPeru,PER,2002,54777553515.0809\nPeru,PER,2003,58731030121.8671\nPeru,PER,2004,66768703497.5687\nPeru,PER,2005,76060606060.606\nPeru,PER,2006,88643193061.748\nPeru,PER,2007,102170981144.136\nPeru,PER,2008,120550599815.441\nPeru,PER,2009,120822986521.479\nPeru,PER,2010,147528937028.778\nPeru,PER,2011,171761737046.585\nPeru,PER,2012,192648999090.082\nPeru,PER,2013,201217661645.509\nPeru,PER,2014,201049665375.132\nPeru,PER,2015,189212096470.293\nPeru,PER,2016,192207342004.681\nPhilippines,PHL,1960,6684568805.06881\nPhilippines,PHL,1961,7256966966.22556\nPhilippines,PHL,1962,4399827767.96704\nPhilippines,PHL,1963,4875309866.34017\nPhilippines,PHL,1964,5271404668.36735\nPhilippines,PHL,1965,5784398976.9821\nPhilippines,PHL,1966,6371459304.41018\nPhilippines,PHL,1967,6809134235.54298\nPhilippines,PHL,1968,7591603053.43511\nPhilippines,PHL,1969,8408229699.14295\nPhilippines,PHL,1970,6687204834.3687\nPhilippines,PHL,1971,7408305735.65309\nPhilippines,PHL,1972,8017468688.2004\nPhilippines,PHL,1973,10082885603.0668\nPhilippines,PHL,1974,13781139969.6519\nPhilippines,PHL,1975,14893969287.6557\nPhilippines,PHL,1976,17097563270.2982\nPhilippines,PHL,1977,19648106122.0079\nPhilippines,PHL,1978,22706155475.3048\nPhilippines,PHL,1979,27502168726.9573\nPhilippines,PHL,1980,32450541843.0652\nPhilippines,PHL,1981,35646416952.5425\nPhilippines,PHL,1982,37140163934.4262\nPhilippines,PHL,1983,33212180658.1659\nPhilippines,PHL,1984,31408492876.691\nPhilippines,PHL,1985,30734335448.9905\nPhilippines,PHL,1986,29868339080.8263\nPhilippines,PHL,1987,33195933429.6008\nPhilippines,PHL,1988,37885440418.6834\nPhilippines,PHL,1989,42575183905.5606\nPhilippines,PHL,1990,44311593755.7845\nPhilippines,PHL,1991,45417561302.2497\nPhilippines,PHL,1992,52976344928.9564\nPhilippines,PHL,1993,54368083953.1119\nPhilippines,PHL,1994,64084460124.4644\nPhilippines,PHL,1995,74119987244.5011\nPhilippines,PHL,1996,82848140618.0266\nPhilippines,PHL,1997,82344260570.6685\nPhilippines,PHL,1998,72207025219.4752\nPhilippines,PHL,1999,82995147089.9742\nPhilippines,PHL,2000,81026297144.2795\nPhilippines,PHL,2001,76262072022.215\nPhilippines,PHL,2002,81357602950.1818\nPhilippines,PHL,2003,83908206456.0645\nPhilippines,PHL,2004,91371239764.8818\nPhilippines,PHL,2005,103071585462.599\nPhilippines,PHL,2006,122210719245.902\nPhilippines,PHL,2007,149359920005.894\nPhilippines,PHL,2008,174195135053.121\nPhilippines,PHL,2009,168334599538.168\nPhilippines,PHL,2010,199590775190.258\nPhilippines,PHL,2011,224143083706.777\nPhilippines,PHL,2012,250092093547.532\nPhilippines,PHL,2013,271836123723.678\nPhilippines,PHL,2014,284584522898.872\nPhilippines,PHL,2015,292774099013.687\nPhilippines,PHL,2016,304905406845.291\nPoland,POL,1990,65977749038.438\nPoland,POL,1991,85500935934.9901\nPoland,POL,1992,94337050693.2727\nPoland,POL,1993,96045645026.178\nPoland,POL,1994,110803391516.698\nPoland,POL,1995,142137319587.629\nPoland,POL,1996,159942880456.956\nPoland,POL,1997,159117799530.388\nPoland,POL,1998,174388271853.6\nPoland,POL,1999,169717677900.734\nPoland,POL,2000,171885598582.637\nPoland,POL,2001,190521263343.023\nPoland,POL,2002,198680637254.902\nPoland,POL,2003,217518642324.505\nPoland,POL,2004,255102252843.395\nPoland,POL,2005,306134635593.744\nPoland,POL,2006,344826430298.147\nPoland,POL,2007,429249647594.607\nPoland,POL,2008,533815789473.684\nPoland,POL,2009,440346575957.897\nPoland,POL,2010,479257883741.752\nPoland,POL,2011,528725113045.826\nPoland,POL,2012,500284003684.372\nPoland,POL,2013,524201151607.188\nPoland,POL,2014,545075908845.995\nPoland,POL,2015,477279647754.701\nPoland,POL,2016,471364408713.956\nPortugal,PRT,1960,3193200404.37297\nPortugal,PRT,1961,3417516639.37596\nPortugal,PRT,1962,3668222357.65702\nPortugal,PRT,1963,3905734459.72693\nPortugal,PRT,1964,4235608177.67102\nPortugal,PRT,1965,4687464054.83455\nPortugal,PRT,1966,5135387845.97108\nPortugal,PRT,1967,5740241165.63433\nPortugal,PRT,1968,6354262628.33537\nPortugal,PRT,1969,6969025825.62869\nPortugal,PRT,1970,8109032775.45328\nPortugal,PRT,1971,9202512367.49117\nPortugal,PRT,1972,11240223128.2431\nPortugal,PRT,1973,15092052330.3352\nPortugal,PRT,1974,17514112075.7695\nPortugal,PRT,1975,19349512941.1765\nPortugal,PRT,1976,20334835543.7666\nPortugal,PRT,1977,21441635411.2101\nPortugal,PRT,1978,23489924726.2774\nPortugal,PRT,1979,26625439344.2623\nPortugal,PRT,1980,32899759311.1734\nPortugal,PRT,1981,31980423452.7687\nPortugal,PRT,1982,30530759334.0061\nPortugal,PRT,1983,27242331885.6316\nPortugal,PRT,1984,25220451794.029\nPortugal,PRT,1985,27118476173.6675\nPortugal,PRT,1986,38749715721.7531\nPortugal,PRT,1987,48187667852.5687\nPortugal,PRT,1988,56352797353.7604\nPortugal,PRT,1989,60600056659.0272\nPortugal,PRT,1990,78721607509.4923\nPortugal,PRT,1991,89242382961.0101\nPortugal,PRT,1992,107602689040.689\nPortugal,PRT,1993,95019103603.042\nPortugal,PRT,1994,99698453260.8696\nPortugal,PRT,1995,118133634071.912\nPortugal,PRT,1996,122629812841.175\nPortugal,PRT,1997,117046198970.84\nPortugal,PRT,1998,123981736420.303\nPortugal,PRT,1999,127465545493.288\nPortugal,PRT,2000,118358489957.619\nPortugal,PRT,2001,121545880984.34\nPortugal,PRT,2002,134228697534.35\nPortugal,PRT,2003,164964195259.594\nPortugal,PRT,2004,189187437298.237\nPortugal,PRT,2005,197304513120.259\nPortugal,PRT,2006,208566948939.907\nPortugal,PRT,2007,240169336162.059\nPortugal,PRT,2008,262007590449.685\nPortugal,PRT,2009,243745748819.116\nPortugal,PRT,2010,238303443425.21\nPortugal,PRT,2011,244895101712.451\nPortugal,PRT,2012,216368178659.447\nPortugal,PRT,2013,226073492966.495\nPortugal,PRT,2014,229629822121.601\nPortugal,PRT,2015,199420256049.689\nPortugal,PRT,2016,204836597909.466\nPuerto Rico,PRI,1960,1691900000\nPuerto Rico,PRI,1961,1865100000\nPuerto Rico,PRI,1962,2094400000\nPuerto Rico,PRI,1963,2333600000\nPuerto Rico,PRI,1964,2570500000\nPuerto Rico,PRI,1965,2881500000\nPuerto Rico,PRI,1966,3170500000\nPuerto Rico,PRI,1967,3532700000\nPuerto Rico,PRI,1968,3941700000\nPuerto Rico,PRI,1969,4460700000\nPuerto Rico,PRI,1970,5034700000\nPuerto Rico,PRI,1971,5646800000\nPuerto Rico,PRI,1972,6328900000\nPuerto Rico,PRI,1973,7002400000\nPuerto Rico,PRI,1974,7684800000\nPuerto Rico,PRI,1975,8198300000\nPuerto Rico,PRI,1976,8968600000\nPuerto Rico,PRI,1977,9910900000\nPuerto Rico,PRI,1978,11165000000\nPuerto Rico,PRI,1979,12750000000\nPuerto Rico,PRI,1980,14436100000\nPuerto Rico,PRI,1981,15955700000\nPuerto Rico,PRI,1982,16764200000\nPuerto Rico,PRI,1983,17276600000\nPuerto Rico,PRI,1984,19162600000\nPuerto Rico,PRI,1985,20289200000\nPuerto Rico,PRI,1986,21969400000\nPuerto Rico,PRI,1987,23878000000\nPuerto Rico,PRI,1988,26178400000\nPuerto Rico,PRI,1989,28266800000\nPuerto Rico,PRI,1990,30603919000\nPuerto Rico,PRI,1991,32287031000\nPuerto Rico,PRI,1992,34630430000\nPuerto Rico,PRI,1993,36922456000\nPuerto Rico,PRI,1994,39690630000\nPuerto Rico,PRI,1995,42647331000\nPuerto Rico,PRI,1996,45340835000\nPuerto Rico,PRI,1997,48187039000\nPuerto Rico,PRI,1998,54086409000\nPuerto Rico,PRI,1999,57840954000\nPuerto Rico,PRI,2000,61701810000\nPuerto Rico,PRI,2001,69668635000\nPuerto Rico,PRI,2002,72546194000\nPuerto Rico,PRI,2003,75833996000\nPuerto Rico,PRI,2004,80322313000\nPuerto Rico,PRI,2005,83914521340.5431\nPuerto Rico,PRI,2006,87276164364.6388\nPuerto Rico,PRI,2007,89524131617.1909\nPuerto Rico,PRI,2008,93639316000\nPuerto Rico,PRI,2009,96385638000\nPuerto Rico,PRI,2010,98381268000\nPuerto Rico,PRI,2011,100351670000\nPuerto Rico,PRI,2012,101080738000\nPuerto Rico,PRI,2013,103134778000\nQatar,QAT,1970,301791301.791302\nQatar,QAT,1971,387700084.245998\nQatar,QAT,1972,510259940.720474\nQatar,QAT,1973,793884368.040437\nQatar,QAT,1974,2401403227.44085\nQatar,QAT,1975,2512784033.37828\nQatar,QAT,1976,3284301332.18953\nQatar,QAT,1977,3617580171.76055\nQatar,QAT,1978,4052000412.70087\nQatar,QAT,1979,5633000318.02401\nQatar,QAT,1980,7829094613.07082\nQatar,QAT,1981,8661263763.73626\nQatar,QAT,1982,7596703214.28571\nQatar,QAT,1983,6467582307.69231\nQatar,QAT,1984,6704395824.17583\nQatar,QAT,1985,6153296456.04396\nQatar,QAT,1986,5053021950.54945\nQatar,QAT,1987,5446428681.31868\nQatar,QAT,1988,6038187032.96703\nQatar,QAT,1989,6487912087.91209\nQatar,QAT,1990,7360439423.07692\nQatar,QAT,1991,6883516483.51648\nQatar,QAT,1992,7646153983.51648\nQatar,QAT,1993,7156593653.84615\nQatar,QAT,1994,7374450769.23077\nQatar,QAT,1995,8137911978.02198\nQatar,QAT,1996,9059340384.61539\nQatar,QAT,1997,11297802115.3846\nQatar,QAT,1998,10255495027.4725\nQatar,QAT,1999,12393131868.1319\nQatar,QAT,2000,17759890109.8901\nQatar,QAT,2001,17538461538.4615\nQatar,QAT,2002,19363736263.7363\nQatar,QAT,2003,23533791208.7912\nQatar,QAT,2004,31734065934.0659\nQatar,QAT,2005,44530494505.4945\nQatar,QAT,2006,60882142857.1428\nQatar,QAT,2007,79712087912.0879\nQatar,QAT,2008,115270054945.055\nQatar,QAT,2009,97798351648.3516\nQatar,QAT,2010,125122306346.154\nQatar,QAT,2011,167775274725.275\nQatar,QAT,2012,186833516483.516\nQatar,QAT,2013,198727747252.747\nQatar,QAT,2014,206224725274.725\nQatar,QAT,2015,164641483516.484\nQatar,QAT,2016,152451923076.923\nRomania,ROU,1987,38413636363.6364\nRomania,ROU,1988,40809523809.5238\nRomania,ROU,1989,42105263157.8947\nRomania,ROU,1990,38995454545.4545\nRomania,ROU,1991,28998684210.5263\nRomania,ROU,1992,25121666666.6667\nRomania,ROU,1993,26362894736.8421\nRomania,ROU,1994,30074440483.3837\nRomania,ROU,1995,37662075750.123\nRomania,ROU,1996,37182938696.0752\nRomania,ROU,1997,35838588169.6429\nRomania,ROU,1998,41976002703.9207\nRomania,ROU,1999,36183003978.3474\nRomania,ROU,2000,37438527799.5302\nRomania,ROU,2001,40716836998.0386\nRomania,ROU,2002,46174557555.5892\nRomania,ROU,2003,59867801204.8193\nRomania,ROU,2004,76216441462.1442\nRomania,ROU,2005,99697566667.8107\nRomania,ROU,2006,123533036667.853\nRomania,ROU,2007,171536685395.563\nRomania,ROU,2008,208181626900.631\nRomania,ROU,2009,167422949529.4\nRomania,ROU,2010,167998080493.408\nRomania,ROU,2011,185362855081.021\nRomania,ROU,2012,171664638717.49\nRomania,ROU,2013,191549024910.604\nRomania,ROU,2014,199493490982.921\nRomania,ROU,2015,177911101680.106\nRomania,ROU,2016,187592037839.968\nRussian Federation,RUS,1989,506500154001.466\nRussian Federation,RUS,1990,516814258695.568\nRussian Federation,RUS,1991,517962962962.963\nRussian Federation,RUS,1992,460290556900.726\nRussian Federation,RUS,1993,435083713850.837\nRussian Federation,RUS,1994,395077301248.464\nRussian Federation,RUS,1995,395531066563.296\nRussian Federation,RUS,1996,391719993756.828\nRussian Federation,RUS,1997,404926534140.017\nRussian Federation,RUS,1998,270953116950.026\nRussian Federation,RUS,1999,195905767668.562\nRussian Federation,RUS,2000,259708496267.33\nRussian Federation,RUS,2001,306602673980.117\nRussian Federation,RUS,2002,345110438692.185\nRussian Federation,RUS,2003,430347770731.787\nRussian Federation,RUS,2004,591016690742.798\nRussian Federation,RUS,2005,764017107992.391\nRussian Federation,RUS,2006,989930542278.695\nRussian Federation,RUS,2007,1299705247685.76\nRussian Federation,RUS,2008,1660844408499.61\nRussian Federation,RUS,2009,1222643696991.85\nRussian Federation,RUS,2010,1524916112078.87\nRussian Federation,RUS,2011,2051661732059.78\nRussian Federation,RUS,2012,2210256976945.38\nRussian Federation,RUS,2013,2297128039058.21\nRussian Federation,RUS,2014,2063662665171.89\nRussian Federation,RUS,2015,1365864126832.81\nRussian Federation,RUS,2016,1283162985989.3\nRwanda,RWA,1960,119000024\nRwanda,RWA,1961,122000016\nRwanda,RWA,1962,125000008\nRwanda,RWA,1963,128000000\nRwanda,RWA,1964,129999994\nRwanda,RWA,1965,148799980\nRwanda,RWA,1966,124525702.857143\nRwanda,RWA,1967,159560018\nRwanda,RWA,1968,172200018\nRwanda,RWA,1969,188700037\nRwanda,RWA,1970,219900006\nRwanda,RWA,1971,222952578.196381\nRwanda,RWA,1972,246457838.336681\nRwanda,RWA,1973,290746157.145921\nRwanda,RWA,1974,308458423.183854\nRwanda,RWA,1975,571863295.740122\nRwanda,RWA,1976,637754162.101094\nRwanda,RWA,1977,746650558.55469\nRwanda,RWA,1978,905709147.27019\nRwanda,RWA,1979,1109346220.52885\nRwanda,RWA,1980,1254765349.93185\nRwanda,RWA,1981,1407062607.63214\nRwanda,RWA,1982,1407242640.23211\nRwanda,RWA,1983,1479688125.8852\nRwanda,RWA,1984,1587412957.22263\nRwanda,RWA,1985,1715625839.17973\nRwanda,RWA,1986,1944711061.30888\nRwanda,RWA,1987,2157434025.16467\nRwanda,RWA,1988,2395493877.51365\nRwanda,RWA,1989,2405021932.89997\nRwanda,RWA,1990,2550185618.14774\nRwanda,RWA,1991,1911600969.76612\nRwanda,RWA,1992,2029026704.02707\nRwanda,RWA,1993,1971525998.87685\nRwanda,RWA,1994,753636370.454546\nRwanda,RWA,1995,1293535010.94467\nRwanda,RWA,1996,1382334879.40812\nRwanda,RWA,1997,1851558301.7002\nRwanda,RWA,1998,1989343495.21844\nRwanda,RWA,1999,1817655328.06755\nRwanda,RWA,2000,1734938264.47371\nRwanda,RWA,2001,1674685094.01639\nRwanda,RWA,2002,1677447150.10691\nRwanda,RWA,2003,1845979298.99285\nRwanda,RWA,2004,2089188828.797\nRwanda,RWA,2005,2581465863.87859\nRwanda,RWA,2006,3152016556.51526\nRwanda,RWA,2007,3824811913.22869\nRwanda,RWA,2008,4860576609.21568\nRwanda,RWA,2009,5379378135.44102\nRwanda,RWA,2010,5774003744.2708\nRwanda,RWA,2011,6491683831.5094\nRwanda,RWA,2012,7315702176.36442\nRwanda,RWA,2013,7622526429.08839\nRwanda,RWA,2014,8016288347.03577\nRwanda,RWA,2015,8261034257.63248\nRwanda,RWA,2016,8376048904.58291\nSamoa,WSM,1982,121221651.619316\nSamoa,WSM,1983,111862823.574979\nSamoa,WSM,1984,109200934.328518\nSamoa,WSM,1985,95572172.9835657\nSamoa,WSM,1986,100947848.64478\nSamoa,WSM,1987,111713922.141578\nSamoa,WSM,1988,133016065.416065\nSamoa,WSM,1989,122888609.715243\nSamoa,WSM,1990,125766269.755358\nSamoa,WSM,1991,125597205.422315\nSamoa,WSM,1992,132303041.36253\nSamoa,WSM,1993,133122897.196262\nSamoa,WSM,1994,221098106.508876\nSamoa,WSM,1995,224865731.381903\nSamoa,WSM,1996,249908970.658971\nSamoa,WSM,1997,285475591.89651\nSamoa,WSM,1998,269481523.200465\nSamoa,WSM,1999,258833766.580017\nSamoa,WSM,2000,269019710.327456\nSamoa,WSM,2001,273088357.1637\nSamoa,WSM,2002,288078881.433056\nSamoa,WSM,2003,338838639.378435\nSamoa,WSM,2004,420320176.359437\nSamoa,WSM,2005,462649043.044658\nSamoa,WSM,2006,508503671.284407\nSamoa,WSM,2007,550970655.544072\nSamoa,WSM,2008,644132488.887141\nSamoa,WSM,2009,560959527.824621\nSamoa,WSM,2010,643046733.391126\nSamoa,WSM,2011,739785121.889922\nSamoa,WSM,2012,801168622.338114\nSamoa,WSM,2013,804808525.537223\nSamoa,WSM,2014,803589511.754069\nSamoa,WSM,2015,803985809.166289\nSamoa,WSM,2016,786356314.80277\nSan Marino,SMR,1999,1215604989.73034\nSan Marino,SMR,2000,1101897071.81909\nSan Marino,SMR,2001,1160626398.21029\nSan Marino,SMR,2002,1253529079.61604\nSan Marino,SMR,2003,1600451467.26862\nSan Marino,SMR,2004,1877328035.75863\nSan Marino,SMR,2005,1958711603.03445\nSan Marino,SMR,2006,2092585622.88295\nSan Marino,SMR,2007,2488365726.79989\nSan Marino,SMR,2008,2752307016.25897\nSan Marino,SMR,2009,2363156432.34232\nSan Marino,SMR,2010,2139072847.68212\nSan Marino,SMR,2011,2054489852.65499\nSan Marino,SMR,2012,1800077091.09598\nSan Marino,SMR,2013,1865374402.54912\nSan Marino,SMR,2014,1845561894.65304\nSan Marino,SMR,2015,1569258068.0936\nSan Marino,SMR,2016,1590707964.60177\nSao Tome and Principe,STP,2001,72230284.4325877\nSao Tome and Principe,STP,2002,80531992.1217606\nSao Tome and Principe,STP,2003,96343906.4298042\nSao Tome and Principe,STP,2004,105360801.941831\nSao Tome and Principe,STP,2005,126194166.230985\nSao Tome and Principe,STP,2006,134441116.924998\nSao Tome and Principe,STP,2007,145827429.572302\nSao Tome and Principe,STP,2008,188021168.8418\nSao Tome and Principe,STP,2009,187821029.030558\nSao Tome and Principe,STP,2010,197454053.144483\nSao Tome and Principe,STP,2011,233213522.647122\nSao Tome and Principe,STP,2012,252560557.085219\nSao Tome and Principe,STP,2013,302925489.682558\nSao Tome and Principe,STP,2014,348899846.089383\nSao Tome and Principe,STP,2015,315880811.087464\nSao Tome and Principe,STP,2016,342781715.52048\nSaudi Arabia,SAU,1968,4187777711.11111\nSaudi Arabia,SAU,1969,4485777644.44444\nSaudi Arabia,SAU,1970,5377333333.33333\nSaudi Arabia,SAU,1971,7184853347.5974\nSaudi Arabia,SAU,1972,9664157498.5524\nSaudi Arabia,SAU,1973,14947391140.1284\nSaudi Arabia,SAU,1974,45412957746.4789\nSaudi Arabia,SAU,1975,46773368205.5947\nSaudi Arabia,SAU,1976,64005665722.3796\nSaudi Arabia,SAU,1977,74188249978.724\nSaudi Arabia,SAU,1978,80265619484.6452\nSaudi Arabia,SAU,1979,111859676267.555\nSaudi Arabia,SAU,1980,164541738058.737\nSaudi Arabia,SAU,1981,184291796008.869\nSaudi Arabia,SAU,1982,153239017560.236\nSaudi Arabia,SAU,1983,129171635311.143\nSaudi Arabia,SAU,1984,119624858115.778\nSaudi Arabia,SAU,1985,103897846493.65\nSaudi Arabia,SAU,1986,86961922765.3254\nSaudi Arabia,SAU,1987,85695861148.1976\nSaudi Arabia,SAU,1988,88256074766.3551\nSaudi Arabia,SAU,1989,95344459279.0387\nSaudi Arabia,SAU,1990,117630271802.403\nSaudi Arabia,SAU,1991,132223268491.322\nSaudi Arabia,SAU,1992,137087876662.216\nSaudi Arabia,SAU,1993,132967901415.22\nSaudi Arabia,SAU,1994,135174886488.652\nSaudi Arabia,SAU,1995,143343036341.789\nSaudi Arabia,SAU,1996,158662398744.993\nSaudi Arabia,SAU,1997,165963557409.88\nSaudi Arabia,SAU,1998,146775498080\nSaudi Arabia,SAU,1999,161716960000\nSaudi Arabia,SAU,2000,189514926213.333\nSaudi Arabia,SAU,2001,184137469733.333\nSaudi Arabia,SAU,2002,189605920240\nSaudi Arabia,SAU,2003,215807655253.333\nSaudi Arabia,SAU,2004,258742133333.333\nSaudi Arabia,SAU,2005,328459608764.111\nSaudi Arabia,SAU,2006,376900133511.348\nSaudi Arabia,SAU,2007,415964509673.115\nSaudi Arabia,SAU,2008,519796800000\nSaudi Arabia,SAU,2009,429097866666.667\nSaudi Arabia,SAU,2010,528207200000\nSaudi Arabia,SAU,2011,671238840106.667\nSaudi Arabia,SAU,2012,735974843360\nSaudi Arabia,SAU,2013,746647127413.333\nSaudi Arabia,SAU,2014,756350347333.334\nSaudi Arabia,SAU,2015,651757333333.333\nSaudi Arabia,SAU,2016,646438380560\nSenegal,SEN,1960,792824707.345294\nSenegal,SEN,1961,836493109.152284\nSenegal,SEN,1962,857425916.243935\nSenegal,SEN,1963,886387156.125059\nSenegal,SEN,1964,939145851.154484\nSenegal,SEN,1965,955834893.28571\nSenegal,SEN,1966,984942988.068955\nSenegal,SEN,1967,984605369.32995\nSenegal,SEN,1968,1034293645.25718\nSenegal,SEN,1969,983621024.109038\nSenegal,SEN,1970,1024832915.04328\nSenegal,SEN,1971,1058120427.15534\nSenegal,SEN,1972,1280328245.00174\nSenegal,SEN,1973,1471913473.60034\nSenegal,SEN,1974,1658273721.28587\nSenegal,SEN,1975,2235746644.74234\nSenegal,SEN,1976,2266860655.65881\nSenegal,SEN,1977,2320786490.70314\nSenegal,SEN,1978,2591178368.03735\nSenegal,SEN,1979,3226678628.31043\nSenegal,SEN,1980,3503282102.95741\nSenegal,SEN,1981,3176771103.46059\nSenegal,SEN,1982,3109677455.66655\nSenegal,SEN,1983,2774199193.31559\nSenegal,SEN,1984,2705535756.06004\nSenegal,SEN,1985,2962199835.95355\nSenegal,SEN,1986,4189860416.18118\nSenegal,SEN,1987,5040708115.08482\nSenegal,SEN,1988,4985153202.5374\nSenegal,SEN,1989,4913065110.53161\nSenegal,SEN,1990,5716644272.04692\nSenegal,SEN,1991,5617236032.86556\nSenegal,SEN,1992,6004885321.34354\nSenegal,SEN,1993,5678827998.8247\nSenegal,SEN,1994,3877196914.93966\nSenegal,SEN,1995,4878719133.22771\nSenegal,SEN,1996,5065830414.04947\nSenegal,SEN,1997,4672503920.19866\nSenegal,SEN,1998,5030344074.0413\nSenegal,SEN,1999,5144045359.98185\nSenegal,SEN,2000,4679604753.55711\nSenegal,SEN,2001,4877602059.50983\nSenegal,SEN,2002,5333862371.27113\nSenegal,SEN,2003,6858952880.10003\nSenegal,SEN,2004,8031344381.09898\nSenegal,SEN,2005,8707015771.00113\nSenegal,SEN,2006,9358710935.43366\nSenegal,SEN,2007,11284603070.5653\nSenegal,SEN,2008,13439023281.4707\nSenegal,SEN,2009,12814961485.1001\nSenegal,SEN,2010,12948906288.5576\nSenegal,SEN,2011,14390776643.965\nSenegal,SEN,2012,14225310518.7856\nSenegal,SEN,2013,14851057084.776\nSenegal,SEN,2014,15304363138.1804\nSenegal,SEN,2015,13640668374.1652\nSenegal,SEN,2016,14683697630.9\nSerbia,SRB,1995,16750000000\nSerbia,SRB,1996,20948677839.851\nSerbia,SRB,1997,24147996549.5662\nSerbia,SRB,1998,18284194680.3844\nSerbia,SRB,1999,18409364146.9794\nSerbia,SRB,2000,6540247190.33529\nSerbia,SRB,2001,12267175481.2542\nSerbia,SRB,2002,16116843146.4806\nSerbia,SRB,2003,21188704081.2428\nSerbia,SRB,2004,24861483280.6339\nSerbia,SRB,2005,26252007830.4639\nSerbia,SRB,2006,30607991862.4843\nSerbia,SRB,2007,40289556656.1455\nSerbia,SRB,2008,49259526052.7426\nSerbia,SRB,2009,42616653299.9115\nSerbia,SRB,2010,39460357730.5224\nSerbia,SRB,2011,46466728666.6103\nSerbia,SRB,2012,40742313861.1374\nSerbia,SRB,2013,45519650911.4138\nSerbia,SRB,2014,44210806365.6817\nSerbia,SRB,2015,37160332465.1645\nSerbia,SRB,2016,38299854688.1277\nSeychelles,SYC,1960,12012025.2477875\nSeychelles,SYC,1961,11592024.3649978\nSeychelles,SYC,1962,12642026.5719722\nSeychelles,SYC,1963,13923029.264481\nSeychelles,SYC,1964,15393032.3542452\nSeychelles,SYC,1965,15603032.7956401\nSeychelles,SYC,1966,16443034.5612196\nSeychelles,SYC,1967,16632032.8138977\nSeychelles,SYC,1968,16074027.3495878\nSeychelles,SYC,1969,16452027.9927472\nSeychelles,SYC,1970,18432031.3616773\nSeychelles,SYC,1971,21965951.7214804\nSeychelles,SYC,1972,30645121.0127585\nSeychelles,SYC,1973,36896278.223337\nSeychelles,SYC,1974,43134498.6932177\nSeychelles,SYC,1975,47803145.9560303\nSeychelles,SYC,1976,49278979.547035\nSeychelles,SYC,1977,64526398.6582547\nSeychelles,SYC,1978,85552369.9145942\nSeychelles,SYC,1979,127261099.24396\nSeychelles,SYC,1980,147357222.779802\nSeychelles,SYC,1981,154902869.02139\nSeychelles,SYC,1982,147912069.766502\nSeychelles,SYC,1983,146712850.50997\nSeychelles,SYC,1984,151313241.983564\nSeychelles,SYC,1985,168887539.130029\nSeychelles,SYC,1986,207850623.638216\nSeychelles,SYC,1987,249267039.781191\nSeychelles,SYC,1988,283828769.031683\nSeychelles,SYC,1989,304832867.395046\nSeychelles,SYC,1990,368584758.942457\nSeychelles,SYC,1991,374359556.084926\nSeychelles,SYC,1992,433667193.814795\nSeychelles,SYC,1993,473916819.453826\nSeychelles,SYC,1994,486451204.557142\nSeychelles,SYC,1995,508221508.221508\nSeychelles,SYC,1996,503068472.20266\nSeychelles,SYC,1997,562958836.519905\nSeychelles,SYC,1998,608369282.225727\nSeychelles,SYC,1999,622985493.682733\nSeychelles,SYC,2000,614879764.780006\nSeychelles,SYC,2001,622262057.191635\nSeychelles,SYC,2002,697518248.175182\nSeychelles,SYC,2003,705704816.042365\nSeychelles,SYC,2004,839319927.272727\nSeychelles,SYC,2005,919103254.545455\nSeychelles,SYC,2006,1016418229.25159\nSeychelles,SYC,2007,1033561654.0568\nSeychelles,SYC,2008,967199593.960157\nSeychelles,SYC,2009,847397850.094417\nSeychelles,SYC,2010,969936525.298729\nSeychelles,SYC,2011,1065826669.89742\nSeychelles,SYC,2012,1134267367.19206\nSeychelles,SYC,2013,1411061260.70839\nSeychelles,SYC,2014,1422530791.5588\nSeychelles,SYC,2015,1437722206.38754\nSeychelles,SYC,2016,1427323889.0961\nSierra Leone,SLE,1960,322009471.57364\nSierra Leone,SLE,1961,327834680.563822\nSierra Leone,SLE,1962,342721579.824661\nSierra Leone,SLE,1963,348546952.141512\nSierra Leone,SLE,1964,371848114.755577\nSierra Leone,SLE,1965,359379856.248057\nSierra Leone,SLE,1966,375479849.80806\nSierra Leone,SLE,1967,348795303.000385\nSierra Leone,SLE,1968,329860091.944037\nSierra Leone,SLE,1969,408690163.476065\nSierra Leone,SLE,1970,434410373.76415\nSierra Leone,SLE,1971,419549425.077086\nSierra Leone,SLE,1972,465381089.98454\nSierra Leone,SLE,1973,575230234.387058\nSierra Leone,SLE,1974,648590642.939888\nSierra Leone,SLE,1975,679335901.117451\nSierra Leone,SLE,1976,594895672.333848\nSierra Leone,SLE,1977,691777758.395115\nSierra Leone,SLE,1978,960728338.93643\nSierra Leone,SLE,1979,1109374722.08294\nSierra Leone,SLE,1980,1100685844.92284\nSierra Leone,SLE,1981,1114830471.91787\nSierra Leone,SLE,1982,1295361885.92419\nSierra Leone,SLE,1983,995104305.347074\nSierra Leone,SLE,1984,1087471861.98928\nSierra Leone,SLE,1985,856890498.625834\nSierra Leone,SLE,1986,490181456.62441\nSierra Leone,SLE,1987,701307602.28443\nSierra Leone,SLE,1988,1055083945.37738\nSierra Leone,SLE,1989,932974411.917142\nSierra Leone,SLE,1990,649644826.800447\nSierra Leone,SLE,1991,779981458.921489\nSierra Leone,SLE,1992,679997997.597117\nSierra Leone,SLE,1993,768812334.801762\nSierra Leone,SLE,1994,911915970.683484\nSierra Leone,SLE,1995,870758739.40678\nSierra Leone,SLE,1996,941742152.709895\nSierra Leone,SLE,1997,850218033.622007\nSierra Leone,SLE,1998,672375927.347148\nSierra Leone,SLE,1999,669384768.87263\nSierra Leone,SLE,2000,635874002.198748\nSierra Leone,SLE,2001,1079478387.83576\nSierra Leone,SLE,2002,1239004287.75607\nSierra Leone,SLE,2003,1371442565.69701\nSierra Leone,SLE,2004,1431208677.30352\nSierra Leone,SLE,2005,1627854494.80246\nSierra Leone,SLE,2006,1885112201.85278\nSierra Leone,SLE,2007,2158496872.85796\nSierra Leone,SLE,2008,2505458705.03338\nSierra Leone,SLE,2009,2489985963.16808\nSierra Leone,SLE,2010,2616610911.07222\nSierra Leone,SLE,2011,2942546781.04548\nSierra Leone,SLE,2012,3801862611.36414\nSierra Leone,SLE,2013,4920343194.99339\nSierra Leone,SLE,2014,5015180976.63457\nSierra Leone,SLE,2015,4251869869.50755\nSierra Leone,SLE,2016,3736588553.56394\nSingapore,SGP,1960,704462302.365086\nSingapore,SGP,1961,764308114.464916\nSingapore,SGP,1962,825885273.748857\nSingapore,SGP,1963,917222004.442702\nSingapore,SGP,1964,893734483.209199\nSingapore,SGP,1965,974193126.878348\nSingapore,SGP,1966,1095910100.61414\nSingapore,SGP,1967,1237423232.7192\nSingapore,SGP,1968,1425029400.2352\nSingapore,SGP,1969,1659055272.44218\nSingapore,SGP,1970,1919508689.40285\nSingapore,SGP,1971,2262544100.3528\nSingapore,SGP,1972,2719900350.73917\nSingapore,SGP,1973,3693760000\nSingapore,SGP,1974,5216773825.99496\nSingapore,SGP,1975,5633386679.7981\nSingapore,SGP,1976,6326445409.69089\nSingapore,SGP,1977,6617532782.90432\nSingapore,SGP,1978,7515823563.17127\nSingapore,SGP,1979,9294635004.39754\nSingapore,SGP,1980,11893405683.8039\nSingapore,SGP,1981,14171819540.4446\nSingapore,SGP,1982,16078856439.627\nSingapore,SGP,1983,17775280373.8318\nSingapore,SGP,1984,19735920492.1912\nSingapore,SGP,1985,19138296376.1661\nSingapore,SGP,1986,18569292304.8952\nSingapore,SGP,1987,20897630201.1573\nSingapore,SGP,1988,25337226970.5603\nSingapore,SGP,1989,30423573842.1785\nSingapore,SGP,1990,36152027893.1446\nSingapore,SGP,1991,45474442836.4689\nSingapore,SGP,1992,52156414978.5144\nSingapore,SGP,1993,60644572348.0629\nSingapore,SGP,1994,73777792326.8299\nSingapore,SGP,1995,87890009877.24\nSingapore,SGP,1996,96403758865.2482\nSingapore,SGP,1997,100163995150.862\nSingapore,SGP,1998,85707636233.2696\nSingapore,SGP,1999,86283126843.6578\nSingapore,SGP,2000,95833932714.6172\nSingapore,SGP,2001,89286208628.6767\nSingapore,SGP,2002,91941192896.2359\nSingapore,SGP,2003,97001377568.5914\nSingapore,SGP,2004,114188557567.152\nSingapore,SGP,2005,127417688055.756\nSingapore,SGP,2006,147797218201.271\nSingapore,SGP,2007,179981288567.447\nSingapore,SGP,2008,192225881687.752\nSingapore,SGP,2009,192408387762.118\nSingapore,SGP,2010,236421782178.218\nSingapore,SGP,2011,275599459373.509\nSingapore,SGP,2012,289162118908.538\nSingapore,SGP,2013,302510668904.339\nSingapore,SGP,2014,308142766948.149\nSingapore,SGP,2015,296840704102.415\nSingapore,SGP,2016,296975678610.206\nSlovak Republic,SVK,1990,12694544692.7374\nSlovak Republic,SVK,1991,14213045493.8806\nSlovak Republic,SVK,1992,15431288006.2104\nSlovak Republic,SVK,1993,16452201100.9604\nSlovak Republic,SVK,1994,20079363625.5784\nSlovak Republic,SVK,1995,25733043137.2549\nSlovak Republic,SVK,1996,27821913814.9556\nSlovak Republic,SVK,1997,27660149541.1805\nSlovak Republic,SVK,1998,29828899205.7277\nSlovak Republic,SVK,1999,30415095887.492\nSlovak Republic,SVK,2000,29114875621.8905\nSlovak Republic,SVK,2001,30703017449.6644\nSlovak Republic,SVK,2002,35083608130.9994\nSlovak Republic,SVK,2003,46731767494.3567\nSlovak Republic,SVK,2004,57240535137.8197\nSlovak Republic,SVK,2005,62697540106.9519\nSlovak Republic,SVK,2006,70596729394.0534\nSlovak Republic,SVK,2007,86304245825.349\nSlovak Republic,SVK,2008,100324627215.468\nSlovak Republic,SVK,2009,88945625173.6593\nSlovak Republic,SVK,2010,89501012915.7314\nSlovak Republic,SVK,2011,98181259740.0919\nSlovak Republic,SVK,2012,93413992955.8972\nSlovak Republic,SVK,2013,98478349315.3252\nSlovak Republic,SVK,2014,100948236941.182\nSlovak Republic,SVK,2015,87501423882.4686\nSlovak Republic,SVK,2016,89768598023.3903\nSlovenia,SVN,1995,21273055398.3017\nSlovenia,SVN,1996,21480023016.9972\nSlovenia,SVN,1997,20749140606.2425\nSlovenia,SVN,1998,22125435372.187\nSlovenia,SVN,1999,22689994990.1121\nSlovenia,SVN,2000,20342201356.0052\nSlovenia,SVN,2001,20875387068.1145\nSlovenia,SVN,2002,23563576758.1047\nSlovenia,SVN,2003,29697448108.2957\nSlovenia,SVN,2004,34470227453.9113\nSlovenia,SVN,2005,36346974008.2079\nSlovenia,SVN,2006,39587732028.6037\nSlovenia,SVN,2007,48114688201.4782\nSlovenia,SVN,2008,55589849128.4605\nSlovenia,SVN,2009,50244793831.6199\nSlovenia,SVN,2010,48013606745.4803\nSlovenia,SVN,2011,51290792018.1074\nSlovenia,SVN,2012,46352802765.5763\nSlovenia,SVN,2013,48116256926.0807\nSlovenia,SVN,2014,49904928335.3069\nSlovenia,SVN,2015,43072415017.4321\nSlovenia,SVN,2016,44708598648.8562\nSolomon Islands,SLB,1967,25203524.0325638\nSolomon Islands,SLB,1968,28084252.7582748\nSolomon Islands,SLB,1969,28606411.398041\nSolomon Islands,SLB,1971,50056882.8213879\nSolomon Islands,SLB,1972,40606712.050639\nSolomon Islands,SLB,1973,55272108.8435374\nSolomon Islands,SLB,1974,84539332.282562\nSolomon Islands,SLB,1975,74617096.4785967\nSolomon Islands,SLB,1976,83099107.9066357\nSolomon Islands,SLB,1977,93147039.2548237\nSolomon Islands,SLB,1978,111022089.96223\nSolomon Islands,SLB,1979,151270207.852194\nSolomon Islands,SLB,1980,168715353.097132\nSolomon Islands,SLB,1981,187313261.319237\nSolomon Islands,SLB,1982,188446092.06055\nSolomon Islands,SLB,1983,180219397.527425\nSolomon Islands,SLB,1984,252806783.386983\nSolomon Islands,SLB,1985,232306861.156132\nSolomon Islands,SLB,1986,210737869.652598\nSolomon Islands,SLB,1987,238606299.605651\nSolomon Islands,SLB,1988,310684273.709484\nSolomon Islands,SLB,1989,332286760.858189\nSolomon Islands,SLB,1990,302515026.890225\nSolomon Islands,SLB,1991,320355090.61441\nSolomon Islands,SLB,1992,378778047.197842\nSolomon Islands,SLB,1993,410923236.189102\nSolomon Islands,SLB,1994,464756638.512487\nSolomon Islands,SLB,1995,519334096.714525\nSolomon Islands,SLB,1996,565163750.56079\nSolomon Islands,SLB,1997,567919502.811483\nSolomon Islands,SLB,1998,471177008.057148\nSolomon Islands,SLB,1999,482214092.308964\nSolomon Islands,SLB,2000,435103853.485036\nSolomon Islands,SLB,2001,400463452.065176\nSolomon Islands,SLB,2002,341661643.551446\nSolomon Islands,SLB,2003,332738245.913215\nSolomon Islands,SLB,2004,375111894.932329\nSolomon Islands,SLB,2005,413909879.281265\nSolomon Islands,SLB,2006,456705433.996978\nSolomon Islands,SLB,2007,516074228.959749\nSolomon Islands,SLB,2008,608293860.271816\nSolomon Islands,SLB,2009,597765363.128492\nSolomon Islands,SLB,2010,671585343.170686\nSolomon Islands,SLB,2011,886498370.696086\nSolomon Islands,SLB,2012,1025125081.57494\nSolomon Islands,SLB,2013,1059695156.18795\nSolomon Islands,SLB,2014,1156563122.85602\nSolomon Islands,SLB,2015,1129164718.81436\nSolomon Islands,SLB,2016,1202125000\nSomalia,SOM,2013,5352000000\nSomalia,SOM,2014,5647000000\nSomalia,SOM,2015,5925000000\nSomalia,SOM,2016,6217000000\nSouth Africa,ZAF,1960,7575248495.0301\nSouth Africa,ZAF,1961,7972840543.18914\nSouth Africa,ZAF,1962,8497830043.39913\nSouth Africa,ZAF,1963,9423211535.76928\nSouth Africa,ZAF,1964,10373792524.1495\nSouth Africa,ZAF,1965,11334173316.5337\nSouth Africa,ZAF,1966,12354752904.9419\nSouth Africa,ZAF,1967,13777124457.5108\nSouth Africa,ZAF,1968,14894302113.9577\nSouth Africa,ZAF,1969,16780064398.712\nSouth Africa,ZAF,1970,18418031639.3672\nSouth Africa,ZAF,1971,20334172259.5078\nSouth Africa,ZAF,1972,21358137114.6091\nSouth Africa,ZAF,1973,29293948126.8012\nSouth Africa,ZAF,1974,36806475349.5217\nSouth Africa,ZAF,1975,38114942528.7356\nSouth Africa,ZAF,1976,36601885924.563\nSouth Africa,ZAF,1977,40649724011.0396\nSouth Africa,ZAF,1978,46737580496.7801\nSouth Africa,ZAF,1979,57647268408.5511\nSouth Africa,ZAF,1980,82984078068.8238\nSouth Africa,ZAF,1981,89629496832.7955\nSouth Africa,ZAF,1982,82696902010.2943\nSouth Africa,ZAF,1983,88786580362.8407\nSouth Africa,ZAF,1984,87880468268.6383\nSouth Africa,ZAF,1985,69208451592.5576\nSouth Africa,ZAF,1986,82107924006.1732\nSouth Africa,ZAF,1987,107414974090.178\nSouth Africa,ZAF,1988,118331510445.149\nSouth Africa,ZAF,1989,128902675070.723\nSouth Africa,ZAF,1990,115553279480.54\nSouth Africa,ZAF,1991,123943432441.241\nSouth Africa,ZAF,1992,134545231416.55\nSouth Africa,ZAF,1993,134309759157.817\nSouth Africa,ZAF,1994,139752450152.078\nSouth Africa,ZAF,1995,155460285076.232\nSouth Africa,ZAF,1996,147607982694.857\nSouth Africa,ZAF,1997,152586154513.889\nSouth Africa,ZAF,1998,137774361015.14\nSouth Africa,ZAF,1999,136631966609.379\nSouth Africa,ZAF,2000,136361854808.496\nSouth Africa,ZAF,2001,121600818309.679\nSouth Africa,ZAF,2002,115748110112.68\nSouth Africa,ZAF,2003,175256916996.047\nSouth Africa,ZAF,2004,228937347865.858\nSouth Africa,ZAF,2005,257671413750.825\nSouth Africa,ZAF,2006,271811088781.18\nSouth Africa,ZAF,2007,299033511000.227\nSouth Africa,ZAF,2008,287099991516.9\nSouth Africa,ZAF,2009,297216730668.942\nSouth Africa,ZAF,2010,375298134440.469\nSouth Africa,ZAF,2011,416878162440.887\nSouth Africa,ZAF,2012,396332598448.215\nSouth Africa,ZAF,2013,366810014300.222\nSouth Africa,ZAF,2014,351119102947.143\nSouth Africa,ZAF,2015,317610719411.483\nSouth Africa,ZAF,2016,295456189492.005\nSouth Sudan,SSD,2008,15550136278.8696\nSouth Sudan,SSD,2009,12231362022.6859\nSouth Sudan,SSD,2010,15727363443.0995\nSouth Sudan,SSD,2011,17826697892.2717\nSouth Sudan,SSD,2012,10368813559.322\nSouth Sudan,SSD,2013,13257635694.9153\nSouth Sudan,SSD,2014,13282084033.8983\nSouth Sudan,SSD,2015,9015221096.24474\nSpain,ESP,1960,12072126075.397\nSpain,ESP,1961,13834300571.4849\nSpain,ESP,1962,16138545209.246\nSpain,ESP,1963,19074913947.7196\nSpain,ESP,1964,21343844643.7341\nSpain,ESP,1965,24756958694.9238\nSpain,ESP,1966,28721062242.1634\nSpain,ESP,1967,31647119228.1982\nSpain,ESP,1968,31475548481.4095\nSpain,ESP,1969,36038711599.541\nSpain,ESP,1970,40881655098.6451\nSpain,ESP,1971,46492797365.2695\nSpain,ESP,1972,58971806626.9739\nSpain,ESP,1973,78425934894.3461\nSpain,ESP,1974,97009800115.3735\nSpain,ESP,1975,114465300289.855\nSpain,ESP,1976,118185307386.222\nSpain,ESP,1977,132089531434.83\nSpain,ESP,1978,160163483072.917\nSpain,ESP,1979,214019077342.588\nSpain,ESP,1980,232134606637.271\nSpain,ESP,1981,202257045774.013\nSpain,ESP,1982,195464408602.151\nSpain,ESP,1983,170486866357.309\nSpain,ESP,1984,171635463361.623\nSpain,ESP,1985,180302412230.92\nSpain,ESP,1986,250638463466.793\nSpain,ESP,1987,317882187036.787\nSpain,ESP,1988,375138723325.239\nSpain,ESP,1989,413630538018.271\nSpain,ESP,1990,535101248775.71\nSpain,ESP,1991,575598537069.656\nSpain,ESP,1992,629202392003.901\nSpain,ESP,1993,523649481762.322\nSpain,ESP,1994,529121577319.588\nSpain,ESP,1995,612939685081.398\nSpain,ESP,1996,640998292394.588\nSpain,ESP,1997,588692045454.545\nSpain,ESP,1998,617041986858.225\nSpain,ESP,1999,633194118900.49\nSpain,ESP,2000,595402616546.895\nSpain,ESP,2001,625975838926.175\nSpain,ESP,2002,705145868624.13\nSpain,ESP,2003,906853273137.698\nSpain,ESP,2004,1069555500372.49\nSpain,ESP,2005,1157276458151.97\nSpain,ESP,2006,1264551499184.54\nSpain,ESP,2007,1479341637010.68\nSpain,ESP,2008,1635015380108.39\nSpain,ESP,2009,1499099749930.54\nSpain,ESP,2010,1431616749640.29\nSpain,ESP,2011,1488067258325.2\nSpain,ESP,2012,1336018949805.58\nSpain,ESP,2013,1361854206549.39\nSpain,ESP,2014,1376910811040.88\nSpain,ESP,2015,1197789902774.43\nSpain,ESP,2016,1237255019653.86\nSri Lanka,LKA,1960,1409873949.57983\nSri Lanka,LKA,1961,1444327731.09244\nSri Lanka,LKA,1962,1434156378.60082\nSri Lanka,LKA,1963,1240672268.90756\nSri Lanka,LKA,1964,1309747899.15966\nSri Lanka,LKA,1965,1698319327.73109\nSri Lanka,LKA,1966,1751470588.23529\nSri Lanka,LKA,1967,1859465020.57613\nSri Lanka,LKA,1968,1801344537.81513\nSri Lanka,LKA,1969,1965546218.48739\nSri Lanka,LKA,1970,2296470588.23529\nSri Lanka,LKA,1971,2369308600.33727\nSri Lanka,LKA,1972,2553936348.40871\nSri Lanka,LKA,1973,2875625000\nSri Lanka,LKA,1974,3574586466.16541\nSri Lanka,LKA,1975,3791298145.50642\nSri Lanka,LKA,1976,3591319857.31272\nSri Lanka,LKA,1977,4104509582.86359\nSri Lanka,LKA,1978,2733183856.50224\nSri Lanka,LKA,1979,3364611432.24149\nSri Lanka,LKA,1980,4024621899.57653\nSri Lanka,LKA,1981,4415844155.84416\nSri Lanka,LKA,1982,4768765016.81884\nSri Lanka,LKA,1983,5167913302.16745\nSri Lanka,LKA,1984,6043474842.76729\nSri Lanka,LKA,1985,5978460972.01767\nSri Lanka,LKA,1986,6405210563.88294\nSri Lanka,LKA,1987,6682167119.56522\nSri Lanka,LKA,1988,6978371581.26375\nSri Lanka,LKA,1989,6987267683.77254\nSri Lanka,LKA,1990,8032551173.24014\nSri Lanka,LKA,1991,9000362581.58086\nSri Lanka,LKA,1992,9703011635.86585\nSri Lanka,LKA,1993,10338679635.7616\nSri Lanka,LKA,1994,11717604208.8223\nSri Lanka,LKA,1995,13029697560.9756\nSri Lanka,LKA,1996,13897738375.2488\nSri Lanka,LKA,1997,15091913883.7091\nSri Lanka,LKA,1998,15794972847.1683\nSri Lanka,LKA,1999,15656327859.5696\nSri Lanka,LKA,2000,16330814179.9766\nSri Lanka,LKA,2001,15746229581.5619\nSri Lanka,LKA,2002,16536535647.0834\nSri Lanka,LKA,2003,18881765437.2151\nSri Lanka,LKA,2004,20662525941.2986\nSri Lanka,LKA,2005,24406252456.5141\nSri Lanka,LKA,2006,28279814924.5918\nSri Lanka,LKA,2007,32350248410.8216\nSri Lanka,LKA,2008,40713812309.7316\nSri Lanka,LKA,2009,42066217871.5349\nSri Lanka,LKA,2010,56725745039.336\nSri Lanka,LKA,2011,65292741296.5382\nSri Lanka,LKA,2012,68434399083.41\nSri Lanka,LKA,2013,74317806754.5267\nSri Lanka,LKA,2014,79356456990.2891\nSri Lanka,LKA,2015,80611989527.2158\nSri Lanka,LKA,2016,81321876307.2556\nSt. Kitts and Nevis,KNA,1960,12366563.6119699\nSt. Kitts and Nevis,KNA,1961,12483229.3064224\nSt. Kitts and Nevis,KNA,1962,12541562.1536487\nSt. Kitts and Nevis,KNA,1963,12833226.3897801\nSt. Kitts and Nevis,KNA,1964,13416554.8620428\nSt. Kitts and Nevis,KNA,1965,13593932.3220537\nSt. Kitts and Nevis,KNA,1966,14469078.1796966\nSt. Kitts and Nevis,KNA,1967,16742338.2519864\nSt. Kitts and Nevis,KNA,1968,14600000\nSt. Kitts and Nevis,KNA,1969,15850000\nSt. Kitts and Nevis,KNA,1970,16300000\nSt. Kitts and Nevis,KNA,1971,19624746.4503043\nSt. Kitts and Nevis,KNA,1972,22944849.1155047\nSt. Kitts and Nevis,KNA,1973,24196018.3767228\nSt. Kitts and Nevis,KNA,1974,31514856.3078422\nSt. Kitts and Nevis,KNA,1975,33364055.2995392\nSt. Kitts and Nevis,KNA,1976,30095602.2944551\nSt. Kitts and Nevis,KNA,1977,44680000\nSt. Kitts and Nevis,KNA,1978,49095407.4074074\nSt. Kitts and Nevis,KNA,1979,58296666.6666667\nSt. Kitts and Nevis,KNA,1980,67715444.4444444\nSt. Kitts and Nevis,KNA,1981,79026037.037037\nSt. Kitts and Nevis,KNA,1982,84381407.4074074\nSt. Kitts and Nevis,KNA,1983,85100481.4814815\nSt. Kitts and Nevis,KNA,1984,95898444.4444444\nSt. Kitts and Nevis,KNA,1985,106057000\nSt. Kitts and Nevis,KNA,1986,125272259.259259\nSt. Kitts and Nevis,KNA,1987,140705629.62963\nSt. Kitts and Nevis,KNA,1988,165745740.740741\nSt. Kitts and Nevis,KNA,1989,185094777.777778\nSt. Kitts and Nevis,KNA,1990,208740444.444444\nSt. Kitts and Nevis,KNA,1991,209880962.962963\nSt. Kitts and Nevis,KNA,1992,229434518.518519\nSt. Kitts and Nevis,KNA,1993,249676000\nSt. Kitts and Nevis,KNA,1994,277567259.259259\nSt. Kitts and Nevis,KNA,1995,299699666.666667\nSt. Kitts and Nevis,KNA,1996,318742962.962963\nSt. Kitts and Nevis,KNA,1997,357237682.126571\nSt. Kitts and Nevis,KNA,1998,364975456.93842\nSt. Kitts and Nevis,KNA,1999,389984428.873318\nSt. Kitts and Nevis,KNA,2000,420515107.700293\nSt. Kitts and Nevis,KNA,2001,461078078.078078\nSt. Kitts and Nevis,KNA,2002,483120194.268342\nSt. Kitts and Nevis,KNA,2003,465850739.628517\nSt. Kitts and Nevis,KNA,2004,502561629.62963\nSt. Kitts and Nevis,KNA,2005,543167666.666667\nSt. Kitts and Nevis,KNA,2006,636218037.037037\nSt. Kitts and Nevis,KNA,2007,674008481.481481\nSt. Kitts and Nevis,KNA,2008,738942555.555555\nSt. Kitts and Nevis,KNA,2009,723209111.111111\nSt. Kitts and Nevis,KNA,2010,705015370.37037\nSt. Kitts and Nevis,KNA,2011,753225962.962963\nSt. Kitts and Nevis,KNA,2012,734462666.666667\nSt. Kitts and Nevis,KNA,2013,788163888.888889\nSt. Kitts and Nevis,KNA,2014,847778185.185185\nSt. Kitts and Nevis,KNA,2015,878281507.766667\nSt. Kitts and Nevis,KNA,2016,909854619.518519\nSt. Lucia,LCA,1977,87350296.2962963\nSt. Lucia,LCA,1978,102094111.111111\nSt. Lucia,LCA,1979,123935518.518519\nSt. Lucia,LCA,1980,146341370.37037\nSt. Lucia,LCA,1981,167970111.111111\nSt. Lucia,LCA,1982,182754000\nSt. Lucia,LCA,1983,197228777.777778\nSt. Lucia,LCA,1984,217663037.037037\nSt. Lucia,LCA,1985,241273000\nSt. Lucia,LCA,1986,289689703.703704\nSt. Lucia,LCA,1987,319999000\nSt. Lucia,LCA,1988,366541074.074074\nSt. Lucia,LCA,1989,415518111.111111\nSt. Lucia,LCA,1990,483962444.444444\nSt. Lucia,LCA,1991,513753814.814815\nSt. Lucia,LCA,1992,566894740.740741\nSt. Lucia,LCA,1993,574870407.407407\nSt. Lucia,LCA,1994,600005555.555556\nSt. Lucia,LCA,1995,640449518.518518\nSt. Lucia,LCA,1996,662196185.185185\nSt. Lucia,LCA,1997,676949592.592593\nSt. Lucia,LCA,1998,737554888.888889\nSt. Lucia,LCA,1999,775934814.814815\nSt. Lucia,LCA,2000,784159222.222222\nSt. Lucia,LCA,2001,743808074.074074\nSt. Lucia,LCA,2002,748346592.592593\nSt. Lucia,LCA,2003,823837148.148148\nSt. Lucia,LCA,2004,893107222.222222\nSt. Lucia,LCA,2005,951207370.37037\nSt. Lucia,LCA,2006,1134193629.62963\nSt. Lucia,LCA,2007,1277494148.14815\nSt. Lucia,LCA,2008,1282215407.40741\nSt. Lucia,LCA,2009,1262973407.40741\nSt. Lucia,LCA,2010,1381968259.25926\nSt. Lucia,LCA,2011,1437684814.81481\nSt. Lucia,LCA,2012,1436803333.33333\nSt. Lucia,LCA,2013,1489928888.88889\nSt. Lucia,LCA,2014,1551921037.03704\nSt. Lucia,LCA,2015,1649142629.62963\nSt. Lucia,LCA,2016,1667078703.7037\nSt. Vincent and the Grenadines,VCT,1960,13066557.7786852\nSt. Vincent and the Grenadines,VCT,1961,13999883.3343055\nSt. Vincent and the Grenadines,VCT,1962,14524878.959342\nSt. Vincent and the Grenadines,VCT,1963,13708219.0981742\nSt. Vincent and the Grenadines,VCT,1964,14758210.3482471\nSt. Vincent and the Grenadines,VCT,1965,15108207.4316047\nSt. Vincent and the Grenadines,VCT,1966,16099865.8344514\nSt. Vincent and the Grenadines,VCT,1967,15835177.9329133\nSt. Vincent and the Grenadines,VCT,1968,15350000\nSt. Vincent and the Grenadines,VCT,1969,16650000\nSt. Vincent and the Grenadines,VCT,1970,18450000\nSt. Vincent and the Grenadines,VCT,1971,20051648.1847182\nSt. Vincent and the Grenadines,VCT,1972,27585488.9918284\nSt. Vincent and the Grenadines,VCT,1973,30165373.6218865\nSt. Vincent and the Grenadines,VCT,1974,32924215.8581726\nSt. Vincent and the Grenadines,VCT,1975,33237164.715642\nSt. Vincent and the Grenadines,VCT,1976,32792480.9729606\nSt. Vincent and the Grenadines,VCT,1977,49353148.1481481\nSt. Vincent and the Grenadines,VCT,1978,60844777.7777778\nSt. Vincent and the Grenadines,VCT,1979,71096370.3703704\nSt. Vincent and the Grenadines,VCT,1980,82340333.3333333\nSt. Vincent and the Grenadines,VCT,1981,102086555.555556\nSt. Vincent and the Grenadines,VCT,1982,113759185.185185\nSt. Vincent and the Grenadines,VCT,1983,122255333.333333\nSt. Vincent and the Grenadines,VCT,1984,135025000\nSt. Vincent and the Grenadines,VCT,1985,145641703.703704\nSt. Vincent and the Grenadines,VCT,1986,160846666.666667\nSt. Vincent and the Grenadines,VCT,1987,175580629.62963\nSt. Vincent and the Grenadines,VCT,1988,200726703.703704\nSt. Vincent and the Grenadines,VCT,1989,214745000\nSt. Vincent and the Grenadines,VCT,1990,240365259.259259\nSt. Vincent and the Grenadines,VCT,1991,254829629.62963\nSt. Vincent and the Grenadines,VCT,1992,277954111.111111\nSt. Vincent and the Grenadines,VCT,1993,286307814.814815\nSt. Vincent and the Grenadines,VCT,1994,289438481.481481\nSt. Vincent and the Grenadines,VCT,1995,316008481.481481\nSt. Vincent and the Grenadines,VCT,1996,331489703.703704\nSt. Vincent and the Grenadines,VCT,1997,347770000\nSt. Vincent and the Grenadines,VCT,1998,373619851.851852\nSt. Vincent and the Grenadines,VCT,1999,390719148.148148\nSt. Vincent and the Grenadines,VCT,2000,396270000\nSt. Vincent and the Grenadines,VCT,2001,430040370.37037\nSt. Vincent and the Grenadines,VCT,2002,461883444.444444\nSt. Vincent and the Grenadines,VCT,2003,481806296.296296\nSt. Vincent and the Grenadines,VCT,2004,521975111.111111\nSt. Vincent and the Grenadines,VCT,2005,550728666.666667\nSt. Vincent and the Grenadines,VCT,2006,610930037.037037\nSt. Vincent and the Grenadines,VCT,2007,651833333.333333\nSt. Vincent and the Grenadines,VCT,2008,695428851.851852\nSt. Vincent and the Grenadines,VCT,2009,674922481.481482\nSt. Vincent and the Grenadines,VCT,2010,681225962.962963\nSt. Vincent and the Grenadines,VCT,2011,676129407.407407\nSt. Vincent and the Grenadines,VCT,2012,692933740.740741\nSt. Vincent and the Grenadines,VCT,2013,721207148.148148\nSt. Vincent and the Grenadines,VCT,2014,727230734.814815\nSt. Vincent and the Grenadines,VCT,2015,755205755.925926\nSt. Vincent and the Grenadines,VCT,2016,768224226.666667\nSudan,SDN,1960,1307333333.33333\nSudan,SDN,1961,1419333333.33333\nSudan,SDN,1962,1541666666.66667\nSudan,SDN,1963,1568333333.33333\nSudan,SDN,1964,1611333333.33333\nSudan,SDN,1965,1679333333.33333\nSudan,SDN,1966,1723000000\nSudan,SDN,1967,1865666666.66667\nSudan,SDN,1968,1947333333.33333\nSudan,SDN,1969,2144333333.33333\nSudan,SDN,1970,2437666666.66667\nSudan,SDN,1971,2656000000\nSudan,SDN,1972,2882000000\nSudan,SDN,1973,3571666666.66667\nSudan,SDN,1974,4595000000\nSudan,SDN,1975,5598000000\nSudan,SDN,1976,6979333333.33333\nSudan,SDN,1977,8704000000\nSudan,SDN,1978,7670500000\nSudan,SDN,1979,9032250000\nSudan,SDN,1980,7459833333.33333\nSudan,SDN,1981,10016500000\nSudan,SDN,1982,9240000000\nSudan,SDN,1983,8230153846.15385\nSudan,SDN,1984,9701357142.85714\nSudan,SDN,1985,12403733333.3333\nSudan,SDN,1986,15769062500\nSudan,SDN,1987,20155555555.5556\nSudan,SDN,1988,15399166666.6667\nSudan,SDN,1989,15291507936.5079\nSudan,SDN,1990,12408647540.9836\nSudan,SDN,1991,11379222222.2222\nSudan,SDN,1992,7034219712.52567\nSudan,SDN,1993,8881785938.48085\nSudan,SDN,1994,12794192334.2541\nSudan,SDN,1995,13829744878.6366\nSudan,SDN,1996,9018243044.45155\nSudan,SDN,1997,11681494637.3041\nSudan,SDN,1998,11250327988.0478\nSudan,SDN,1999,10682045258.3647\nSudan,SDN,2000,12257418326.0734\nSudan,SDN,2001,13182979783.533\nSudan,SDN,2002,14803189092.7044\nSudan,SDN,2003,17646503525.1743\nSudan,SDN,2004,21457470202.7839\nSudan,SDN,2005,26524538565.7403\nSudan,SDN,2006,35822408611.5588\nSudan,SDN,2007,45898948564.0593\nSudan,SDN,2008,54526580231.5568\nSudan,SDN,2009,53150209167.934\nSudan,SDN,2010,65634109236.7736\nSudan,SDN,2011,67327289319.733\nSudan,SDN,2012,68125631150.2939\nSudan,SDN,2013,72065940085.772\nSudan,SDN,2014,82151588418.8325\nSudan,SDN,2015,97156119150\nSudan,SDN,2016,95584380032.2061\nSuriname,SUR,1960,93850000\nSuriname,SUR,1961,98400000\nSuriname,SUR,1962,103500000\nSuriname,SUR,1963,110000000\nSuriname,SUR,1964,120850000\nSuriname,SUR,1965,138650000\nSuriname,SUR,1966,171100000\nSuriname,SUR,1967,198450000\nSuriname,SUR,1968,220600000\nSuriname,SUR,1969,233450000\nSuriname,SUR,1970,247150000\nSuriname,SUR,1971,270650000\nSuriname,SUR,1972,287600000\nSuriname,SUR,1973,305300000\nSuriname,SUR,1974,368600000\nSuriname,SUR,1975,465000000\nSuriname,SUR,1976,505500000\nSuriname,SUR,1977,641000000\nSuriname,SUR,1978,735500000\nSuriname,SUR,1979,783000000\nSuriname,SUR,1980,794900000\nSuriname,SUR,1981,889050000\nSuriname,SUR,1982,915150000\nSuriname,SUR,1983,883600000\nSuriname,SUR,1984,864150000\nSuriname,SUR,1985,873250000\nSuriname,SUR,1986,891000000\nSuriname,SUR,1987,979850000\nSuriname,SUR,1988,1160900000\nSuriname,SUR,1989,542520000\nSuriname,SUR,1990,388300000\nSuriname,SUR,1991,448300000\nSuriname,SUR,1992,404600000\nSuriname,SUR,1993,428794117.647059\nSuriname,SUR,1994,605492537.313433\nSuriname,SUR,1995,693970588.235294\nSuriname,SUR,1996,860630922.693267\nSuriname,SUR,1997,929607500\nSuriname,SUR,1998,945000000\nSuriname,SUR,1999,885444186.046512\nSuriname,SUR,2000,892164393.939394\nSuriname,SUR,2001,763465550.458716\nSuriname,SUR,2002,1078402127.65957\nSuriname,SUR,2003,1271196078.43137\nSuriname,SUR,2004,1484092538.40527\nSuriname,SUR,2005,1793754804.70037\nSuriname,SUR,2006,2626380435.17877\nSuriname,SUR,2007,2936612021.85792\nSuriname,SUR,2008,3532969034.60838\nSuriname,SUR,2009,3875409836.06557\nSuriname,SUR,2010,4368398047.64333\nSuriname,SUR,2011,4422276621.78703\nSuriname,SUR,2012,4980000000\nSuriname,SUR,2013,5145757575.75758\nSuriname,SUR,2014,5240606060.60606\nSuriname,SUR,2015,4826587057.68724\nSuriname,SUR,2016,3278425328.32418\nSwaziland,SWZ,1960,35076158.4768305\nSwaziland,SWZ,1961,43025199.4960101\nSwaziland,SWZ,1962,45927061.4587708\nSwaziland,SWZ,1963,54128377.4324513\nSwaziland,SWZ,1964,64979280.4143917\nSwaziland,SWZ,1965,70278594.4281114\nSwaziland,SWZ,1966,76858462.8307434\nSwaziland,SWZ,1967,74758504.8299034\nSwaziland,SWZ,1968,79798404.0319194\nSwaziland,SWZ,1969,105417891.642167\nSwaziland,SWZ,1970,112137757.244855\nSwaziland,SWZ,1971,136465324.384787\nSwaziland,SWZ,1972,146741251.46351\nSwaziland,SWZ,1973,221902017.291066\nSwaziland,SWZ,1974,264311994.113319\nSwaziland,SWZ,1975,288302907.369844\nSwaziland,SWZ,1976,272539098.436063\nSwaziland,SWZ,1977,304047838.086477\nSwaziland,SWZ,1978,340616375.344986\nSwaziland,SWZ,1979,412093133.760988\nSwaziland,SWZ,1980,542000513.610683\nSwaziland,SWZ,1981,571542674.577818\nSwaziland,SWZ,1982,537575980.843618\nSwaziland,SWZ,1983,555336145.767884\nSwaziland,SWZ,1984,494475699.857656\nSwaziland,SWZ,1985,361014890.45841\nSwaziland,SWZ,1986,449146608.315098\nSwaziland,SWZ,1987,584135559.921414\nSwaziland,SWZ,1988,692016714.317132\nSwaziland,SWZ,1989,696915430.663057\nSwaziland,SWZ,1990,1114703088.1614\nSwaziland,SWZ,1991,1156141998.33412\nSwaziland,SWZ,1992,1284766234.2216\nSwaziland,SWZ,1993,1357206995.74624\nSwaziland,SWZ,1994,1419293454.99606\nSwaziland,SWZ,1995,1698982437.76019\nSwaziland,SWZ,1996,1602760100.48147\nSwaziland,SWZ,1997,1716699913.19444\nSwaziland,SWZ,1998,1576904292.4588\nSwaziland,SWZ,1999,1547884442.26205\nSwaziland,SWZ,2000,1738100853.05052\nSwaziland,SWZ,2001,1542477308.89408\nSwaziland,SWZ,2002,1432228125.26682\nSwaziland,SWZ,2003,2197612701.09852\nSwaziland,SWZ,2004,2770082791.50412\nSwaziland,SWZ,2005,3178126491.90949\nSwaziland,SWZ,2006,3291353835.93\nSwaziland,SWZ,2007,3469363996.36642\nSwaziland,SWZ,2008,3294093485.20796\nSwaziland,SWZ,2009,3580417066.92472\nSwaziland,SWZ,2010,4438778424.30203\nSwaziland,SWZ,2011,4820499924.2539\nSwaziland,SWZ,2012,4823831656.51644\nSwaziland,SWZ,2013,4560713073.91948\nSwaziland,SWZ,2014,4377293816.28535\nSwaziland,SWZ,2015,4020275298.02726\nSwaziland,SWZ,2016,3720649374.57512\nSweden,SWE,1960,14842870293.4207\nSweden,SWE,1961,16147160122.7882\nSweden,SWE,1962,17511477311.4463\nSweden,SWE,1963,18954132365.5148\nSweden,SWE,1964,21137242560.8543\nSweden,SWE,1965,23260320646.2745\nSweden,SWE,1966,25302033132.3312\nSweden,SWE,1967,27463409201.8822\nSweden,SWE,1968,29143383490.5896\nSweden,SWE,1969,31649203885.888\nSweden,SWE,1970,37555366021.0315\nSweden,SWE,1971,40980345656.3725\nSweden,SWE,1972,48263914958.8443\nSweden,SWE,1973,58567384058.8006\nSweden,SWE,1974,65082581294.7696\nSweden,SWE,1975,81716751697.8951\nSweden,SWE,1976,88102107647.0993\nSweden,SWE,1977,93136775102.6419\nSweden,SWE,1978,102969762221.976\nSweden,SWE,1979,121646718574.328\nSweden,SWE,1980,140088635568.375\nSweden,SWE,1981,127858412114.39\nSweden,SWE,1982,112767844570.719\nSweden,SWE,1983,103533702638.547\nSweden,SWE,1984,107661673734.858\nSweden,SWE,1985,112514448261.835\nSweden,SWE,1986,148376104539.839\nSweden,SWE,1987,180429286795.786\nSweden,SWE,1988,204068257817.6\nSweden,SWE,1989,214875344909.957\nSweden,SWE,1990,258154283908.9\nSweden,SWE,1991,270362531376.602\nSweden,SWE,1992,280312318915.485\nSweden,SWE,1993,209950792712.696\nSweden,SWE,1994,226079963711.768\nSweden,SWE,1995,264051981551.316\nSweden,SWE,1996,288103936773.039\nSweden,SWE,1997,264477727278.681\nSweden,SWE,1998,266800462898.904\nSweden,SWE,1999,270847937645.236\nSweden,SWE,2000,259802012617.057\nSweden,SWE,2001,239917320966.977\nSweden,SWE,2002,263926220332.543\nSweden,SWE,2003,331108912605.271\nSweden,SWE,2004,381705425301.746\nSweden,SWE,2005,389042298376.845\nSweden,SWE,2006,420032121655.688\nSweden,SWE,2007,487816328342.309\nSweden,SWE,2008,513965650650.119\nSweden,SWE,2009,429657033107.737\nSweden,SWE,2010,488377689564.921\nSweden,SWE,2011,563109663291.177\nSweden,SWE,2012,543880647757.404\nSweden,SWE,2013,578742001487.571\nSweden,SWE,2014,573817719109.402\nSweden,SWE,2015,497918109302.399\nSweden,SWE,2016,514459972806.171\nSwitzerland,CHE,1960,9522746719.21614\nSwitzerland,CHE,1961,10712712465.0522\nSwitzerland,CHE,1962,11879982758.5619\nSwitzerland,CHE,1963,13063643795.7884\nSwitzerland,CHE,1964,14480556571.5476\nSwitzerland,CHE,1965,15346741669.7575\nSwitzerland,CHE,1966,16480058704.8531\nSwitzerland,CHE,1967,17740013179.26\nSwitzerland,CHE,1968,18942729779.1\nSwitzerland,CHE,1969,20524886616.4789\nSwitzerland,CHE,1980,119008334606.433\nSwitzerland,CHE,1981,108993981315.548\nSwitzerland,CHE,1982,111711490075.358\nSwitzerland,CHE,1983,111314328474.108\nSwitzerland,CHE,1984,106285277141.763\nSwitzerland,CHE,1985,107766112124.049\nSwitzerland,CHE,1986,154482372838.957\nSwitzerland,CHE,1987,193466104144.313\nSwitzerland,CHE,1988,209298156700.608\nSwitzerland,CHE,1989,202078703955.009\nSwitzerland,CHE,1990,258066552980.132\nSwitzerland,CHE,1991,261113787377.964\nSwitzerland,CHE,1992,271814366804.153\nSwitzerland,CHE,1993,264353008121.278\nSwitzerland,CHE,1994,292646657673.466\nSwitzerland,CHE,1995,342617007103.594\nSwitzerland,CHE,1996,330091688349.515\nSwitzerland,CHE,1997,286519135326.948\nSwitzerland,CHE,1998,295045152020.968\nSwitzerland,CHE,1999,289912492344.561\nSwitzerland,CHE,2000,272055499940.786\nSwitzerland,CHE,2001,278631271391.325\nSwitzerland,CHE,2002,301416810214.295\nSwitzerland,CHE,2003,352914820747.011\nSwitzerland,CHE,2004,394163688620.828\nSwitzerland,CHE,2005,408689353999.357\nSwitzerland,CHE,2006,430921192375.179\nSwitzerland,CHE,2007,479913034321.893\nSwitzerland,CHE,2008,554363487120.303\nSwitzerland,CHE,2009,541506500413.565\nSwitzerland,CHE,2010,583782977866.405\nSwitzerland,CHE,2011,699579638638.226\nSwitzerland,CHE,2012,668043614122.87\nSwitzerland,CHE,2013,688504173431.454\nSwitzerland,CHE,2014,709182559935.301\nSwitzerland,CHE,2015,679289166858.236\nSwitzerland,CHE,2016,668851296244.236\nSyrian Arab Republic,SYR,1960,857704431.686497\nSyrian Arab Republic,SYR,1961,945244992.211306\nSyrian Arab Republic,SYR,1962,1110565863.53737\nSyrian Arab Republic,SYR,1963,1200447429.35563\nSyrian Arab Republic,SYR,1964,1339494290.42432\nSyrian Arab Republic,SYR,1965,1472036550.70992\nSyrian Arab Republic,SYR,1966,1342287556.59602\nSyrian Arab Republic,SYR,1967,1580229795.10881\nSyrian Arab Republic,SYR,1968,1753746369.66049\nSyrian Arab Republic,SYR,1969,2245011571.98652\nSyrian Arab Republic,SYR,1970,2140383695.94618\nSyrian Arab Republic,SYR,1971,2589851693.01656\nSyrian Arab Republic,SYR,1972,3059682162.06566\nSyrian Arab Republic,SYR,1973,3239488104.60091\nSyrian Arab Republic,SYR,1974,5159557176.25012\nSyrian Arab Republic,SYR,1975,6826980766.8048\nSyrian Arab Republic,SYR,1976,7633528920.63247\nSyrian Arab Republic,SYR,1977,7696011359.94156\nSyrian Arab Republic,SYR,1978,9275203105.57946\nSyrian Arab Republic,SYR,1979,9929682184.32718\nSyrian Arab Republic,SYR,1980,13062421024.9337\nSyrian Arab Republic,SYR,1981,15518199247.3393\nSyrian Arab Republic,SYR,1982,16298905397.0701\nSyrian Arab Republic,SYR,1983,17589184556.6946\nSyrian Arab Republic,SYR,1984,17503082982.2832\nSyrian Arab Republic,SYR,1985,16403544510.5268\nSyrian Arab Republic,SYR,1986,13293209270.1036\nSyrian Arab Republic,SYR,1987,11356215712.9326\nSyrian Arab Republic,SYR,1988,10577042354.799\nSyrian Arab Republic,SYR,1989,9853396225.58749\nSyrian Arab Republic,SYR,1990,12308624283.9787\nSyrian Arab Republic,SYR,1991,12981833333.3333\nSyrian Arab Republic,SYR,1992,13253565898.9558\nSyrian Arab Republic,SYR,1993,13695962019.2084\nSyrian Arab Republic,SYR,1994,10122020000\nSyrian Arab Republic,SYR,1995,11396706586.8263\nSyrian Arab Republic,SYR,1996,13789560878.2435\nSyrian Arab Republic,SYR,1997,14505233968.8716\nSyrian Arab Republic,SYR,1998,15200846138.4615\nSyrian Arab Republic,SYR,1999,15873875968.9922\nSyrian Arab Republic,SYR,2000,19325894913.1254\nSyrian Arab Republic,SYR,2001,21099833783.503\nSyrian Arab Republic,SYR,2002,21582248881.6592\nSyrian Arab Republic,SYR,2003,21828144686.0394\nSyrian Arab Republic,SYR,2004,25086930693.0693\nSyrian Arab Republic,SYR,2005,28858965517.2414\nSyrian Arab Republic,SYR,2006,33332844574.7801\nSyrian Arab Republic,SYR,2007,40405006007.2086\nTajikistan,TJK,1990,2629395066.27017\nTajikistan,TJK,1991,2534720480.3244\nTajikistan,TJK,1992,1909246640.80838\nTajikistan,TJK,1993,1646693642.11088\nTajikistan,TJK,1994,1346074611.47792\nTajikistan,TJK,1995,1231523034.78397\nTajikistan,TJK,1996,1043893062.60575\nTajikistan,TJK,1997,921843144.229059\nTajikistan,TJK,1998,1320126706.15503\nTajikistan,TJK,1999,1086567377.60543\nTajikistan,TJK,2000,860550305.832491\nTajikistan,TJK,2001,1080774007.25065\nTajikistan,TJK,2002,1221113780.25397\nTajikistan,TJK,2003,1554125530.8029\nTajikistan,TJK,2004,2076148695.50581\nTajikistan,TJK,2005,2312319579.02843\nTajikistan,TJK,2006,2830236053.84429\nTajikistan,TJK,2007,3719497371.09659\nTajikistan,TJK,2008,5161336170.46084\nTajikistan,TJK,2009,4979481980.35098\nTajikistan,TJK,2010,5642178579.58438\nTajikistan,TJK,2011,6522732202.50748\nTajikistan,TJK,2012,7633049792.09321\nTajikistan,TJK,2013,8506674782.75471\nTajikistan,TJK,2014,9236309138.04277\nTajikistan,TJK,2015,7853450374.0001\nTajikistan,TJK,2016,6951657158.90093\nTanzania,TZA,1988,5100405772.46327\nTanzania,TZA,1989,4420168102.39306\nTanzania,TZA,1990,4258743262.82876\nTanzania,TZA,1991,4956588278.56144\nTanzania,TZA,1992,4601413263.52894\nTanzania,TZA,1993,4257702196.53864\nTanzania,TZA,1994,4510846967.8742\nTanzania,TZA,1995,5255221424.80962\nTanzania,TZA,1996,6496195450.61034\nTanzania,TZA,1997,7683852496.84499\nTanzania,TZA,1998,9345174219.07253\nTanzania,TZA,1999,9697847263.63196\nTanzania,TZA,2000,10185786382.8283\nTanzania,TZA,2001,10383560602.8537\nTanzania,TZA,2002,10805599892.7355\nTanzania,TZA,2003,11659129888.8021\nTanzania,TZA,2004,12825801580.9281\nTanzania,TZA,2005,16929976600.142\nTanzania,TZA,2006,18610460326.5437\nTanzania,TZA,2007,21501741757.484\nTanzania,TZA,2008,27368386358.131\nTanzania,TZA,2009,28573777052.4542\nTanzania,TZA,2010,31407908612.0943\nTanzania,TZA,2011,33878631649.4157\nTanzania,TZA,2012,39087748240.4403\nTanzania,TZA,2013,44333456244.744\nTanzania,TZA,2014,48197218326.7942\nTanzania,TZA,2015,45628320606.0487\nTanzania,TZA,2016,47340071107.343\nThailand,THA,1960,2760747471.88624\nThailand,THA,1961,3034043574.06071\nThailand,THA,1962,3308912796.93487\nThailand,THA,1963,3540403456.55305\nThailand,THA,1964,3889129942.30769\nThailand,THA,1965,4388937649.03846\nThailand,THA,1966,5279230817.30769\nThailand,THA,1967,5638461442.30769\nThailand,THA,1968,6081009427.88461\nThailand,THA,1969,6695336567.30769\nThailand,THA,1970,7086538437.5\nThailand,THA,1971,7375000024.03846\nThailand,THA,1972,8177884552.88461\nThailand,THA,1973,10838587357.7466\nThailand,THA,1974,13703000530.0587\nThailand,THA,1975,14882747955.0328\nThailand,THA,1976,16985211146.0238\nThailand,THA,1977,19779315170.0237\nThailand,THA,1978,24006570178.1561\nThailand,THA,1979,27371699082.7126\nThailand,THA,1980,32353440726.8856\nThailand,THA,1981,34846107862.3673\nThailand,THA,1982,36589797857.4006\nThailand,THA,1983,40042826244.2337\nThailand,THA,1984,41797592963.4424\nThailand,THA,1985,38900692712.1496\nThailand,THA,1986,43096746122.4614\nThailand,THA,1987,50535438696.4094\nThailand,THA,1988,61667199834.7428\nThailand,THA,1989,72250877410.3183\nThailand,THA,1990,85343063965.9182\nThailand,THA,1991,98234695722.0341\nThailand,THA,1992,111452869378.467\nThailand,THA,1993,128889832382.818\nThailand,THA,1994,146683499005.964\nThailand,THA,1995,169278552851.272\nThailand,THA,1996,183035154107.494\nThailand,THA,1997,150180268649.388\nThailand,THA,1998,113675706127.265\nThailand,THA,1999,126668932159.508\nThailand,THA,2000,126392308497.749\nThailand,THA,2001,120296746256.631\nThailand,THA,2002,134300851255.002\nThailand,THA,2003,152280653543.725\nThailand,THA,2004,172895476152.592\nThailand,THA,2005,189318499954.003\nThailand,THA,2006,221758486880.313\nThailand,THA,2007,262942650543.771\nThailand,THA,2008,291383081231.82\nThailand,THA,2009,281710095724.761\nThailand,THA,2010,341105009515.333\nThailand,THA,2011,370818747396.833\nThailand,THA,2012,397559992407.45\nThailand,THA,2013,420528737876.717\nThailand,THA,2014,406521561093.357\nThailand,THA,2015,399234547137.472\nThailand,THA,2016,407026127310.434\nTimor-Leste,TLS,2000,350391812.528246\nTimor-Leste,TLS,2001,429570502.603337\nTimor-Leste,TLS,2002,422917862.076294\nTimor-Leste,TLS,2003,430520879.821486\nTimor-Leste,TLS,2004,442875783.657422\nTimor-Leste,TLS,2005,466635214.111147\nTimor-Leste,TLS,2006,440024652.002975\nTimor-Leste,TLS,2007,531260864.945277\nTimor-Leste,TLS,2008,659561789.395388\nTimor-Leste,TLS,2009,785961959.409202\nTimor-Leste,TLS,2010,894400000\nTimor-Leste,TLS,2011,1053500000\nTimor-Leste,TLS,2012,1188900000\nTimor-Leste,TLS,2013,1410000000\nTimor-Leste,TLS,2014,1450600000\nTimor-Leste,TLS,2015,1606500000\nTimor-Leste,TLS,2016,1782974000\nTogo,TGO,1960,121128073.114022\nTogo,TGO,1961,126396469.707058\nTogo,TGO,1962,132237441.630863\nTogo,TGO,1963,143255784.510751\nTogo,TGO,1964,166104067.630043\nTogo,TGO,1965,187300336.365369\nTogo,TGO,1966,216136263.912497\nTogo,TGO,1967,231706475.464114\nTogo,TGO,1968,241956910.658103\nTogo,TGO,1969,267732446.378413\nTogo,TGO,1970,253976626.166639\nTogo,TGO,1971,286537524.990331\nTogo,TGO,1972,335677636.893737\nTogo,TGO,1973,406479906.159652\nTogo,TGO,1974,560437742.594972\nTogo,TGO,1975,617321669.390877\nTogo,TGO,1976,619375134.18051\nTogo,TGO,1977,777435020.475847\nTogo,TGO,1978,824263841.539264\nTogo,TGO,1979,891775906.631014\nTogo,TGO,1980,1136408814.19692\nTogo,TGO,1981,962347000.991788\nTogo,TGO,1982,821651918.724626\nTogo,TGO,1983,765746590.616849\nTogo,TGO,1984,718148959.610872\nTogo,TGO,1985,762359722.701402\nTogo,TGO,1986,1060911735.26065\nTogo,TGO,1987,1249099130.02277\nTogo,TGO,1988,1378847487.41137\nTogo,TGO,1989,1352949662.75172\nTogo,TGO,1990,1628427515.41881\nTogo,TGO,1991,1602299862.9243\nTogo,TGO,1992,1692959110.18022\nTogo,TGO,1993,1233496846.33493\nTogo,TGO,1994,982624324.505898\nTogo,TGO,1995,1309382885.33029\nTogo,TGO,1996,1465448290.34132\nTogo,TGO,1997,1498950899.08774\nTogo,TGO,1998,1587345950.9743\nTogo,TGO,1999,1576094566.48548\nTogo,TGO,2000,1294250233.18894\nTogo,TGO,2001,1332328999.09077\nTogo,TGO,2002,1474630207.08242\nTogo,TGO,2003,1673690429.61609\nTogo,TGO,2004,1937074572.08687\nTogo,TGO,2005,2115154262.03025\nTogo,TGO,2006,2202809251.31304\nTogo,TGO,2007,2523462557.38975\nTogo,TGO,2008,3163416242.05877\nTogo,TGO,2009,3163000528.8167\nTogo,TGO,2010,3172945644.5585\nTogo,TGO,2011,3756023159.96\nTogo,TGO,2012,3866617462.61854\nTogo,TGO,2013,4080929201.27925\nTogo,TGO,2014,4482880424.33988\nTogo,TGO,2015,4087628275.95594\nTogo,TGO,2016,4399995986.56477\nTonga,TON,1975,32506741.7201204\nTonga,TON,1976,30036416.9619944\nTonga,TON,1977,34139387.8908849\nTonga,TON,1978,41567471.6721987\nTonga,TON,1979,44667002.0120724\nTonga,TON,1980,53260077.4311091\nTonga,TON,1981,62242013.3302689\nTonga,TON,1982,62068161.0711025\nTonga,TON,1983,60863963.9639639\nTonga,TON,1984,64248354.5414656\nTonga,TON,1985,60058663.3144773\nTonga,TON,1986,68195855.6149733\nTonga,TON,1987,81667133.4546982\nTonga,TON,1988,106657267.367342\nTonga,TON,1989,106344854.986095\nTonga,TON,1990,113563821.577404\nTonga,TON,1991,132201141.446861\nTonga,TON,1992,137066290.55007\nTonga,TON,1993,138489884.393064\nTonga,TON,1994,193775943.038933\nTonga,TON,1995,202547013.927138\nTonga,TON,1996,219583570.094975\nTonga,TON,1997,212155124.65374\nTonga,TON,1998,188686997.319035\nTonga,TON,1999,196686674.669868\nTonga,TON,2000,202363492.160332\nTonga,TON,2001,181244788.473329\nTonga,TON,2002,182737040.095422\nTonga,TON,2003,202543202.004099\nTonga,TON,2004,229358214.792003\nTonga,TON,2005,262176133.72543\nTonga,TON,2006,294137737.070038\nTonga,TON,2007,300143056.873221\nTonga,TON,2008,349484427.609428\nTonga,TON,2009,318166562.784677\nTonga,TON,2010,369485198.817979\nTonga,TON,2011,423011844.331641\nTonga,TON,2012,472358251.224261\nTonga,TON,2013,450686353.674011\nTonga,TON,2014,443911052.254042\nTonga,TON,2015,435438217.281663\nTonga,TON,2016,401562006.229967\nTrinidad and Tobago,TTO,1960,535670127.748935\nTrinidad and Tobago,TTO,1961,584961208.656595\nTrinidad and Tobago,TTO,1962,619319197.340022\nTrinidad and Tobago,TTO,1963,678235373.038558\nTrinidad and Tobago,TTO,1964,711893367.55527\nTrinidad and Tobago,TTO,1965,736568861.926151\nTrinidad and Tobago,TTO,1966,723735635.536371\nTrinidad and Tobago,TTO,1967,761981474.023359\nTrinidad and Tobago,TTO,1968,758899950\nTrinidad and Tobago,TTO,1969,779200000\nTrinidad and Tobago,TTO,1970,821850000\nTrinidad and Tobago,TTO,1971,896754316.674262\nTrinidad and Tobago,TTO,1972,1083381044.08473\nTrinidad and Tobago,TTO,1973,1308799458.96284\nTrinidad and Tobago,TTO,1974,2042031901.42217\nTrinidad and Tobago,TTO,1975,2442667573.04821\nTrinidad and Tobago,TTO,1976,2500410583.79177\nTrinidad and Tobago,TTO,1977,3138666666.66667\nTrinidad and Tobago,TTO,1978,3562333458.33333\nTrinidad and Tobago,TTO,1979,4602416625\nTrinidad and Tobago,TTO,1980,6235833333.33333\nTrinidad and Tobago,TTO,1981,6992083333.33333\nTrinidad and Tobago,TTO,1982,8140416666.66667\nTrinidad and Tobago,TTO,1983,7763750000\nTrinidad and Tobago,TTO,1984,7757083333.33333\nTrinidad and Tobago,TTO,1985,7375918367.34694\nTrinidad and Tobago,TTO,1986,4794444444.44444\nTrinidad and Tobago,TTO,1987,4797777777.77778\nTrinidad and Tobago,TTO,1988,4496852073.46896\nTrinidad and Tobago,TTO,1989,4323058823.52941\nTrinidad and Tobago,TTO,1990,5068000000\nTrinidad and Tobago,TTO,1991,5307905882.35294\nTrinidad and Tobago,TTO,1992,5439552941.17647\nTrinidad and Tobago,TTO,1993,4669488516.37981\nTrinidad and Tobago,TTO,1994,4947205860.01451\nTrinidad and Tobago,TTO,1995,5329214163.22001\nTrinidad and Tobago,TTO,1996,5759537726.26601\nTrinidad and Tobago,TTO,1997,5737751331.63779\nTrinidad and Tobago,TTO,1998,6043694330.21609\nTrinidad and Tobago,TTO,1999,6808982520.75759\nTrinidad and Tobago,TTO,2000,8154338232.95978\nTrinidad and Tobago,TTO,2001,8824873259.32105\nTrinidad and Tobago,TTO,2002,9008273720.93395\nTrinidad and Tobago,TTO,2003,11305459802.0683\nTrinidad and Tobago,TTO,2004,13280275123.0354\nTrinidad and Tobago,TTO,2005,15982282462.3786\nTrinidad and Tobago,TTO,2006,18369070085.3888\nTrinidad and Tobago,TTO,2007,21642304045.512\nTrinidad and Tobago,TTO,2008,27870257894.2347\nTrinidad and Tobago,TTO,2009,19175196445.7936\nTrinidad and Tobago,TTO,2010,22157948396.2042\nTrinidad and Tobago,TTO,2011,25433011405.3017\nTrinidad and Tobago,TTO,2012,25694164489.2373\nTrinidad and Tobago,TTO,2013,26436159314.5624\nTrinidad and Tobago,TTO,2014,26175952941.9107\nTrinidad and Tobago,TTO,2015,23559224762.4424\nTrinidad and Tobago,TTO,2016,21894706041.2353\nTunisia,TUN,1965,991047619.047619\nTunisia,TUN,1966,1040952380.95238\nTunisia,TUN,1967,1085714285.71429\nTunisia,TUN,1968,1214666666.66667\nTunisia,TUN,1969,1289904761.90476\nTunisia,TUN,1970,1439238095.2381\nTunisia,TUN,1971,1685217058.71103\nTunisia,TUN,1972,2237476420.03773\nTunisia,TUN,1973,2730787476.28084\nTunisia,TUN,1974,3545933562.42841\nTunisia,TUN,1975,4328610489.68432\nTunisia,TUN,1976,4507929104.47761\nTunisia,TUN,1977,5109324009.32401\nTunisia,TUN,1978,5968044209.51466\nTunisia,TUN,1979,7188191881.91882\nTunisia,TUN,1980,8744134354.16152\nTunisia,TUN,1981,8428513568.24625\nTunisia,TUN,1982,8133401049.60217\nTunisia,TUN,1983,8350176782.55746\nTunisia,TUN,1984,8254891864.05767\nTunisia,TUN,1985,8410185739.96405\nTunisia,TUN,1986,9018136020.15113\nTunisia,TUN,1987,9696271268.25148\nTunisia,TUN,1988,10096292842.1543\nTunisia,TUN,1989,10102075213.3151\nTunisia,TUN,1990,12290568181.8182\nTunisia,TUN,1991,13074782608.6957\nTunisia,TUN,1992,15497286295.7938\nTunisia,TUN,1993,14608946896.483\nTunisia,TUN,1994,15632463424.2784\nTunisia,TUN,1995,18030876599.3444\nTunisia,TUN,1996,19587322786.1105\nTunisia,TUN,1997,20746360430.4187\nTunisia,TUN,1998,21803372266.6198\nTunisia,TUN,1999,22943685719.103\nTunisia,TUN,2000,21473188881.5933\nTunisia,TUN,2001,22066101341.4888\nTunisia,TUN,2002,23142294436.2383\nTunisia,TUN,2003,27453084982.5378\nTunisia,TUN,2004,31183139301.4853\nTunisia,TUN,2005,32273007553.5687\nTunisia,TUN,2006,34378437265.2141\nTunisia,TUN,2007,38908069299.204\nTunisia,TUN,2008,44856586316.0458\nTunisia,TUN,2009,43454935940.1614\nTunisia,TUN,2010,44050929160.2627\nTunisia,TUN,2011,45810626509.4474\nTunisia,TUN,2012,45044112939.3687\nTunisia,TUN,2013,46251061734.4741\nTunisia,TUN,2014,47587913058.8443\nTunisia,TUN,2015,43156708809.1354\nTunisia,TUN,2016,42062549394.7859\nTurkey,TUR,1960,13995067817.5092\nTurkey,TUR,1961,8022222222.22222\nTurkey,TUR,1962,8922222222.22222\nTurkey,TUR,1963,10355555555.5556\nTurkey,TUR,1964,11177777777.7778\nTurkey,TUR,1965,11944444444.4444\nTurkey,TUR,1966,14122222222.2222\nTurkey,TUR,1967,15666666666.6667\nTurkey,TUR,1968,17500000000\nTurkey,TUR,1969,19466666666.6667\nTurkey,TUR,1970,17086956521.7391\nTurkey,TUR,1971,16256619963.7997\nTurkey,TUR,1972,20431095406.3604\nTurkey,TUR,1973,25724381625.4417\nTurkey,TUR,1974,35599913836.4328\nTurkey,TUR,1975,44633707242.7642\nTurkey,TUR,1976,51280134554.2889\nTurkey,TUR,1977,58676813687.3681\nTurkey,TUR,1978,65147022485.7919\nTurkey,TUR,1979,89394085658.2038\nTurkey,TUR,1980,68789289565.7434\nTurkey,TUR,1981,71040020140.4436\nTurkey,TUR,1982,64546332580.7583\nTurkey,TUR,1983,61678280115.4987\nTurkey,TUR,1984,59989909457.8379\nTurkey,TUR,1985,67234948264.5987\nTurkey,TUR,1986,75728009962.7878\nTurkey,TUR,1987,87172789528.3316\nTurkey,TUR,1988,90852814004.9917\nTurkey,TUR,1989,107143348667.094\nTurkey,TUR,1990,150676291094.21\nTurkey,TUR,1991,150027833333.333\nTurkey,TUR,1992,158459130434.783\nTurkey,TUR,1993,180169736363.636\nTurkey,TUR,1994,130690172297.297\nTurkey,TUR,1995,169485941048.035\nTurkey,TUR,1996,181475555282.555\nTurkey,TUR,1997,189834649111.257\nTurkey,TUR,1998,275768695818.949\nTurkey,TUR,1999,255884300382.044\nTurkey,TUR,2000,272979390595.01\nTurkey,TUR,2001,200251925587.467\nTurkey,TUR,2002,238428126326.964\nTurkey,TUR,2003,311823003531.215\nTurkey,TUR,2004,404786740091.196\nTurkey,TUR,2005,501416301726.704\nTurkey,TUR,2006,552486912845.642\nTurkey,TUR,2007,675770112825.236\nTurkey,TUR,2008,764335657318.479\nTurkey,TUR,2009,644639902580.645\nTurkey,TUR,2010,771876791231.838\nTurkey,TUR,2011,832546270783.83\nTurkey,TUR,2012,873981786532.072\nTurkey,TUR,2013,950595270314.296\nTurkey,TUR,2014,934167809301.667\nTurkey,TUR,2015,859794177118.102\nTurkey,TUR,2016,863711710426.514\nTurkmenistan,TKM,1987,2331358819.75954\nTurkmenistan,TKM,1988,3010982414.24425\nTurkmenistan,TKM,1989,3006988216.55045\nTurkmenistan,TKM,1990,3189539641.3171\nTurkmenistan,TKM,1991,3208098919.0146\nTurkmenistan,TKM,1992,3200539816.0601\nTurkmenistan,TKM,1993,3179225948.58114\nTurkmenistan,TKM,1994,2561118608.35516\nTurkmenistan,TKM,1995,2482228439.71407\nTurkmenistan,TKM,1996,2379281767.9558\nTurkmenistan,TKM,1997,2450084970.24741\nTurkmenistan,TKM,1998,2605688065.08338\nTurkmenistan,TKM,1999,2450686659.778\nTurkmenistan,TKM,2000,2904662604.82053\nTurkmenistan,TKM,2001,3534771968.51189\nTurkmenistan,TKM,2002,4462028988.72949\nTurkmenistan,TKM,2003,5977440582.80171\nTurkmenistan,TKM,2004,6838351088.46688\nTurkmenistan,TKM,2005,8104355716.8784\nTurkmenistan,TKM,2006,10277598152.4249\nTurkmenistan,TKM,2007,12664165103.1895\nTurkmenistan,TKM,2008,19271523178.8079\nTurkmenistan,TKM,2009,20214385964.9123\nTurkmenistan,TKM,2010,22583157894.7368\nTurkmenistan,TKM,2011,29233333333.3333\nTurkmenistan,TKM,2012,35164210526.3158\nTurkmenistan,TKM,2013,39197543859.6491\nTurkmenistan,TKM,2014,43524210526.3158\nTurkmenistan,TKM,2015,35799628571.4286\nTurkmenistan,TKM,2016,36179885714.2857\nTuvalu,TUV,1990,8824447.74022325\nTuvalu,TUV,1991,9365165.91369372\nTuvalu,TUV,1992,9742949.47121034\nTuvalu,TUV,1993,9630762.95389637\nTuvalu,TUV,1994,10886825.5592923\nTuvalu,TUV,1995,11025945.1445515\nTuvalu,TUV,1996,12334846.2320995\nTuvalu,TUV,1997,12700905.4475286\nTuvalu,TUV,1998,12757632.8684508\nTuvalu,TUV,1999,13687141.1058778\nTuvalu,TUV,2000,13742057.0500928\nTuvalu,TUV,2001,13196544.946726\nTuvalu,TUV,2002,15450994.2410084\nTuvalu,TUV,2003,18231078.5394643\nTuvalu,TUV,2004,21534931.6075894\nTuvalu,TUV,2005,21839098.8927071\nTuvalu,TUV,2006,22902861.4457831\nTuvalu,TUV,2007,27030374.0272781\nTuvalu,TUV,2008,30290219.7617849\nTuvalu,TUV,2009,27101076.2751521\nTuvalu,TUV,2010,31823518.6204366\nTuvalu,TUV,2011,39312016.5033522\nTuvalu,TUV,2012,39875750.6730172\nTuvalu,TUV,2013,38322359.5288666\nTuvalu,TUV,2014,37259689.9224806\nTuvalu,TUV,2015,32673277.7402149\nTuvalu,TUV,2016,34218878.4390841\nUganda,UGA,1960,423008385.744235\nUganda,UGA,1961,441524109.014675\nUganda,UGA,1962,449012578.616352\nUganda,UGA,1963,516147798.742138\nUganda,UGA,1964,589056603.773585\nUganda,UGA,1965,884873949.579832\nUganda,UGA,1966,925770308.123249\nUganda,UGA,1967,967647058.823529\nUganda,UGA,1968,1037815126.05042\nUganda,UGA,1969,1169047619.04762\nUganda,UGA,1970,1260084033.61345\nUganda,UGA,1971,1417787114.84594\nUganda,UGA,1972,1491596638.65546\nUganda,UGA,1973,1702521008.40336\nUganda,UGA,1974,2100142653.35235\nUganda,UGA,1975,2359555555.55556\nUganda,UGA,1976,2447300000\nUganda,UGA,1977,2936470588.23529\nUganda,UGA,1978,2420260869.56522\nUganda,UGA,1979,2139025000\nUganda,UGA,1980,1244610000\nUganda,UGA,1981,1337300000\nUganda,UGA,1982,2177500000\nUganda,UGA,1983,2240333333.33333\nUganda,UGA,1984,3615647477.05434\nUganda,UGA,1985,3519666338.52454\nUganda,UGA,1986,3923232122.12784\nUganda,UGA,1987,6269511614.66235\nUganda,UGA,1988,6508931651.66667\nUganda,UGA,1989,5276480985.99937\nUganda,UGA,1990,4304398865.88268\nUganda,UGA,1991,3321729057.12215\nUganda,UGA,1992,2857457860.05088\nUganda,UGA,1993,3220439044.18949\nUganda,UGA,1994,3990430446.71216\nUganda,UGA,1995,5755818947.42125\nUganda,UGA,1996,6044585326.938\nUganda,UGA,1997,6269333313.17108\nUganda,UGA,1998,6584815846.52754\nUganda,UGA,1999,5998563257.94659\nUganda,UGA,2000,6193246837.09687\nUganda,UGA,2001,5840503868.57245\nUganda,UGA,2002,6178563590.89254\nUganda,UGA,2003,6336696288.98214\nUganda,UGA,2004,7940362799.17997\nUganda,UGA,2005,9013834373.41246\nUganda,UGA,2006,9942597779.99265\nUganda,UGA,2007,12292813603.2327\nUganda,UGA,2008,14239026629.639\nUganda,UGA,2009,18168902153.8569\nUganda,UGA,2010,20186496527.1276\nUganda,UGA,2011,20176751242.0546\nUganda,UGA,2012,23132149256.9744\nUganda,UGA,2013,24599553471.8672\nUganda,UGA,2014,27295207927.5612\nUganda,UGA,2015,27059447774.6626\nUganda,UGA,2016,24078931933.4578\nUkraine,UKR,1987,64087694038.2333\nUkraine,UKR,1988,74703517902.6642\nUkraine,UKR,1989,82709161099.1244\nUkraine,UKR,1990,81456918678.5008\nUkraine,UKR,1991,77464561149.5103\nUkraine,UKR,1992,73942235330.437\nUkraine,UKR,1993,65648559903.0571\nUkraine,UKR,1994,52549555149.1978\nUkraine,UKR,1995,48213868178.0873\nUkraine,UKR,1996,44558077827.135\nUkraine,UKR,1997,50150399791.647\nUkraine,UKR,1998,41883241471.7365\nUkraine,UKR,1999,31580639045.454\nUkraine,UKR,2000,31261527363.144\nUkraine,UKR,2001,38009344576.6088\nUkraine,UKR,2002,42392896031.2394\nUkraine,UKR,2003,50132953288.203\nUkraine,UKR,2004,64883060725.7003\nUkraine,UKR,2005,86142018069.3504\nUkraine,UKR,2006,107753069306.931\nUkraine,UKR,2007,142719009900.99\nUkraine,UKR,2008,179992405832.321\nUkraine,UKR,2009,117227769791.56\nUkraine,UKR,2010,136013155905.036\nUkraine,UKR,2011,163159671670.265\nUkraine,UKR,2012,175781379051.433\nUkraine,UKR,2013,183310146378.081\nUkraine,UKR,2014,133503411375.739\nUkraine,UKR,2015,91030959454.6961\nUkraine,UKR,2016,93270479388.5243\nUnited Arab Emirates,ARE,1975,14720672506.5004\nUnited Arab Emirates,ARE,1976,19213022691.0526\nUnited Arab Emirates,ARE,1977,24871775164.6043\nUnited Arab Emirates,ARE,1978,23775831783.4263\nUnited Arab Emirates,ARE,1979,31225463217.7582\nUnited Arab Emirates,ARE,1980,43598748449.0479\nUnited Arab Emirates,ARE,1981,49333424135.1131\nUnited Arab Emirates,ARE,1982,46622718605.2847\nUnited Arab Emirates,ARE,1983,42803323345.1376\nUnited Arab Emirates,ARE,1984,41807954235.903\nUnited Arab Emirates,ARE,1985,40603650231.5445\nUnited Arab Emirates,ARE,1986,33943612094.7971\nUnited Arab Emirates,ARE,1987,36384908744.2114\nUnited Arab Emirates,ARE,1988,36275674203.2144\nUnited Arab Emirates,ARE,1989,41464995913.9199\nUnited Arab Emirates,ARE,1990,50701443748.2975\nUnited Arab Emirates,ARE,1991,51552165622.4462\nUnited Arab Emirates,ARE,1992,54239171887.769\nUnited Arab Emirates,ARE,1993,55625170253.337\nUnited Arab Emirates,ARE,1994,59305093979.842\nUnited Arab Emirates,ARE,1995,65743666575.8649\nUnited Arab Emirates,ARE,1996,73571233996.1863\nUnited Arab Emirates,ARE,1997,78839008444.5655\nUnited Arab Emirates,ARE,1998,75674336283.1858\nUnited Arab Emirates,ARE,1999,84445473110.9598\nUnited Arab Emirates,ARE,2000,104337372362.151\nUnited Arab Emirates,ARE,2001,103311640571.818\nUnited Arab Emirates,ARE,2002,109816201497.617\nUnited Arab Emirates,ARE,2003,124346358066.712\nUnited Arab Emirates,ARE,2004,147824370319.946\nUnited Arab Emirates,ARE,2005,180617018379.85\nUnited Arab Emirates,ARE,2006,222116541865.214\nUnited Arab Emirates,ARE,2007,257916133424.098\nUnited Arab Emirates,ARE,2008,315474615738.598\nUnited Arab Emirates,ARE,2009,253547358747.447\nUnited Arab Emirates,ARE,2010,289880430197.413\nUnited Arab Emirates,ARE,2011,350908390034.037\nUnited Arab Emirates,ARE,2012,374817974104.833\nUnited Arab Emirates,ARE,2013,390427289203.54\nUnited Arab Emirates,ARE,2014,403197682886.317\nUnited Arab Emirates,ARE,2015,357949199754.935\nUnited Arab Emirates,ARE,2016,348743265704.561\nUnited Kingdom,GBR,1960,72328047042.1588\nUnited Kingdom,GBR,1961,76694360635.9159\nUnited Kingdom,GBR,1962,80601939635.2483\nUnited Kingdom,GBR,1963,85443766670.4279\nUnited Kingdom,GBR,1964,93387598813.9269\nUnited Kingdom,GBR,1965,100595782309.165\nUnited Kingdom,GBR,1966,107090721447.057\nUnited Kingdom,GBR,1967,111185383409.521\nUnited Kingdom,GBR,1968,104702736248.084\nUnited Kingdom,GBR,1969,112676874821.987\nUnited Kingdom,GBR,1970,130671946244.3\nUnited Kingdom,GBR,1971,148113896325.14\nUnited Kingdom,GBR,1972,169965034965.035\nUnited Kingdom,GBR,1973,192537971582.558\nUnited Kingdom,GBR,1974,206131369798.971\nUnited Kingdom,GBR,1975,241756637168.142\nUnited Kingdom,GBR,1976,232614555256.065\nUnited Kingdom,GBR,1977,263066457352.172\nUnited Kingdom,GBR,1978,335883029721.956\nUnited Kingdom,GBR,1979,438994070309.191\nUnited Kingdom,GBR,1980,564947710899.373\nUnited Kingdom,GBR,1981,540765675241.158\nUnited Kingdom,GBR,1982,515048916841.37\nUnited Kingdom,GBR,1983,489618008185.539\nUnited Kingdom,GBR,1984,461487097632.349\nUnited Kingdom,GBR,1985,489285164271.047\nUnited Kingdom,GBR,1986,601452653180.885\nUnited Kingdom,GBR,1987,745162608269.325\nUnited Kingdom,GBR,1988,910122732123.799\nUnited Kingdom,GBR,1989,926884816753.927\nUnited Kingdom,GBR,1990,1093169389204.55\nUnited Kingdom,GBR,1991,1142797178130.51\nUnited Kingdom,GBR,1992,1179659529659.53\nUnited Kingdom,GBR,1993,1061388722255.55\nUnited Kingdom,GBR,1994,1140489745944.29\nUnited Kingdom,GBR,1995,1335218557677.13\nUnited Kingdom,GBR,1996,1408781591263.65\nUnited Kingdom,GBR,1997,1552483628028.81\nUnited Kingdom,GBR,1998,1638511096389.53\nUnited Kingdom,GBR,1999,1665623685487.79\nUnited Kingdom,GBR,2000,1647951278559.54\nUnited Kingdom,GBR,2001,1621510004318.41\nUnited Kingdom,GBR,2002,1768408273381.29\nUnited Kingdom,GBR,2003,2038395102040.82\nUnited Kingdom,GBR,2004,2398555474185.28\nUnited Kingdom,GBR,2005,2520701818181.82\nUnited Kingdom,GBR,2006,2692612695492.18\nUnited Kingdom,GBR,2007,3074359743897.56\nUnited Kingdom,GBR,2008,2890564338235.29\nUnited Kingdom,GBR,2009,2382825985355.97\nUnited Kingdom,GBR,2010,2441173394729.62\nUnited Kingdom,GBR,2011,2619700404733.37\nUnited Kingdom,GBR,2012,2662085168498.93\nUnited Kingdom,GBR,2013,2739818680930.19\nUnited Kingdom,GBR,2014,3022827781881.39\nUnited Kingdom,GBR,2015,2885570309160.86\nUnited Kingdom,GBR,2016,2647898654635.24\nUnited States,USA,1960,543300000000\nUnited States,USA,1961,563300000000\nUnited States,USA,1962,605100000000\nUnited States,USA,1963,638600000000\nUnited States,USA,1964,685800000000\nUnited States,USA,1965,743700000000\nUnited States,USA,1966,815000000000\nUnited States,USA,1967,861700000000\nUnited States,USA,1968,942500000000\nUnited States,USA,1969,1019900000000\nUnited States,USA,1970,1075884000000\nUnited States,USA,1971,1167770000000\nUnited States,USA,1972,1282449000000\nUnited States,USA,1973,1428549000000\nUnited States,USA,1974,1548825000000\nUnited States,USA,1975,1688923000000\nUnited States,USA,1976,1877587000000\nUnited States,USA,1977,2085951000000\nUnited States,USA,1978,2356571000000\nUnited States,USA,1979,2632143000000\nUnited States,USA,1980,2862505000000\nUnited States,USA,1981,3210956000000\nUnited States,USA,1982,3344991000000\nUnited States,USA,1983,3638137000000\nUnited States,USA,1984,4040693000000\nUnited States,USA,1985,4346734000000\nUnited States,USA,1986,4590155000000\nUnited States,USA,1987,4870217000000\nUnited States,USA,1988,5252629000000\nUnited States,USA,1989,5657693000000\nUnited States,USA,1990,5979589000000\nUnited States,USA,1991,6174043000000\nUnited States,USA,1992,6539299000000\nUnited States,USA,1993,6878718000000\nUnited States,USA,1994,7308755000000\nUnited States,USA,1995,7664060000000\nUnited States,USA,1996,8100201000000\nUnited States,USA,1997,8608515000000\nUnited States,USA,1998,9089168000000\nUnited States,USA,1999,9660624000000\nUnited States,USA,2000,10284779000000\nUnited States,USA,2001,10621824000000\nUnited States,USA,2002,10977514000000\nUnited States,USA,2003,11510670000000\nUnited States,USA,2004,12274928000000\nUnited States,USA,2005,13093726000000\nUnited States,USA,2006,13855888000000\nUnited States,USA,2007,14477635000000\nUnited States,USA,2008,14718582000000\nUnited States,USA,2009,14418739000000\nUnited States,USA,2010,14964372000000\nUnited States,USA,2011,15517926000000\nUnited States,USA,2012,16155255000000\nUnited States,USA,2013,16691517000000\nUnited States,USA,2014,17393103000000\nUnited States,USA,2015,18120714000000\nUnited States,USA,2016,18624475000000\nUruguay,URY,1960,1242289212.04285\nUruguay,URY,1961,1547388812.89969\nUruguay,URY,1962,1710004464.40897\nUruguay,URY,1963,1539681533.63786\nUruguay,URY,1964,1975701727.50862\nUruguay,URY,1965,1890769326.14221\nUruguay,URY,1966,1809183974.52669\nUruguay,URY,1967,1597721080.00991\nUruguay,URY,1968,1593675330.16467\nUruguay,URY,1969,2004435483.87097\nUruguay,URY,1970,2137096774.19355\nUruguay,URY,1971,2807258064.51613\nUruguay,URY,1972,2189418001.37898\nUruguay,URY,1973,3964295672.52444\nUruguay,URY,1974,4090209681.97172\nUruguay,URY,1975,3538283322.07726\nUruguay,URY,1976,3667161241.48372\nUruguay,URY,1977,4114667062.64917\nUruguay,URY,1978,4910257282.93153\nUruguay,URY,1979,7181185277.98651\nUruguay,URY,1980,10163020115.7344\nUruguay,URY,1981,11048335541.4933\nUruguay,URY,1982,9178802162.6616\nUruguay,URY,1983,5102281255.99986\nUruguay,URY,1984,4850241442.17643\nUruguay,URY,1985,4732017873.38369\nUruguay,URY,1986,5880112788.40947\nUruguay,URY,1987,7367494080.40014\nUruguay,URY,1988,8213515458.51139\nUruguay,URY,1989,8438951476.06644\nUruguay,URY,1990,9298839655.23138\nUruguay,URY,1991,11206193313.0458\nUruguay,URY,1992,12878157305.7481\nUruguay,URY,1993,15002144584.3663\nUruguay,URY,1994,17474578502.4346\nUruguay,URY,1995,19297663096.5506\nUruguay,URY,1996,20515465834.0682\nUruguay,URY,1997,23969746849.9221\nUruguay,URY,1998,25385928198.3212\nUruguay,URY,1999,23983945190.6202\nUruguay,URY,2000,22823255801.8447\nUruguay,URY,2001,20898788416.6348\nUruguay,URY,2002,13606494599.4261\nUruguay,URY,2003,12045631092.5353\nUruguay,URY,2004,13686329890.1191\nUruguay,URY,2005,17362857683.8545\nUruguay,URY,2006,19579457966.0538\nUruguay,URY,2007,23410572621.533\nUruguay,URY,2008,30366213095.4256\nUruguay,URY,2009,31660911290.3226\nUruguay,URY,2010,40284481661.8726\nUruguay,URY,2011,47962439293.3696\nUruguay,URY,2012,51264390121.4144\nUruguay,URY,2013,57531233350.9101\nUruguay,URY,2014,57236013077.5187\nUruguay,URY,2015,53274304214.8174\nUruguay,URY,2016,52419720713.7316\nUzbekistan,UZB,1990,13360607990.6751\nUzbekistan,UZB,1991,13677622222.2222\nUzbekistan,UZB,1992,12941297376.0933\nUzbekistan,UZB,1993,13099013835.5111\nUzbekistan,UZB,1994,12899156990.6156\nUzbekistan,UZB,1995,13350468917.4115\nUzbekistan,UZB,1996,13948892215.5689\nUzbekistan,UZB,1997,14744603773.5849\nUzbekistan,UZB,1998,14988971210.8383\nUzbekistan,UZB,1999,17078465982.0282\nUzbekistan,UZB,2000,13760374487.51\nUzbekistan,UZB,2001,11401351420.1718\nUzbekistan,UZB,2002,9687951055.22541\nUzbekistan,UZB,2003,10128112401.4248\nUzbekistan,UZB,2004,12030023547.8807\nUzbekistan,UZB,2005,14307509838.8053\nUzbekistan,UZB,2006,17330833852.919\nUzbekistan,UZB,2007,22311393927.8817\nUzbekistan,UZB,2008,29549438883.8338\nUzbekistan,UZB,2009,33689223673.2577\nUzbekistan,UZB,2010,39332770928.9426\nUzbekistan,UZB,2011,45915191189.3237\nUzbekistan,UZB,2012,51821573338.1312\nUzbekistan,UZB,2013,57690453460.6205\nUzbekistan,UZB,2014,63067077178.5381\nUzbekistan,UZB,2015,66903804142.5395\nUzbekistan,UZB,2016,67220335569.6147\nVanuatu,VUT,1979,119258835.335525\nVanuatu,VUT,1980,113423181.338956\nVanuatu,VUT,1981,98746405.3924806\nVanuatu,VUT,1982,98144643.8965575\nVanuatu,VUT,1983,110123779.812821\nVanuatu,VUT,1984,135553763.982667\nVanuatu,VUT,1985,123698506.111363\nVanuatu,VUT,1986,118691396.764915\nVanuatu,VUT,1987,130834145.053665\nVanuatu,VUT,1988,148545381.418421\nVanuatu,VUT,1989,144482170.248703\nVanuatu,VUT,1990,158397403.041175\nVanuatu,VUT,1991,188869985.673352\nVanuatu,VUT,1992,196142585.014816\nVanuatu,VUT,1993,188080374.400605\nVanuatu,VUT,1994,219260341.050642\nVanuatu,VUT,1995,233902114.8683\nVanuatu,VUT,1996,245177633.168933\nVanuatu,VUT,1997,255890221.800293\nVanuatu,VUT,1998,262301252.769228\nVanuatu,VUT,1999,267999225.256634\nVanuatu,VUT,2000,272014693.050806\nVanuatu,VUT,2001,257926881.72043\nVanuatu,VUT,2002,262603781.799059\nVanuatu,VUT,2003,314463144.04219\nVanuatu,VUT,2004,364996869.129618\nVanuatu,VUT,2005,394962552.336108\nVanuatu,VUT,2006,439376794.094041\nVanuatu,VUT,2007,526428309.945088\nVanuatu,VUT,2008,607958616.143415\nVanuatu,VUT,2009,610066628.693058\nVanuatu,VUT,2010,700804286.224354\nVanuatu,VUT,2011,792149700.679116\nVanuatu,VUT,2012,781702874.106058\nVanuatu,VUT,2013,801787555.861121\nVanuatu,VUT,2014,814954306.971033\nVanuatu,VUT,2015,742432131.041002\nVanuatu,VUT,2016,773502895.927602\n\"Venezuela, RB\",VEN,1960,8736939393.93939\n\"Venezuela, RB\",VEN,1961,9058121212.12121\n\"Venezuela, RB\",VEN,1962,10022000000\n\"Venezuela, RB\",VEN,1963,10823878787.8788\n\"Venezuela, RB\",VEN,1964,9111000000\n\"Venezuela, RB\",VEN,1965,9496244444.44444\n\"Venezuela, RB\",VEN,1966,9984400000\n\"Venezuela, RB\",VEN,1967,10356422222.2222\n\"Venezuela, RB\",VEN,1968,11343444444.4444\n\"Venezuela, RB\",VEN,1969,11795044444.4444\n\"Venezuela, RB\",VEN,1970,12848755555.5556\n\"Venezuela, RB\",VEN,1971,14625295454.5455\n\"Venezuela, RB\",VEN,1972,15922863636.3636\n\"Venezuela, RB\",VEN,1973,19466279069.7674\n\"Venezuela, RB\",VEN,1974,28985627906.9767\n\"Venezuela, RB\",VEN,1975,31303581395.3488\n\"Venezuela, RB\",VEN,1976,36187023255.814\n\"Venezuela, RB\",VEN,1977,42263209302.3256\n\"Venezuela, RB\",VEN,1978,46426511627.907\n\"Venezuela, RB\",VEN,1979,55653325581.3953\n\"Venezuela, RB\",VEN,1980,67018023255.814\n\"Venezuela, RB\",VEN,1981,75367139534.8837\n\"Venezuela, RB\",VEN,1982,76559883720.9302\n\"Venezuela, RB\",VEN,1983,78540255813.9535\n\"Venezuela, RB\",VEN,1984,56091900000\n\"Venezuela, RB\",VEN,1985,57935746666.6667\n\"Venezuela, RB\",VEN,1986,58793864197.5309\n\"Venezuela, RB\",VEN,1987,45343793103.4483\n\"Venezuela, RB\",VEN,1988,58428406896.5517\n\"Venezuela, RB\",VEN,1989,42119835734.8703\n\"Venezuela, RB\",VEN,1990,47028010660.9808\n\"Venezuela, RB\",VEN,1991,51749026408.4507\n\"Venezuela, RB\",VEN,1992,58450099415.2047\n\"Venezuela, RB\",VEN,1993,58124193832.5991\n\"Venezuela, RB\",VEN,1994,56531046464.6465\n\"Venezuela, RB\",VEN,1995,74906532239.819\n\"Venezuela, RB\",VEN,1996,68263823148.8138\n\"Venezuela, RB\",VEN,1997,85843534588.6206\n\"Venezuela, RB\",VEN,1998,91331203433.1629\n\"Venezuela, RB\",VEN,1999,97976886247.3172\n\"Venezuela, RB\",VEN,2000,117140723529.412\n\"Venezuela, RB\",VEN,2001,122903960204.505\n\"Venezuela, RB\",VEN,2002,92893587733.6549\n\"Venezuela, RB\",VEN,2003,83620628582.1082\n\"Venezuela, RB\",VEN,2004,112453382329.615\n\"Venezuela, RB\",VEN,2005,145510008134.75\n\"Venezuela, RB\",VEN,2006,183477522123.894\n\"Venezuela, RB\",VEN,2007,230364012575.687\n\"Venezuela, RB\",VEN,2008,315953388510.678\n\"Venezuela, RB\",VEN,2009,329787628928.472\n\"Venezuela, RB\",VEN,2010,393190682070.491\n\"Venezuela, RB\",VEN,2011,316482190800.364\n\"Venezuela, RB\",VEN,2012,381286237847.667\n\"Venezuela, RB\",VEN,2013,371006299120.244\n\"Venezuela, RB\",VEN,2014,482359318767.703\nVietnam,VNM,1985,14094687820.7445\nVietnam,VNM,1986,26336616250.4397\nVietnam,VNM,1987,36658108850.3149\nVietnam,VNM,1988,25423812648.5941\nVietnam,VNM,1989,6293304974.59403\nVietnam,VNM,1990,6471740805.56984\nVietnam,VNM,1991,9613369520.41885\nVietnam,VNM,1992,9866990236.43587\nVietnam,VNM,1993,13180953598.1716\nVietnam,VNM,1994,16286433533.3228\nVietnam,VNM,1995,20736164458.9505\nVietnam,VNM,1996,24657470574.7501\nVietnam,VNM,1997,26843700441.5482\nVietnam,VNM,1998,27209602050.0452\nVietnam,VNM,1999,28683659006.7752\nVietnam,VNM,2000,31172518403.3162\nVietnam,VNM,2001,32685198735.3053\nVietnam,VNM,2002,35064105500.8345\nVietnam,VNM,2003,39552513316.0734\nVietnam,VNM,2004,45427854693.2554\nVietnam,VNM,2005,57633255618.2731\nVietnam,VNM,2006,66371664817.0436\nVietnam,VNM,2007,77414425532.2452\nVietnam,VNM,2008,99130304099.1274\nVietnam,VNM,2009,106014659770.222\nVietnam,VNM,2010,115931749697.241\nVietnam,VNM,2011,135539438559.709\nVietnam,VNM,2012,155820001920.492\nVietnam,VNM,2013,171222025117.381\nVietnam,VNM,2014,186204652922.262\nVietnam,VNM,2015,193241108709.536\nVietnam,VNM,2016,205276172134.901\nVirgin Islands (U.S.),VIR,1960,24200000\nVirgin Islands (U.S.),VIR,1961,25700000\nVirgin Islands (U.S.),VIR,1962,36900000\nVirgin Islands (U.S.),VIR,1963,41400000\nVirgin Islands (U.S.),VIR,1964,53800000\nVirgin Islands (U.S.),VIR,1965,66500000\nVirgin Islands (U.S.),VIR,1966,84100000\nVirgin Islands (U.S.),VIR,1967,115400000\nVirgin Islands (U.S.),VIR,1968,173800000\nVirgin Islands (U.S.),VIR,1969,211300000\nVirgin Islands (U.S.),VIR,1970,219000000\nVirgin Islands (U.S.),VIR,1971,257000000\nVirgin Islands (U.S.),VIR,1972,307100000\nVirgin Islands (U.S.),VIR,1973,351600000\nVirgin Islands (U.S.),VIR,1974,395400000\nVirgin Islands (U.S.),VIR,1975,399800000\nVirgin Islands (U.S.),VIR,1976,440000000\nVirgin Islands (U.S.),VIR,1977,461800000\nVirgin Islands (U.S.),VIR,1978,512900000\nVirgin Islands (U.S.),VIR,1979,606700032\nVirgin Islands (U.S.),VIR,1980,727800000\nVirgin Islands (U.S.),VIR,1981,821800000\nVirgin Islands (U.S.),VIR,1982,832600000\nVirgin Islands (U.S.),VIR,1983,916899968\nVirgin Islands (U.S.),VIR,1984,985400000\nVirgin Islands (U.S.),VIR,1985,990400000\nVirgin Islands (U.S.),VIR,1986,1035600000\nVirgin Islands (U.S.),VIR,1987,1147800064\nVirgin Islands (U.S.),VIR,1988,1204600064\nVirgin Islands (U.S.),VIR,1989,1343900032\nVirgin Islands (U.S.),VIR,1990,1564700032\nVirgin Islands (U.S.),VIR,1991,1671200000\nVirgin Islands (U.S.),VIR,1992,1770899968\nVirgin Islands (U.S.),VIR,1993,1996000000\nVirgin Islands (U.S.),VIR,2002,3269000000\nVirgin Islands (U.S.),VIR,2003,3453000000\nVirgin Islands (U.S.),VIR,2004,3799000000\nVirgin Islands (U.S.),VIR,2005,4439000000\nVirgin Islands (U.S.),VIR,2006,4504000000\nVirgin Islands (U.S.),VIR,2007,4803000000\nVirgin Islands (U.S.),VIR,2008,4250000000\nVirgin Islands (U.S.),VIR,2009,4203000000\nVirgin Islands (U.S.),VIR,2010,4339000000\nVirgin Islands (U.S.),VIR,2011,4239000000\nVirgin Islands (U.S.),VIR,2012,4095000000\nVirgin Islands (U.S.),VIR,2013,3764000000\nVirgin Islands (U.S.),VIR,2014,3624000000\nVirgin Islands (U.S.),VIR,2015,3765000000\nWest Bank and Gaza,PSE,1994,2843300000\nWest Bank and Gaza,PSE,1995,3282800000\nWest Bank and Gaza,PSE,1996,3409600000\nWest Bank and Gaza,PSE,1997,3759800000\nWest Bank and Gaza,PSE,1998,4067800000\nWest Bank and Gaza,PSE,1999,4271200000\nWest Bank and Gaza,PSE,2000,4313600000\nWest Bank and Gaza,PSE,2001,4003700000\nWest Bank and Gaza,PSE,2002,3555800000\nWest Bank and Gaza,PSE,2003,3968000000\nWest Bank and Gaza,PSE,2004,4329200000\nWest Bank and Gaza,PSE,2005,4831800000\nWest Bank and Gaza,PSE,2006,4910100000\nWest Bank and Gaza,PSE,2007,5505800000\nWest Bank and Gaza,PSE,2008,6673500000\nWest Bank and Gaza,PSE,2009,7268200000\nWest Bank and Gaza,PSE,2010,8913100000\nWest Bank and Gaza,PSE,2011,10465400000\nWest Bank and Gaza,PSE,2012,11279400000\nWest Bank and Gaza,PSE,2013,12476000000\nWest Bank and Gaza,PSE,2014,12715600000\nWest Bank and Gaza,PSE,2015,12673000000\nWest Bank and Gaza,PSE,2016,13397100000\n\"Yemen, Rep.\",YEM,1990,5647251908.39695\n\"Yemen, Rep.\",YEM,1991,5930370370.37037\n\"Yemen, Rep.\",YEM,1992,6463649985.01648\n\"Yemen, Rep.\",YEM,1993,5368270614.8468\n\"Yemen, Rep.\",YEM,1994,4167356037.1517\n\"Yemen, Rep.\",YEM,1995,4258788725.44991\n\"Yemen, Rep.\",YEM,1996,5785685310.86668\n\"Yemen, Rep.\",YEM,1997,6839039029.748\n\"Yemen, Rep.\",YEM,1998,6325219772.93811\n\"Yemen, Rep.\",YEM,1999,7641101221.43876\n\"Yemen, Rep.\",YEM,2000,9636342274.82408\n\"Yemen, Rep.\",YEM,2001,9854042164.67463\n\"Yemen, Rep.\",YEM,2002,10693278291.8149\n\"Yemen, Rep.\",YEM,2003,11777768086.8693\n\"Yemen, Rep.\",YEM,2004,13873500887.5612\n\"Yemen, Rep.\",YEM,2005,16753769531.6987\n\"Yemen, Rep.\",YEM,2006,19081722875.3022\n\"Yemen, Rep.\",YEM,2007,21656517484.2538\n\"Yemen, Rep.\",YEM,2008,26910851361.7555\n\"Yemen, Rep.\",YEM,2009,25130274124.2524\n\"Yemen, Rep.\",YEM,2010,30906749533.221\n\"Yemen, Rep.\",YEM,2011,32726417878.391\n\"Yemen, Rep.\",YEM,2012,35393148127.2755\n\"Yemen, Rep.\",YEM,2013,40415233436.1767\n\"Yemen, Rep.\",YEM,2014,43228583935.0365\n\"Yemen, Rep.\",YEM,2015,37733919936.2465\n\"Yemen, Rep.\",YEM,2016,27317605346.0714\nZambia,ZMB,1960,713000000\nZambia,ZMB,1961,696285714.285714\nZambia,ZMB,1962,693142857.142857\nZambia,ZMB,1963,718714285.714286\nZambia,ZMB,1964,839428571.428571\nZambia,ZMB,1965,1082857142.85714\nZambia,ZMB,1966,1264285714.28571\nZambia,ZMB,1967,1368000000\nZambia,ZMB,1968,1605857142.85714\nZambia,ZMB,1969,1965714285.71429\nZambia,ZMB,1970,1825285714.28571\nZambia,ZMB,1971,1687000000\nZambia,ZMB,1972,1910714285.71429\nZambia,ZMB,1973,2268714285.71429\nZambia,ZMB,1974,3121833333.33333\nZambia,ZMB,1975,2618666666.66667\nZambia,ZMB,1976,2746714285.71429\nZambia,ZMB,1977,2483000000\nZambia,ZMB,1978,2813375000\nZambia,ZMB,1979,3325500000\nZambia,ZMB,1980,3829500000\nZambia,ZMB,1981,3872666666.66667\nZambia,ZMB,1982,3994777777.77778\nZambia,ZMB,1983,3216307692.30769\nZambia,ZMB,1984,2739444444.44445\nZambia,ZMB,1985,2281258064.51613\nZambia,ZMB,1986,1661948717.94872\nZambia,ZMB,1987,2269894736.84211\nZambia,ZMB,1988,3713614457.83133\nZambia,ZMB,1989,3998637681.15942\nZambia,ZMB,1990,3285217391.30435\nZambia,ZMB,1991,3378882352.94118\nZambia,ZMB,1992,3181921787.7095\nZambia,ZMB,1993,3273237853.35689\nZambia,ZMB,1994,3656647744.24858\nZambia,ZMB,1995,3807067121.8609\nZambia,ZMB,1996,3597220962.00017\nZambia,ZMB,1997,4303281932.29365\nZambia,ZMB,1998,3537683046.02331\nZambia,ZMB,1999,3404311976.54941\nZambia,ZMB,2000,3600683039.73254\nZambia,ZMB,2001,4094480988.11931\nZambia,ZMB,2002,4193845678.17033\nZambia,ZMB,2003,4901839731.26571\nZambia,ZMB,2004,6221077674.77871\nZambia,ZMB,2005,8331870169.14977\nZambia,ZMB,2006,12756858899.2812\nZambia,ZMB,2007,14056957976.2648\nZambia,ZMB,2008,17910858637.9048\nZambia,ZMB,2009,15328342303.9575\nZambia,ZMB,2010,20265556273.582\nZambia,ZMB,2011,23460098339.7453\nZambia,ZMB,2012,25503370699.2015\nZambia,ZMB,2013,28045460442.1876\nZambia,ZMB,2014,27150630607.2032\nZambia,ZMB,2015,21154394545.895\nZambia,ZMB,2016,21063989682.5243\nZimbabwe,ZWE,1960,1052990400\nZimbabwe,ZWE,1961,1096646600\nZimbabwe,ZWE,1962,1117601600\nZimbabwe,ZWE,1963,1159511700\nZimbabwe,ZWE,1964,1217138000\nZimbabwe,ZWE,1965,1311435800\nZimbabwe,ZWE,1966,1281749500\nZimbabwe,ZWE,1967,1397002000\nZimbabwe,ZWE,1968,1479599900\nZimbabwe,ZWE,1969,1747998800\nZimbabwe,ZWE,1970,1884206300\nZimbabwe,ZWE,1971,2178716300\nZimbabwe,ZWE,1972,2677729400\nZimbabwe,ZWE,1973,3309353600\nZimbabwe,ZWE,1974,3982161400\nZimbabwe,ZWE,1975,4371300700\nZimbabwe,ZWE,1976,4318372000\nZimbabwe,ZWE,1977,4364382100\nZimbabwe,ZWE,1978,4351600500\nZimbabwe,ZWE,1979,5177459400\nZimbabwe,ZWE,1980,6678868200\nZimbabwe,ZWE,1981,8011373800\nZimbabwe,ZWE,1982,8539700700\nZimbabwe,ZWE,1983,7764067000\nZimbabwe,ZWE,1984,6352125900\nZimbabwe,ZWE,1985,5637259300\nZimbabwe,ZWE,1986,6217523700\nZimbabwe,ZWE,1987,6741215100\nZimbabwe,ZWE,1988,7814784100\nZimbabwe,ZWE,1989,8286322700\nZimbabwe,ZWE,1990,8783816700\nZimbabwe,ZWE,1991,8641481700\nZimbabwe,ZWE,1992,6751472200\nZimbabwe,ZWE,1993,6563813300\nZimbabwe,ZWE,1994,6890675000\nZimbabwe,ZWE,1995,7111270700\nZimbabwe,ZWE,1996,8553146600\nZimbabwe,ZWE,1997,8529571600\nZimbabwe,ZWE,1998,6401968200\nZimbabwe,ZWE,1999,6858013100\nZimbabwe,ZWE,2000,6689957600\nZimbabwe,ZWE,2001,6777384700\nZimbabwe,ZWE,2002,6342116400\nZimbabwe,ZWE,2003,5727591800\nZimbabwe,ZWE,2004,5805598400\nZimbabwe,ZWE,2005,5755215200\nZimbabwe,ZWE,2006,5443896500\nZimbabwe,ZWE,2007,5291950100\nZimbabwe,ZWE,2008,4415702800\nZimbabwe,ZWE,2009,8621573608.35314\nZimbabwe,ZWE,2010,10141859709.6169\nZimbabwe,ZWE,2011,12098450748.8603\nZimbabwe,ZWE,2012,14242490252.4289\nZimbabwe,ZWE,2013,15451768658.5469\nZimbabwe,ZWE,2014,15891049235.9908\nZimbabwe,ZWE,2015,16304667807.0657\nZimbabwe,ZWE,2016,16619960401.9038\n"
  },
  {
    "path": "frontend/.gitignore",
    "content": "# build output\ndist/\n\n# generated types\n.astro/\n\n# dependencies\nnode_modules/\n\n# logs\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\n\n# environment variables\n.env\n.env.production\n\n# macOS-specific files\n.DS_Store\n.vscode\n"
  },
  {
    "path": "frontend/README.md",
    "content": "# Astro Starter Kit: Basics\n\n```sh\nnpm create astro@latest -- --template basics\n```\n\n[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/withastro/astro/tree/latest/examples/basics)\n[![Open with CodeSandbox](https://assets.codesandbox.io/github/button-edit-lime.svg)](https://codesandbox.io/p/sandbox/github/withastro/astro/tree/latest/examples/basics)\n[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/withastro/astro?devcontainer_path=.devcontainer/basics/devcontainer.json)\n\n> 🧑‍🚀 **Seasoned astronaut?** Delete this file. Have fun!\n\n![just-the-basics](https://github.com/withastro/astro/assets/2244813/a0a5533c-a856-4198-8470-2d67b1d7c554)\n\n## 🚀 Project Structure\n\nInside of your Astro project, you'll see the following folders and files:\n\n```text\n/\n├── public/\n│   └── favicon.svg\n├── src/\n│   ├── components/\n│   │   └── Card.astro\n│   ├── layouts/\n│   │   └── Layout.astro\n│   └── pages/\n│       └── index.astro\n└── package.json\n```\n\nAstro looks for `.astro` or `.md` files in the `src/pages/` directory. Each page is exposed as a route based on its file name.\n\nThere's nothing special about `src/components/`, but that's where we like to put any Astro/React/Vue/Svelte/Preact components.\n\nAny static assets, like images, can be placed in the `public/` directory.\n\n## 🧞 Commands\n\nAll commands are run from the root of the project, from a terminal:\n\n| Command                   | Action                                           |\n| :------------------------ | :----------------------------------------------- |\n| `npm install`             | Installs dependencies                            |\n| `npm run dev`             | Starts local dev server at `localhost:4321`      |\n| `npm run build`           | Build your production site to `./dist/`          |\n| `npm run preview`         | Preview your build locally, before deploying     |\n| `npm run astro ...`       | Run CLI commands like `astro add`, `astro check` |\n| `npm run astro -- --help` | Get help using the Astro CLI                     |\n\n## 👀 Want to learn more?\n\nFeel free to check [our documentation](https://docs.astro.build) or jump into our [Discord server](https://astro.build/chat).\n"
  },
  {
    "path": "frontend/astro.config.mjs",
    "content": "import { defineConfig } from 'astro/config';\nimport solidJs from \"@astrojs/solid-js\";\nimport tailwind from \"@astrojs/tailwind\";\n\n// https://astro.build/config\nexport default defineConfig({\n  integrations: [solidJs(), tailwind()]\n});\n"
  },
  {
    "path": "frontend/package.json",
    "content": "{\n  \"name\": \"frontend\",\n  \"type\": \"module\",\n  \"version\": \"0.0.1\",\n  \"scripts\": {\n    \"dev\": \"PUBLIC_API_URL=https://chat.semanticscience.org astro dev\",\n    \"start\": \"astro dev\",\n    \"build\": \"astro check && astro build && rm -rf ../src/libre_chat/webapp && cp -R dist ../src/libre_chat/webapp\",\n    \"preview\": \"astro preview\",\n    \"astro\": \"astro\"\n  },\n  \"dependencies\": {\n    \"@astrojs/check\": \"^0.4.1\",\n    \"@astrojs/solid-js\": \"^4.0.1\",\n    \"@astrojs/tailwind\": \"^5.1.0\",\n    \"@nanostores/solid\": \"^0.4.2\",\n    \"astro\": \"^4.1.1\",\n    \"daisyui\": \"^4.5.0\",\n    \"dompurify\": \"^3.0.8\",\n    \"marked\": \"^11.1.1\",\n    \"nanostores\": \"^0.9.5\",\n    \"solid-js\": \"^1.8.9\",\n    \"tailwindcss\": \"^3.4.1\",\n    \"typescript\": \"^5.3.3\"\n  },\n  \"devDependencies\": {\n    \"@tailwindcss/typography\": \"^0.5.9\",\n    \"@types/dompurify\": \"^3.0.5\",\n    \"@types/node\": \"18.14.1\",\n    \"@typescript-eslint/eslint-plugin\": \"latest\",\n    \"@typescript-eslint/parser\": \"latest\",\n    \"@vite-pwa/astro\": \"^0.2.0\",\n    \"eslint\": \"^8.36.0\",\n    \"eslint-plugin-astro\": \"^0.24.0\",\n    \"eslint-plugin-jsx-a11y\": \"^6.7.1\",\n    \"eslint-plugin-solid\": \"latest\",\n    \"prettier\": \"^3.0.0\",\n    \"prettier-plugin-astro\": \"^0.11.0\"\n  },\n  \"prettier\": {\n    \"trailingComma\": \"none\",\n    \"tabWidth\": 2,\n    \"singleQuote\": true,\n    \"bracketSpacing\": false,\n    \"arrowParens\": \"avoid\",\n    \"useTabs\": false,\n    \"printWidth\": 120,\n    \"pluginSearchDirs\": [\n      \".\"\n    ]\n  },\n  \"eslintConfig\": {\n    \"env\": {\n      \"browser\": true,\n      \"es2021\": true\n    },\n    \"extends\": [\n      \"plugin:astro/recommended\",\n      \"plugin:solid/recommended\",\n      \"plugin:@typescript-eslint/recommended\"\n    ],\n    \"parser\": \"@typescript-eslint/parser\",\n    \"parserOptions\": {\n      \"ecmaVersion\": \"latest\",\n      \"sourceType\": \"module\"\n    },\n    \"plugins\": [\n      \"solid\",\n      \"@typescript-eslint\"\n    ],\n    \"rules\": {\n      \"@typescript-eslint/no-explicit-any\": \"off\",\n      \"@typescript-eslint/ban-ts-comment\": \"off\"\n    },\n    \"overrides\": [\n      {\n        \"files\": [\n          \"*.astro\"\n        ],\n        \"parser\": \"astro-eslint-parser\",\n        \"parserOptions\": {\n          \"parser\": \"@typescript-eslint/parser\",\n          \"extraFileExtensions\": [\n            \".astro\"\n          ]\n        }\n      }\n    ],\n    \"ignorePatterns\": [\n      \"*.lock\"\n    ]\n  }\n}\n"
  },
  {
    "path": "frontend/src/components/admin.tsx",
    "content": "// import {useStore} from '@nanostores/solid'\n// import {$chatConfig} from './nanostores'\n\nexport default function AdminUi() {\n  // const chatConfig = useStore($chatConfig)\n\n  return (\n    <main class=\"flex flex-col bg-gray-100 dark:bg-gray-800 text-black dark:text-white\" style={{\"flex-grow\": 1, \"overflow-y\": \"auto\"}}>\n\n      <div class=\"container mx-auto p-4 max-w-5xl\">\n          <p>\n            Work in progress\n          </p>\n      </div>\n\n    </main>\n  );\n}\n"
  },
  {
    "path": "frontend/src/components/chat.tsx",
    "content": "/* eslint-disable solid/no-innerhtml */\nimport { createSignal, For } from 'solid-js';\nimport {useStore} from '@nanostores/solid'\nimport {$chatConfig, apiUrl} from '../components/nanostores'\nimport {marked} from 'marked';\nimport DOMPurify from 'dompurify';\n\nexport default function Chat() {\n  const chatConfig = useStore($chatConfig)\n\n  const [messages, setMessages] = createSignal([\n\t\t{message: \"How can I help you today?\", type: \"bot\", sources: []}\n\t]);\n  const [prompt, setPrompt] = createSignal(\"\");\n  // const [selectedSource, setSelectedSource]: any = createSignal(null);\n  const [warningMsg, setWarningMsg] = createSignal(\"\");\n  const [loading, setLoading] = createSignal(false);\n  let socket: WebSocket;\n  let chatContainer: any;\n\n  const appendMessage = (message: string, type = \"bot\") => {\n    setMessages(messages => [...messages, { message, type, sources: [] }]);\n    chatContainer.scrollTop = chatContainer.scrollHeight;\n  };\n\n  // Submit user input\n\tfunction handleSubmit(event: Event) {\n\t\tevent.preventDefault();\n\t\tsubmitInput()\n\t}\n\tfunction handleInput(event: any) {\n\t\tsetPrompt(event.target.innerText);\n\t}\n\n\tfunction handleKeyPress(event: any) {\n\t\tif (event.key === 'Enter' && !event.shiftKey) {\n\t\t\t// Submit the form when Enter is pressed without Shift\n\t\t\tevent.preventDefault();\n\t\t\tsubmitInput();\n\t\t}\n\t}\n\n\t// Send the user input to the chat API\n\tfunction submitInput() {\n\t\tif (loading()) {\n\t\t\tsetWarningMsg(\"⏳ Thinking...\");\n\t\t\treturn\n\t\t}\n\t\tif (prompt().trim() !== \"\") {\n\t\t\tappendMessage(prompt(), \"user\");\n\t\t\t// TODO: next line needed to reset placeholder\n\t\t\t// if (userInput) userInput.innerText = '';\n\t\t\tconst params = {\n\t\t\t\tprompt: prompt(),\n\t\t\t};\n\t\t\tsocket.send(JSON.stringify(params));\n      setLoading(true);\n\t\t\tsetPrompt('');\n\t\t}\n\t}\n\n  // Create a new WebSocket connection\n\tfunction createWebSocket(baseUrl: Location | URL) {\n\t\tconst protocol = baseUrl.protocol === \"https:\" ? \"wss:\" : \"ws:\";\n\t\tconst websocketUrl = `${protocol}//${baseUrl.host}/chat`;\n\t\tconsole.log(`🔌 Connecting to ${websocketUrl}`);\n\t\tsocket = new WebSocket(websocketUrl);\n\t\tsocket.onopen = () => {\n\t\t\tconsole.log(\"🔌 Connected to the API websocket\");\n\t\t};\n\t\tsocket.onclose = (event) => {\n\t\t\tconsole.warn(\"WebSocket closed with code:\", event.code, \"reason:\", event.reason);\n      setLoading(false);\n\t\t\t// Attempt to reconnect after a delay\n\t\t\tsetTimeout(() => {\n\t\t\t\tconsole.log(\"♻️ Attempting to reconnect...\");\n\t\t\t\tcreateWebSocket(baseUrl);\n\t\t\t}, 2000); // 2s delay before attempting to reconnect\n\t\t};\n\t\tsocket.onerror = (error) => {\n\t\t\tconsole.error(\"WebSocket error:\", error);\n\t\t\tappendMessage(\"An error happened, please retry.\")\n      setLoading(false);\n\t\t};\n\n\t\t// Receive response from the websocket\n\t\tsocket.onmessage = (event) => {\n\t\t\tconst data = JSON.parse(event.data);\n\t\t\tif (data.type === \"start\") {\n\t\t\t\tappendMessage(\"\", \"bot\");\n\t\t\t} else if (data.type === \"stream\") {\n\t\t\t\t// console.log(\"STREAM\", data.message)\n        setMessages(messages => {\n          const newMessages = [...messages];\n          const lastIndex = newMessages.length - 1;\n          if (lastIndex >= 0) {\n            newMessages[lastIndex] = {\n              ...newMessages[lastIndex],\n              message: newMessages[lastIndex].message + data.message\n            };\n          }\n          return newMessages;\n        });\n\t\t\t} else if (data.type === \"end\") {\n\t\t\t\tif (data.sources) {\n          setMessages(messages => {\n            const newMessages = [...messages];\n            const lastIndex = newMessages.length - 1;\n            if (lastIndex >= 0) {\n              newMessages[lastIndex] = {\n                ...newMessages[lastIndex],\n                sources: data.sources\n              };\n            }\n            return newMessages;\n          });\n        }\n        console.log(\"Messages:\", messages())\n        setLoading(false);\n        setWarningMsg(\"\");\n\t\t\t}\n\t\t};\n\t};\n  const chatUrl = new URL(`${apiUrl}/chat`)\n  createWebSocket(chatUrl)\n\n  return (\n    <main class=\"flex flex-col overflow-y-auto flex-grow\">\n      <div ref={chatContainer} id=\"chat-container\" class=\"flex-grow overflow-y-auto\">\n\n          {/* Website description */}\n          <div class=\"container mx-auto px-2 max-w-5xl\">\n              <div class=\"py-4 text-center font-thin\" innerHTML={DOMPurify.sanitize(marked.parse(chatConfig().info.description).toString())} />\n          </div>\n\n          {/* Chat messages */}\n          <div id=\"chat-thread\" class=\"w-full border-t border-slate-500\">\n              <For each={messages()}>{(msg, iMsg) =>\n                  // messageElement.className = `border-b border-slate-500 ${sender === \"user\" ? \"bg-gray-100 dark:bg-gray-700\" : \"bg-gray-200 dark:bg-gray-600 hidden\"}`;\n                  <div class={`border-b border-slate-500 ${msg.type === \"user\" ? \"bg-accent\" : \"bg-secondary\"}`}>\n                    <div class=\"px-2 py-8 mx-auto max-w-5xl\">\n                      <article class=\"prose max-w-full\" innerHTML={DOMPurify.sanitize(marked.parse(msg.message).toString())} />\n                      {/* Add sources when RAG */}\n                      { msg.sources.length > 0 &&\n                        <For each={msg.sources}>{(source: any, iSource) =>\n                          <>\n                            <button class=\"m-2 px-3 py-1 text-sm bg-accent hover:bg-base-100 rounded-lg\"\n                              // @ts-ignore\n                              onClick={()=>document.getElementById(`source_modal_${iMsg()}_${iSource()}`)?.showModal()}\n                            >\n                              {source.metadata.filename}\n                            </button>\n                            <dialog id={`source_modal_${iMsg()}_${iSource()}`} class=\"modal\">\n                              <div class=\"modal-box\">\n                                <h3 class=\"font-bold text-lg\">📖 {source.metadata.filename} [p. {source.metadata.page}]</h3>\n                                <p class=\"py-4\">\n                                  {source.page_content}\n                                </p>\n                              </div>\n                              <form method=\"dialog\" class=\"modal-backdrop\">\n                                <button>close</button>\n                              </form>\n                            </dialog>\n                          </>\n                        }</For>\n                      }\n                    </div>\n                  </div>\n                }\n              </For>\n          </div>\n      </div>\n\n      <div>\n        {/* Warning message */}\n        { warningMsg().length > 0 &&\n          <div class=\"text-center\">\n            <div id=\"warning-card\" class=\"bg-orange-300 p-2 text-orange-900 text-sm rounded-lg font-semibold mb-2 hidden inline-block\" />\n          </div>\n        }\n\n        {/* List of examples */}\n        <div class=\"py-2 px-4 justify-center items-center text-xs flex space-x-2\" id=\"example-buttons\">\n          <For each={chatConfig().info.examples}>{(example) =>\n            <button onClick={() => {setPrompt(example) ; submitInput()}} class=\"px-4 py-1 bg-neutral-content text-slate-600 rounded-lg hover:bg-slate-400\">\n              {example}\n            </button>\n          }</For>\n        </div>\n\n        {/* User input */}\n        <form class=\"p-2 flex\" id=\"chat-form\" onSubmit={(e) => handleSubmit(e)}>\n          <div class=\"container flex mx-auto max-w-5xl\">\n              <div id=\"user-input\" contenteditable={true} style=\"height: max-content;\"\n                  class=\"flex-grow px-4 py-2 border border-slate-500 rounded-lg focus:outline-none focus:ring focus:ring-blue-300\"\n                  // @ts-ignore\n                  placeholder=\"Ask something...\"\n                  onInput={(e) => handleInput(e)}\n                  onKeyDown={(e) => handleKeyPress(e)}\n              />\n              <button type=\"submit\" id=\"submit-btn\" class=\"ml-2 px-4 py-2 rounded-lg text-slate-400 bg-slate-600 hover:bg-slate-700\">\n                { loading() ? (\n                  <i id=\"loading-spinner\" class=\"fas fa-spinner fa-spin\"/>\n                ) : (\n                  <i id=\"send-icon\" class=\"fas fa-paper-plane\"/>\n                )}\n              </button>\n          </div>\n        </form>\n      </div>\n    </main>\n  );\n}\n"
  },
  {
    "path": "frontend/src/components/nanostores.ts",
    "content": "import {atom} from 'nanostores';\n\ninterface ChatConfig {\n  info: any;\n  llm: any;\n  vector: any;\n}\n\n// api: process.env.PUBLIC_API_URL ? process.env.PUBLIC_API_URL : 'https://chat.semanticscience.org'\nexport const $chatConfig = atom<ChatConfig>({\n  info: {\n    title: \"Libre Chat\",\n    description: \"Open source chatbot\",\n    repository_url: \"https://github.com/vemonet/libre-chat\",\n    favicon: \"https://raw.github.com/vemonet/libre-chat/main/docs/docs/assets/logo.png\",\n    examples: [\n      \"What is the capital of the Netherlands?\"\n    ]\n  },\n  llm: {},\n  vector: {},\n});\n\nexport function setConfig(chatConfig: ChatConfig) {\n  $chatConfig.set(chatConfig);\n}\n\nexport const apiUrl = import.meta.env.PUBLIC_API_URL || window.origin;\n"
  },
  {
    "path": "frontend/src/env.d.ts",
    "content": "/// <reference path=\"../.astro/types.d.ts\" />\n/// <reference types=\"astro/client\" />\n"
  },
  {
    "path": "frontend/src/layouts/Layout.astro",
    "content": "---\nimport Nav from './Nav';\n\ninterface Props {\n\ttitle: string;\n}\n\nconst { title } = Astro.props;\n---\n\n<!doctype html>\n<html lang=\"en\" data-theme=\"dark\">\n\t<head>\n\t\t<meta charset=\"UTF-8\" />\n\t\t<meta name=\"description\" content=\"Open source chatbot\" />\n\t\t<meta name=\"viewport\" content=\"width=device-width\" />\n\t\t<link rel=\"icon\" type=\"image/svg+xml\" href=\"/logo.png\" />\n\t\t<meta name=\"generator\" content={Astro.generator} />\n\t\t<title>{title}</title>\n\t\t<link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css\">\n\t</head>\n\t<body class=\"flex flex-col h-screen\">\n\t\t<Nav client:only=\"solid\" />\n\t\t<slot />\n\t</body>\n</html>\n\n<style is:global>\n\t.nav-btns-mobile {\n\t\tdisplay: none;\n\t}\n\t@media (max-width: 640px) {\n\t\t.nav-btns-desktop {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.nav-btns-mobile {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tgap: 1rem;\n\t\t}\n\t\t#nav-btns-mobile {\n\t\t\tposition: absolute;\n\t\t\ttop: 48px;\n\t\t\tright: 0;\n\t\t\tz-index: 10;\n\t\t\tbackground-color: rgb(71 85 105);\n\t\t\tborder: 1px solid #ccc;\n\t\t\tborder-radius: 4px;\n\t\t}\n\t\t.nav-btns-mobile.show {\n\t\t\tdisplay: flex;\n\t\t}\n\t}\n\n\t/* Add placeholder in text input */\n\t[placeholder]:empty:before {\n\t\tcontent: attr(placeholder);\n\t\topacity: 0.6;\n\t\tpointer-events: none;\n\t}\n\n\t/* Add tooltip for top nav on desktop */\n\t@media (min-width: 640px) {\n\t\t[data-tooltip] {\n\t\t\tposition: relative;\n\t\t\tcursor: pointer;\n\t\t\twhite-space: nowrap;\n\t\t}\n\t\t[data-tooltip]:before {\n\t\t\tcontent: attr(data-tooltip);\n\t\t\tposition: absolute;\n\t\t\tbottom: -50px;\n\t\t\tleft: 50%;\n\t\t\ttransform: translateX(-50%);\n\t\t\tpadding: 0.5rem;\n\t\t\tbackground-color: #333;\n\t\t\tcolor: white;\n\t\t\tfont-size: 0.9rem;\n\t\t\tfont-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto;\n\t\t\tborder-radius: 4px;\n\t\t\topacity: 0;\n\t\t\tpointer-events: none;\n\t\t\ttransition: opacity 0.2s ease-in-out;\n\t\t\twhite-space: normal;\n\t\t\twidth: max-content;\n\t\t\t/* max-width: 100%;\n\t\t\twidth: 30rem; */\n\t\t}\n\t\t[data-tooltip]:hover:before {\n\t\t\topacity: 1;\n\t\t}\n\t}\n\t/* :root {\n\t\t--accent: 136, 58, 234;\n\t\t--accent-light: 224, 204, 250;\n\t\t--accent-dark: 49, 10, 101;\n\t\t--accent-gradient: linear-gradient(\n\t\t\t45deg,\n\t\t\trgb(var(--accent)),\n\t\t\trgb(var(--accent-light)) 30%,\n\t\t\twhite 60%\n\t\t);\n\t}\n\thtml {\n\t\tfont-family: system-ui, sans-serif;\n\t\tbackground: #13151a;\n\t\tbackground-size: 224px;\n\t} */\n</style>\n"
  },
  {
    "path": "frontend/src/layouts/Nav.tsx",
    "content": "import { createEffect, createSignal } from \"solid-js\";\nimport {useStore} from '@nanostores/solid'\nimport {$chatConfig, setConfig, apiUrl} from '../components/nanostores'\n\n\nexport default function Nav() {\n  const chatConfig = useStore($chatConfig)\n\n  createEffect(async () => {\n    const response = await fetch(`${apiUrl}/config`);\n    const data = await response.json();\n    setConfig(data)\n  });\n\n  // const location = useLocation();\n  // const active = (path: string) =>\n  //   path == location.pathname\n  //     ? \"border-sky-600\"\n  //     : \"border-transparent hover:border-sky-600\";\n\n  const [theme, setTheme] = createSignal(\"dark\");\n  const toggleTheme = () => {\n    const newTheme = theme() === \"light\" ? \"dark\" : \"light\";\n    setTheme(newTheme);\n    document.documentElement.setAttribute(\"data-theme\", newTheme);\n  };\n\n  return (\n    <div class=\"navbar bg-base-300 min-h-0 p-0\">\n      <div class=\"navbar-start\">\n        {/* <ul class=\"menu menu-horizontal px-1 hidden lg:flex\">\n          <li><a href=\"/\">Home</a></li>\n          <li><a href=\"/admin\">Admin</a></li>\n        </ul>\n        <div class=\"dropdown lg:hidden\">\n          <div tabindex=\"0\" role=\"button\" class=\"btn btn-ghost lg:hidden\">\n            <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"h-5 w-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 6h16M4 12h8m-8 6h16\" /></svg>\n          </div>\n          <ul tabindex=\"0\" class=\"menu menu-sm dropdown-content mt-3 z-[1] p-2 shadow bg-base-100 rounded-box w-52\">\n            <li><a href=\"/\">Home</a></li>\n            <li><a href=\"/admin\">Admin</a></li>\n          </ul>\n        </div> */}\n      </div>\n\n      <div class=\"navbar-center\">\n        {/* <a class=\"btn btn-ghost text-xl\">daisyUI</a> */}\n        <div class=\"text-xl font-thin\">\n          {chatConfig().info.title}\n        </div>\n      </div>\n\n      <div class=\"navbar-end\">\n        {/* Desktop */}\n        <div class=\"space-x-3 hidden items-center lg:flex\">\n          {/* Add light/dark theme switch */}\n          <label class=\"cursor-pointer grid place-items-center\">\n            <input type=\"checkbox\" onClick={toggleTheme} value=\"dark\" checked class=\"toggle theme-controller bg-base-content row-start-1 col-start-1 col-span-2\"/>\n            <svg class=\"col-start-1 row-start-1 stroke-base-100 fill-base-100\" xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"5\"/><path d=\"M12 1v2M12 21v2M4.2 4.2l1.4 1.4M18.4 18.4l1.4 1.4M1 12h2M21 12h2M4.2 19.8l1.4-1.4M18.4 5.6l1.4-1.4\"/></svg>\n            <svg class=\"col-start-2 row-start-1 stroke-base-100 fill-base-100\" xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z\"></path></svg>\n          </label>\n          <a href=\"/gradio/\" target=\"_blank\" data-tooltip=\"Gradio UI\">\n              <button class=\"p-1 rounded-lg hover:bg-gray-500\">\n                  <img class=\"h-5\" src=\"/gradio_logo.svg\" />\n              </button>\n          </a>\n          <a href=\"/docs\" target=\"_blank\" data-tooltip=\"OpenAPI documentation\">\n              <button class=\"p-1 rounded-lg hover:bg-gray-500\">\n                  <img class=\"h-5\" src=\"/openapi_logo.svg\" />\n              </button>\n          </a>\n          <a href={chatConfig().info.repository_url} target=\"_blank\" rel=\"noopener noreferrer\">\n              <button data-tooltip=\"Source code\" class=\"px-2 py-1 mr-8 rounded-lg hover:bg-gray-500\">\n                  <i class=\"fab fa-github text-xl\" />\n              </button>\n          </a>\n        </div>\n\n        {/* Mobile */}\n        <div class=\"dropdown dropdown-end lg:hidden\">\n          <div tabindex=\"0\" role=\"button\" class=\"btn btn-ghost lg:hidden\">\n            <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"h-5 w-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 6h16M4 12h8m-8 6h16\" /></svg>\n          </div>\n          <ul tabindex=\"0\" class=\"menu menu-sm dropdown-content items-center mt-3 z-[1] p-2 shadow bg-base-100 rounded-box dropdown-left\">\n            {/* <li>\n              <label class=\"cursor-pointer grid place-items-center\">\n                <input type=\"checkbox\" onClick={toggleTheme} value=\"dark\" checked class=\"toggle theme-controller bg-base-content row-start-1 col-start-1 col-span-2\"/>\n                <svg class=\"col-start-1 row-start-1 stroke-base-100 fill-base-100\" xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"5\"/><path d=\"M12 1v2M12 21v2M4.2 4.2l1.4 1.4M18.4 18.4l1.4 1.4M1 12h2M21 12h2M4.2 19.8l1.4-1.4M18.4 5.6l1.4-1.4\"/></svg>\n                <svg class=\"col-start-2 row-start-1 stroke-base-100 fill-base-100\" xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z\"></path></svg>\n              </label>\n            </li> */}\n            <li>\n              <a href=\"/gradio/\" target=\"_blank\" data-tooltip=\"Gradio UI\">\n                <img class=\"h-5\" src=\"/gradio_logo.svg\" />\n              </a>\n            </li>\n            <li>\n              <a href=\"/docs\" target=\"_blank\" data-tooltip=\"OpenAPI documentation\">\n                <img class=\"h-5\" src=\"/openapi_logo.svg\" />\n              </a>\n            </li>\n            <li>\n              <a href={chatConfig().info.repository_url} target=\"_blank\" rel=\"noopener noreferrer\">\n                <i class=\"fab fa-github text-xl\" />\n              </a>\n            </li>\n          </ul>\n        </div>\n      </div>\n\n    </div>\n  );\n}\n"
  },
  {
    "path": "frontend/src/pages/admin.astro",
    "content": "---\nimport Layout from '../layouts/Layout.astro';\nimport AdminUi from '../components/admin';\n---\n\n<Layout title=\"Libre Chat\">\n\t<AdminUi client:only=\"solid\" />\n</Layout>\n"
  },
  {
    "path": "frontend/src/pages/index.astro",
    "content": "---\nimport Layout from '../layouts/Layout.astro';\nimport Chat from '../components/chat';\n---\n\n<Layout title=\"Libre Chat\">\n\t<Chat client:only=\"solid\" />\n</Layout>\n"
  },
  {
    "path": "frontend/tailwind.config.mjs",
    "content": "/** @type {import('tailwindcss').Config} */\nexport default {\n\tcontent: ['./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}'],\n\tplugins: [require(\"daisyui\")],\n\t// https://daisyui.com/docs/colors/\n  daisyui: {\n    themes: [\n      {\n        light: {\n          ...require(\"daisyui/src/theming/themes\")[\"cupcake\"],\n\t\t\t\t\t'accent': '#f3f4f6',\n\t\t\t\t\t'secondary': '#e5e7eb',\n\t\t\t\t\t// primary: \"teal\",\n        },\n      },\n\t\t\t{\n        dark: {\n          ...require(\"daisyui/src/theming/themes\")[\"dark\"],\n\t\t\t\t\t'accent': '#374151',\n\t\t\t\t\t'secondary': '#4b5563',\n        },\n      },\n    ],\n  },\n  theme: {\n      extend: {\n          // Remove backticks from inline code\n          typography: {\n              DEFAULT: {\n                  css: {\n                      // Fix <code> rendering\n                      'code::before': {\n                          content: '\"\"'\n                      },\n                      'code::after': {\n                          content: '\"\"'\n                      },\n                      'code': {\n                          \"border-radius\": \"0.375rem\",\n                          \"padding\": \"0.35em\",\n                          \"color\": \"var(--tw-prose-pre-code)\",\n                          \"background-color\": \"var(--tw-prose-pre-bg)\",\n                          \"font-weight\": \"normal\"\n                      },\n                  }\n              }\n          },\n      },\n  },\n\t// theme: {\n\t// \textend: {},\n\t// },\n\t// plugins: [],\n}\n"
  },
  {
    "path": "frontend/tsconfig.json",
    "content": "{\n  \"extends\": \"astro/tsconfigs/strict\",\n  \"compilerOptions\": {\n    \"jsx\": \"preserve\",\n    \"jsxImportSource\": \"solid-js\"\n  }\n}\n"
  },
  {
    "path": "pyproject.toml",
    "content": "[build-system]\nrequires = [\"hatchling\"]\nbuild-backend = \"hatchling.build\"\n\n[project]\nrequires-python = \">=3.8\"\nname = \"libre-chat\"\ndescription = \"Free and Open Source Large Language Model (LLM) chatbot web UI and API. Self-hosted, offline capable and easy to setup. Powered by LangChain and Llama 2.\"\nreadme = \"README.md\"\nlicense = { file = \"LICENSE.txt\" }\nauthors = [\n    { name = \"Vincent Emonet\", email = \"vincent.emonet@gmail.com\" },\n]\nmaintainers = [\n    { name = \"Vincent Emonet\", email = \"vincent.emonet@gmail.com\" },\n]\nkeywords = [\n    \"Python\",\n]\nclassifiers = [\n    \"License :: OSI Approved :: MIT License\",\n    \"Operating System :: OS Independent\",\n    \"Programming Language :: Python :: 3\",\n    \"Programming Language :: Python :: 3.8\",\n    \"Programming Language :: Python :: 3.9\",\n    \"Programming Language :: Python :: 3.10\",\n    \"Programming Language :: Python :: 3.11\",\n]\ndynamic = [\"version\"]\n\ndependencies = [\n    \"gradio >=4.0.0\",\n    \"langchain\",\n    \"langchain-community\",\n    \"llama-cpp-python\",      # To perform LLM inference\n    \"qdrant-client\",         # Vectorstore\n    # \"fastembed\",\n    \"faiss-cpu >=1.7.4\",     # To generate the vectorstore\n    \"sentence_transformers\", # To produce the embeddings\n    \"pypdf\",                 # For PDFloader, or use PDFMiner?\n    \"unstructured\",          # For the email loader\n    \"typer >=0.6.0\",\n    \"fastapi\",\n    \"pydantic >=2.0.0\",\n    \"pydantic-settings\",\n    \"pydantic-yaml\",\n    \"requests\",\n    \"tqdm\",\n    \"uvicorn\",\n    \"gunicorn\",\n    # \"redis\",               # To add a shared store for all workers\n]\n\n\n[project.scripts]\nlibre-chat = \"libre_chat.__main__:cli\"\n\n\n[project.optional-dependencies]\ntest = [\n    \"pytest >=7.4.0\",\n    \"pytest-cov >=3.0.0\",\n    \"pytest-asyncio\",\n    \"pre-commit\",\n    \"mypy >=1.4.1\",\n    \"httpx\",\n    \"pip-tools\",\n    \"types-requests\",\n    \"types-setuptools\",\n    # \"types-redis\",\n]\ndoc = [\n    \"mkdocs >=1.4.2\",\n    \"mkdocs-material >=8.2.7\",\n    \"mkdocstrings[python] >=0.19.1\",\n    \"mdx-include >=1.4.1\",\n    \"mkdocs-markdownextradata-plugin >=0.2.5\", # ,<0.3.0\n    \"mkdocs-open-in-new-tab\",\n]\nwindows = [\n    \"python-magic-bin\" # Required by magic, used by unstructured for the EmailLoader https://pydigger.com/pypi/python-magic\n]\ngpu = [\n    \"faiss-gpu\",\n    # \"ctransformers[cuda]\",\n]\n\n\n[project.urls]\nHomepage = \"https://github.com/vemonet/libre-chat\"\nDocumentation = \"https://github.com/vemonet/libre-chat\"\nHistory = \"https://github.com/vemonet/libre-chat/releases\"\nTracker = \"https://github.com/vemonet/libre-chat/issues\"\nSource = \"https://github.com/vemonet/libre-chat\"\n\n\n# ENVIRONMENTS AND SCRIPTS\n[tool.hatch.envs.default]\nfeatures = [\n    \"test\",\n    \"doc\",\n]\npost-install-commands = [\n    \"pre-commit install\",\n]\n\n[tool.hatch.envs.default.scripts]\ndev = \"uvicorn scripts.main:app {args}\"\nvector = [\n    \"libre-chat start config/chat-vectorstore-qa.yml\",\n]\nvector-build = [\n    \"rm -rf vectorstore/db_faiss\",\n    \"vector\",\n]\nfmt = [\n    \"pre-commit run --all --all-files\",\n    \"mypy\",\n]\ntest = [\n    \"fmt\",\n    \"pytest {args}\",\n]\ncov = [\n    \"fmt\",\n    \"pytest --cov-report html {args}\",\n    \"cov-start\",\n]\ncov-start = \"python -m http.server 3000 --directory ./htmlcov\"\ndocs = \"mkdocs serve -a localhost:8001 -f docs/mkdocs.yml\"\nrequirements = \"pip-compile -o scripts/requirements.txt pyproject.toml\"\nrelease = [\n    \"hatch build\",\n    \"hatch publish\",\n    \"gh release create\",\n]\n\n[[tool.hatch.envs.all.matrix]]\npython = [\"3.8\", \"3.9\", \"3.10\", \"3.11\"]\n\n\n\n## TOOLS\n[tool.hatch.build.targets.wheel]\npackages = [\"src/libre_chat\"]\n\n[tool.hatch.version]\npath = \"src/libre_chat/__init__.py\"\n\n[tool.hatch.build.targets.sdist]\nexclude = [\n    \"/.github\",\n    \"/documents\",\n]\n\n\n# https://coverage.readthedocs.io/en/7.2.2/config.html\n[tool.coverage.run]\nbranch = true\nparallel = true # Append process id to the data file name\nsource = [ \"src/libre_chat\" ]\n\n[tool.coverage.paths]\nlibre_chat = [\"src/libre_chat\", \"*/src/libre_chat\", \"*\\\\src\\\\libre_chat\"]\n\n[tool.coverage.report]\nomit = [\"tests/*\", \"src/libre_chat/ui.py\"]\nexclude_lines = [\n    \"no cov\",\n    \"if __name__ == .__main__.:\",\n    \"if TYPE_CHECKING:\",\n]\nshow_missing = true\n# fail_under = 85 skip_covered = true\n\n\n[tool.mypy]\nfiles = [\"src/\"]\nstrict = true\nimplicit_reexport = true\nfollow_imports = \"normal\"\nignore_missing_imports = true\npretty = true\nshow_column_numbers = true\nwarn_no_return = true\nwarn_unused_ignores = true\nwarn_redundant_casts = true\ndisallow_untyped_calls = true\ndisallow_untyped_defs = true\ndisallow_any_generics = true\nno_implicit_optional = true\n\n\n[tool.pytest.ini_options]\naddopts = [\n    \"-vvv\",           # Verbose level 3\n    \"--durations=10\", # Show 10 slowest tests durations\n    \"--cov=src\",\n    \"--color=yes\",\n    \"--cov-report=term-missing\",\n    \"--cov-fail-under=85\",\n    # \"-n\", \"4\", # should run in parallel on 4 processes, requires pytest-xdist\n]\nfilterwarnings = [\n    # \"ignore::DeprecationWarning\", # Ignore all deprecation warnings\n    \"ignore::DeprecationWarning:httpx.*:\",\n    \"ignore::DeprecationWarning:setuptools.*:\",\n    \"ignore::DeprecationWarning:gradio.*:\",\n    \"ignore::DeprecationWarning:distutils.*\",\n    \"ignore::DeprecationWarning:pkg_resources.*\",\n    \"ignore::DeprecationWarning:faiss.*:\",\n    \"ignore::DeprecationWarning:altair.*:\",\n]\n\n\n[tool.black]\ncolor = true\nline-length = 100\ntarget-version = ['py38']\nskip-string-normalization = false\n\n\n# https://github.com/charliermarsh/ruff#supported-rules\n[tool.ruff]\nsrc = [\"src\", \"tests\", \"scripts\"]\ntarget-version = \"py38\"\nline-length = 120\nselect = [\n    \"I\",     # isort\n    \"N\",     # pep8-naming\n    \"S\",     # bandit\n    \"A\",     # flake8-builtins\n    \"YTT\",   # flake8-2020\n    \"B\",     # flake8-bugbear\n    \"C\",     # flake8-comprehensions\n    \"ICN\",   # flake8-import-conventions\n    \"SIM\",   # flake8-simplify\n    \"TID\",   # flake8-tidy-imports\n    \"Q\",     # flake8-quotes\n    # \"FBT\",   # flake8-boolean-trap\n    \"F\",     # pyflakes\n    \"UP\",    # pyupgrade\n    \"E\",     # pycodestyle errors\n    \"W\",     # pycodestyle warnings\n    \"PLC\",   # pylint convention\n    \"PLE\",   # pylint error\n    # \"PLR\",   # pylint refactor Magic value used in comparison, consider replacing 400 with a constant variable\n    \"PLW\",   # pylint warning\n    \"RUF\",   # ruff specific\n    \"T\",\n]\nignore = [\n    \"B007\",   # Loop control variable `x` not used within loop body\n    \"E501\",   # line too long\n    \"C901\",   # too complex\n    \"RUF012\", # Mutable class attributes should be annotated with `typing.ClassVar`\n    \"T201\",   # do not use print\n    \"B008\",   # do not perform function calls in argument defaults\n]\n\n[tool.ruff.per-file-ignores]\n\"__init__.py\" = [\"I\", \"F401\"] # module imported but unused\n# Tests can use magic values, assertions, and relative imports\n\"tests/**/*\" = [\"PLR2004\", \"S101\", \"S105\", \"TID252\"]\n\n[tool.ruff.mccabe]\nmax-complexity = 10\n\n[tool.ruff.isort]\nknown-third-party = [\"langchain\"]\n\n\n# If you need to import packages from git URLs\n# [tool.hatch.metadata]\n# allow-direct-references = true\n# [tool.hatch.build]\n# sources = [\"src/libre_chat\"]\n"
  },
  {
    "path": "scripts/deploy.sh",
    "content": "#!/bin/bash\n\nif [ \"$1\" = \"--no-cache\" ]; then\n    echo \"📦️ Building without cache\"\n    ssh idsg1 'cd /mnt/um-share-drive/vemonet/libre-chat ; git pull ; docker compose build --no-cache ; docker compose down ; docker compose up --force-recreate -d'\nelse\n    echo \"♻️  Building with cache\"\n    ssh idsg1 'cd /mnt/um-share-drive/vemonet/libre-chat ; git pull ; docker compose up --force-recreate --build -d'\nfi\n"
  },
  {
    "path": "scripts/download.sh",
    "content": "#!/bin/bash\n\n# Use this script to quickly download the default model and embeddings\n\n# https://public.ukp.informatik.tu-darmstadt.de/reimers/sentence-transformers/v0.2/\nmkdir -p embeddings\ncd embeddings\nwget -N https://public.ukp.informatik.tu-darmstadt.de/reimers/sentence-transformers/v0.2/all-MiniLM-L6-v2.zip\nunzip -d all-MiniLM-L6-v2 all-MiniLM-L6-v2.zip\nrm all-MiniLM-L6-v2.zip\ncd ..\n\nmkdir -p models\ncd models\nwget -N https://huggingface.co/TheBloke/Mixtral-8x7B-Instruct-v0.1-GGUF/resolve/main/mixtral-8x7b-instruct-v0.1.Q2_K.gguf\n\ncd ..\n"
  },
  {
    "path": "scripts/init.py",
    "content": "import logging\nimport os\nimport shutil\n\nfrom libre_chat import log, parse_conf\n\n# from libre_chat.vectorstore import build_vectorstore\n\n# Initialize the Llm at docker run (pre-download files if not present, build the vectorstore)\n# Runs before the API to avoid running on multiple workers\n\nlogging.basicConfig(level=logging.getLevelName(\"INFO\"))\n\nlog.info(\"🚀 Initializing the Llm: download files if not present, build vectorstore\")\n\n# TODO: take conf as arg?\nconf = parse_conf(\"chat.yml\")\n\ndefault_model = \"mixtral-8x7b-instruct-v0.1.Q2_K.gguf\"\ndefault_embeddings = \"all-MiniLM-L6-v2\"\ndefault_document = \"drug_repositioning_for_alzheimer_disease.pdf\"\n\n# Put the default 7B model in /data if not present\nif not os.path.exists(conf.llm.model_path) and conf.llm.model_path.endswith(default_model):\n    try:\n        log.info(\"Initializing default model from docker image\")\n        shutil.move(f\"/app/models/{default_model}\", conf.llm.model_path)\n    except Exception as e:\n        log.info(f\"Could not initialize default model from docker image: {e}\")\n\nif not os.path.exists(conf.vector.embeddings_path) and conf.vector.embeddings_path.endswith(\n    default_embeddings\n):\n    try:\n        log.info(\"Initializing default embeddings from docker image\")\n        shutil.move(f\"/app/embeddings/{default_embeddings}\", conf.vector.embeddings_path)\n    except Exception as e:\n        log.info(f\"Could not initialize default embeddings from docker image: {e}\")\n\n# if len(os.listdir(conf.vector.documents_path)) < 1:\n#     # If no docs we add a default one to enable building the vectorstore\n#     shutil.copy(f\"/app/documents/{default_document}\", conf.vector.documents_path)\n\n# build_vectorstore(conf)\n\n# llm = Llm(conf=conf)\n"
  },
  {
    "path": "scripts/langchain.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 🦙 Local LLM inference with LlamaCpp\\n\",\n    \"\\n\",\n    \"Download the model in GGUF format (~15G):\\n\",\n    \"\\n\",\n    \"```bash\\n\",\n    \"wget https://huggingface.co/TheBloke/Mixtral-8x7B-Instruct-v0.1-GGUF/resolve/main/mixtral-8x7b-instruct-v0.1.Q2_K.gguf\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"Make sure to pick up a model already fine-tuned for chat (they should have `instruct` or `chat` in the name)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"Requirement already satisfied: langchain in /home/vemonet/dev/llm/libre-chat/.venv/libre-chat/lib/python3.10/site-packages (0.1.0)\\n\",\n      \"Requirement already satisfied: langchain-community in /home/vemonet/dev/llm/libre-chat/.venv/libre-chat/lib/python3.10/site-packages (0.0.9)\\n\",\n      \"Requirement already satisfied: llama-cpp-python in /home/vemonet/dev/llm/libre-chat/.venv/libre-chat/lib/python3.10/site-packages (0.2.27)\\n\",\n      \"Requirement already satisfied: PyYAML>=5.3 in /home/vemonet/dev/llm/libre-chat/.venv/libre-chat/lib/python3.10/site-packages (from langchain) (6.0.1)\\n\",\n      \"Requirement already satisfied: SQLAlchemy<3,>=1.4 in /home/vemonet/dev/llm/libre-chat/.venv/libre-chat/lib/python3.10/site-packages (from langchain) (2.0.25)\\n\",\n      \"Requirement already satisfied: aiohttp<4.0.0,>=3.8.3 in /home/vemonet/dev/llm/libre-chat/.venv/libre-chat/lib/python3.10/site-packages (from langchain) (3.9.1)\\n\",\n      \"Requirement already satisfied: async-timeout<5.0.0,>=4.0.0 in /home/vemonet/dev/llm/libre-chat/.venv/libre-chat/lib/python3.10/site-packages (from langchain) (4.0.3)\\n\",\n      \"Requirement already satisfied: dataclasses-json<0.7,>=0.5.7 in /home/vemonet/dev/llm/libre-chat/.venv/libre-chat/lib/python3.10/site-packages (from langchain) (0.6.3)\\n\",\n      \"Requirement already satisfied: jsonpatch<2.0,>=1.33 in /home/vemonet/dev/llm/libre-chat/.venv/libre-chat/lib/python3.10/site-packages (from langchain) (1.33)\\n\",\n      \"Requirement already satisfied: langchain-core<0.2,>=0.1.7 in /home/vemonet/dev/llm/libre-chat/.venv/libre-chat/lib/python3.10/site-packages (from langchain) (0.1.7)\\n\",\n      \"Requirement already satisfied: langsmith<0.1.0,>=0.0.77 in /home/vemonet/dev/llm/libre-chat/.venv/libre-chat/lib/python3.10/site-packages (from langchain) (0.0.77)\\n\",\n      \"Requirement already satisfied: numpy<2,>=1 in /home/vemonet/dev/llm/libre-chat/.venv/libre-chat/lib/python3.10/site-packages (from langchain) (1.26.3)\\n\",\n      \"Requirement already satisfied: pydantic<3,>=1 in /home/vemonet/dev/llm/libre-chat/.venv/libre-chat/lib/python3.10/site-packages (from langchain) (2.4.0)\\n\",\n      \"Requirement already satisfied: requests<3,>=2 in /home/vemonet/dev/llm/libre-chat/.venv/libre-chat/lib/python3.10/site-packages (from langchain) (2.31.0)\\n\",\n      \"Requirement already satisfied: tenacity<9.0.0,>=8.1.0 in /home/vemonet/dev/llm/libre-chat/.venv/libre-chat/lib/python3.10/site-packages (from langchain) (8.2.3)\\n\",\n      \"Requirement already satisfied: typing-extensions>=4.5.0 in /home/vemonet/dev/llm/libre-chat/.venv/libre-chat/lib/python3.10/site-packages (from llama-cpp-python) (4.9.0)\\n\",\n      \"Requirement already satisfied: diskcache>=5.6.1 in /home/vemonet/dev/llm/libre-chat/.venv/libre-chat/lib/python3.10/site-packages (from llama-cpp-python) (5.6.3)\\n\",\n      \"Requirement already satisfied: attrs>=17.3.0 in /home/vemonet/dev/llm/libre-chat/.venv/libre-chat/lib/python3.10/site-packages (from aiohttp<4.0.0,>=3.8.3->langchain) (23.2.0)\\n\",\n      \"Requirement already satisfied: multidict<7.0,>=4.5 in /home/vemonet/dev/llm/libre-chat/.venv/libre-chat/lib/python3.10/site-packages (from aiohttp<4.0.0,>=3.8.3->langchain) (6.0.4)\\n\",\n      \"Requirement already satisfied: yarl<2.0,>=1.0 in /home/vemonet/dev/llm/libre-chat/.venv/libre-chat/lib/python3.10/site-packages (from aiohttp<4.0.0,>=3.8.3->langchain) (1.9.4)\\n\",\n      \"Requirement already satisfied: frozenlist>=1.1.1 in /home/vemonet/dev/llm/libre-chat/.venv/libre-chat/lib/python3.10/site-packages (from aiohttp<4.0.0,>=3.8.3->langchain) (1.4.1)\\n\",\n      \"Requirement already satisfied: aiosignal>=1.1.2 in /home/vemonet/dev/llm/libre-chat/.venv/libre-chat/lib/python3.10/site-packages (from aiohttp<4.0.0,>=3.8.3->langchain) (1.3.1)\\n\",\n      \"Requirement already satisfied: marshmallow<4.0.0,>=3.18.0 in /home/vemonet/dev/llm/libre-chat/.venv/libre-chat/lib/python3.10/site-packages (from dataclasses-json<0.7,>=0.5.7->langchain) (3.20.1)\\n\",\n      \"Requirement already satisfied: typing-inspect<1,>=0.4.0 in /home/vemonet/dev/llm/libre-chat/.venv/libre-chat/lib/python3.10/site-packages (from dataclasses-json<0.7,>=0.5.7->langchain) (0.9.0)\\n\",\n      \"Requirement already satisfied: jsonpointer>=1.9 in /home/vemonet/dev/llm/libre-chat/.venv/libre-chat/lib/python3.10/site-packages (from jsonpatch<2.0,>=1.33->langchain) (2.4)\\n\",\n      \"Requirement already satisfied: anyio<5,>=3 in /home/vemonet/dev/llm/libre-chat/.venv/libre-chat/lib/python3.10/site-packages (from langchain-core<0.2,>=0.1.7->langchain) (4.2.0)\\n\",\n      \"Requirement already satisfied: packaging<24.0,>=23.2 in /home/vemonet/dev/llm/libre-chat/.venv/libre-chat/lib/python3.10/site-packages (from langchain-core<0.2,>=0.1.7->langchain) (23.2)\\n\",\n      \"Requirement already satisfied: annotated-types>=0.4.0 in /home/vemonet/dev/llm/libre-chat/.venv/libre-chat/lib/python3.10/site-packages (from pydantic<3,>=1->langchain) (0.6.0)\\n\",\n      \"Requirement already satisfied: pydantic-core==2.10.0 in /home/vemonet/dev/llm/libre-chat/.venv/libre-chat/lib/python3.10/site-packages (from pydantic<3,>=1->langchain) (2.10.0)\\n\",\n      \"Requirement already satisfied: charset-normalizer<4,>=2 in /home/vemonet/dev/llm/libre-chat/.venv/libre-chat/lib/python3.10/site-packages (from requests<3,>=2->langchain) (3.3.2)\\n\",\n      \"Requirement already satisfied: idna<4,>=2.5 in /home/vemonet/dev/llm/libre-chat/.venv/libre-chat/lib/python3.10/site-packages (from requests<3,>=2->langchain) (3.6)\\n\",\n      \"Requirement already satisfied: urllib3<3,>=1.21.1 in /home/vemonet/dev/llm/libre-chat/.venv/libre-chat/lib/python3.10/site-packages (from requests<3,>=2->langchain) (1.26.18)\\n\",\n      \"Requirement already satisfied: certifi>=2017.4.17 in /home/vemonet/dev/llm/libre-chat/.venv/libre-chat/lib/python3.10/site-packages (from requests<3,>=2->langchain) (2023.11.17)\\n\",\n      \"Requirement already satisfied: greenlet!=0.4.17 in /home/vemonet/dev/llm/libre-chat/.venv/libre-chat/lib/python3.10/site-packages (from SQLAlchemy<3,>=1.4->langchain) (3.0.3)\\n\",\n      \"Requirement already satisfied: sniffio>=1.1 in /home/vemonet/dev/llm/libre-chat/.venv/libre-chat/lib/python3.10/site-packages (from anyio<5,>=3->langchain-core<0.2,>=0.1.7->langchain) (1.3.0)\\n\",\n      \"Requirement already satisfied: exceptiongroup>=1.0.2 in /home/vemonet/dev/llm/libre-chat/.venv/libre-chat/lib/python3.10/site-packages (from anyio<5,>=3->langchain-core<0.2,>=0.1.7->langchain) (1.2.0)\\n\",\n      \"Requirement already satisfied: mypy-extensions>=0.3.0 in /home/vemonet/dev/llm/libre-chat/.venv/libre-chat/lib/python3.10/site-packages (from typing-inspect<1,>=0.4.0->dataclasses-json<0.7,>=0.5.7->langchain) (1.0.0)\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"import sys\\n\",\n    \"!{sys.executable} -m pip install langchain langchain-community llama-cpp-python\\n\",\n    \"\\n\",\n    \"from langchain.prompts import ChatPromptTemplate\\n\",\n    \"from langchain_community.llms import LlamaCpp\\n\",\n    \"from langchain_core.output_parsers import StrOutputParser\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"llama_model_loader: loaded meta data with 26 key-value pairs and 995 tensors from ../models/mixtral-8x7b-instruct-v0.1.Q2_K.gguf (version GGUF V3 (latest))\\n\",\n      \"llama_model_loader: Dumping metadata keys/values. Note: KV overrides do not apply in this output.\\n\",\n      \"llama_model_loader: - kv   0:                       general.architecture str              = llama\\n\",\n      \"llama_model_loader: - kv   1:                               general.name str              = mistralai_mixtral-8x7b-instruct-v0.1\\n\",\n      \"llama_model_loader: - kv   2:                       llama.context_length u32              = 32768\\n\",\n      \"llama_model_loader: - kv   3:                     llama.embedding_length u32              = 4096\\n\",\n      \"llama_model_loader: - kv   4:                          llama.block_count u32              = 32\\n\",\n      \"llama_model_loader: - kv   5:                  llama.feed_forward_length u32              = 14336\\n\",\n      \"llama_model_loader: - kv   6:                 llama.rope.dimension_count u32              = 128\\n\",\n      \"llama_model_loader: - kv   7:                 llama.attention.head_count u32              = 32\\n\",\n      \"llama_model_loader: - kv   8:              llama.attention.head_count_kv u32              = 8\\n\",\n      \"llama_model_loader: - kv   9:                         llama.expert_count u32              = 8\\n\",\n      \"llama_model_loader: - kv  10:                    llama.expert_used_count u32              = 2\\n\",\n      \"llama_model_loader: - kv  11:     llama.attention.layer_norm_rms_epsilon f32              = 0.000010\\n\",\n      \"llama_model_loader: - kv  12:                       llama.rope.freq_base f32              = 1000000.000000\\n\",\n      \"llama_model_loader: - kv  13:                          general.file_type u32              = 10\\n\",\n      \"llama_model_loader: - kv  14:                       tokenizer.ggml.model str              = llama\\n\",\n      \"llama_model_loader: - kv  15:                      tokenizer.ggml.tokens arr[str,32000]   = [\\\"<unk>\\\", \\\"<s>\\\", \\\"</s>\\\", \\\"<0x00>\\\", \\\"<...\\n\",\n      \"llama_model_loader: - kv  16:                      tokenizer.ggml.scores arr[f32,32000]   = [0.000000, 0.000000, 0.000000, 0.0000...\\n\",\n      \"llama_model_loader: - kv  17:                  tokenizer.ggml.token_type arr[i32,32000]   = [2, 3, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, ...\\n\",\n      \"llama_model_loader: - kv  18:                tokenizer.ggml.bos_token_id u32              = 1\\n\",\n      \"llama_model_loader: - kv  19:                tokenizer.ggml.eos_token_id u32              = 2\\n\",\n      \"llama_model_loader: - kv  20:            tokenizer.ggml.unknown_token_id u32              = 0\\n\",\n      \"llama_model_loader: - kv  21:            tokenizer.ggml.padding_token_id u32              = 0\\n\",\n      \"llama_model_loader: - kv  22:               tokenizer.ggml.add_bos_token bool             = true\\n\",\n      \"llama_model_loader: - kv  23:               tokenizer.ggml.add_eos_token bool             = false\\n\",\n      \"llama_model_loader: - kv  24:                    tokenizer.chat_template str              = {{ bos_token }}{% for message in mess...\\n\",\n      \"llama_model_loader: - kv  25:               general.quantization_version u32              = 2\\n\",\n      \"llama_model_loader: - type  f32:   65 tensors\\n\",\n      \"llama_model_loader: - type  f16:   32 tensors\\n\",\n      \"llama_model_loader: - type q8_0:   64 tensors\\n\",\n      \"llama_model_loader: - type q2_K:  801 tensors\\n\",\n      \"llama_model_loader: - type q3_K:   32 tensors\\n\",\n      \"llama_model_loader: - type q6_K:    1 tensors\\n\",\n      \"llm_load_vocab: special tokens definition check successful ( 259/32000 ).\\n\",\n      \"llm_load_print_meta: format           = GGUF V3 (latest)\\n\",\n      \"llm_load_print_meta: arch             = llama\\n\",\n      \"llm_load_print_meta: vocab type       = SPM\\n\",\n      \"llm_load_print_meta: n_vocab          = 32000\\n\",\n      \"llm_load_print_meta: n_merges         = 0\\n\",\n      \"llm_load_print_meta: n_ctx_train      = 32768\\n\",\n      \"llm_load_print_meta: n_embd           = 4096\\n\",\n      \"llm_load_print_meta: n_head           = 32\\n\",\n      \"llm_load_print_meta: n_head_kv        = 8\\n\",\n      \"llm_load_print_meta: n_layer          = 32\\n\",\n      \"llm_load_print_meta: n_rot            = 128\\n\",\n      \"llm_load_print_meta: n_embd_head_k    = 128\\n\",\n      \"llm_load_print_meta: n_embd_head_v    = 128\\n\",\n      \"llm_load_print_meta: n_gqa            = 4\\n\",\n      \"llm_load_print_meta: n_embd_k_gqa     = 1024\\n\",\n      \"llm_load_print_meta: n_embd_v_gqa     = 1024\\n\",\n      \"llm_load_print_meta: f_norm_eps       = 0.0e+00\\n\",\n      \"llm_load_print_meta: f_norm_rms_eps   = 1.0e-05\\n\",\n      \"llm_load_print_meta: f_clamp_kqv      = 0.0e+00\\n\",\n      \"llm_load_print_meta: f_max_alibi_bias = 0.0e+00\\n\",\n      \"llm_load_print_meta: n_ff             = 14336\\n\",\n      \"llm_load_print_meta: n_expert         = 8\\n\",\n      \"llm_load_print_meta: n_expert_used    = 2\\n\",\n      \"llm_load_print_meta: rope scaling     = linear\\n\",\n      \"llm_load_print_meta: freq_base_train  = 1000000.0\\n\",\n      \"llm_load_print_meta: freq_scale_train = 1\\n\",\n      \"llm_load_print_meta: n_yarn_orig_ctx  = 32768\\n\",\n      \"llm_load_print_meta: rope_finetuned   = unknown\\n\",\n      \"llm_load_print_meta: model type       = 7B\\n\",\n      \"llm_load_print_meta: model ftype      = Q2_K\\n\",\n      \"llm_load_print_meta: model params     = 46.70 B\\n\",\n      \"llm_load_print_meta: model size       = 14.57 GiB (2.68 BPW) \\n\",\n      \"llm_load_print_meta: general.name     = mistralai_mixtral-8x7b-instruct-v0.1\\n\",\n      \"llm_load_print_meta: BOS token        = 1 '<s>'\\n\",\n      \"llm_load_print_meta: EOS token        = 2 '</s>'\\n\",\n      \"llm_load_print_meta: UNK token        = 0 '<unk>'\\n\",\n      \"llm_load_print_meta: PAD token        = 0 '<unk>'\\n\",\n      \"llm_load_print_meta: LF token         = 13 '<0x0A>'\\n\",\n      \"llm_load_tensors: ggml ctx size       =    0.38 MiB\\n\",\n      \"llm_load_tensors: system memory used  = 14918.95 MiB\\n\",\n      \"....................................................................................................\\n\",\n      \"llama_new_context_with_model: n_ctx      = 2048\\n\",\n      \"llama_new_context_with_model: freq_base  = 10000.0\\n\",\n      \"llama_new_context_with_model: freq_scale = 1\\n\",\n      \"llama_new_context_with_model: KV self size  =  256.00 MiB, K (f16):  128.00 MiB, V (f16):  128.00 MiB\\n\",\n      \"llama_build_graph: non-view tensors processed: 1124/1124\\n\",\n      \"llama_new_context_with_model: compute buffer total size = 6.06 MiB\\n\",\n      \"AVX = 1 | AVX_VNNI = 0 | AVX2 = 1 | AVX512 = 0 | AVX512_VBMI = 0 | AVX512_VNNI = 0 | FMA = 1 | NEON = 0 | ARM_FMA = 0 | F16C = 1 | FP16_VA = 0 | WASM_SIMD = 0 | BLAS = 0 | SSE3 = 1 | SSSE3 = 1 | VSX = 0 | \\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"prompt = ChatPromptTemplate.from_template(\\\"\\\"\\\"Your are an assistant, answer the question briefly.\\n\",\n    \"\\n\",\n    \"    User: {input}\\n\",\n    \"    AI Assistant:\\\"\\\"\\\"\\n\",\n    \")\\n\",\n    \"\\n\",\n    \"llm = LlamaCpp(\\n\",\n    \"    model_path=\\\"../models/mixtral-8x7b-instruct-v0.1.Q2_K.gguf\\\",\\n\",\n    \"    temperature=0.01,\\n\",\n    \"    max_tokens=2000,\\n\",\n    \"    top_p=1,\\n\",\n    \"    n_threads=8,\\n\",\n    \"    n_ctx=2048,\\n\",\n    \"    f16_kv=True,\\n\",\n    \"    # n_gpu_layers=40,  # Change this value based on your model and your GPU VRAM pool.\\n\",\n    \"    # n_batch=512,  # Should be between 1 and n_ctx, consider the amount of VRAM in your GPU.\\n\",\n    \")\\n\",\n    \"\\n\",\n    \"output_parser = StrOutputParser()\\n\",\n    \"\\n\",\n    \"# Basic chain https://python.langchain.com/docs/expression_language/get_started\\n\",\n    \"chain = prompt | llm | output_parser\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \" The capital of the Netherlands is Amsterdam.\"\n     ]\n    },\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"\\n\",\n      \"llama_print_timings:        load time =    7223.89 ms\\n\",\n      \"llama_print_timings:      sample time =       8.27 ms /     9 runs   (    0.92 ms per token,  1087.74 tokens per second)\\n\",\n      \"llama_print_timings: prompt eval time =   29350.15 ms /    31 tokens (  946.78 ms per token,     1.06 tokens per second)\\n\",\n      \"llama_print_timings:        eval time =   24805.58 ms /     8 runs   ( 3100.70 ms per token,     0.32 tokens per second)\\n\",\n      \"llama_print_timings:       total time =   54238.11 ms\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"# Query the chain and stream the response\\n\",\n    \"for chunk in chain.stream({\\\"input\\\": \\\"What is the capital of the Netherlands?\\\"}):\\n\",\n    \"    print(chunk, end=\\\"\\\", flush=True)\\n\",\n    \"\\n\",\n    \"# Query the LLM directly:\\n\",\n    \"# for chunk in llm.stream(\\\"What is the capital of the Netherlands?\\\"):\\n\",\n    \"#     print(chunk, end=\\\"\\\", flush=True)\\n\",\n    \"\\n\",\n    \"# Not streaming:\\n\",\n    \"# print(chain.invoke({\\\"input\\\": \\\"What is the capital of the Netherlands?\\\"}))\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"libre-chat\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.10.13\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "scripts/main.py",
    "content": "import logging\n\nfrom libre_chat.conf import parse_conf\nfrom libre_chat.endpoint import ChatEndpoint\nfrom libre_chat.llm import Llm\n\n# Start the API endpoint, used in docker container and dev scripts\n\nlogging.basicConfig(level=logging.getLevelName(\"INFO\"))\n\nconf = parse_conf(\"chat.yml\")\n# conf = parse_conf(\"config/chat-vectorstore-qa.yml\")\nllm = Llm(conf=conf)\napp = ChatEndpoint(llm=llm, conf=conf)\n"
  },
  {
    "path": "scripts/qdrant_config.yml",
    "content": "# Default: https://github.com/qdrant/qdrant/blob/master/config/config.yaml\nlog_level: INFO\ntelemetry_disabled: true\n\nservice:\n  api_key: TOCHANGE\n\nstorage:\n  # Where to store all the data\n  storage_path: ./storage\n  # Where to store snapshots\n  snapshots_path: ./snapshots\n"
  },
  {
    "path": "scripts/requirements.txt",
    "content": "#\n# This file is autogenerated by pip-compile with Python 3.10\n# by the following command:\n#\n#    pip-compile --output-file=scripts/requirements.txt pyproject.toml\n#\naiofiles==23.2.1\n    # via gradio\naiohttp==3.9.1\n    # via\n    #   langchain\n    #   langchain-community\naiosignal==1.3.1\n    # via aiohttp\naltair==5.2.0\n    # via gradio\nannotated-types==0.6.0\n    # via pydantic\nanyio==4.2.0\n    # via\n    #   httpx\n    #   langchain-core\n    #   starlette\nasync-timeout==4.0.3\n    # via\n    #   aiohttp\n    #   langchain\nattrs==23.2.0\n    # via\n    #   aiohttp\n    #   jsonschema\n    #   referencing\nbackoff==2.2.1\n    # via unstructured\nbeautifulsoup4==4.12.2\n    # via unstructured\ncertifi==2023.11.17\n    # via\n    #   httpcore\n    #   httpx\n    #   requests\n    #   unstructured-client\nchardet==5.2.0\n    # via unstructured\ncharset-normalizer==3.3.2\n    # via\n    #   requests\n    #   unstructured-client\nclick==8.1.7\n    # via\n    #   nltk\n    #   typer\n    #   uvicorn\ncolorama==0.4.6\n    # via typer\ncontourpy==1.2.0\n    # via matplotlib\ncycler==0.12.1\n    # via matplotlib\ndataclasses-json==0.6.3\n    # via\n    #   langchain\n    #   langchain-community\n    #   unstructured\n    #   unstructured-client\ndiskcache==5.6.3\n    # via llama-cpp-python\nemoji==2.9.0\n    # via unstructured\nexceptiongroup==1.2.0\n    # via anyio\nfaiss-cpu==1.7.4\n    # via libre-chat (pyproject.toml)\nfastapi==0.108.0\n    # via\n    #   gradio\n    #   libre-chat (pyproject.toml)\nffmpy==0.3.1\n    # via gradio\nfilelock==3.13.1\n    # via\n    #   huggingface-hub\n    #   torch\n    #   transformers\n    #   triton\nfiletype==1.2.0\n    # via unstructured\nfonttools==4.47.0\n    # via matplotlib\nfrozenlist==1.4.1\n    # via\n    #   aiohttp\n    #   aiosignal\nfsspec==2023.12.2\n    # via\n    #   gradio-client\n    #   huggingface-hub\n    #   torch\ngradio==4.13.0\n    # via libre-chat (pyproject.toml)\ngradio-client==0.8.0\n    # via gradio\ngreenlet==3.0.3\n    # via sqlalchemy\ngrpcio==1.60.0\n    # via\n    #   grpcio-tools\n    #   qdrant-client\ngrpcio-tools==1.60.0\n    # via qdrant-client\ngunicorn==21.2.0\n    # via libre-chat (pyproject.toml)\nh11==0.14.0\n    # via\n    #   httpcore\n    #   uvicorn\nh2==4.1.0\n    # via httpx\nhpack==4.0.0\n    # via h2\nhttpcore==1.0.2\n    # via httpx\nhttpx[http2]==0.26.0\n    # via\n    #   gradio\n    #   gradio-client\n    #   qdrant-client\nhuggingface-hub==0.20.2\n    # via\n    #   gradio\n    #   gradio-client\n    #   sentence-transformers\n    #   tokenizers\n    #   transformers\nhyperframe==6.0.1\n    # via h2\nidna==3.6\n    # via\n    #   anyio\n    #   httpx\n    #   requests\n    #   unstructured-client\n    #   yarl\nimportlib-metadata==7.0.1\n    # via pydantic-yaml\nimportlib-resources==6.1.1\n    # via gradio\njinja2==3.1.2\n    # via\n    #   altair\n    #   gradio\n    #   torch\njoblib==1.3.2\n    # via\n    #   nltk\n    #   scikit-learn\njsonpatch==1.33\n    # via\n    #   langchain\n    #   langchain-core\njsonpath-python==1.0.6\n    # via unstructured-client\njsonpointer==2.4\n    # via jsonpatch\njsonschema==4.20.0\n    # via altair\njsonschema-specifications==2023.12.1\n    # via jsonschema\nkiwisolver==1.4.5\n    # via matplotlib\nlangchain==0.1.0\n    # via libre-chat (pyproject.toml)\nlangchain-community==0.0.9\n    # via\n    #   langchain\n    #   libre-chat (pyproject.toml)\nlangchain-core==0.1.7\n    # via\n    #   langchain\n    #   langchain-community\nlangdetect==1.0.9\n    # via unstructured\nlangsmith==0.0.77\n    # via\n    #   langchain\n    #   langchain-community\n    #   langchain-core\nllama-cpp-python==0.2.27\n    # via libre-chat (pyproject.toml)\nlxml==5.0.1\n    # via unstructured\nmarkdown-it-py==3.0.0\n    # via rich\nmarkupsafe==2.1.3\n    # via\n    #   gradio\n    #   jinja2\nmarshmallow==3.20.1\n    # via\n    #   dataclasses-json\n    #   unstructured-client\nmatplotlib==3.8.2\n    # via gradio\nmdurl==0.1.2\n    # via markdown-it-py\nmpmath==1.3.0\n    # via sympy\nmultidict==6.0.4\n    # via\n    #   aiohttp\n    #   yarl\nmypy-extensions==1.0.0\n    # via\n    #   typing-inspect\n    #   unstructured-client\nnetworkx==3.2.1\n    # via torch\nnltk==3.8.1\n    # via\n    #   sentence-transformers\n    #   unstructured\nnumpy==1.26.3\n    # via\n    #   altair\n    #   contourpy\n    #   gradio\n    #   langchain\n    #   langchain-community\n    #   llama-cpp-python\n    #   matplotlib\n    #   pandas\n    #   qdrant-client\n    #   scikit-learn\n    #   scipy\n    #   sentence-transformers\n    #   torchvision\n    #   transformers\n    #   unstructured\nnvidia-cublas-cu12==12.1.3.1\n    # via\n    #   nvidia-cudnn-cu12\n    #   nvidia-cusolver-cu12\n    #   torch\nnvidia-cuda-cupti-cu12==12.1.105\n    # via torch\nnvidia-cuda-nvrtc-cu12==12.1.105\n    # via torch\nnvidia-cuda-runtime-cu12==12.1.105\n    # via torch\nnvidia-cudnn-cu12==8.9.2.26\n    # via torch\nnvidia-cufft-cu12==11.0.2.54\n    # via torch\nnvidia-curand-cu12==10.3.2.106\n    # via torch\nnvidia-cusolver-cu12==11.4.5.107\n    # via torch\nnvidia-cusparse-cu12==12.1.0.106\n    # via\n    #   nvidia-cusolver-cu12\n    #   torch\nnvidia-nccl-cu12==2.18.1\n    # via torch\nnvidia-nvjitlink-cu12==12.3.101\n    # via\n    #   nvidia-cusolver-cu12\n    #   nvidia-cusparse-cu12\nnvidia-nvtx-cu12==12.1.105\n    # via torch\norjson==3.9.10\n    # via gradio\npackaging==23.2\n    # via\n    #   altair\n    #   gradio\n    #   gradio-client\n    #   gunicorn\n    #   huggingface-hub\n    #   langchain-core\n    #   marshmallow\n    #   matplotlib\n    #   transformers\n    #   unstructured-client\npandas==2.1.4\n    # via\n    #   altair\n    #   gradio\npillow==10.2.0\n    # via\n    #   gradio\n    #   matplotlib\n    #   torchvision\nportalocker==2.8.2\n    # via qdrant-client\nprotobuf==4.25.1\n    # via grpcio-tools\npydantic==2.5.3\n    # via\n    #   fastapi\n    #   gradio\n    #   langchain\n    #   langchain-core\n    #   langsmith\n    #   libre-chat (pyproject.toml)\n    #   pydantic-settings\n    #   pydantic-yaml\n    #   qdrant-client\npydantic-core==2.14.6\n    # via pydantic\npydantic-settings==2.1.0\n    # via libre-chat (pyproject.toml)\npydantic-yaml==1.2.0\n    # via libre-chat (pyproject.toml)\npydub==0.25.1\n    # via gradio\npygments==2.17.2\n    # via rich\npyparsing==3.1.1\n    # via matplotlib\npypdf==3.17.4\n    # via libre-chat (pyproject.toml)\npython-dateutil==2.8.2\n    # via\n    #   matplotlib\n    #   pandas\n    #   unstructured-client\npython-dotenv==1.0.0\n    # via pydantic-settings\npython-iso639==2024.1.2\n    # via unstructured\npython-magic==0.4.27\n    # via unstructured\npython-multipart==0.0.6\n    # via gradio\npytz==2023.3.post1\n    # via pandas\npyyaml==6.0.1\n    # via\n    #   gradio\n    #   huggingface-hub\n    #   langchain\n    #   langchain-community\n    #   langchain-core\n    #   transformers\nqdrant-client==1.7.0\n    # via libre-chat (pyproject.toml)\nrapidfuzz==3.6.1\n    # via unstructured\nreferencing==0.32.1\n    # via\n    #   jsonschema\n    #   jsonschema-specifications\nregex==2023.12.25\n    # via\n    #   nltk\n    #   transformers\nrequests==2.31.0\n    # via\n    #   huggingface-hub\n    #   langchain\n    #   langchain-community\n    #   langchain-core\n    #   langsmith\n    #   libre-chat (pyproject.toml)\n    #   torchvision\n    #   transformers\n    #   unstructured\n    #   unstructured-client\nrich==13.7.0\n    # via typer\nrpds-py==0.16.2\n    # via\n    #   jsonschema\n    #   referencing\nruamel-yaml==0.17.40\n    # via pydantic-yaml\nruamel-yaml-clib==0.2.8\n    # via ruamel-yaml\nsafetensors==0.4.1\n    # via transformers\nscikit-learn==1.3.2\n    # via sentence-transformers\nscipy==1.11.4\n    # via\n    #   scikit-learn\n    #   sentence-transformers\nsemantic-version==2.10.0\n    # via gradio\nsentence-transformers==2.2.2\n    # via libre-chat (pyproject.toml)\nsentencepiece==0.1.99\n    # via sentence-transformers\nshellingham==1.5.4\n    # via typer\nsix==1.16.0\n    # via\n    #   langdetect\n    #   python-dateutil\n    #   unstructured-client\nsniffio==1.3.0\n    # via\n    #   anyio\n    #   httpx\nsoupsieve==2.5\n    # via beautifulsoup4\nsqlalchemy==2.0.25\n    # via\n    #   langchain\n    #   langchain-community\nstarlette==0.32.0.post1\n    # via fastapi\nsympy==1.12\n    # via torch\ntabulate==0.9.0\n    # via unstructured\ntenacity==8.2.3\n    # via\n    #   langchain\n    #   langchain-community\n    #   langchain-core\nthreadpoolctl==3.2.0\n    # via scikit-learn\ntokenizers==0.15.0\n    # via transformers\ntomlkit==0.12.0\n    # via gradio\ntoolz==0.12.0\n    # via altair\ntorch==2.1.2\n    # via\n    #   sentence-transformers\n    #   torchvision\ntorchvision==0.16.2\n    # via sentence-transformers\ntqdm==4.66.1\n    # via\n    #   huggingface-hub\n    #   libre-chat (pyproject.toml)\n    #   nltk\n    #   sentence-transformers\n    #   transformers\ntransformers==4.36.2\n    # via sentence-transformers\ntriton==2.1.0\n    # via torch\ntyper[all]==0.9.0\n    # via\n    #   gradio\n    #   libre-chat (pyproject.toml)\ntyping-extensions==4.9.0\n    # via\n    #   altair\n    #   anyio\n    #   fastapi\n    #   gradio\n    #   gradio-client\n    #   huggingface-hub\n    #   llama-cpp-python\n    #   pydantic\n    #   pydantic-core\n    #   pydantic-yaml\n    #   sqlalchemy\n    #   torch\n    #   typer\n    #   typing-inspect\n    #   unstructured\n    #   unstructured-client\n    #   uvicorn\ntyping-inspect==0.9.0\n    # via\n    #   dataclasses-json\n    #   unstructured-client\ntzdata==2023.4\n    # via pandas\nunstructured==0.11.8\n    # via libre-chat (pyproject.toml)\nunstructured-client==0.15.1\n    # via unstructured\nurllib3==1.26.18\n    # via\n    #   qdrant-client\n    #   requests\n    #   unstructured-client\nuvicorn==0.25.0\n    # via\n    #   gradio\n    #   libre-chat (pyproject.toml)\nwebsockets==11.0.3\n    # via gradio-client\nwrapt==1.16.0\n    # via unstructured\nyarl==1.9.4\n    # via aiohttp\nzipp==3.17.0\n    # via importlib-metadata\n\n# The following packages are considered to be unsafe in a requirements file:\n# setuptools\n"
  },
  {
    "path": "scripts/start.sh",
    "content": "#!/usr/bin/env sh\nset -e\n\n# Adapted from https://github.com/tiangolo/uvicorn-gunicorn-docker/blob/master/docker-images/start.sh\n\nexport BIND=${BIND:-\"0.0.0.0:8000\"}\nexport WORKER_CLASS=${WORKER_CLASS:-\"uvicorn.workers.UvicornWorker\"}\n\nif [ ! -f \"/data/main.py\" ]; then\n    cp /app/scripts/main.py /data/main.py\nfi\n\nif [ -f /data/main.py ]; then\n    DEFAULT_MODULE_NAME=main\nelif [ -f /app/scripts/main.py ]; then\n    DEFAULT_MODULE_NAME=scripts.main\nelif [ -f /app/app/main.py ]; then\n    DEFAULT_MODULE_NAME=app.main\nelif [ -f /app/main.py ]; then\n    DEFAULT_MODULE_NAME=main\nfi\nMODULE_NAME=${MODULE_NAME:-$DEFAULT_MODULE_NAME}\nVARIABLE_NAME=${VARIABLE_NAME:-app}\nexport APP_MODULE=${APP_MODULE:-\"$MODULE_NAME:$VARIABLE_NAME\"}\nexport TIMEOUT=${TIMEOUT:-600} # 10min\nexport NUMEXPR_MAX_THREADS=${NUMEXPR_MAX_THREADS:-$LIBRECHAT_WORKERS}\n\nif [ -n \"$LIBRECHAT_CONF_URL\" ]; then\n    # Do something when the environment variable is not null\n    echo \"📋 LIBRECHAT_CONF_URL provided, downlading it to chat.yml: $LIBRECHAT_CONF_URL\"\n    curl -L -o chat.yml $LIBRECHAT_CONF_URL\nfi\n\n# Initialize the Llm (ddl files if not present, build vectors) runs before the API to avoid running on multiple workers\npython3 /app/scripts/init.py\n\n# Wait for Qdrant to start\nsleep 10\n\necho \"🦄 Starting gunicorn with $LIBRECHAT_WORKERS workers on $BIND for the module $APP_MODULE with a timeout of $TIMEOUT sec\"\nexec gunicorn -w \"$LIBRECHAT_WORKERS\" -k \"$WORKER_CLASS\" -b \"$BIND\" --timeout \"$TIMEOUT\" \"$APP_MODULE\"\n# exec uvicorn --host \"0.0.0.0\" --port 8000 \"$APP_MODULE\"\n\n# -w: number of worker processes for handling requests [1]\n# --threads: number of worker threads for handling requests. [1]\n\n\n\n# if [ -f /app/gunicorn_conf.py ]; then\n#     DEFAULT_GUNICORN_CONF=/app/gunicorn_conf.py\n# elif [ -f /app/app/gunicorn_conf.py ]; then\n#     DEFAULT_GUNICORN_CONF=/app/app/gunicorn_conf.py\n# else\n#     DEFAULT_GUNICORN_CONF=/gunicorn_conf.py\n# fi\n# export GUNICORN_CONF=${GUNICORN_CONF:-$DEFAULT_GUNICORN_CONF}\n\n# # If there's a prestart.sh script in the /app directory or other path specified, run it before starting\n# PRE_START_PATH=${PRE_START_PATH:-/app/prestart.sh}\n# echo \"Checking for script in $PRE_START_PATH\"\n# if [ -f $PRE_START_PATH ] ; then\n#     echo \"Running script $PRE_START_PATH\"\n#     . \"$PRE_START_PATH\"\n# else\n#     echo \"There is no script $PRE_START_PATH\"\n# fi\n"
  },
  {
    "path": "src/libre_chat/__init__.py",
    "content": "\"\"\"API and UI to deploy LLM models.\"\"\"\nfrom .utils import Prompt, log\nfrom .conf import default_conf, parse_conf\nfrom .llm import Llm\nfrom .router import ChatRouter\nfrom .endpoint import ChatEndpoint\n\n__version__ = \"0.0.6\"\n"
  },
  {
    "path": "src/libre_chat/__main__.py",
    "content": "import logging\nimport os\nimport shutil\nfrom typing import Optional\n\nimport typer\nimport uvicorn\n\nfrom libre_chat import __version__\nfrom libre_chat.conf import default_conf, parse_conf\nfrom libre_chat.endpoint import ChatEndpoint\nfrom libre_chat.llm import Llm\nfrom libre_chat.utils import BOLD, END, log, log_format\n\ncli = typer.Typer(help=\"Deploy API and web UI for LLMs, such as Llama 2, using langchain.\")\n\n\n@cli.command(\"start\")\ndef start(\n    config: str = typer.Argument(\n        default_conf.conf_path, help=\"Path to the libre-chat YAML configuration file\"\n    ),\n    # model: str = typer.Option(conf.llm.model_path, help=\"Path to the model binary\"),\n    # vector: str = typer.Option(conf.vector.vector_path, help=\"Path to the vector db folder\"),\n    host: str = typer.Option(\"localhost\", help=\"Host URL\"),\n    port: int = typer.Option(8000, help=\"URL port\"),\n    workers: int = typer.Option(1, help=\"Number of workers\"),\n    log_level: str = typer.Option(\"info\", help=\"Log level (info, debug, warn, error)\"),\n) -> None:\n    logging.basicConfig(level=logging.getLevelName(log_level.upper()))\n    log_config = uvicorn.config.LOGGING_CONFIG\n    log_config[\"formatters\"][\"access\"][\"fmt\"] = log_format\n    log_config[\"formatters\"][\"default\"][\"fmt\"] = log_format\n    conf = parse_conf(config)\n    llm = Llm(conf=conf)\n    app = ChatEndpoint(llm=llm, conf=conf)\n    uvicorn.run(\n        app,\n        host=host,\n        port=port,\n        reload=False,\n        log_level=log_level,\n        workers=workers,\n    )\n\n\n@cli.command(\"build\")\ndef build(\n    config: str = typer.Argument(\n        default_conf.conf_path, help=\"Path to the libre-chat YAML configuration file\"\n    ),\n    vector: Optional[str] = typer.Option(None, help=\"Path to the vectorstore folder\"),\n    documents: Optional[str] = typer.Option(\n        None, help=\"Path to the folder containing documents to vectorize\"\n    ),\n    log_level: str = typer.Option(\"info\", help=\"Log level (info, debug, warn, error)\"),\n) -> None:\n    logging.basicConfig(level=logging.getLevelName(log_level.upper()))\n    log_config = uvicorn.config.LOGGING_CONFIG\n    log_config[\"formatters\"][\"access\"][\"fmt\"] = log_format\n    log_config[\"formatters\"][\"default\"][\"fmt\"] = log_format\n\n    conf = parse_conf(config)\n    if vector:\n        conf.vector.vector_path = vector\n    if documents:\n        conf.vector.documents_path = documents\n    log.info(\n        f\"Vectorizing documents from {BOLD}{documents}{END} as vectorstore in {conf.vector.vector_path}\"\n    )\n    if conf.vector.vector_path and os.path.exists(conf.vector.vector_path):\n        shutil.rmtree(conf.vector.vector_path)\n    Llm(conf=conf)\n    log.info(f\"Documents successfully vectorized in {BOLD}{conf.vector.vector_path}{END}\")\n\n\n@cli.command(\"version\")\ndef version() -> None:\n    print(__version__)\n\n\nif __name__ == \"__main__\":\n    cli()\n"
  },
  {
    "path": "src/libre_chat/conf.py",
    "content": "import os\nfrom typing import Dict, List, Optional\n\nfrom pydantic_settings import BaseSettings, SettingsConfigDict\nfrom pydantic_yaml import parse_yaml_raw_as\n\nfrom libre_chat.utils import BOLD, END, YELLOW, log\n\n__all__ = [\"ChatConf\", \"parse_conf\"]\n\n\nclass BaseConf(BaseSettings):\n    model_config = SettingsConfigDict(\n        env_prefix=\"librechat_\", extra=\"allow\", protected_namespaces=(\"settings_\",)\n    )\n\n\nclass SettingsInfo(BaseConf):\n    examples: List[str] = [\n        \"What is the capital of the Netherlands?\",\n        \"Which drugs are approved by the FDA to mitigate Alzheimer symptoms?\",\n    ]\n    title: str = \"Libre Chat\"\n    version: str = \"0.1.0\"\n    description: str = \"\"\"Open source and free chatbot powered by [LangChain](https://python.langchain.com) and [llama.cpp](https://github.com/ggerganov/llama.cpp)\"\"\"\n    public_url: str = \"https://your-endpoint-url\"\n    repository_url: str = \"https://github.com/vemonet/libre-chat\"\n    favicon: str = \"https://raw.github.com/vemonet/libre-chat/main/docs/docs/assets/logo.png\"\n    license_info: Dict[str, str] = {\n        \"name\": \"MIT license\",\n        \"url\": \"https://raw.github.com/vemonet/libre-chat/main/LICENSE\",\n    }\n    contact: Dict[str, str] = {\n        \"name\": \"Vincent Emonet\",\n        \"email\": \"vincent.emonet@gmail.com\",\n    }\n    workers: int = 4\n\n\nclass SettingsVector(BaseConf):\n    embeddings_path: str = \"sentence-transformers/all-MiniLM-L6-v2\"\n    # or embeddings_path: str = \"./embeddings/all-MiniLM-L6-v2\"\n    embeddings_download: Optional[str] = None\n    vector_path: Optional[str] = None\n    vector_download: Optional[str] = None\n    documents_path: str = \"documents/\"\n    documents_download: Optional[str] = None\n\n    chunk_size: int = 500\n    chunk_overlap: int = 50\n    chain_type: str = \"stuff\"  # Or: map_reduce, reduce, map_rerank https://docs.langchain.com/docs/components/chains/index_related_chains\n    search_type: str = \"similarity\"  # Or: similarity_score_threshold, mmr https://python.langchain.com/docs/modules/data_connection/retrievers/vectorstore\n    return_sources_count: int = 4\n    score_threshold: Optional[float] = None  # Between 0 and 1\n\n\nclass SettingsLlm(BaseConf):\n    model_type: str = \"llama\"  # TODO: Remove?\n    model_path: str = \"./models/mixtral-8x7b-instruct-v0.1.Q2_K.gguf\"\n    model_download: Optional[str] = None\n    max_new_tokens: int = 1024\n    temperature: float = 0.01\n    gpu_layers: int = 100  # Number of layers to run on the GPU (if detected)\n    prompt_variables: List[str] = [\"input\", \"history\"]\n    prompt_template: str = \"\"\n\n\nclass SettingsAuth(BaseConf):\n    admin_pass: Optional[str] = None\n    client_id: Optional[str] = None\n    client_secret: Optional[str] = None\n    redirect_uri: str = \"http://localhost:8000/auth/callback\"\n    scope: str = \"https://www.googleapis.com/auth/userinfo.email\"\n    token_url: str = \"https://oauth2.googleapis.com/token\"\n    authorization_url: str = \"https://accounts.google.com/o/oauth2/auth\"\n    admin_users: List[str] = []\n    regular_users: List[str] = []\n\n\nclass ChatConf(BaseConf):\n    conf_path: str = \"chat.yml\"\n    conf_url: Optional[str] = None\n    llm: SettingsLlm = SettingsLlm()\n    vector: SettingsVector = SettingsVector()\n    info: SettingsInfo = SettingsInfo()\n    auth: SettingsAuth = SettingsAuth()\n\n\ndefault_conf = ChatConf()\n\n\ndef parse_conf(path: str = default_conf.conf_path) -> ChatConf:\n    if os.path.exists(path):\n        with open(path) as file:\n            conf = parse_yaml_raw_as(ChatConf, file.read())\n            log.info(f\"📋 Loaded config from {BOLD}{YELLOW}{path}{END}\")\n            return conf\n    else:\n        return default_conf\n"
  },
  {
    "path": "src/libre_chat/endpoint.py",
    "content": "import time\nfrom typing import Any, List, Optional\n\nimport gradio as gr\nimport pkg_resources\nfrom fastapi import FastAPI, Request, Response\nfrom fastapi.middleware.cors import CORSMiddleware\nfrom fastapi.staticfiles import StaticFiles\n\nfrom libre_chat.conf import ChatConf, default_conf\nfrom libre_chat.router import ChatRouter\nfrom libre_chat.ui import gradio_app\n\n__all__ = [\n    \"ChatEndpoint\",\n]\n\n\nclass ChatEndpoint(FastAPI):\n    \"\"\"\n    Class to deploy a LLM endpoint with API and web UI.\n    \"\"\"\n\n    def __init__(\n        self,\n        *args: Any,\n        llm: Any,\n        path: str = \"/prompt\",\n        conf: Optional[ChatConf] = None,\n        examples: Optional[List[str]] = None,\n        **kwargs: Any,\n    ) -> None:\n        \"\"\"\n        Constructor of the SPARQL endpoint, everything happens here.\n        FastAPI calls are defined in this constructor\n        \"\"\"\n        self.path = path\n        self.llm = llm\n        self.conf = conf if conf else default_conf\n        self.examples = examples\n        if not self.examples:\n            self.examples = self.conf.info.examples\n\n        # Instantiate FastAPI\n        super().__init__(\n            *args,\n            title=self.conf.info.title,\n            description=self.conf.info.description,\n            version=self.conf.info.version,\n            license_info=self.conf.info.license_info,\n            contact=self.conf.info.contact,\n            **kwargs,\n        )\n\n        router = ChatRouter(\n            llm=self.llm,\n            path=self.path,\n            conf=self.conf,\n            examples=self.examples,\n        )\n        self.include_router(router)\n\n        self.add_middleware(\n            CORSMiddleware,\n            allow_origins=[\"*\"],\n            allow_credentials=True,\n            allow_methods=[\"*\"],\n            allow_headers=[\"*\"],\n        )\n\n        @self.middleware(\"http\")\n        async def add_process_time_header(request: Request, call_next: Any) -> Response:\n            start_time = time.time()\n            response: Response = await call_next(request)\n            response.headers[\"X-Process-Time\"] = str(time.time() - start_time)\n            return response\n\n        # TODO: Add OAuth\n        # Move get_current_user to conf.py\n        # async def get_current_user(token: str = Depends(oauth2_scheme)):\n        #     if not self.conf.auth.client_id:\n        #         return {\"sub\": \"anonymous\"}  # Bypass auth and use a default user\n        #     # Else, proceed with the usual token verification process\n        #     async with httpx.AsyncClient() as client:\n        #         response = await client.get(\"https://www.googleapis.com/oauth2/v2/userinfo\", headers={\"Authorization\": f\"Bearer {token}\"})\n        #         user_info = response.json()\n        #         return user_info\n\n        # if self.conf.auth.client_id:\n        #     from fastapi import Depends, status\n        #     from fastapi.security import OAuth2AuthorizationCodeBearer\n        #     import httpx\n        #     from starlette.responses import RedirectResponse\n\n        #     oauth2_scheme = OAuth2AuthorizationCodeBearer(\n        #         authorizationUrl=f\"{self.conf.auth.authorization_url}?response_type=code&client_id={self.conf.auth.client_id}&redirect_uri={self.conf.auth.redirect_uri}&scope={self.conf.auth.scope}\",\n        #         tokenUrl=self.conf.auth.token_url,\n        #     )\n        #     @self.get(\"/login\")\n        #     def login():\n        #         return RedirectResponse(url=oauth2_scheme.authorizationUrl)\n\n        #     @self.get(\"/auth/callback\")\n        #     async def auth_callback(code: str = Depends(oauth2_scheme)):\n        #         token_payload = {\n        #             \"client_id\": self.conf.auth.client_id,\n        #             \"client_secret\": self.conf.auth.client_secret,\n        #             \"code\": code,\n        #             \"grant_type\": \"authorization_code\",\n        #             \"redirect_uri\": self.conf.auth.redirect_uri,\n        #         }\n        #         async with httpx.AsyncClient() as client:\n        #             response = await client.post(self.conf.auth.token_url, data=token_payload)\n        #             response.raise_for_status()\n        #             token = response.json()\n        #             return token\n\n        # Mount web wroker asset:\n        # self.mount(\n        #     \"/static\",\n        #     StaticFiles(directory=pkg_resources.resource_filename(\"libre_chat\", \"static\")),\n        #     name=\"static\",\n        # )\n\n        gr.mount_gradio_app(self, gradio_app(self.llm), path=\"/gradio\")\n\n        # UI with SolidJS\n        self.mount(\n            \"/\",\n            StaticFiles(\n                directory=pkg_resources.resource_filename(\"libre_chat\", \"webapp\"), html=True\n            ),\n            name=\"static\",\n        )\n"
  },
  {
    "path": "src/libre_chat/llm.py",
    "content": "\"\"\"Module: Open-source LLM setup\"\"\"\nimport os\nfrom typing import Any, Dict, List, Optional\n\nimport torch\nfrom langchain.chains import ConversationChain, RetrievalQA\nfrom langchain.memory import ConversationBufferMemory\nfrom langchain.prompts import PromptTemplate\nfrom langchain_community.embeddings import HuggingFaceEmbeddings\nfrom langchain_community.llms import LlamaCpp\nfrom langchain_community.vectorstores import FAISS\n\nfrom libre_chat.conf import ChatConf, default_conf\nfrom libre_chat.utils import BOLD, END, log, parallel_download\nfrom libre_chat.vectorstore import DEFAULT_DOCUMENT_LOADERS, build_vectorstore\n\n__all__ = [\n    \"Llm\",\n]\n\n\nclass Llm:\n    \"\"\"\n    Class for LLMs\n    \"\"\"\n\n    def __init__(\n        self,\n        conf: Optional[ChatConf] = None,\n        model_path: Optional[str] = None,\n        model_download: Optional[str] = None,\n        vector_path: Optional[str] = None,\n        document_loaders: Optional[List[Dict[str, Any]]] = None,\n        prompt_variables: Optional[List[str]] = None,\n        prompt_template: Optional[str] = None,\n    ) -> None:\n        \"\"\"\n        Constructor for the LLM\n        \"\"\"\n        # NOTE: if we need to share infos between workers import redis\n        # self.redis_client = redis.StrictRedis(host='localhost', port=6379, db=0)\n        self.conf = conf if conf else default_conf\n        self.model_path = model_path if model_path else self.conf.llm.model_path\n        self.model_download = model_download if model_download else self.conf.llm.model_download\n        self.vector_path = vector_path if vector_path else self.conf.vector.vector_path\n        self.document_loaders = document_loaders if document_loaders else DEFAULT_DOCUMENT_LOADERS\n        self.prompt_variables: List[str] = (\n            prompt_variables if prompt_variables is not None else self.conf.llm.prompt_variables\n        )\n        self.prompt_template = prompt_template if prompt_template else self.conf.llm.prompt_template\n\n        # Check if GPU available\n        if torch.cuda.is_available():\n            self.device = torch.device(0)\n            log.info(f\"⚡ Using GPU: {self.device}\")\n        else:\n            log.info(\"💽 No GPU detected, using CPU\")\n            self.device = torch.device(\"cpu\")\n        os.makedirs(self.conf.vector.documents_path, exist_ok=True)\n\n        # Set max worker threads. Not sure it's the best place to do this\n        os.environ[\"NUMEXPR_MAX_THREADS\"] = str(self.conf.info.workers)\n\n        if len(self.prompt_variables) < 1:\n            raise ValueError(\"You should provide at least 1 template variable\")\n\n        # TODO: remove? There is always a default from ChatConf\n        if not self.prompt_template or len(self.prompt_template) < 1:\n            if self.vector_path:\n                self.prompt_template = DEFAULT_QA_PROMPT\n                self.prompt_variables = [\"question\", \"context\"]\n            else:\n                self.prompt_template = DEFAULT_CONVERSATION_PROMPT\n                self.prompt_variables = [\"input\", \"history\"]\n        self.prompt = PromptTemplate(\n            template=self.prompt_template, input_variables=self.prompt_variables\n        )\n\n        self.download_data()\n        if self.vector_path:\n            build_vectorstore(self.conf, self.document_loaders, self.device, self.vector_path)\n        # if self.vector_path and not self.has_vectorstore():\n        #     build_vectorstore(self.conf, self.vector_path, self.device)\n        # else:\n        #     log.info(f\"♻️  Reusing existing vectorstore at {BOLD}{self.vector_path}{END}, skip building the vectorstore\")\n\n        log.info(f\"🤖 Loading model from {BOLD}{self.model_path}{END}\")\n        self.llm = self.get_llm()\n        if self.has_vectorstore():\n            log.info(f\"💫 Loading vectorstore from {BOLD}{self.vector_path}{END}\")\n            self.setup_dbqa()\n        if not self.vector_path:\n            log.info(\"🦜 No vectorstore provided, using a generic LLM\")\n\n    def download_data(self) -> None:\n        \"\"\"Download data\"\"\"\n        ddl_list = []\n        ddl_list.append({\"url\": self.model_download, \"path\": self.model_path})\n        ddl_list.append(\n            {\"url\": self.conf.vector.embeddings_download, \"path\": self.conf.vector.embeddings_path}\n        )\n        ddl_list.append(\n            {\"url\": self.conf.vector.vector_download, \"path\": self.conf.vector.vector_path}\n        )\n        ddl_list.append(\n            {\"url\": self.conf.vector.documents_download, \"path\": self.conf.vector.documents_path}\n        )\n        parallel_download(ddl_list, self.conf.info.workers)\n\n    def has_vectorstore(self) -> bool:\n        \"\"\"Check if vectorstore present\"\"\"\n        return bool(self.vector_path and os.path.exists(self.vector_path))\n\n    def get_vectorstore(self) -> str:\n        \"\"\"Get the vectorstore path\"\"\"\n        return self.vector_path if self.vector_path and os.path.exists(self.vector_path) else \"\"\n\n    def get_llm(self, config: Optional[Dict[str, Any]] = None) -> LlamaCpp:\n        if not config:\n            config = {}\n        if \"temperature\" not in config:\n            config[\"temperature\"] = self.conf.llm.temperature\n        if \"max_new_tokens\" not in config:\n            config[\"max_new_tokens\"] = self.conf.llm.max_new_tokens\n        if \"stream\" not in config:\n            config[\"stream\"] = True\n        # if \"gpu_layers\" not in config:\n        #     config[\"gpu_layers\"] = self.conf.llm.gpu_layers if self.device.type != \"cpu\" else 0\n        # if self.device.type != \"cpu\":\n        #     config[\"n_gpu_layers\"] = 40\n        #     config[\"n_batch\"] = 512\n        return LlamaCpp(\n            model_path=self.model_path,\n            top_p=1,\n            **config\n            # model_type=self.conf.llm.model_type,\n            # n_gpu_layers=40,  # Change this value based on your model and your GPU VRAM pool.\n            # n_batch=512,  # Should be between 1 and n_ctx, consider the amount of VRAM in your GPU.\n            # temperature=0.01,\n            # max_tokens=2000,\n            # callback_manager=callback_manager,\n            # verbose=True,  # Verbose is required to pass to the callback manager\n        )\n\n    def setup_dbqa(self) -> None:\n        \"\"\"Setup the vectorstore for QA\"\"\"\n        if self.has_vectorstore():\n            embeddings = HuggingFaceEmbeddings(\n                model_name=self.conf.vector.embeddings_path, model_kwargs={\"device\": self.device}\n            )\n            # FAISS should automatically use GPU?\n            vectorstore = FAISS.load_local(self.get_vectorstore(), embeddings)\n            # vectorstore = Qdrant(\n            #     QdrantClient(url=self.conf.vector.vector_path, prefer_grpc=True),\n            #     collection_name=\"libre_chat_rag\",\n            #     embeddings=embeddings,\n            # )\n\n            search_args: Dict[str, Any] = {\"k\": self.conf.vector.return_sources_count}\n            if self.conf.vector.score_threshold is not None:\n                search_args[\"score_threshold\"] = self.conf.vector.score_threshold\n            self.dbqa = RetrievalQA.from_chain_type(\n                llm=self.llm,\n                chain_type=self.conf.vector.chain_type,\n                retriever=vectorstore.as_retriever(\n                    # search_type=self.conf.vector.search_type, search_kwargs=search_args\n                ),\n                return_source_documents=self.conf.vector.return_sources_count > 0,\n                chain_type_kwargs={\"prompt\": self.prompt},\n            )\n\n    def query(\n        self,\n        prompt: str,\n        memory: Any = None,\n        config: Optional[Dict[str, Any]] = None,\n        instructions: Optional[str] = None,\n        callbacks: Optional[List[Any]] = None,\n    ) -> Dict[str, Any]:\n        \"\"\"Query the built LLM\"\"\"\n        log.info(f\"💬 Querying the LLM with prompt: {prompt}\")\n        if len(prompt) < 1:\n            raise ValueError(\"Provide a prompt\")\n        if self.vector_path:\n            if not self.has_vectorstore():\n                return {\n                    \"result\": \"The vectorstore has not been built, please go to the [API web UI](/docs) (the green icon at the top right of the page), and upload documents to vectorize.\"\n                }\n            # self.setup_dbqa()  # we need to reload the dbqa each time to make sure all workers are up-to-date\n            res: Dict[str, Any] = self.dbqa({\"query\": prompt}, callbacks=callbacks)\n            log.debug(f\"💭 Complete response from the LLM: {res}\")\n            for i, doc in enumerate(res[\"source_documents\"]):\n                res[\"source_documents\"][i] = {\n                    \"page_content\": doc.page_content,\n                    \"metadata\": doc.metadata,\n                }\n                if \"source\" in res[\"source_documents\"][i][\"metadata\"]:\n                    res[\"source_documents\"][i][\"metadata\"][\"filename\"] = os.path.basename(\n                        res[\"source_documents\"][i][\"metadata\"][\"source\"]\n                    )\n        else:\n            # Not using vectostore, generic conversation\n            # NOTE: initializing the LLM and conversation at every call to prevent the conversation to take up lot of memory after some time\n            # And enable to customize the instructions prompt and temperature for each query\n            # Memory is handled at the gradio level\n            if not memory:\n                memory = ConversationBufferMemory(ai_prefix=\"AI Assistant\", memory_key=\"history\")\n            template = instructions if instructions else self.prompt_template\n            prompt_template = PromptTemplate(\n                template=template, input_variables=self.prompt_variables\n            )\n            conversation = ConversationChain(\n                llm=self.llm,\n                prompt=prompt_template,\n                verbose=True,\n                memory=memory\n                # llm=self.get_llm(config), prompt=prompt_template, verbose=True, memory=memory\n            )\n            resp = conversation.predict(input=prompt, callbacks=callbacks)\n\n            # NOTE: LCEL does not support callbacks handler yet https://github.com/langchain-ai/langchain/issues/14241\n            # chat_prompt = ChatPromptTemplate.from_template(template)\n            # chat_prompt = ChatPromptTemplate.from_messages(\n            #     [\n            #         (\"system\", \"You're an assistant who's good at {ability}\"),\n            #         MessagesPlaceholder(variable_name=\"history\"),\n            #         (\"human\", \"{question}\"),\n            #     ]\n            # )\n            # output_parser = StrOutputParser()\n            # chain = chat_prompt | self.llm | output_parser\n            # resp = chain.invoke({\"input\": prompt}, callbacks=callbacks)\n\n            res = {\"result\": resp}\n        return res\n\n    async def aquery(\n        self,\n        prompt: str,\n        memory: Any = None,\n        config: Optional[Dict[str, Any]] = None,\n        instructions: Optional[str] = None,\n        callbacks: Optional[List[Any]] = None,\n    ) -> Dict[str, Any]:\n        \"\"\"Async query the built LLM\"\"\"\n        log.info(f\"💬 Querying the LLM with prompt: {prompt}\")\n        if len(prompt) < 1:\n            raise ValueError(\"Provide a prompt\")\n        # TODO: we might need to check if the vectorstore has changed since the last time it was queried,\n        # And rerun self.setup_dbqa() if it has changed. Otherwise uploading file will not be applied to all workers\n        if self.vector_path:\n            if not self.has_vectorstore():\n                return {\n                    \"result\": \"The vectorstore has not been built, please go to the [API web UI](/docs) (the green icon at the top right of the page), and upload documents to vectorize.\"\n                }\n            # TODO: handle history\n            # self.setup_dbqa()  # we need to reload the dbqa each time to make sure all workers are up-to-date\n            res: Dict[str, Any] = await self.dbqa.acall({\"query\": prompt}, callbacks=callbacks)\n            log.debug(f\"💭 Complete response from the LLM: {res}\")\n            for i, doc in enumerate(res[\"source_documents\"]):\n                # doc.to_json() not implemented yet\n                res[\"source_documents\"][i] = {\n                    \"page_content\": doc.page_content,\n                    \"metadata\": doc.metadata,\n                }\n                if \"source\" in res[\"source_documents\"][i][\"metadata\"]:\n                    res[\"source_documents\"][i][\"metadata\"][\"filename\"] = os.path.basename(\n                        res[\"source_documents\"][i][\"metadata\"][\"source\"]\n                    )\n        else:\n            # Not using vectostore, generic conversation\n            if not memory:\n                memory = ConversationBufferMemory(ai_prefix=\"AI Assistant\")\n            template = instructions if instructions else self.prompt_template\n            PromptTemplate(template=template, input_variables=self.prompt_variables)\n            conversation = ConversationChain(\n                llm=self.llm,\n                prompt=self.prompt,\n                verbose=True,\n                memory=memory,\n            )\n            resp = await conversation.apredict(input=prompt, callbacks=callbacks)\n            res = {\"result\": resp}\n        return res\n\n\n# \"page_content\": \"Drug repositioning and repurposing for Alzheimer disease\\nClive Ballard1\",\n# \"metadata\": { \"source\": \"documents/drug_repositioning_for_alzheimer_disease.pdf\",\n#     \"page\": 0, \"filename\": \"drug_repositioning_for_alzheimer_disease.pdf\" }\n\n\nDEFAULT_CONVERSATION_PROMPT = \"\"\"Assistant is a large language model trained by everyone.\n\nAssistant is designed to be able to assist with a wide range of tasks, from answering simple questions to providing in-depth explanations and discussions on a wide range of topics. As a language model, Assistant is able to generate human-like text based on the input it receives, allowing it to engage in natural-sounding conversations and provide responses that are coherent and relevant to the topic at hand.\n\nAssistant is constantly learning and improving, and its capabilities are constantly evolving. It is able to process and understand large amounts of text, and can use this knowledge to provide accurate and informative responses to a wide range of questions. Additionally, Assistant is able to generate its own text based on the input it receives, allowing it to engage in discussions and provide explanations and descriptions on a wide range of topics.\n\nOverall, Assistant is a powerful tool that can help with a wide range of tasks and provide valuable insights and information on a wide range of topics. Whether you need help with a specific question or just want to have a conversation about a particular topic, Assistant is here to assist.\n\n{history}\nUser: {input}\nAssistant:\"\"\"\n\nDEFAULT_QA_PROMPT = \"\"\"Use the following pieces of information to answer the user's question.\nIf you don't know the answer, just say that you don't know, don't try to make up an answer.\n\nContext: {context}\nQuestion: {question}\n\nOnly return the helpful answer below and nothing else.\nHelpful answer:\n\"\"\"\n"
  },
  {
    "path": "src/libre_chat/py.typed",
    "content": ""
  },
  {
    "path": "src/libre_chat/router.py",
    "content": "import os\nimport zipfile\nfrom dataclasses import dataclass\nfrom typing import Any, Dict, List, Optional, Union\n\nimport werkzeug\nfrom fastapi import APIRouter, Body, File, HTTPException, Request, UploadFile, WebSocket\nfrom fastapi.responses import JSONResponse\nfrom langchain.callbacks.base import AsyncCallbackHandler\nfrom langchain.memory import ConversationBufferMemory\n\nfrom libre_chat.conf import ChatConf, default_conf\nfrom libre_chat.utils import ChatResponse, Prompt, log\n\n__all__ = [\n    \"ChatRouter\",\n]\n\napi_responses: Optional[Dict[Union[int, str], Dict[str, Any]]] = {\n    200: {\n        \"description\": \"Chat response\",\n        \"content\": {\n            \"application/json\": {\n                \"result\": \"\",\n                \"source_docs\": [],\n            },\n        },\n    },\n    400: {\"description\": \"Bad Request\"},\n    422: {\"description\": \"Unprocessable Entity\"},\n}\n\n\n@dataclass\nclass PromptResponse:\n    result: str\n    source_documents: Optional[List[Any]] = None\n\n\nclass ChatRouter(APIRouter):\n    \"\"\"\n    Class to deploy a LLM router with FastAPI.\n    \"\"\"\n\n    def __init__(\n        self,\n        *args: Any,\n        llm: Any,\n        path: str = \"/prompt\",\n        conf: Optional[ChatConf] = None,\n        examples: Optional[List[str]] = None,\n        **kwargs: Any,\n    ) -> None:\n        \"\"\"\n        Constructor of the LLM API router with the actual calls\n        \"\"\"\n        self.path = path\n        self.llm = llm\n        self.conf = conf if conf else default_conf\n        self.title = self.conf.info.title\n        self.description = self.conf.info.description\n        self.version = self.conf.info.version\n        self.examples = examples if examples else self.conf.info.examples\n        example_post = {\"prompt\": self.examples[0]}\n\n        # Instantiate APIRouter\n        super().__init__(\n            *args,\n            responses=api_responses,\n            **kwargs,\n        )\n        # Create a list to store all connected WebSocket clients\n        self.connected_clients: List[WebSocket] = []\n\n        @self.get(\n            self.path,\n            name=\"Prompt the LLM\",\n            description=self.description,\n            response_model=PromptResponse,\n        )\n        def get_prompt(request: Request, prompt: str = self.examples[0]) -> JSONResponse:\n            \"\"\"Send a prompt to the chatbot through HTTP GET operation.\n\n            :param request: The HTTP GET request with a .body()\n            :param prompt: Prompt to send to the LLM\n            \"\"\"\n            return JSONResponse(self.llm.query(prompt))\n\n        @self.post(\n            self.path,\n            name=\"Prompt the LLM\",\n            description=self.description,\n            response_description=\"Prompt response\",\n            response_model=PromptResponse,\n        )\n        def post_prompt(\n            request: Request,\n            prompt: Prompt = Body(..., example=example_post),\n        ) -> JSONResponse:\n            \"\"\"Send a prompt to the chatbot through HTTP POST operation.\n\n            :param request: The HTTP POST request with a .body()\n            :param prompt: Prompt to send to the LLM.\n            \"\"\"\n            return JSONResponse(self.llm.query(prompt.prompt))\n\n        @self.post(\n            \"/documents\",\n            description=\"\"\"Upload documents to be added to the vectorstore, you can provide a zip file that will be automatically unzipped.\"\"\",\n            response_description=\"Operation result\",\n            response_model={},\n            tags=[\"vectorstore\"],\n        )\n        def upload_documents(\n            files: List[UploadFile] = File(...),\n            admin_pass: Optional[str] = None,\n            # current_user: User = Depends(get_current_user),\n        ) -> JSONResponse:\n            os.makedirs(self.conf.vector.documents_path, exist_ok=True)\n            if self.conf.auth.admin_pass and admin_pass != self.conf.auth.admin_pass:\n                raise HTTPException(\n                    status_code=403,\n                    detail=\"The admin pass key provided was wrong\",\n                )\n            for uploaded in files:\n                if uploaded.filename:  # no cov\n                    file_path = werkzeug.utils.safe_join(self.conf.vector.documents_path, uploaded.filename)\n                    if file_path is None:\n                        raise HTTPException(\n                            status_code=403,\n                            detail=f\"Invalid file name: {uploaded.filename}\",\n                        )\n\n                    with open(file_path, \"wb\") as file:\n                        file.write(uploaded.file.read())\n                    # Check if the uploaded file is a zip file\n                    if uploaded.filename.endswith(\".zip\"):\n                        log.info(f\"🤐 Unzipping {file_path}\")\n                        with zipfile.ZipFile(file_path, \"r\") as zip_ref:\n                            zip_ref.extractall(self.conf.vector.documents_path)\n                        os.remove(file_path)\n            # TODO: add just the uploaded files instead of rebuilding the triplestore\n            self.llm.build_vectorstore()\n            self.llm.setup_dbqa()\n            return JSONResponse(\n                {\n                    \"message\": f\"Documents uploaded in {self.conf.vector.documents_path}, vectorstore rebuilt.\"\n                }\n            )\n\n        @self.get(\n            \"/documents\",\n            description=\"\"\"List documents uploaded to the server.\"\"\",\n            response_description=\"List of files\",\n            response_model={},\n            tags=[\"vectorstore\"],\n        )\n        def list_documents(\n            admin_pass: Optional[str] = None,\n            # Depends(get_current_user)\n        ) -> JSONResponse:\n            \"\"\"List all documents in the documents folder.\"\"\"\n            if self.conf.auth.admin_pass and admin_pass != self.conf.auth.admin_pass:\n                raise HTTPException(\n                    status_code=403,\n                    detail=\"The admin pass key provided was wrong\",\n                )\n            file_list = os.listdir(self.conf.vector.documents_path)\n            return JSONResponse({\"count\": len(file_list), \"files\": file_list})\n\n        @self.get(\n            \"/config\",\n            name=\"Get Chat configuration\",\n            description=\"\"\"Get the Chat web service configuration.\"\"\",\n            response_description=\"Chat configuration\",\n            response_model=ChatConf,\n            tags=[\"configuration\"],\n        )\n        def get_config(\n            admin_pass: Optional[str] = None,\n        ) -> JSONResponse:\n            \"\"\"Get the Chat web service configuration.\"\"\"\n            if self.conf.auth.admin_pass and admin_pass != self.conf.auth.admin_pass:\n                raise HTTPException(\n                    status_code=403,\n                    detail=\"The admin pass key provided was wrong\",\n                )\n            return JSONResponse(self.conf.dict())\n\n        @self.post(\n            \"/config\",\n            name=\"Edit Chat configuration\",\n            description=\"\"\"Edit the Chat web service configuration.\"\"\",\n            response_description=\"Chat configuration\",\n            response_model=ChatConf,\n            tags=[\"configuration\"],\n        )\n        def post_config(\n            request: Request,\n            config: ChatConf = Body(..., example=self.conf),\n            admin_pass: Optional[str] = None,\n        ) -> JSONResponse:\n            \"\"\"Edit the Chat web service configuration.\"\"\"\n            if self.conf.auth.admin_pass and admin_pass != self.conf.auth.admin_pass:\n                raise HTTPException(\n                    status_code=403,\n                    detail=\"The admin pass key provided was wrong\",\n                )\n            self.conf = config\n            # TODO: save new config to disk, and make sure all workers reload the new config\n            return JSONResponse(self.conf.dict())\n\n        @self.websocket(\"/chat\")\n        async def websocket_endpoint(websocket: WebSocket) -> None:\n            await websocket.accept()\n            self.connected_clients.append(websocket)\n            log.info(\n                f\"🔌 New websocket connection: {len(self.connected_clients)} clients are connected\"\n            )\n            memory = ConversationBufferMemory(ai_prefix=\"AI Assistant\")\n            try:\n                # Loop to receive messages from the WebSocket client\n                while True:\n                    data = await websocket.receive_json()\n\n                    start_resp = ChatResponse(sender=\"bot\", message=\"\", type=\"start\")\n                    await websocket.send_json(start_resp.dict())\n\n                    resp = await self.llm.aquery(\n                        data[\"prompt\"],\n                        memory=memory,\n                        callbacks=[StreamWebsocketCallback(websocket)],\n                    )\n                    # chat_history.append((question, resp[\"result\"]))\n                    # log.warning(\"RESULTS!\")\n                    # log.warning(resp[\"result\"])\n\n                    end_resp = ChatResponse(\n                        sender=\"bot\",\n                        message=resp[\"result\"],\n                        type=\"end\",\n                        sources=resp[\"source_documents\"] if \"source_documents\" in resp else None,\n                    )\n                    await websocket.send_json(end_resp.model_dump())\n            except Exception as e:\n                log.error(f\"WebSocket error: {e}\")\n            finally:\n                self.connected_clients.remove(websocket)\n\n\n# https://github.com/langchain-ai/chat-langchain/blob/master/main.py\n# class StreamingWebsocketCallbackHandler(AsyncCallbackHandler):\nclass StreamWebsocketCallback(AsyncCallbackHandler):\n    \"\"\"Callback handler for streaming to websocket.\n    Only works with LLMs that support streaming.\"\"\"\n\n    def __init__(\n        self,\n        websocket: WebSocket,\n    ) -> None:\n        \"\"\"Initialize callback handler.\"\"\"\n        super().__init__()\n        self.websocket = websocket\n\n    async def on_llm_new_token(self, token: str, **kwargs: Any) -> None:\n        \"\"\"Run on new LLM token. Only available when streaming is enabled.\"\"\"\n        resp = ChatResponse(message=token, sender=\"bot\", type=\"stream\")\n        await self.websocket.send_json(resp.model_dump())\n"
  },
  {
    "path": "src/libre_chat/static/web-worker.js",
    "content": "// Web worker to cache assets\n// TODO: remove? Now unused\nconst CACHE_NAME = 'libre-chat-assets';\n\nself.addEventListener('install', event => {\n    console.log(`Caching`)\n    event.waitUntil(\n        caches.open(CACHE_NAME).then(cache => {\n            // Cache all stylesheets and scripts imported in the main HTML file\n            const urlsToCache = [];\n            const stylesheets = document.querySelectorAll('link[rel=\"stylesheet\"]');\n            const scripts = document.querySelectorAll('script[src]');\n\n            stylesheets.forEach(link => urlsToCache.push(link.href));\n            scripts.forEach(script => urlsToCache.push(script.src));\n            console.log(`Caching ${urlsToCache}`)\n            return cache.addAll(urlsToCache);\n        })\n    );\n});\nself.addEventListener('fetch', event => {\n    event.respondWith(\n        caches.match(event.request)\n        .then(response => {\n            return response || fetch(event.request);\n        })\n    );\n});\n"
  },
  {
    "path": "src/libre_chat/ui.py",
    "content": "\"\"\"Module: Gradio web UI for LangChain chatbot\"\"\"\nfrom collections.abc import Iterator\nfrom queue import Empty, Queue\nfrom threading import Thread\nfrom typing import Any, List, Tuple\n\nimport gradio as gr\nfrom langchain.callbacks.base import BaseCallbackHandler\nfrom langchain.memory import ConversationBufferMemory\n\nfrom libre_chat.llm import Llm\n\nRETRY_COMMAND = \"/retry\"\nUSER_NAME = \"User\"\nBOT_NAME = \"Assistant\"\nCSS = \"\"\".contain { display: flex; flex-direction: column; }\n#component-0 { height: 100%; flex-grow: 1; }\n#chatbot { flex-grow: 1; }\n\"\"\"\n\n\n# https://www.gradio.app/guides/creating-a-custom-chatbot-with-blocks\n# https://github.com/hwchase17/conversation-qa-gradio\n# https://github.com/gradio-app/gradio/issues/5345\n# https://huggingface.co/spaces/HuggingFaceH4/falcon-chat-demo-for-blog/blob/main/app.py\n# https://huggingface.co/spaces/HuggingFaceH4/falcon-chat-demo-for-blog\ndef gradio_app(llm: Llm) -> Any:\n    def chat_accordion() -> Tuple[float, int]:\n        with gr.Accordion(\"Parameters\", open=False):\n            temperature = gr.Slider(\n                minimum=0,\n                maximum=2.0,\n                value=0.1,\n                step=0.1,\n                interactive=True,\n                label=\"Temperature\",\n            )\n            max_new_tokens = gr.Slider(\n                minimum=10,\n                maximum=llm.conf.llm.max_new_tokens,\n                value=llm.conf.llm.max_new_tokens,\n                step=1,\n                interactive=True,\n                label=\"Max new tokens\",\n            )\n        return temperature, max_new_tokens\n\n    sources_list = []\n\n    def stream(\n        input_text: str, memory: Any, instructions: str, temperature: float, max_new_tokens: int\n    ) -> \"Iterator[Tuple[Any, str]]\":\n        # Create a Queue\n        q: \"Queue[Any]\" = Queue()\n        job_done = object()\n\n        # Create a function to call - this will run in a thread\n        def task() -> None:\n            config = {\n                \"temperature\": temperature,\n                \"max_new_tokens\": max_new_tokens,\n            }\n            res = llm.query(\n                input_text,\n                memory,\n                callbacks=[StreamGradioCallback(q)],\n                config=config,\n                instructions=instructions,\n            )\n            if \"source_documents\" in res:\n                sources_list.append(res[\"source_documents\"])\n            q.put(job_done)\n\n        # Create a thread and start the function\n        t = Thread(target=task)\n        t.start()\n        content = \"\"\n        # Get each new token from the queue and yield for our generator\n        while True:\n            try:\n                next_token = q.get(True, timeout=1)\n                if next_token is job_done:\n                    break\n                content += str(next_token)\n                yield next_token, content\n            except Empty:\n                continue\n\n    def vote(data: gr.LikeData) -> None:\n        # TODO: save votes somewhere\n        if data.liked:\n            print(\"You upvoted this response: \" + data.value)\n        else:\n            print(\"You downvoted this response: \" + data.value)\n\n    def on_select(evt: gr.SelectData) -> str:\n        msg_index = evt.index[0]\n        if msg_index < len(sources_list):\n            sources_str = f\"## 🗃️ Sources\\nFor message n°{msg_index}\\n\"\n            for source in sources_list[msg_index]:\n                sources_str += (\n                    f'### 📄 {source[\"metadata\"][\"filename\"]}\\n{source[\"page_content\"]}\\n\\n'\n                )\n            return sources_str\n        return \"\"\n        # return f\"You selected 【{evt.value}】 at 【{evt.index}】 from 【{evt.target}】\"\n\n    # gray https://www.gradio.app/guides/theming-guide#core-colors\n    theme = gr.themes.Soft(primary_hue=\"cyan\")\n    # theme = 'ParityError/LimeFace',\n    # theme = 'bethecloud/storj_theme'\n    # .set(slider_color=\"#FF0000\")\n\n    with gr.Blocks(\n        theme=theme, css=CSS, analytics_enabled=False, title=llm.conf.info.title\n    ) as chat:\n        gr.Markdown(f\"# {llm.conf.info.title}\\n\\n{llm.conf.info.description}\")\n        chatbot = gr.Chatbot(elem_id=\"chatbot\", show_copy_button=True, show_label=False)\n        inputs = gr.Textbox(\n            placeholder=\"Ask me anything\",\n            label=\"Type a question and press Enter\",\n            max_lines=5,\n        )\n\n        with gr.Row():\n            submit_button = gr.Button(\"📩 Submit question\", variant=\"primary\")\n            retry_button = gr.Button(\"♻️ Retry last question\")\n            delete_turn_button = gr.Button(\"🧽 Delete last question\")\n            clear_chat_button = gr.Button(\"🧹 Delete history\", variant=\"stop\")\n            # clear = gr.ClearButton([msg, chatbot])\n\n        gr.Examples(\n            llm.conf.info.examples,\n            inputs=inputs,\n            label=\"Click on any example and press Enter in the input textbox!\",\n        )\n\n        with gr.Row(elem_id=\"param_container\"):\n            with gr.Column():\n                temperature, max_new_tokens = chat_accordion()\n            with gr.Column(), gr.Accordion(\"Instructions\", open=False):\n                instructions = gr.Textbox(\n                    placeholder=\"LLM instructions\",\n                    value=llm.conf.llm.prompt_template,\n                    lines=6,\n                    interactive=True,\n                    label=\"Instructions\",\n                    max_lines=16,\n                    show_label=False,\n                )\n\n        sources = gr.Markdown(\"\")\n\n        memory = ConversationBufferMemory(ai_prefix=\"AI Assistant\")\n\n        def run_chat(\n            message: str,\n            chat_history: List[List[str]],\n            instructions: str,\n            temperature: float,\n            max_new_tokens: int,\n        ) -> \"Iterator[List[List[str]]]\":\n            if not message or (message == RETRY_COMMAND and len(chat_history) == 0):\n                yield chat_history\n                return\n\n            if message == RETRY_COMMAND and chat_history:\n                prev_turn = chat_history.pop(-1)\n                user_message, _ = prev_turn\n                message = user_message\n                # TODO: the chat history in the gradio app is properly cleaned, but the LLM built-in memory is not cleaned\n\n            # prompt = format_chat_prompt(message, chat_history, instructions)\n            chat_history = [*chat_history, [message, \"⏳ Processing your question\"]]\n            # memory.chat_memory.add_user_message(message)\n            yield chat_history\n            for next_token, content in stream(\n                message, memory, instructions, temperature, max_new_tokens\n            ):\n                chat_history[-1][1] = content\n                yield chat_history\n            # memory.chat_memory.add_ai_message(chat_history[-1][1])\n            # print(memory.chat_memory.messages)\n\n        def delete_last_turn(chat_history: List[List[str]]) -> Any:\n            if chat_history:\n                chat_history.pop(-1)\n            return {chatbot: gr.update(value=chat_history)}\n\n        def run_retry(\n            message: str,\n            chat_history: List[List[str]],\n            instructions: str,\n            temperature: float,\n            max_new_tokens: int,\n        ) -> \"Iterator[List[List[str]]]\":\n            yield from run_chat(\n                RETRY_COMMAND, chat_history, instructions, temperature, max_new_tokens\n            )\n\n        def clear_chat() -> List[str]:\n            ConversationBufferMemory(ai_prefix=\"AI Assistant\")\n            return []\n\n        inputs.submit(\n            run_chat,\n            [inputs, chatbot, instructions, temperature, max_new_tokens],\n            outputs=[chatbot],\n            queue=True,\n            show_progress=\"hidden\",\n        )\n        inputs.submit(\n            lambda: \"\", inputs=None, outputs=inputs, queue=False, show_progress=\"hidden\"\n        )  # Clear inputs on submit\n        submit_button.click(\n            run_chat,\n            [inputs, chatbot, instructions, temperature, max_new_tokens],\n            outputs=[chatbot],\n            queue=True,\n            show_progress=\"hidden\",\n        )\n        submit_button.click(\n            lambda: \"\", inputs=None, outputs=inputs, queue=False, show_progress=\"hidden\"\n        )\n        delete_turn_button.click(delete_last_turn, inputs=[chatbot], outputs=[chatbot], queue=False)\n        retry_button.click(\n            run_retry,\n            [inputs, chatbot, instructions, temperature, max_new_tokens],\n            outputs=[chatbot],\n            queue=False,\n        )\n        clear_chat_button.click(clear_chat, [], chatbot, queue=False)\n\n        chatbot.like(vote, None, None, queue=False)\n        chatbot.select(on_select, None, sources, queue=False, show_progress=\"hidden\")\n\n    return chat.queue()\n\n\nclass StreamGradioCallback(BaseCallbackHandler):\n    \"\"\"Callback handler for streaming LLM responses to a queue.\"\"\"\n\n    def __init__(self, q: \"Queue[Any]\"):\n        self.q = q\n\n    def on_llm_new_token(self, token: str, **kwargs: Any) -> None:\n        self.q.put(token)\n\n    def on_llm_end(self, *args: Any, **kwargs: Any) -> bool:\n        return self.q.empty()\n"
  },
  {
    "path": "src/libre_chat/utils.py",
    "content": "import logging\nimport os\nimport shutil\nimport zipfile\nfrom concurrent.futures import ThreadPoolExecutor\nfrom dataclasses import dataclass, field\nfrom typing import Any, Dict, List, Optional, Tuple\n\nimport requests\nfrom pydantic import BaseModel, validator\nfrom tqdm import tqdm\nfrom uvicorn.logging import ColourizedFormatter\n\n__all__ = [\"Prompt\", \"parallel_download\", \"log\"]\n\n\nlog_format = \"%(levelprefix)s [%(asctime)s] %(message)s [%(module)s:%(funcName)s]\"\nlog = logging.getLogger(__name__)\nlog.propagate = False\nhandler = logging.StreamHandler()\nhandler.setFormatter(ColourizedFormatter(log_format))\nlog.addHandler(handler)\n\nBOLD = \"\\033[1m\"\nEND = \"\\033[0m\"\nRED = \"\\033[91m\"\nYELLOW = \"\\033[33m\"\nCYAN = \"\\033[36m\"\n\n\nclass ChatResponse(BaseModel):\n    \"\"\"Chat response schema.\"\"\"\n\n    message: str\n    type: str = \"stream\"  # noqa\n    sender: str = \"bot\"\n    sources: Optional[List[Dict[str, Any]]] = None\n\n    @validator(\"sender\", allow_reuse=True)\n    def sender_must_be_bot_or_you(cls, v: str) -> str:  # noqa\n        if v not in [\"bot\", \"user\"]:\n            raise ValueError(\"sender must be bot or user\")\n        return v\n\n    @validator(\"type\", allow_reuse=True)\n    def validate_message_type(cls, v: str) -> str:  # noqa\n        if v not in [\"start\", \"stream\", \"end\", \"error\", \"info\"]:\n            raise ValueError(\"type must be start, stream or end\")\n        return v\n\n\n# https://github.com/lm-sys/FastChat/blob/main/docs/openai_api.md\n# https://github.com/lm-sys/FastChat/blob/main/fastchat/protocol/openai_api_protocol.py\n@dataclass\nclass Prompt:\n    prompt: str\n    system_prompt: Optional[str] = None\n    max_tokens: Optional[int] = None\n    temperature: Optional[float] = None\n    top_p: Optional[float] = None\n    top_k: Optional[int] = None\n    history_with_input: List[Tuple[str, str]] = field(default_factory=lambda: [])\n    # model: str\n\n\ndef download_file(url: str, path: str) -> None:\n    ddl_path = f\"{path}-ddl\" if not url.endswith(\".zip\") else f\"{path}.zip\"\n    log.info(f\"📥 Downloading {url} to {ddl_path}\")\n    progress_bar: Optional[tqdm] = None\n    try:\n        with requests.get(url, stream=True, timeout=10800) as response:  # 3h timeout\n            response.raise_for_status()\n            total_size_in_bytes = int(response.headers.get(\"content-length\", 0))\n            progress_bar = tqdm(total=total_size_in_bytes, unit=\"iB\", unit_scale=True)\n            with open(ddl_path, \"wb\") as file:\n                for chunk in response.iter_content(chunk_size=8192):\n                    progress_bar.update(len(chunk))\n                    file.write(chunk)\n            progress_bar.close()\n        if ddl_path.endswith(\".zip\"):\n            log.info(f\"🤐 Unzipping {ddl_path} to {path}\")\n            with zipfile.ZipFile(ddl_path, \"r\") as zip_ref:\n                # Extract all the contents into the directory\n                for file in tqdm(zip_ref.infolist(), desc=\"Extracting \"):\n                    zip_ref.extract(file, path)  # type: ignore\n        else:\n            shutil.move(ddl_path, path)\n    except Exception as e:\n        log.warning(f\"⚠️ Failed to download {url}: {e}\")\n    finally:\n        if progress_bar is not None:\n            progress_bar.close()\n    # try:\n    #     with requests.get(url, stream=True, timeout=10800) as response:  # 3h timeout\n    #         response.raise_for_status()\n    #         with open(ddl_path, \"wb\") as file:\n    #             for chunk in response.iter_content(\n    #                 chunk_size=8192\n    #             ):  # Adjust the chunk size as needed\n    #                 file.write(chunk)\n    #     if ddl_path.endswith(\".zip\"):\n    #         log.info(f\"🤐 Unzipping {ddl_path} to {path}\")\n    #         with zipfile.ZipFile(ddl_path, \"r\") as zip_ref:\n    #             zip_ref.extractall(path)\n    #     else:\n    #         shutil.move(ddl_path, path)\n    # except Exception as e:\n    #     log.warning(f\"⚠️ Failed to download {url}: {e}\")\n    log.info(f\"✅ Downloaded: {url} in {path}\")\n\n\ndef parallel_download(files_list: List[Dict[str, Optional[str]]], workers: int = 4) -> None:\n    with ThreadPoolExecutor(\n        max_workers=workers\n    ) as executor:  # Adjust the number of workers as needed\n        futures = []\n        for f in files_list:\n            if not f[\"path\"]:\n                continue\n            parent_folder = os.path.dirname(f[\"path\"])\n            if parent_folder:\n                os.makedirs(parent_folder, exist_ok=True)\n            if f[\"path\"] and not os.path.exists(f[\"path\"]) and f[\"url\"]:\n                future = executor.submit(download_file, f[\"url\"], f[\"path\"])\n                futures.append(future)\n        for future in futures:\n            future.result()\n"
  },
  {
    "path": "src/libre_chat/vectorstore.py",
    "content": "\"\"\"Module: Open-source LLM setup\"\"\"\nimport os\nfrom datetime import datetime\nfrom typing import Any, Dict, List, Optional, Union\n\nfrom langchain.schema.document import Document\nfrom langchain.text_splitter import RecursiveCharacterTextSplitter\nfrom langchain_community.document_loaders import (\n    CSVLoader,\n    DirectoryLoader,\n    EverNoteLoader,\n    JSONLoader,\n    PyPDFLoader,\n    TextLoader,\n    UnstructuredEmailLoader,\n    UnstructuredEPubLoader,\n    UnstructuredExcelLoader,\n    UnstructuredHTMLLoader,\n    UnstructuredMarkdownLoader,\n    UnstructuredODTLoader,\n    UnstructuredPowerPointLoader,\n    UnstructuredWordDocumentLoader,\n)\nfrom langchain_community.embeddings import HuggingFaceEmbeddings\nfrom langchain_community.vectorstores import FAISS\n\nfrom libre_chat.conf import ChatConf\nfrom libre_chat.utils import BOLD, CYAN, END, log\n\n\ndef build_vectorstore(\n    conf: ChatConf, document_loaders: Any, device: Any, vector_path: Optional[str] = None\n) -> Optional[FAISS]:\n    \"\"\"Build vectorstore from documents.\"\"\"\n    # NOTE: Using Qdrant blocked by UM proxy...\n    # https://github.com/langchain-ai/langchain/blob/master/libs/community/langchain_community/vectorstores/qdrant.py\n    time_start = datetime.now()\n    documents_path = conf.vector.documents_path\n    docs_count = len(os.listdir(documents_path))\n    if docs_count < 1:\n        log.warning(\n            f\"⚠️ No documents found in {documents_path}, vectorstore will not be built, and a generic chatbot will be used until documents are added\"\n        )\n    else:\n        log.info(\n            f\"🏗️ Building the vectorstore from the {BOLD}{CYAN}{docs_count}{END} documents found in {BOLD}{documents_path}{END}, using embeddings from {BOLD}{conf.vector.embeddings_path}{END}\"\n        )\n        documents: List[Document] = []\n        # Loading all file types provided in the document_loaders object\n        for doc_load in document_loaders:\n            loader = DirectoryLoader(\n                documents_path,\n                glob=doc_load[\"glob\"],\n                loader_cls=doc_load[\"loader_cls\"],\n                loader_kwargs=doc_load[\"loader_kwargs\"] if \"loader_kwargs\" in doc_load else {},\n            )\n            loaded_docs = loader.load()\n            if len(loaded_docs) > 0:\n                log.info(f\"🗃️  Loaded {len(loaded_docs)} items from {doc_load['glob']} files\")\n            documents.extend(loaded_docs)\n\n        # Split the text up into small, semantically meaningful chunks (often sentences) https://js.langchain.com/docs/modules/data_connection/document_transformers/\n        text_splitter = RecursiveCharacterTextSplitter(\n            chunk_size=conf.vector.chunk_size, chunk_overlap=conf.vector.chunk_overlap\n        )\n        splitted_texts = text_splitter.split_documents(documents)\n        # TODO: use fastembed?\n        embeddings = HuggingFaceEmbeddings(\n            model_name=conf.vector.embeddings_path, model_kwargs={\"device\": device}\n        )\n        # TODO: use Qdrant vectorstore\n        # os.makedirs(str(conf.vector.vector_path), exist_ok=True)\n        # vectorstore = Qdrant.from_documents(\n        #     splitted_texts,\n        #     embeddings,\n        #     # path=conf.vector.vector_path,\n        #     url=conf.vector.vector_path,\n        #     collection_name=\"libre_chat_rag\",\n        #     prefer_grpc=True,\n        #     # force_recreate=True,\n        # )\n        vectorstore = FAISS.from_documents(splitted_texts, embeddings)\n        if vector_path:\n            vectorstore.save_local(vector_path)\n        log.info(f\"✅ Vectorstore built in {datetime.now() - time_start}\")\n        return vectorstore\n    return None\n\n\nDEFAULT_DOCUMENT_LOADERS: List[Dict[str, Union[str, Any]]] = [\n    {\"glob\": \"*.pdf\", \"loader_cls\": PyPDFLoader},\n    {\"glob\": \"*.csv\", \"loader_cls\": CSVLoader, \"loader_kwargs\": {\"encoding\": \"utf8\"}},\n    {\n        \"glob\": \"*.tsv\",\n        \"loader_cls\": CSVLoader,\n        \"loader_kwargs\": {\"encoding\": \"utf8\", \"delimiter\": \"\\t\"},\n    },\n    {\n        \"glob\": \"*.psv\",\n        \"loader_cls\": CSVLoader,\n        \"loader_kwargs\": {\"encoding\": \"utf8\", \"delimiter\": \"\\\\p\"},\n    },\n    {\"glob\": \"*.xls?x\", \"loader_cls\": UnstructuredExcelLoader},\n    {\"glob\": \"*.?xhtm?l\", \"loader_cls\": UnstructuredHTMLLoader},\n    {\"glob\": \"*.xml\", \"loader_cls\": UnstructuredHTMLLoader},\n    {\"glob\": \"*.json*\", \"loader_cls\": JSONLoader},\n    {\"glob\": \"*.md*\", \"loader_cls\": UnstructuredMarkdownLoader},\n    {\"glob\": \"*.txt\", \"loader_cls\": TextLoader, \"loader_kwargs\": {\"encoding\": \"utf8\"}},\n    {\"glob\": \"*.doc?x\", \"loader_cls\": UnstructuredWordDocumentLoader},\n    {\"glob\": \"*.odt\", \"loader_cls\": UnstructuredODTLoader},\n    {\"glob\": \"*.ppt?x\", \"loader_cls\": UnstructuredPowerPointLoader},\n    {\"glob\": \"*.epub\", \"loader_cls\": UnstructuredEPubLoader},\n    {\"glob\": \"*.eml\", \"loader_cls\": UnstructuredEmailLoader},\n    {\"glob\": \"*.enex\", \"loader_cls\": EverNoteLoader},\n]\n"
  },
  {
    "path": "src/libre_chat/webapp/_astro/Nav.FPLT-AC_.js",
    "content": "import{d as S,k as y,c as E,g as A,i as j,f as I,r as B,s as d,t as T}from\"./web.zg9RI5L8.js\";import{p as U,$ as z,a as G,s as N}from\"./nanostores.RVhpkXze.js\";var O=T('<div class=\"navbar bg-base-300 min-h-0 p-0\"><div class=navbar-start></div><div class=navbar-center><div class=\"text-xl font-thin\"></div></div><div class=navbar-end><div class=\"space-x-3 hidden items-center lg:flex\"><label class=\"cursor-pointer grid place-items-center\"><input type=checkbox value=dark checked class=\"toggle theme-controller bg-base-content row-start-1 col-start-1 col-span-2\"><svg class=\"col-start-1 row-start-1 stroke-base-100 fill-base-100\"xmlns=http://www.w3.org/2000/svg width=14 height=14 viewBox=\"0 0 24 24\"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round><circle cx=12 cy=12 r=5></circle><path d=\"M12 1v2M12 21v2M4.2 4.2l1.4 1.4M18.4 18.4l1.4 1.4M1 12h2M21 12h2M4.2 19.8l1.4-1.4M18.4 5.6l1.4-1.4\"></path></svg><svg class=\"col-start-2 row-start-1 stroke-base-100 fill-base-100\"xmlns=http://www.w3.org/2000/svg width=14 height=14 viewBox=\"0 0 24 24\"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round><path d=\"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z\"></path></svg></label><a href=/gradio/ target=_blank data-tooltip=\"Gradio UI\"><button class=\"p-1 rounded-lg hover:bg-gray-500\"><img class=h-5 src=/gradio_logo.svg></button></a><a href=/docs target=_blank data-tooltip=\"OpenAPI documentation\"><button class=\"p-1 rounded-lg hover:bg-gray-500\"><img class=h-5 src=/openapi_logo.svg></button></a><a target=_blank rel=\"noopener noreferrer\"><button data-tooltip=\"Source code\"class=\"px-2 py-1 mr-8 rounded-lg hover:bg-gray-500\"><i class=\"fab fa-github text-xl\"></i></button></a></div><div class=\"dropdown dropdown-end lg:hidden\"><div tabindex=0 role=button class=\"btn btn-ghost lg:hidden\"><svg xmlns=http://www.w3.org/2000/svg class=\"h-5 w-5\"fill=none viewBox=\"0 0 24 24\"stroke=currentColor><path stroke-linecap=round stroke-linejoin=round stroke-width=2 d=\"M4 6h16M4 12h8m-8 6h16\"></path></svg></div><ul tabindex=0 class=\"menu menu-sm dropdown-content items-center mt-3 z-[1] p-2 shadow bg-base-100 rounded-box dropdown-left\"><li><a href=/gradio/ target=_blank data-tooltip=\"Gradio UI\"><img class=h-5 src=/gradio_logo.svg></a></li><li><a href=/docs target=_blank data-tooltip=\"OpenAPI documentation\"><img class=h-5 src=/openapi_logo.svg></a></li><li><a target=_blank rel=\"noopener noreferrer\"><i class=\"fab fa-github text-xl\">');function R(){const a=U(z);y(async()=>{const r=await(await fetch(`${G}/config`)).json();N(r)});const[c,g]=E(\"dark\"),h=()=>{const t=c()===\"light\"?\"dark\":\"light\";g(t),document.documentElement.setAttribute(\"data-theme\",t)};return(()=>{var t=A(O),r=t.firstChild,o=r.nextSibling,b=o.firstChild,v=o.nextSibling,l=v.firstChild,s=l.firstChild,p=s.firstChild,f=s.nextSibling,u=f.nextSibling,m=u.nextSibling,w=l.nextSibling,x=w.firstChild,_=x.nextSibling,k=_.firstChild,$=k.nextSibling,C=$.nextSibling,M=C.firstChild;return j(b,()=>a().info.title),p.$$click=h,I(e=>{var n=a().info.repository_url,i=a().info.repository_url;return n!==e.e&&d(m,\"href\",e.e=n),i!==e.t&&d(M,\"href\",e.t=i),e},{e:void 0,t:void 0}),B(),t})()}S([\"click\"]);export{R as default};\n"
  },
  {
    "path": "src/libre_chat/webapp/_astro/admin.e50kLjN3.css",
    "content": "*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: \"\"}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}:root,[data-theme]{background-color:var(--fallback-b1,oklch(var(--b1)/1));color:var(--fallback-bc,oklch(var(--bc)/1))}@supports not (color: oklch(0 0 0)){:root{color-scheme:light;--fallback-p: #491eff;--fallback-pc: #d4dbff;--fallback-s: #ff41c7;--fallback-sc: #fff9fc;--fallback-a: #00cfbd;--fallback-ac: #00100d;--fallback-n: #2b3440;--fallback-nc: #d7dde4;--fallback-b1: #ffffff;--fallback-b2: #e5e6e6;--fallback-b3: #e5e6e6;--fallback-bc: #1f2937;--fallback-in: #00b3f0;--fallback-inc: #000000;--fallback-su: #00ca92;--fallback-suc: #000000;--fallback-wa: #ffc22d;--fallback-wac: #000000;--fallback-er: #ff6f70;--fallback-erc: #000000}@media (prefers-color-scheme: dark){:root{color-scheme:dark;--fallback-p: #7582ff;--fallback-pc: #050617;--fallback-s: #ff71cf;--fallback-sc: #190211;--fallback-a: #00c7b5;--fallback-ac: #000e0c;--fallback-n: #2a323c;--fallback-nc: #a6adbb;--fallback-b1: #1d232a;--fallback-b2: #191e24;--fallback-b3: #15191e;--fallback-bc: #a6adbb;--fallback-in: #00b3f0;--fallback-inc: #000000;--fallback-su: #00ca92;--fallback-suc: #000000;--fallback-wa: #ffc22d;--fallback-wac: #000000;--fallback-er: #ff6f70;--fallback-erc: #000000}}}html{-webkit-tap-highlight-color:transparent}:root{color-scheme:light;--in: .7206 .191 231.6;--su: 64.8% .15 160;--wa: .8471 .199 83.87;--er: .7176 .221 22.18;--pc: .152344 .017892 200.026556;--sc: .185516 .001163 264.531291;--ac: .193391 .000575 264.541934;--nc: .847148 .013247 313.189598;--inc: 0 0 0;--suc: 0 0 0;--wac: 0 0 0;--erc: 0 0 0;--rounded-box: 1rem;--rounded-badge: 1.9rem;--animation-btn: .25s;--animation-input: .2s;--btn-focus-scale: .95;--border-btn: 1px;--p: .76172 .089459 200.026556;--s: .927582 .005814 264.531291;--a: .966956 .002874 264.541934;--n: .235742 .066235 313.189598;--b1: .977882 .00418 56.375637;--b2: .939822 .007638 61.449292;--b3: .915861 .006811 53.440502;--bc: .235742 .066235 313.189598;--rounded-btn: 1.9rem;--tab-border: 2px;--tab-radius: .7rem}@media (prefers-color-scheme: dark){:root{color-scheme:dark;--in: .7206 .191 231.6;--su: 64.8% .15 160;--wa: .8471 .199 83.87;--er: .7176 .221 22.18;--pc: .13138 .0392 275.75;--sc: .889222 .005262 256.801751;--ac: .874585 .006124 259.732849;--inc: 0 0 0;--suc: 0 0 0;--wac: 0 0 0;--erc: 0 0 0;--rounded-box: 1rem;--rounded-btn: .5rem;--rounded-badge: 1.9rem;--animation-btn: .25s;--animation-input: .2s;--btn-focus-scale: .95;--border-btn: 1px;--tab-border: 1px;--tab-radius: .5rem;--p: .6569 .196 275.75;--s: .446112 .026312 256.801751;--a: .372927 .03062 259.732849;--n: .313815 .021108 254.139175;--nc: .746477 .0216 264.435964;--b1: .253267 .015896 252.417568;--b2: .232607 .013807 253.100675;--b3: .211484 .01165 254.087939;--bc: .746477 .0216 264.435964}}[data-theme=light]{color-scheme:light;--in: .7206 .191 231.6;--su: 64.8% .15 160;--wa: .8471 .199 83.87;--er: .7176 .221 22.18;--pc: .152344 .017892 200.026556;--sc: .185516 .001163 264.531291;--ac: .193391 .000575 264.541934;--nc: .847148 .013247 313.189598;--inc: 0 0 0;--suc: 0 0 0;--wac: 0 0 0;--erc: 0 0 0;--rounded-box: 1rem;--rounded-badge: 1.9rem;--animation-btn: .25s;--animation-input: .2s;--btn-focus-scale: .95;--border-btn: 1px;--p: .76172 .089459 200.026556;--s: .927582 .005814 264.531291;--a: .966956 .002874 264.541934;--n: .235742 .066235 313.189598;--b1: .977882 .00418 56.375637;--b2: .939822 .007638 61.449292;--b3: .915861 .006811 53.440502;--bc: .235742 .066235 313.189598;--rounded-btn: 1.9rem;--tab-border: 2px;--tab-radius: .7rem}:root:has(input.theme-controller[value=light]:checked){color-scheme:light;--in: .7206 .191 231.6;--su: 64.8% .15 160;--wa: .8471 .199 83.87;--er: .7176 .221 22.18;--pc: .152344 .017892 200.026556;--sc: .185516 .001163 264.531291;--ac: .193391 .000575 264.541934;--nc: .847148 .013247 313.189598;--inc: 0 0 0;--suc: 0 0 0;--wac: 0 0 0;--erc: 0 0 0;--rounded-box: 1rem;--rounded-badge: 1.9rem;--animation-btn: .25s;--animation-input: .2s;--btn-focus-scale: .95;--border-btn: 1px;--p: .76172 .089459 200.026556;--s: .927582 .005814 264.531291;--a: .966956 .002874 264.541934;--n: .235742 .066235 313.189598;--b1: .977882 .00418 56.375637;--b2: .939822 .007638 61.449292;--b3: .915861 .006811 53.440502;--bc: .235742 .066235 313.189598;--rounded-btn: 1.9rem;--tab-border: 2px;--tab-radius: .7rem}[data-theme=dark]{color-scheme:dark;--in: .7206 .191 231.6;--su: 64.8% .15 160;--wa: .8471 .199 83.87;--er: .7176 .221 22.18;--pc: .13138 .0392 275.75;--sc: .889222 .005262 256.801751;--ac: .874585 .006124 259.732849;--inc: 0 0 0;--suc: 0 0 0;--wac: 0 0 0;--erc: 0 0 0;--rounded-box: 1rem;--rounded-btn: .5rem;--rounded-badge: 1.9rem;--animation-btn: .25s;--animation-input: .2s;--btn-focus-scale: .95;--border-btn: 1px;--tab-border: 1px;--tab-radius: .5rem;--p: .6569 .196 275.75;--s: .446112 .026312 256.801751;--a: .372927 .03062 259.732849;--n: .313815 .021108 254.139175;--nc: .746477 .0216 264.435964;--b1: .253267 .015896 252.417568;--b2: .232607 .013807 253.100675;--b3: .211484 .01165 254.087939;--bc: .746477 .0216 264.435964}:root:has(input.theme-controller[value=dark]:checked){color-scheme:dark;--in: .7206 .191 231.6;--su: 64.8% .15 160;--wa: .8471 .199 83.87;--er: .7176 .221 22.18;--pc: .13138 .0392 275.75;--sc: .889222 .005262 256.801751;--ac: .874585 .006124 259.732849;--inc: 0 0 0;--suc: 0 0 0;--wac: 0 0 0;--erc: 0 0 0;--rounded-box: 1rem;--rounded-btn: .5rem;--rounded-badge: 1.9rem;--animation-btn: .25s;--animation-input: .2s;--btn-focus-scale: .95;--border-btn: 1px;--tab-border: 1px;--tab-radius: .5rem;--p: .6569 .196 275.75;--s: .446112 .026312 256.801751;--a: .372927 .03062 259.732849;--n: .313815 .021108 254.139175;--nc: .746477 .0216 264.435964;--b1: .253267 .015896 252.417568;--b2: .232607 .013807 253.100675;--b3: .211484 .01165 254.087939;--bc: .746477 .0216 264.435964}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.container{width:100%}@media (min-width: 640px){.container{max-width:640px}}@media (min-width: 768px){.container{max-width:768px}}@media (min-width: 1024px){.container{max-width:1024px}}@media (min-width: 1280px){.container{max-width:1280px}}@media (min-width: 1536px){.container{max-width:1536px}}.avatar.placeholder>div{display:flex;align-items:center;justify-content:center}@media (hover:hover){.label a:hover{--tw-text-opacity: 1;color:var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)))}.menu li>*:not(ul):not(.menu-title):not(details):active,.menu li>*:not(ul):not(.menu-title):not(details).active,.menu li>details>summary:active{--tw-bg-opacity: 1;background-color:var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));--tw-text-opacity: 1;color:var(--fallback-nc,oklch(var(--nc)/var(--tw-text-opacity)))}}.btn{display:inline-flex;height:3rem;min-height:3rem;flex-shrink:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;flex-wrap:wrap;align-items:center;justify-content:center;border-radius:var(--rounded-btn, .5rem);border-color:transparent;border-color:oklch(var(--btn-color, var(--b2)) / var(--tw-border-opacity));padding-left:1rem;padding-right:1rem;text-align:center;font-size:.875rem;line-height:1em;gap:.5rem;font-weight:600;text-decoration-line:none;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);border-width:var(--border-btn, 1px);animation:button-pop var(--animation-btn, .25s) ease-out;transition-property:color,background-color,border-color,opacity,box-shadow,transform;--tw-text-opacity: 1;color:var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);outline-color:var(--fallback-bc,oklch(var(--bc)/1));background-color:oklch(var(--btn-color, var(--b2)) / var(--tw-bg-opacity));--tw-bg-opacity: 1;--tw-border-opacity: 1}.btn-disabled,.btn[disabled],.btn:disabled{pointer-events:none}:where(.btn:is(input[type=checkbox])),:where(.btn:is(input[type=radio])){width:auto;-webkit-appearance:none;-moz-appearance:none;appearance:none}.btn:is(input[type=checkbox]):after,.btn:is(input[type=radio]):after{--tw-content: attr(aria-label);content:var(--tw-content)}.chat{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));-moz-column-gap:.75rem;column-gap:.75rem;padding-top:.25rem;padding-bottom:.25rem}.checkbox{flex-shrink:0;--chkbg: var(--fallback-bc,oklch(var(--bc)/1));--chkfg: var(--fallback-b1,oklch(var(--b1)/1));height:1.5rem;width:1.5rem;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:var(--rounded-btn, .5rem);border-width:1px;border-color:var(--fallback-bc,oklch(var(--bc)/var(--tw-border-opacity)));--tw-border-opacity: .2}.dropdown{position:relative;display:inline-block}.dropdown>*:not(summary):focus{outline:2px solid transparent;outline-offset:2px}.dropdown .dropdown-content{position:absolute}.dropdown:is(:not(details)) .dropdown-content{visibility:hidden;opacity:0;transform-origin:top;--tw-scale-x: .95;--tw-scale-y: .95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1);transition-duration:.2s}.dropdown-end .dropdown-content{inset-inline-end:0px}.dropdown-left .dropdown-content{bottom:auto;inset-inline-end:100%;top:0;transform-origin:right}.dropdown-right .dropdown-content{bottom:auto;inset-inline-start:100%;top:0;transform-origin:left}.dropdown-bottom .dropdown-content{bottom:auto;top:100%;transform-origin:top}.dropdown-top .dropdown-content{bottom:100%;top:auto;transform-origin:bottom}.dropdown-end.dropdown-right .dropdown-content,.dropdown-end.dropdown-left .dropdown-content{bottom:0;top:auto}.dropdown.dropdown-open .dropdown-content,.dropdown:not(.dropdown-hover):focus .dropdown-content,.dropdown:focus-within .dropdown-content{visibility:visible;opacity:1}@media (hover: hover){.dropdown.dropdown-hover:hover .dropdown-content{visibility:visible;opacity:1}.btn:hover{--tw-border-opacity: 1;border-color:var(--fallback-b3,oklch(var(--b3)/var(--tw-border-opacity)));--tw-bg-opacity: 1;background-color:var(--fallback-b3,oklch(var(--b3)/var(--tw-bg-opacity)))}@supports (color: color-mix(in oklab,black,black)){.btn:hover{background-color:color-mix(in oklab,oklch(var(--btn-color, var(--b2)) / var(--tw-bg-opacity, 1)) 90%,black);border-color:color-mix(in oklab,oklch(var(--btn-color, var(--b2)) / var(--tw-border-opacity, 1)) 90%,black)}}@supports not (color: oklch(0 0 0)){.btn:hover{background-color:var(--btn-color, var(--fallback-b2));border-color:var(--btn-color, var(--fallback-b2))}}.btn.glass:hover{--glass-opacity: 25%;--glass-border-opacity: 15%}.btn-ghost:hover{border-color:transparent}@supports (color: oklch(0 0 0)){.btn-ghost:hover{background-color:var(--fallback-bc,oklch(var(--bc)/.2))}}.btn-disabled:hover,.btn[disabled]:hover,.btn:disabled:hover{--tw-border-opacity: 0;background-color:var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));--tw-bg-opacity: .2;color:var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));--tw-text-opacity: .2}@supports (color: color-mix(in oklab,black,black)){.btn:is(input[type=checkbox]:checked):hover,.btn:is(input[type=radio]:checked):hover{background-color:color-mix(in oklab,var(--fallback-p,oklch(var(--p)/1)) 90%,black);border-color:color-mix(in oklab,var(--fallback-p,oklch(var(--p)/1)) 90%,black)}}.dropdown.dropdown-hover:hover .dropdown-content{--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}:where(.menu li:not(.menu-title):not(.disabled)>*:not(ul):not(details):not(.menu-title)):not(.active):hover,:where(.menu li:not(.menu-title):not(.disabled)>details>summary:not(.menu-title)):not(.active):hover{cursor:pointer;outline:2px solid transparent;outline-offset:2px}@supports (color: oklch(0 0 0)){:where(.menu li:not(.menu-title):not(.disabled)>*:not(ul):not(details):not(.menu-title)):not(.active):hover,:where(.menu li:not(.menu-title):not(.disabled)>details>summary:not(.menu-title)):not(.active):hover{background-color:var(--fallback-bc,oklch(var(--bc)/.1))}}}.dropdown:is(details) summary::-webkit-details-marker{display:none}.label{display:flex;-webkit-user-select:none;-moz-user-select:none;user-select:none;align-items:center;justify-content:space-between;padding:.5rem .25rem}.input{flex-shrink:1;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:3rem;padding-left:1rem;padding-right:1rem;font-size:1rem;line-height:2;line-height:1.5rem;border-radius:var(--rounded-btn, .5rem);border-width:1px;border-color:transparent;--tw-bg-opacity: 1;background-color:var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)))}.join .dropdown .join-item:first-child:not(:last-child),.join *:first-child:not(:last-child) .dropdown .join-item{border-start-end-radius:inherit;border-end-end-radius:inherit}.link{cursor:pointer;text-decoration-line:underline}.menu{display:flex;flex-direction:column;flex-wrap:wrap;font-size:.875rem;line-height:1.25rem;padding:.5rem}.menu :where(li ul){position:relative;white-space:nowrap;margin-inline-start:1rem;padding-inline-start:.5rem}.menu :where(li:not(.menu-title)>*:not(ul):not(details):not(.menu-title)),.menu :where(li:not(.menu-title)>details>summary:not(.menu-title)){display:grid;grid-auto-flow:column;align-content:flex-start;align-items:center;gap:.5rem;grid-auto-columns:minmax(auto,max-content) auto max-content;-webkit-user-select:none;-moz-user-select:none;user-select:none}.menu li.disabled{cursor:not-allowed;-webkit-user-select:none;-moz-user-select:none;user-select:none;color:var(--fallback-bc,oklch(var(--bc)/.3))}.menu :where(li>.menu-dropdown:not(.menu-dropdown-show)){display:none}:where(.menu li){position:relative;display:flex;flex-shrink:0;flex-direction:column;flex-wrap:wrap;align-items:stretch}:where(.menu li) .badge{justify-self:end}.modal{pointer-events:none;position:fixed;inset:0;margin:0;display:grid;height:100%;max-height:none;width:100%;max-width:none;justify-items:center;padding:0;opacity:0;overscroll-behavior:contain;z-index:999;background-color:transparent;color:inherit;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);transition-property:transform,opacity,visibility;overflow-y:hidden}:where(.modal){align-items:center}.modal-box{max-height:calc(100vh - 5em);grid-column-start:1;grid-row-start:1;width:91.666667%;max-width:32rem;--tw-scale-x: .9;--tw-scale-y: .9;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));border-bottom-right-radius:var(--rounded-box, 1rem);border-bottom-left-radius:var(--rounded-box, 1rem);border-top-left-radius:var(--rounded-box, 1rem);border-top-right-radius:var(--rounded-box, 1rem);--tw-bg-opacity: 1;background-color:var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)));padding:1.5rem;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1);transition-duration:.2s;box-shadow:#00000040 0 25px 50px -12px;overflow-y:auto;overscroll-behavior:contain}.modal-open,.modal:target,.modal-toggle:checked+.modal,.modal[open]{pointer-events:auto;visibility:visible;opacity:1}:root:has(:is(.modal-open,.modal:target,.modal-toggle:checked+.modal,.modal[open])){overflow:hidden}.navbar{display:flex;align-items:center;padding:var(--navbar-padding, .5rem);min-height:4rem;width:100%}:where(.navbar>*){display:inline-flex;align-items:center}.navbar-start{width:50%;justify-content:flex-start}.navbar-center{flex-shrink:0}.navbar-end{width:50%;justify-content:flex-end}.progress{position:relative;width:100%;-webkit-appearance:none;-moz-appearance:none;appearance:none;overflow:hidden;height:.5rem;border-radius:var(--rounded-box, 1rem);background-color:var(--fallback-bc,oklch(var(--bc)/.2))}.toggle{flex-shrink:0;--tglbg: var(--fallback-b1,oklch(var(--b1)/1));--handleoffset: 1.5rem;--handleoffsetcalculator: calc(var(--handleoffset) * -1);--togglehandleborder: 0 0;height:1.5rem;width:3rem;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:var(--rounded-badge, 1.9rem);border-width:1px;border-color:currentColor;background-color:currentColor;color:var(--fallback-bc,oklch(var(--bc)/.5));transition:background,box-shadow var(--animation-input, .2s) ease-out;box-shadow:var(--handleoffsetcalculator) 0 0 2px var(--tglbg) inset,0 0 0 2px var(--tglbg) inset,var(--togglehandleborder)}.btm-nav>*:where(.active){border-top-width:2px;--tw-bg-opacity: 1;background-color:var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)))}.btm-nav>* .label{font-size:1rem;line-height:1.5rem}.btn:active:hover,.btn:active:focus{animation:button-pop 0s ease-out;transform:scale(var(--btn-focus-scale, .97))}@supports not (color: oklch(0 0 0)){.btn{background-color:var(--btn-color, var(--fallback-b2));border-color:var(--btn-color, var(--fallback-b2))}.prose :where(code):not(:where([class~=not-prose] *,pre *)){background-color:var(--fallback-b3,oklch(var(--b3)/1))}}.btn:focus-visible{outline-style:solid;outline-width:2px;outline-offset:2px}.btn.glass{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);outline-color:currentColor}.btn.glass.btn-active{--glass-opacity: 25%;--glass-border-opacity: 15%}.btn-ghost{border-width:1px;border-color:transparent;background-color:transparent;color:currentColor;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);outline-color:currentColor}.btn-ghost.btn-active{border-color:transparent;background-color:var(--fallback-bc,oklch(var(--bc)/.2))}.btn.btn-disabled,.btn[disabled],.btn:disabled{--tw-border-opacity: 0;background-color:var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));--tw-bg-opacity: .2;color:var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));--tw-text-opacity: .2}.btn:is(input[type=checkbox]:checked),.btn:is(input[type=radio]:checked){--tw-border-opacity: 1;border-color:var(--fallback-p,oklch(var(--p)/var(--tw-border-opacity)));--tw-bg-opacity: 1;background-color:var(--fallback-p,oklch(var(--p)/var(--tw-bg-opacity)));--tw-text-opacity: 1;color:var(--fallback-pc,oklch(var(--pc)/var(--tw-text-opacity)))}.btn:is(input[type=checkbox]:checked):focus-visible,.btn:is(input[type=radio]:checked):focus-visible{outline-color:var(--fallback-p,oklch(var(--p)/1))}@keyframes button-pop{0%{transform:scale(var(--btn-focus-scale, .98))}40%{transform:scale(1.02)}to{transform:scale(1)}}.checkbox:focus{box-shadow:none}.checkbox:focus-visible{outline-style:solid;outline-width:2px;outline-offset:2px;outline-color:var(--fallback-bc,oklch(var(--bc)/1))}.checkbox:checked,.checkbox[checked=true],.checkbox[aria-checked=true]{background-repeat:no-repeat;animation:checkmark var(--animation-input, .2s) ease-out;background-color:var(--chkbg);background-image:linear-gradient(-45deg,transparent 65%,var(--chkbg) 65.99%),linear-gradient(45deg,transparent 75%,var(--chkbg) 75.99%),linear-gradient(-45deg,var(--chkbg) 40%,transparent 40.99%),linear-gradient(45deg,var(--chkbg) 30%,var(--chkfg) 30.99%,var(--chkfg) 40%,transparent 40.99%),linear-gradient(-45deg,var(--chkfg) 50%,var(--chkbg) 50.99%)}.checkbox:indeterminate{--tw-bg-opacity: 1;background-color:var(--fallback-bc,oklch(var(--bc)/var(--tw-bg-opacity)));background-repeat:no-repeat;animation:checkmark var(--animation-input, .2s) ease-out;background-image:linear-gradient(90deg,transparent 80%,var(--chkbg) 80%),linear-gradient(-90deg,transparent 80%,var(--chkbg) 80%),linear-gradient(0deg,var(--chkbg) 43%,var(--chkfg) 43%,var(--chkfg) 57%,var(--chkbg) 57%)}.checkbox:disabled{cursor:not-allowed;border-color:transparent;--tw-bg-opacity: 1;background-color:var(--fallback-bc,oklch(var(--bc)/var(--tw-bg-opacity)));opacity:.2}@keyframes checkmark{0%{background-position-y:5px}50%{background-position-y:-2px}to{background-position-y:0}}.dropdown.dropdown-open .dropdown-content,.dropdown:focus .dropdown-content,.dropdown:focus-within .dropdown-content{--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.input input:focus{outline:2px solid transparent;outline-offset:2px}.input[list]::-webkit-calendar-picker-indicator{line-height:1em}.input:focus,.input:focus-within{box-shadow:none;border-color:var(--fallback-bc,oklch(var(--bc)/.2));outline-style:solid;outline-width:2px;outline-offset:2px;outline-color:var(--fallback-bc,oklch(var(--bc)/.2))}.input-disabled,.input:disabled,.input[disabled]{cursor:not-allowed;--tw-border-opacity: 1;border-color:var(--fallback-b2,oklch(var(--b2)/var(--tw-border-opacity)));--tw-bg-opacity: 1;background-color:var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)));color:var(--fallback-bc,oklch(var(--bc)/.4))}.input-disabled::-moz-placeholder,.input:disabled::-moz-placeholder,.input[disabled]::-moz-placeholder{color:var(--fallback-bc,oklch(var(--bc)/var(--tw-placeholder-opacity)));--tw-placeholder-opacity: .2}.input-disabled::placeholder,.input:disabled::placeholder,.input[disabled]::placeholder{color:var(--fallback-bc,oklch(var(--bc)/var(--tw-placeholder-opacity)));--tw-placeholder-opacity: .2}.input::-webkit-date-and-time-value{text-align:inherit}.link:focus{outline:2px solid transparent;outline-offset:2px}.link:focus-visible{outline:2px solid currentColor;outline-offset:2px}.loading{pointer-events:none;display:inline-block;aspect-ratio:1 / 1;width:1.5rem;background-color:currentColor;-webkit-mask-size:100%;mask-size:100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center;-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg width='24' height='24' stroke='%23000' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cstyle%3E.spinner_V8m1%7Btransform-origin:center;animation:spinner_zKoa 2s linear infinite%7D.spinner_V8m1 circle%7Bstroke-linecap:round;animation:spinner_YpZS 1.5s ease-out infinite%7D%40keyframes spinner_zKoa%7B100%25%7Btransform:rotate(360deg)%7D%7D%40keyframes spinner_YpZS%7B0%25%7Bstroke-dasharray:0 150;stroke-dashoffset:0%7D47.5%25%7Bstroke-dasharray:42 150;stroke-dashoffset:-16%7D95%25%2C100%25%7Bstroke-dasharray:42 150;stroke-dashoffset:-59%7D%7D%3C%2Fstyle%3E%3Cg class='spinner_V8m1'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3'%3E%3C%2Fcircle%3E%3C%2Fg%3E%3C%2Fsvg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg width='24' height='24' stroke='%23000' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cstyle%3E.spinner_V8m1%7Btransform-origin:center;animation:spinner_zKoa 2s linear infinite%7D.spinner_V8m1 circle%7Bstroke-linecap:round;animation:spinner_YpZS 1.5s ease-out infinite%7D%40keyframes spinner_zKoa%7B100%25%7Btransform:rotate(360deg)%7D%7D%40keyframes spinner_YpZS%7B0%25%7Bstroke-dasharray:0 150;stroke-dashoffset:0%7D47.5%25%7Bstroke-dasharray:42 150;stroke-dashoffset:-16%7D95%25%2C100%25%7Bstroke-dasharray:42 150;stroke-dashoffset:-59%7D%7D%3C%2Fstyle%3E%3Cg class='spinner_V8m1'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3'%3E%3C%2Fcircle%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.loading-spinner{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg width='24' height='24' stroke='%23000' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cstyle%3E.spinner_V8m1%7Btransform-origin:center;animation:spinner_zKoa 2s linear infinite%7D.spinner_V8m1 circle%7Bstroke-linecap:round;animation:spinner_YpZS 1.5s ease-out infinite%7D%40keyframes spinner_zKoa%7B100%25%7Btransform:rotate(360deg)%7D%7D%40keyframes spinner_YpZS%7B0%25%7Bstroke-dasharray:0 150;stroke-dashoffset:0%7D47.5%25%7Bstroke-dasharray:42 150;stroke-dashoffset:-16%7D95%25%2C100%25%7Bstroke-dasharray:42 150;stroke-dashoffset:-59%7D%7D%3C%2Fstyle%3E%3Cg class='spinner_V8m1'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3'%3E%3C%2Fcircle%3E%3C%2Fg%3E%3C%2Fsvg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg width='24' height='24' stroke='%23000' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cstyle%3E.spinner_V8m1%7Btransform-origin:center;animation:spinner_zKoa 2s linear infinite%7D.spinner_V8m1 circle%7Bstroke-linecap:round;animation:spinner_YpZS 1.5s ease-out infinite%7D%40keyframes spinner_zKoa%7B100%25%7Btransform:rotate(360deg)%7D%7D%40keyframes spinner_YpZS%7B0%25%7Bstroke-dasharray:0 150;stroke-dashoffset:0%7D47.5%25%7Bstroke-dasharray:42 150;stroke-dashoffset:-16%7D95%25%2C100%25%7Bstroke-dasharray:42 150;stroke-dashoffset:-59%7D%7D%3C%2Fstyle%3E%3Cg class='spinner_V8m1'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3'%3E%3C%2Fcircle%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}:where(.menu li:empty){--tw-bg-opacity: 1;background-color:var(--fallback-bc,oklch(var(--bc)/var(--tw-bg-opacity)));opacity:.1;margin:.5rem 1rem;height:1px}.menu :where(li ul):before{position:absolute;bottom:.75rem;inset-inline-start:0px;top:.75rem;width:1px;--tw-bg-opacity: 1;background-color:var(--fallback-bc,oklch(var(--bc)/var(--tw-bg-opacity)));opacity:.1;content:\"\"}.menu :where(li:not(.menu-title)>*:not(ul):not(details):not(.menu-title)),.menu :where(li:not(.menu-title)>details>summary:not(.menu-title)){border-radius:var(--rounded-btn, .5rem);padding:.5rem 1rem;text-align:start;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1);transition-duration:.2s;text-wrap:balance}:where(.menu li:not(.menu-title):not(.disabled)>*:not(ul):not(details):not(.menu-title)):not(summary):not(.active).focus,:where(.menu li:not(.menu-title):not(.disabled)>*:not(ul):not(details):not(.menu-title)):not(summary):not(.active):focus,:where(.menu li:not(.menu-title):not(.disabled)>*:not(ul):not(details):not(.menu-title)):is(summary):not(.active):focus-visible,:where(.menu li:not(.menu-title):not(.disabled)>details>summary:not(.menu-title)):not(summary):not(.active).focus,:where(.menu li:not(.menu-title):not(.disabled)>details>summary:not(.menu-title)):not(summary):not(.active):focus,:where(.menu li:not(.menu-title):not(.disabled)>details>summary:not(.menu-title)):is(summary):not(.active):focus-visible{cursor:pointer;background-color:var(--fallback-bc,oklch(var(--bc)/.1));--tw-text-opacity: 1;color:var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));outline:2px solid transparent;outline-offset:2px}.menu li>*:not(ul):not(.menu-title):not(details):active,.menu li>*:not(ul):not(.menu-title):not(details).active,.menu li>details>summary:active{--tw-bg-opacity: 1;background-color:var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));--tw-text-opacity: 1;color:var(--fallback-nc,oklch(var(--nc)/var(--tw-text-opacity)))}.menu :where(li>details>summary)::-webkit-details-marker{display:none}.menu :where(li>details>summary):after,.menu :where(li>.menu-dropdown-toggle):after{justify-self:end;display:block;margin-top:-.5rem;height:.5rem;width:.5rem;transform:rotate(45deg);transition-property:transform,margin-top;transition-duration:.3s;transition-timing-function:cubic-bezier(.4,0,.2,1);content:\"\";transform-origin:75% 75%;box-shadow:2px 2px;pointer-events:none}.menu :where(li>details[open]>summary):after,.menu :where(li>.menu-dropdown-toggle.menu-dropdown-show):after{transform:rotate(225deg);margin-top:0}.mockup-phone .display{overflow:hidden;border-radius:40px;margin-top:-25px}.mockup-browser .mockup-browser-toolbar .input{position:relative;margin-left:auto;margin-right:auto;display:block;height:1.75rem;width:24rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;--tw-bg-opacity: 1;background-color:var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)));padding-left:2rem;direction:ltr}.mockup-browser .mockup-browser-toolbar .input:before{content:\"\";position:absolute;left:.5rem;top:50%;aspect-ratio:1 / 1;height:.75rem;--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));border-radius:9999px;border-width:2px;border-color:currentColor;opacity:.6}.mockup-browser .mockup-browser-toolbar .input:after{content:\"\";position:absolute;left:1.25rem;top:50%;height:.5rem;--tw-translate-y: 25%;--tw-rotate: -45deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));border-radius:9999px;border-width:1px;border-color:currentColor;opacity:.6}.modal:not(dialog:not(.modal-open)),.modal::backdrop{background-color:#0006;animation:modal-pop .2s ease-out}.modal-backdrop{z-index:-1;grid-column-start:1;grid-row-start:1;display:grid;align-self:stretch;justify-self:stretch;color:transparent}.modal-open .modal-box,.modal-toggle:checked+.modal .modal-box,.modal:target .modal-box,.modal[open] .modal-box{--tw-translate-y: 0px;--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes modal-pop{0%{opacity:0}}.progress::-moz-progress-bar{border-radius:var(--rounded-box, 1rem);--tw-bg-opacity: 1;background-color:var(--fallback-bc,oklch(var(--bc)/var(--tw-bg-opacity)))}.progress:indeterminate{--progress-color: var(--fallback-bc,oklch(var(--bc)/1));background-image:repeating-linear-gradient(90deg,var(--progress-color) -1%,var(--progress-color) 10%,transparent 10%,transparent 90%);background-size:200%;background-position-x:15%;animation:progress-loading 5s ease-in-out infinite}.progress::-webkit-progress-bar{border-radius:var(--rounded-box, 1rem);background-color:transparent}.progress::-webkit-progress-value{border-radius:var(--rounded-box, 1rem);--tw-bg-opacity: 1;background-color:var(--fallback-bc,oklch(var(--bc)/var(--tw-bg-opacity)))}.progress:indeterminate::-moz-progress-bar{background-color:transparent;background-image:repeating-linear-gradient(90deg,var(--progress-color) -1%,var(--progress-color) 10%,transparent 10%,transparent 90%);background-size:200%;background-position-x:15%;animation:progress-loading 5s ease-in-out infinite}@keyframes progress-loading{50%{background-position-x:-115%}}@keyframes radiomark{0%{box-shadow:0 0 0 12px var(--fallback-b1,oklch(var(--b1)/1)) inset,0 0 0 12px var(--fallback-b1,oklch(var(--b1)/1)) inset}50%{box-shadow:0 0 0 3px var(--fallback-b1,oklch(var(--b1)/1)) inset,0 0 0 3px var(--fallback-b1,oklch(var(--b1)/1)) inset}to{box-shadow:0 0 0 4px var(--fallback-b1,oklch(var(--b1)/1)) inset,0 0 0 4px var(--fallback-b1,oklch(var(--b1)/1)) inset}}@keyframes rating-pop{0%{transform:translateY(-.125em)}40%{transform:translateY(-.125em)}to{transform:translateY(0)}}@keyframes skeleton{0%{background-position:150%}to{background-position:-50%}}.table tr.active,.table tr.active:nth-child(2n),.table-zebra tbody tr:nth-child(2n){--tw-bg-opacity: 1;background-color:var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)))}.table-zebra tr.active,.table-zebra tr.active:nth-child(2n),.table-zebra-zebra tbody tr:nth-child(2n){--tw-bg-opacity: 1;background-color:var(--fallback-b3,oklch(var(--b3)/var(--tw-bg-opacity)))}@keyframes toast-pop{0%{transform:scale(.9);opacity:0}to{transform:scale(1);opacity:1}}[dir=rtl] .toggle{--handleoffsetcalculator: calc(var(--handleoffset) * 1)}.toggle:focus-visible{outline-style:solid;outline-width:2px;outline-offset:2px;outline-color:var(--fallback-bc,oklch(var(--bc)/.2))}.toggle:hover{background-color:currentColor}.toggle:checked,.toggle[checked=true],.toggle[aria-checked=true]{background-image:none;--handleoffsetcalculator: var(--handleoffset);--tw-text-opacity: 1;color:var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)))}[dir=rtl] .toggle:checked,[dir=rtl] .toggle[checked=true],[dir=rtl] .toggle[aria-checked=true]{--handleoffsetcalculator: calc(var(--handleoffset) * -1)}.toggle:indeterminate{--tw-text-opacity: 1;color:var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));box-shadow:calc(var(--handleoffset) / 2) 0 0 2px var(--tglbg) inset,calc(var(--handleoffset) / -2) 0 0 2px var(--tglbg) inset,0 0 0 2px var(--tglbg) inset}[dir=rtl] .toggle:indeterminate{box-shadow:calc(var(--handleoffset) / 2) 0 0 2px var(--tglbg) inset,calc(var(--handleoffset) / -2) 0 0 2px var(--tglbg) inset,0 0 0 2px var(--tglbg) inset}.toggle:disabled{cursor:not-allowed;--tw-border-opacity: 1;border-color:var(--fallback-bc,oklch(var(--bc)/var(--tw-border-opacity)));background-color:transparent;opacity:.3;--togglehandleborder: 0 0 0 3px var(--fallback-bc,oklch(var(--bc)/1)) inset, var(--handleoffsetcalculator) 0 0 3px var(--fallback-bc,oklch(var(--bc)/1)) inset}:root .prose{--tw-prose-body: var(--fallback-bc,oklch(var(--bc)/.8));--tw-prose-headings: var(--fallback-bc,oklch(var(--bc)/1));--tw-prose-lead: var(--fallback-bc,oklch(var(--bc)/1));--tw-prose-links: var(--fallback-bc,oklch(var(--bc)/1));--tw-prose-bold: var(--fallback-bc,oklch(var(--bc)/1));--tw-prose-counters: var(--fallback-bc,oklch(var(--bc)/1));--tw-prose-bullets: var(--fallback-bc,oklch(var(--bc)/.5));--tw-prose-hr: var(--fallback-bc,oklch(var(--bc)/.2));--tw-prose-quotes: var(--fallback-bc,oklch(var(--bc)/1));--tw-prose-quote-borders: var(--fallback-bc,oklch(var(--bc)/.2));--tw-prose-captions: var(--fallback-bc,oklch(var(--bc)/.5));--tw-prose-code: var(--fallback-bc,oklch(var(--bc)/1));--tw-prose-pre-code: var(--fallback-nc,oklch(var(--nc)/1));--tw-prose-pre-bg: var(--fallback-n,oklch(var(--n)/1));--tw-prose-th-borders: var(--fallback-bc,oklch(var(--bc)/.5));--tw-prose-td-borders: var(--fallback-bc,oklch(var(--bc)/.2))}.prose :where(code):not(:where([class~=not-prose] *,pre *)){padding:1px 8px;border-radius:var(--rounded-badge);font-weight:initial;background-color:var(--fallback-bc,oklch(var(--bc)/.1))}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{display:none}.prose pre code{border-radius:0;padding:0}.prose :where(tbody tr,thead):not(:where([class~=not-prose] *)){border-bottom-color:var(--fallback-bc,oklch(var(--bc)/.2))}.btm-nav-xs>*:where(.active){border-top-width:1px}.btm-nav-sm>*:where(.active){border-top-width:2px}.btm-nav-md>*:where(.active){border-top-width:2px}.btm-nav-lg>*:where(.active){border-top-width:4px}.menu-horizontal{display:inline-flex;flex-direction:row}.menu-horizontal>li:not(.menu-title)>details>ul{position:absolute}.tooltip{position:relative;display:inline-block;--tooltip-offset: calc(100% + 1px + var(--tooltip-tail, 0px))}.tooltip:before{position:absolute;pointer-events:none;z-index:1;content:var(--tw-content);--tw-content: attr(data-tip)}.tooltip:before,.tooltip-top:before{transform:translate(-50%);top:auto;left:50%;right:auto;bottom:var(--tooltip-offset)}.menu-horizontal>li:not(.menu-title)>details>ul{margin-inline-start:0px;margin-top:1rem;padding-top:.5rem;padding-bottom:.5rem;padding-inline-end:.5rem}.menu-horizontal>li>details>ul:before{content:none}:where(.menu-horizontal>li:not(.menu-title)>details>ul){border-radius:var(--rounded-box, 1rem);--tw-bg-opacity: 1;background-color:var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)));--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.menu-sm :where(li:not(.menu-title)>*:not(ul):not(details):not(.menu-title)),.menu-sm :where(li:not(.menu-title)>details>summary:not(.menu-title)){border-radius:var(--rounded-btn, .5rem);padding:.25rem .75rem;font-size:.875rem;line-height:1.25rem}.menu-sm .menu-title{padding:.5rem .75rem}.modal-top :where(.modal-box){width:100%;max-width:none;--tw-translate-y: -2.5rem;--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));border-bottom-right-radius:var(--rounded-box, 1rem);border-bottom-left-radius:var(--rounded-box, 1rem);border-top-left-radius:0;border-top-right-radius:0}.modal-middle :where(.modal-box){width:91.666667%;max-width:32rem;--tw-translate-y: 0px;--tw-scale-x: .9;--tw-scale-y: .9;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));border-top-left-radius:var(--rounded-box, 1rem);border-top-right-radius:var(--rounded-box, 1rem);border-bottom-right-radius:var(--rounded-box, 1rem);border-bottom-left-radius:var(--rounded-box, 1rem)}.modal-bottom :where(.modal-box){width:100%;max-width:none;--tw-translate-y: 2.5rem;--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));border-top-left-radius:var(--rounded-box, 1rem);border-top-right-radius:var(--rounded-box, 1rem);border-bottom-right-radius:0;border-bottom-left-radius:0}.tooltip{position:relative;display:inline-block;text-align:center;--tooltip-tail: .1875rem;--tooltip-color: var(--fallback-n,oklch(var(--n)/1));--tooltip-text-color: var(--fallback-nc,oklch(var(--nc)/1));--tooltip-tail-offset: calc(100% + .0625rem - var(--tooltip-tail))}.tooltip:before,.tooltip:after{opacity:0;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-delay:.1s;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.tooltip:after{position:absolute;content:\"\";border-style:solid;border-width:var(--tooltip-tail, 0);width:0;height:0;display:block}.tooltip:before{max-width:20rem;border-radius:.25rem;padding:.25rem .5rem;font-size:.875rem;line-height:1.25rem;background-color:var(--tooltip-color);color:var(--tooltip-text-color);width:-moz-max-content;width:max-content}.tooltip.tooltip-open:before{opacity:1;transition-delay:75ms}.tooltip.tooltip-open:after{opacity:1;transition-delay:75ms}.tooltip:hover:before{opacity:1;transition-delay:75ms}.tooltip:hover:after{opacity:1;transition-delay:75ms}.tooltip:has(:focus-visible):after,.tooltip:has(:focus-visible):before{opacity:1;transition-delay:75ms}.tooltip:not([data-tip]):hover:before,.tooltip:not([data-tip]):hover:after{visibility:hidden;opacity:0}.tooltip:after,.tooltip-top:after{transform:translate(-50%);border-color:var(--tooltip-color) transparent transparent transparent;top:auto;left:50%;right:auto;bottom:var(--tooltip-tail-offset)}.absolute{position:absolute}.relative{position:relative}.z-\\[1\\]{z-index:1}.col-span-2{grid-column:span 2 / span 2}.col-start-1{grid-column-start:1}.col-start-2{grid-column-start:2}.row-start-1{grid-row-start:1}.m-2{margin:.5rem}.mx-auto{margin-left:auto;margin-right:auto}.mb-2{margin-bottom:.5rem}.ml-2{margin-left:.5rem}.mr-8{margin-right:2rem}.mt-3{margin-top:.75rem}.inline-block{display:inline-block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.h-5{height:1.25rem}.h-screen{height:100vh}.min-h-0{min-height:0px}.w-5{width:1.25rem}.w-52{width:13rem}.w-full{width:100%}.max-w-5xl{max-width:64rem}.max-w-full{max-width:100%}.flex-grow{flex-grow:1}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.flex-col{flex-direction:column}.place-items-center{place-items:center}.items-center{align-items:center}.justify-center{justify-content:center}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.75rem * var(--tw-space-x-reverse));margin-left:calc(.75rem * calc(1 - var(--tw-space-x-reverse)))}.overflow-y-auto{overflow-y:auto}.rounded-box{border-radius:var(--rounded-box, 1rem)}.rounded-lg{border-radius:.5rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-t{border-top-width:1px}.border-sky-600{--tw-border-opacity: 1;border-color:rgb(2 132 199 / var(--tw-border-opacity))}.border-slate-500{--tw-border-opacity: 1;border-color:rgb(100 116 139 / var(--tw-border-opacity))}.border-transparent{border-color:transparent}.bg-accent{--tw-bg-opacity: 1;background-color:var(--fallback-a,oklch(var(--a)/var(--tw-bg-opacity)))}.bg-base-100{--tw-bg-opacity: 1;background-color:var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)))}.bg-base-300{--tw-bg-opacity: 1;background-color:var(--fallback-b3,oklch(var(--b3)/var(--tw-bg-opacity)))}.bg-base-content{--tw-bg-opacity: 1;background-color:var(--fallback-bc,oklch(var(--bc)/var(--tw-bg-opacity)))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity))}.bg-neutral-content{--tw-bg-opacity: 1;background-color:var(--fallback-nc,oklch(var(--nc)/var(--tw-bg-opacity)))}.bg-orange-300{--tw-bg-opacity: 1;background-color:rgb(253 186 116 / var(--tw-bg-opacity))}.bg-secondary{--tw-bg-opacity: 1;background-color:var(--fallback-s,oklch(var(--s)/var(--tw-bg-opacity)))}.bg-slate-600{--tw-bg-opacity: 1;background-color:rgb(71 85 105 / var(--tw-bg-opacity))}.fill-base-100{fill:var(--fallback-b1,oklch(var(--b1)/1))}.stroke-base-100{stroke:var(--fallback-b1,oklch(var(--b1)/1))}.p-0{padding:0}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-4{padding:1rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-8{padding-top:2rem;padding-bottom:2rem}.text-center{text-align:center}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-semibold{font-weight:600}.font-thin{font-weight:100}.text-black{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity))}.text-orange-900{--tw-text-opacity: 1;color:rgb(124 45 18 / var(--tw-text-opacity))}.text-slate-400{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity))}.text-slate-600{--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity))}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.hover\\:border-sky-600:hover{--tw-border-opacity: 1;border-color:rgb(2 132 199 / var(--tw-border-opacity))}.hover\\:bg-base-100:hover{--tw-bg-opacity: 1;background-color:var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)))}.hover\\:bg-gray-500:hover{--tw-bg-opacity: 1;background-color:rgb(107 114 128 / var(--tw-bg-opacity))}.hover\\:bg-slate-400:hover{--tw-bg-opacity: 1;background-color:rgb(148 163 184 / var(--tw-bg-opacity))}.hover\\:bg-slate-700:hover{--tw-bg-opacity: 1;background-color:rgb(51 65 85 / var(--tw-bg-opacity))}.focus\\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\\:ring:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\\:ring-blue-300:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity))}@media (min-width: 1024px){.lg\\:flex{display:flex}.lg\\:hidden{display:none}}@media (prefers-color-scheme: dark){.dark\\:bg-gray-600{--tw-bg-opacity: 1;background-color:rgb(75 85 99 / var(--tw-bg-opacity))}.dark\\:bg-gray-700{--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity))}.dark\\:bg-gray-800{--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity))}.dark\\:text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}}.nav-btns-mobile{display:none}@media (max-width: 640px){.nav-btns-desktop{display:none}.nav-btns-mobile{display:flex;align-items:center;gap:1rem}#nav-btns-mobile{position:absolute;top:48px;right:0;z-index:10;background-color:#475569;border:1px solid #ccc;border-radius:4px}.nav-btns-mobile.show{display:flex}}[placeholder]:empty:before{content:attr(placeholder);opacity:.6;pointer-events:none}@media (min-width: 640px){[data-tooltip]{position:relative;cursor:pointer;white-space:nowrap}[data-tooltip]:before{content:attr(data-tooltip);position:absolute;bottom:-50px;left:50%;transform:translate(-50%);padding:.5rem;background-color:#333;color:#fff;font-size:.9rem;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;border-radius:4px;opacity:0;pointer-events:none;transition:opacity .2s ease-in-out;white-space:normal;width:-moz-max-content;width:max-content}[data-tooltip]:hover:before{opacity:1}}\n"
  },
  {
    "path": "src/libre_chat/webapp/_astro/admin.uwsUQjhr.js",
    "content": "import{g as e,t as r}from\"./web.zg9RI5L8.js\";var a=r('<main class=\"flex flex-col bg-gray-100 dark:bg-gray-800 text-black dark:text-white\"><div class=\"container mx-auto p-4 max-w-5xl\"><p>Work in progress');function o(){return(()=>{var t=e(a);return t.style.setProperty(\"flex-grow\",\"1\"),t.style.setProperty(\"overflow-y\",\"auto\"),t})()}export{o as default};\n"
  },
  {
    "path": "src/libre_chat/webapp/_astro/chat.mnOtRnw4.js",
    "content": "import{d as zn,c as Ze,g as le,a as Ye,i as V,b as ht,e as gt,s as Kt,f as dt,r as mt,u as Pn,h as Jt,t as ae,F as kt,j as Un}from\"./web.zg9RI5L8.js\";import{p as Fn,a as Hn,$ as Bn}from\"./nanostores.RVhpkXze.js\";function St(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}let de=St();function gn(c){de=c}const dn=/[&<>\"']/,Wn=new RegExp(dn.source,\"g\"),mn=/[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/,Gn=new RegExp(mn.source,\"g\"),qn={\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"},en=c=>qn[c];function H(c,e){if(e){if(dn.test(c))return c.replace(Wn,en)}else if(mn.test(c))return c.replace(Gn,en);return c}const Zn=/&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig;function Yn(c){return c.replace(Zn,(e,n)=>(n=n.toLowerCase(),n===\"colon\"?\":\":n.charAt(0)===\"#\"?n.charAt(1)===\"x\"?String.fromCharCode(parseInt(n.substring(2),16)):String.fromCharCode(+n.substring(1)):\"\"))}const jn=/(^|[^\\[])\\^/g;function T(c,e){let n=typeof c==\"string\"?c:c.source;e=e||\"\";const t={replace:(s,r)=>{let i=typeof r==\"string\"?r:r.source;return i=i.replace(jn,\"$1\"),n=n.replace(s,i),t},getRegex:()=>new RegExp(n,e)};return t}function tn(c){try{c=encodeURI(c).replace(/%25/g,\"%\")}catch{return null}return c}const ze={exec:()=>null};function nn(c,e){const n=c.replace(/\\|/g,(r,i,l)=>{let a=!1,g=i;for(;--g>=0&&l[g]===\"\\\\\";)a=!a;return a?\"|\":\" |\"}),t=n.split(/ \\|/);let s=0;if(t[0].trim()||t.shift(),t.length>0&&!t[t.length-1].trim()&&t.pop(),e)if(t.length>e)t.splice(e);else for(;t.length<e;)t.push(\"\");for(;s<t.length;s++)t[s]=t[s].trim().replace(/\\\\\\|/g,\"|\");return t}function je(c,e,n){const t=c.length;if(t===0)return\"\";let s=0;for(;s<t;){const r=c.charAt(t-s-1);if(r===e&&!n)s++;else if(r!==e&&n)s++;else break}return c.slice(0,t-s)}function Xn(c,e){if(c.indexOf(e[1])===-1)return-1;let n=0;for(let t=0;t<c.length;t++)if(c[t]===\"\\\\\")t++;else if(c[t]===e[0])n++;else if(c[t]===e[1]&&(n--,n<0))return t;return-1}function sn(c,e,n,t){const s=e.href,r=e.title?H(e.title):null,i=c[1].replace(/\\\\([\\[\\]])/g,\"$1\");if(c[0].charAt(0)!==\"!\"){t.state.inLink=!0;const l={type:\"link\",raw:n,href:s,title:r,text:i,tokens:t.inlineTokens(i)};return t.state.inLink=!1,l}return{type:\"image\",raw:n,href:s,title:r,text:H(i)}}function Qn(c,e){const n=c.match(/^(\\s+)(?:```)/);if(n===null)return e;const t=n[1];return e.split(`\n`).map(s=>{const r=s.match(/^\\s+/);if(r===null)return s;const[i]=r;return i.length>=t.length?s.slice(t.length):s}).join(`\n`)}class tt{options;rules;lexer;constructor(e){this.options=e||de}space(e){const n=this.rules.block.newline.exec(e);if(n&&n[0].length>0)return{type:\"space\",raw:n[0]}}code(e){const n=this.rules.block.code.exec(e);if(n){const t=n[0].replace(/^ {1,4}/gm,\"\");return{type:\"code\",raw:n[0],codeBlockStyle:\"indented\",text:this.options.pedantic?t:je(t,`\n`)}}}fences(e){const n=this.rules.block.fences.exec(e);if(n){const t=n[0],s=Qn(t,n[3]||\"\");return{type:\"code\",raw:t,lang:n[2]?n[2].trim().replace(this.rules.inline.anyPunctuation,\"$1\"):n[2],text:s}}}heading(e){const n=this.rules.block.heading.exec(e);if(n){let t=n[2].trim();if(/#$/.test(t)){const s=je(t,\"#\");(this.options.pedantic||!s||/ $/.test(s))&&(t=s.trim())}return{type:\"heading\",raw:n[0],depth:n[1].length,text:t,tokens:this.lexer.inline(t)}}}hr(e){const n=this.rules.block.hr.exec(e);if(n)return{type:\"hr\",raw:n[0]}}blockquote(e){const n=this.rules.block.blockquote.exec(e);if(n){const t=je(n[0].replace(/^ *>[ \\t]?/gm,\"\"),`\n`),s=this.lexer.state.top;this.lexer.state.top=!0;const r=this.lexer.blockTokens(t);return this.lexer.state.top=s,{type:\"blockquote\",raw:n[0],tokens:r,text:t}}}list(e){let n=this.rules.block.list.exec(e);if(n){let t=n[1].trim();const s=t.length>1,r={type:\"list\",raw:\"\",ordered:s,start:s?+t.slice(0,-1):\"\",loose:!1,items:[]};t=s?`\\\\d{1,9}\\\\${t.slice(-1)}`:`\\\\${t}`,this.options.pedantic&&(t=s?t:\"[*+-]\");const i=new RegExp(`^( {0,3}${t})((?:[\t ][^\\\\n]*)?(?:\\\\n|$))`);let l=\"\",a=\"\",g=!1;for(;e;){let p=!1;if(!(n=i.exec(e))||this.rules.block.hr.test(e))break;l=n[0],e=e.substring(l.length);let m=n[2].split(`\n`,1)[0].replace(/^\\t+/,ce=>\" \".repeat(3*ce.length)),d=e.split(`\n`,1)[0],x=0;this.options.pedantic?(x=2,a=m.trimStart()):(x=n[2].search(/[^ ]/),x=x>4?1:x,a=m.slice(x),x+=n[1].length);let O=!1;if(!m&&/^ *$/.test(d)&&(l+=d+`\n`,e=e.substring(d.length+1),p=!0),!p){const ce=new RegExp(`^ {0,${Math.min(3,x-1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \t][^\\\\n]*)?(?:\\\\n|$))`),y=new RegExp(`^ {0,${Math.min(3,x-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`),_=new RegExp(`^ {0,${Math.min(3,x-1)}}(?:\\`\\`\\`|~~~)`),I=new RegExp(`^ {0,${Math.min(3,x-1)}}#`);for(;e;){const C=e.split(`\n`,1)[0];if(d=C,this.options.pedantic&&(d=d.replace(/^ {1,4}(?=( {4})*[^ ])/g,\"  \")),_.test(d)||I.test(d)||ce.test(d)||y.test(e))break;if(d.search(/[^ ]/)>=x||!d.trim())a+=`\n`+d.slice(x);else{if(O||m.search(/[^ ]/)>=4||_.test(m)||I.test(m)||y.test(m))break;a+=`\n`+d}!O&&!d.trim()&&(O=!0),l+=C+`\n`,e=e.substring(C.length+1),m=d.slice(x)}}r.loose||(g?r.loose=!0:/\\n *\\n *$/.test(l)&&(g=!0));let $=null,B;this.options.gfm&&($=/^\\[[ xX]\\] /.exec(a),$&&(B=$[0]!==\"[ ] \",a=a.replace(/^\\[[ xX]\\] +/,\"\"))),r.items.push({type:\"list_item\",raw:l,task:!!$,checked:B,loose:!1,text:a,tokens:[]}),r.raw+=l}r.items[r.items.length-1].raw=l.trimEnd(),r.items[r.items.length-1].text=a.trimEnd(),r.raw=r.raw.trimEnd();for(let p=0;p<r.items.length;p++)if(this.lexer.state.top=!1,r.items[p].tokens=this.lexer.blockTokens(r.items[p].text,[]),!r.loose){const m=r.items[p].tokens.filter(x=>x.type===\"space\"),d=m.length>0&&m.some(x=>/\\n.*\\n/.test(x.raw));r.loose=d}if(r.loose)for(let p=0;p<r.items.length;p++)r.items[p].loose=!0;return r}}html(e){const n=this.rules.block.html.exec(e);if(n)return{type:\"html\",block:!0,raw:n[0],pre:n[1]===\"pre\"||n[1]===\"script\"||n[1]===\"style\",text:n[0]}}def(e){const n=this.rules.block.def.exec(e);if(n){const t=n[1].toLowerCase().replace(/\\s+/g,\" \"),s=n[2]?n[2].replace(/^<(.*)>$/,\"$1\").replace(this.rules.inline.anyPunctuation,\"$1\"):\"\",r=n[3]?n[3].substring(1,n[3].length-1).replace(this.rules.inline.anyPunctuation,\"$1\"):n[3];return{type:\"def\",tag:t,raw:n[0],href:s,title:r}}}table(e){const n=this.rules.block.table.exec(e);if(!n||!/[:|]/.test(n[2]))return;const t=nn(n[1]),s=n[2].replace(/^\\||\\| *$/g,\"\").split(\"|\"),r=n[3]&&n[3].trim()?n[3].replace(/\\n[ \\t]*$/,\"\").split(`\n`):[],i={type:\"table\",raw:n[0],header:[],align:[],rows:[]};if(t.length===s.length){for(const l of s)/^ *-+: *$/.test(l)?i.align.push(\"right\"):/^ *:-+: *$/.test(l)?i.align.push(\"center\"):/^ *:-+ *$/.test(l)?i.align.push(\"left\"):i.align.push(null);for(const l of t)i.header.push({text:l,tokens:this.lexer.inline(l)});for(const l of r)i.rows.push(nn(l,i.header.length).map(a=>({text:a,tokens:this.lexer.inline(a)})));return i}}lheading(e){const n=this.rules.block.lheading.exec(e);if(n)return{type:\"heading\",raw:n[0],depth:n[2].charAt(0)===\"=\"?1:2,text:n[1],tokens:this.lexer.inline(n[1])}}paragraph(e){const n=this.rules.block.paragraph.exec(e);if(n){const t=n[1].charAt(n[1].length-1)===`\n`?n[1].slice(0,-1):n[1];return{type:\"paragraph\",raw:n[0],text:t,tokens:this.lexer.inline(t)}}}text(e){const n=this.rules.block.text.exec(e);if(n)return{type:\"text\",raw:n[0],text:n[0],tokens:this.lexer.inline(n[0])}}escape(e){const n=this.rules.inline.escape.exec(e);if(n)return{type:\"escape\",raw:n[0],text:H(n[1])}}tag(e){const n=this.rules.inline.tag.exec(e);if(n)return!this.lexer.state.inLink&&/^<a /i.test(n[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&/^<\\/a>/i.test(n[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)(\\s|>)/i.test(n[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&/^<\\/(pre|code|kbd|script)(\\s|>)/i.test(n[0])&&(this.lexer.state.inRawBlock=!1),{type:\"html\",raw:n[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:n[0]}}link(e){const n=this.rules.inline.link.exec(e);if(n){const t=n[2].trim();if(!this.options.pedantic&&/^</.test(t)){if(!/>$/.test(t))return;const i=je(t.slice(0,-1),\"\\\\\");if((t.length-i.length)%2===0)return}else{const i=Xn(n[2],\"()\");if(i>-1){const a=(n[0].indexOf(\"!\")===0?5:4)+n[1].length+i;n[2]=n[2].substring(0,i),n[0]=n[0].substring(0,a).trim(),n[3]=\"\"}}let s=n[2],r=\"\";if(this.options.pedantic){const i=/^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/.exec(s);i&&(s=i[1],r=i[3])}else r=n[3]?n[3].slice(1,-1):\"\";return s=s.trim(),/^</.test(s)&&(this.options.pedantic&&!/>$/.test(t)?s=s.slice(1):s=s.slice(1,-1)),sn(n,{href:s&&s.replace(this.rules.inline.anyPunctuation,\"$1\"),title:r&&r.replace(this.rules.inline.anyPunctuation,\"$1\")},n[0],this.lexer)}}reflink(e,n){let t;if((t=this.rules.inline.reflink.exec(e))||(t=this.rules.inline.nolink.exec(e))){const s=(t[2]||t[1]).replace(/\\s+/g,\" \"),r=n[s.toLowerCase()];if(!r){const i=t[0].charAt(0);return{type:\"text\",raw:i,text:i}}return sn(t,r,t[0],this.lexer)}}emStrong(e,n,t=\"\"){let s=this.rules.inline.emStrongLDelim.exec(e);if(!s||s[3]&&t.match(/[\\p{L}\\p{N}]/u))return;if(!(s[1]||s[2]||\"\")||!t||this.rules.inline.punctuation.exec(t)){const i=[...s[0]].length-1;let l,a,g=i,p=0;const m=s[0][0]===\"*\"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(m.lastIndex=0,n=n.slice(-1*e.length+i);(s=m.exec(n))!=null;){if(l=s[1]||s[2]||s[3]||s[4]||s[5]||s[6],!l)continue;if(a=[...l].length,s[3]||s[4]){g+=a;continue}else if((s[5]||s[6])&&i%3&&!((i+a)%3)){p+=a;continue}if(g-=a,g>0)continue;a=Math.min(a,a+g+p);const d=[...s[0]][0].length,x=e.slice(0,i+s.index+d+a);if(Math.min(i,a)%2){const $=x.slice(1,-1);return{type:\"em\",raw:x,text:$,tokens:this.lexer.inlineTokens($)}}const O=x.slice(2,-2);return{type:\"strong\",raw:x,text:O,tokens:this.lexer.inlineTokens(O)}}}}codespan(e){const n=this.rules.inline.code.exec(e);if(n){let t=n[2].replace(/\\n/g,\" \");const s=/[^ ]/.test(t),r=/^ /.test(t)&&/ $/.test(t);return s&&r&&(t=t.substring(1,t.length-1)),t=H(t,!0),{type:\"codespan\",raw:n[0],text:t}}}br(e){const n=this.rules.inline.br.exec(e);if(n)return{type:\"br\",raw:n[0]}}del(e){const n=this.rules.inline.del.exec(e);if(n)return{type:\"del\",raw:n[0],text:n[2],tokens:this.lexer.inlineTokens(n[2])}}autolink(e){const n=this.rules.inline.autolink.exec(e);if(n){let t,s;return n[2]===\"@\"?(t=H(n[1]),s=\"mailto:\"+t):(t=H(n[1]),s=t),{type:\"link\",raw:n[0],text:t,href:s,tokens:[{type:\"text\",raw:t,text:t}]}}}url(e){let n;if(n=this.rules.inline.url.exec(e)){let t,s;if(n[2]===\"@\")t=H(n[0]),s=\"mailto:\"+t;else{let r;do r=n[0],n[0]=this.rules.inline._backpedal.exec(n[0])?.[0]??\"\";while(r!==n[0]);t=H(n[0]),n[1]===\"www.\"?s=\"http://\"+n[0]:s=n[0]}return{type:\"link\",raw:n[0],text:t,href:s,tokens:[{type:\"text\",raw:t,text:t}]}}}inlineText(e){const n=this.rules.inline.text.exec(e);if(n){let t;return this.lexer.state.inRawBlock?t=n[0]:t=H(n[0]),{type:\"text\",raw:n[0],text:t}}}}const Vn=/^(?: *(?:\\n|$))+/,Kn=/^( {4}[^\\n]+(?:\\n(?: *(?:\\n|$))*)?)+/,Jn=/^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/,Pe=/^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/,ei=/^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,kn=/(?:[*+-]|\\d{1,9}[.)])/,xn=T(/^(?!bull )((?:.|\\n(?!\\s*?\\n|bull ))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/).replace(/bull/g,kn).getRegex(),Rt=/^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/,ti=/^[^\\n]+/,Lt=/(?!\\s*\\])(?:\\\\.|[^\\[\\]\\\\])+/,ni=T(/^ {0,3}\\[(label)\\]: *(?:\\n *)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n *)?| *\\n *)(title))? *(?:\\n+|$)/).replace(\"label\",Lt).replace(\"title\",/(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/).getRegex(),ii=T(/^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/).replace(/bull/g,kn).getRegex(),st=\"address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul\",$t=/<!--(?!-?>)[\\s\\S]*?(?:-->|$)/,si=T(\"^ {0,3}(?:<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)|comment[^\\\\n]*(\\\\n+|$)|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$))\",\"i\").replace(\"comment\",$t).replace(\"tag\",st).replace(\"attribute\",/ +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/).getRegex(),bn=T(Rt).replace(\"hr\",Pe).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"|lheading\",\"\").replace(\"|table\",\"\").replace(\"blockquote\",\" {0,3}>\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",st).getRegex(),ri=T(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/).replace(\"paragraph\",bn).getRegex(),It={blockquote:ri,code:Kn,def:ni,fences:Jn,heading:ei,hr:Pe,html:si,lheading:xn,list:ii,newline:Vn,paragraph:bn,table:ze,text:ti},rn=T(\"^ *([^\\\\n ].*)\\\\n {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)\").replace(\"hr\",Pe).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"blockquote\",\" {0,3}>\").replace(\"code\",\" {4}[^\\\\n]\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",st).getRegex(),oi={...It,table:rn,paragraph:T(Rt).replace(\"hr\",Pe).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"|lheading\",\"\").replace(\"table\",rn).replace(\"blockquote\",\" {0,3}>\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",st).getRegex()},li={...It,html:T(`^ *(?:comment *(?:\\\\n|\\\\s*$)|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\\\s[^'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))`).replace(\"comment\",$t).replace(/tag/g,\"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b\").getRegex(),def:/^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,heading:/^(#{1,6})(.*)(?:\\n+|$)/,fences:ze,lheading:/^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,paragraph:T(Rt).replace(\"hr\",Pe).replace(\"heading\",` *#{1,6} *[^\n]`).replace(\"lheading\",xn).replace(\"|table\",\"\").replace(\"blockquote\",\" {0,3}>\").replace(\"|fences\",\"\").replace(\"|list\",\"\").replace(\"|html\",\"\").replace(\"|tag\",\"\").getRegex()},Tn=/^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,ai=/^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,_n=/^( {2,}|\\\\)\\n(?!\\s*$)/,ci=/^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/,Ue=\"\\\\p{P}$+<=>`^|~\",ui=T(/^((?![*_])[\\spunctuation])/,\"u\").replace(/punctuation/g,Ue).getRegex(),pi=/\\[[^[\\]]*?\\]\\([^\\(\\)]*?\\)|`[^`]*?`|<[^<>]*?>/g,fi=T(/^(?:\\*+(?:((?!\\*)[punct])|[^\\s*]))|^_+(?:((?!_)[punct])|([^\\s_]))/,\"u\").replace(/punct/g,Ue).getRegex(),hi=T(\"^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\\\*)[punct](\\\\*+)(?=[\\\\s]|$)|[^punct\\\\s](\\\\*+)(?!\\\\*)(?=[punct\\\\s]|$)|(?!\\\\*)[punct\\\\s](\\\\*+)(?=[^punct\\\\s])|[\\\\s](\\\\*+)(?!\\\\*)(?=[punct])|(?!\\\\*)[punct](\\\\*+)(?!\\\\*)(?=[punct])|[^punct\\\\s](\\\\*+)(?=[^punct\\\\s])\",\"gu\").replace(/punct/g,Ue).getRegex(),gi=T(\"^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)|[^_]+(?=[^_])|(?!_)[punct](_+)(?=[\\\\s]|$)|[^punct\\\\s](_+)(?!_)(?=[punct\\\\s]|$)|(?!_)[punct\\\\s](_+)(?=[^punct\\\\s])|[\\\\s](_+)(?!_)(?=[punct])|(?!_)[punct](_+)(?!_)(?=[punct])\",\"gu\").replace(/punct/g,Ue).getRegex(),di=T(/\\\\([punct])/,\"gu\").replace(/punct/g,Ue).getRegex(),mi=T(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/).replace(\"scheme\",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace(\"email\",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),ki=T($t).replace(\"(?:-->|$)\",\"-->\").getRegex(),xi=T(\"^comment|^</[a-zA-Z][\\\\w:-]*\\\\s*>|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>|^<\\\\?[\\\\s\\\\S]*?\\\\?>|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>\").replace(\"comment\",ki).replace(\"attribute\",/\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/).getRegex(),nt=/(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/,bi=T(/^!?\\[(label)\\]\\(\\s*(href)(?:\\s+(title))?\\s*\\)/).replace(\"label\",nt).replace(\"href\",/<(?:\\\\.|[^\\n<>\\\\])+>|[^\\s\\x00-\\x1f]*/).replace(\"title\",/\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/).getRegex(),wn=T(/^!?\\[(label)\\]\\[(ref)\\]/).replace(\"label\",nt).replace(\"ref\",Lt).getRegex(),yn=T(/^!?\\[(ref)\\](?:\\[\\])?/).replace(\"ref\",Lt).getRegex(),Ti=T(\"reflink|nolink(?!\\\\()\",\"g\").replace(\"reflink\",wn).replace(\"nolink\",yn).getRegex(),Ct={_backpedal:ze,anyPunctuation:di,autolink:mi,blockSkip:pi,br:_n,code:ai,del:ze,emStrongLDelim:fi,emStrongRDelimAst:hi,emStrongRDelimUnd:gi,escape:Tn,link:bi,nolink:yn,punctuation:ui,reflink:wn,reflinkSearch:Ti,tag:xi,text:ci,url:ze},_i={...Ct,link:T(/^!?\\[(label)\\]\\((.*?)\\)/).replace(\"label\",nt).getRegex(),reflink:T(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/).replace(\"label\",nt).getRegex()},yt={...Ct,escape:T(Tn).replace(\"])\",\"~|])\").getRegex(),url:T(/^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/,\"i\").replace(\"email\",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,del:/^(~~?)(?=[^\\s~])([\\s\\S]*?[^\\s~])\\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|https?:\\/\\/|ftp:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/},wi={...yt,br:T(_n).replace(\"{2,}\",\"*\").getRegex(),text:T(yt.text).replace(\"\\\\b_\",\"\\\\b_| {2,}\\\\n\").replace(/\\{2,\\}/g,\"*\").getRegex()},Xe={normal:It,gfm:oi,pedantic:li},Ne={normal:Ct,gfm:yt,breaks:wi,pedantic:_i};class K{tokens;options;state;tokenizer;inlineQueue;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||de,this.options.tokenizer=this.options.tokenizer||new tt,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};const n={block:Xe.normal,inline:Ne.normal};this.options.pedantic?(n.block=Xe.pedantic,n.inline=Ne.pedantic):this.options.gfm&&(n.block=Xe.gfm,this.options.breaks?n.inline=Ne.breaks:n.inline=Ne.gfm),this.tokenizer.rules=n}static get rules(){return{block:Xe,inline:Ne}}static lex(e,n){return new K(n).lex(e)}static lexInline(e,n){return new K(n).inlineTokens(e)}lex(e){e=e.replace(/\\r\\n|\\r/g,`\n`),this.blockTokens(e,this.tokens);for(let n=0;n<this.inlineQueue.length;n++){const t=this.inlineQueue[n];this.inlineTokens(t.src,t.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(e,n=[]){this.options.pedantic?e=e.replace(/\\t/g,\"    \").replace(/^ +$/gm,\"\"):e=e.replace(/^( *)(\\t+)/gm,(l,a,g)=>a+\"    \".repeat(g.length));let t,s,r,i;for(;e;)if(!(this.options.extensions&&this.options.extensions.block&&this.options.extensions.block.some(l=>(t=l.call({lexer:this},e,n))?(e=e.substring(t.raw.length),n.push(t),!0):!1))){if(t=this.tokenizer.space(e)){e=e.substring(t.raw.length),t.raw.length===1&&n.length>0?n[n.length-1].raw+=`\n`:n.push(t);continue}if(t=this.tokenizer.code(e)){e=e.substring(t.raw.length),s=n[n.length-1],s&&(s.type===\"paragraph\"||s.type===\"text\")?(s.raw+=`\n`+t.raw,s.text+=`\n`+t.text,this.inlineQueue[this.inlineQueue.length-1].src=s.text):n.push(t);continue}if(t=this.tokenizer.fences(e)){e=e.substring(t.raw.length),n.push(t);continue}if(t=this.tokenizer.heading(e)){e=e.substring(t.raw.length),n.push(t);continue}if(t=this.tokenizer.hr(e)){e=e.substring(t.raw.length),n.push(t);continue}if(t=this.tokenizer.blockquote(e)){e=e.substring(t.raw.length),n.push(t);continue}if(t=this.tokenizer.list(e)){e=e.substring(t.raw.length),n.push(t);continue}if(t=this.tokenizer.html(e)){e=e.substring(t.raw.length),n.push(t);continue}if(t=this.tokenizer.def(e)){e=e.substring(t.raw.length),s=n[n.length-1],s&&(s.type===\"paragraph\"||s.type===\"text\")?(s.raw+=`\n`+t.raw,s.text+=`\n`+t.raw,this.inlineQueue[this.inlineQueue.length-1].src=s.text):this.tokens.links[t.tag]||(this.tokens.links[t.tag]={href:t.href,title:t.title});continue}if(t=this.tokenizer.table(e)){e=e.substring(t.raw.length),n.push(t);continue}if(t=this.tokenizer.lheading(e)){e=e.substring(t.raw.length),n.push(t);continue}if(r=e,this.options.extensions&&this.options.extensions.startBlock){let l=1/0;const a=e.slice(1);let g;this.options.extensions.startBlock.forEach(p=>{g=p.call({lexer:this},a),typeof g==\"number\"&&g>=0&&(l=Math.min(l,g))}),l<1/0&&l>=0&&(r=e.substring(0,l+1))}if(this.state.top&&(t=this.tokenizer.paragraph(r))){s=n[n.length-1],i&&s.type===\"paragraph\"?(s.raw+=`\n`+t.raw,s.text+=`\n`+t.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=s.text):n.push(t),i=r.length!==e.length,e=e.substring(t.raw.length);continue}if(t=this.tokenizer.text(e)){e=e.substring(t.raw.length),s=n[n.length-1],s&&s.type===\"text\"?(s.raw+=`\n`+t.raw,s.text+=`\n`+t.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=s.text):n.push(t);continue}if(e){const l=\"Infinite loop on byte: \"+e.charCodeAt(0);if(this.options.silent){console.error(l);break}else throw new Error(l)}}return this.state.top=!0,n}inline(e,n=[]){return this.inlineQueue.push({src:e,tokens:n}),n}inlineTokens(e,n=[]){let t,s,r,i=e,l,a,g;if(this.tokens.links){const p=Object.keys(this.tokens.links);if(p.length>0)for(;(l=this.tokenizer.rules.inline.reflinkSearch.exec(i))!=null;)p.includes(l[0].slice(l[0].lastIndexOf(\"[\")+1,-1))&&(i=i.slice(0,l.index)+\"[\"+\"a\".repeat(l[0].length-2)+\"]\"+i.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(l=this.tokenizer.rules.inline.blockSkip.exec(i))!=null;)i=i.slice(0,l.index)+\"[\"+\"a\".repeat(l[0].length-2)+\"]\"+i.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;(l=this.tokenizer.rules.inline.anyPunctuation.exec(i))!=null;)i=i.slice(0,l.index)+\"++\"+i.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;e;)if(a||(g=\"\"),a=!1,!(this.options.extensions&&this.options.extensions.inline&&this.options.extensions.inline.some(p=>(t=p.call({lexer:this},e,n))?(e=e.substring(t.raw.length),n.push(t),!0):!1))){if(t=this.tokenizer.escape(e)){e=e.substring(t.raw.length),n.push(t);continue}if(t=this.tokenizer.tag(e)){e=e.substring(t.raw.length),s=n[n.length-1],s&&t.type===\"text\"&&s.type===\"text\"?(s.raw+=t.raw,s.text+=t.text):n.push(t);continue}if(t=this.tokenizer.link(e)){e=e.substring(t.raw.length),n.push(t);continue}if(t=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(t.raw.length),s=n[n.length-1],s&&t.type===\"text\"&&s.type===\"text\"?(s.raw+=t.raw,s.text+=t.text):n.push(t);continue}if(t=this.tokenizer.emStrong(e,i,g)){e=e.substring(t.raw.length),n.push(t);continue}if(t=this.tokenizer.codespan(e)){e=e.substring(t.raw.length),n.push(t);continue}if(t=this.tokenizer.br(e)){e=e.substring(t.raw.length),n.push(t);continue}if(t=this.tokenizer.del(e)){e=e.substring(t.raw.length),n.push(t);continue}if(t=this.tokenizer.autolink(e)){e=e.substring(t.raw.length),n.push(t);continue}if(!this.state.inLink&&(t=this.tokenizer.url(e))){e=e.substring(t.raw.length),n.push(t);continue}if(r=e,this.options.extensions&&this.options.extensions.startInline){let p=1/0;const m=e.slice(1);let d;this.options.extensions.startInline.forEach(x=>{d=x.call({lexer:this},m),typeof d==\"number\"&&d>=0&&(p=Math.min(p,d))}),p<1/0&&p>=0&&(r=e.substring(0,p+1))}if(t=this.tokenizer.inlineText(r)){e=e.substring(t.raw.length),t.raw.slice(-1)!==\"_\"&&(g=t.raw.slice(-1)),a=!0,s=n[n.length-1],s&&s.type===\"text\"?(s.raw+=t.raw,s.text+=t.text):n.push(t);continue}if(e){const p=\"Infinite loop on byte: \"+e.charCodeAt(0);if(this.options.silent){console.error(p);break}else throw new Error(p)}}return n}}class it{options;constructor(e){this.options=e||de}code(e,n,t){const s=(n||\"\").match(/^\\S*/)?.[0];return e=e.replace(/\\n$/,\"\")+`\n`,s?'<pre><code class=\"language-'+H(s)+'\">'+(t?e:H(e,!0))+`</code></pre>\n`:\"<pre><code>\"+(t?e:H(e,!0))+`</code></pre>\n`}blockquote(e){return`<blockquote>\n${e}</blockquote>\n`}html(e,n){return e}heading(e,n,t){return`<h${n}>${e}</h${n}>\n`}hr(){return`<hr>\n`}list(e,n,t){const s=n?\"ol\":\"ul\",r=n&&t!==1?' start=\"'+t+'\"':\"\";return\"<\"+s+r+`>\n`+e+\"</\"+s+`>\n`}listitem(e,n,t){return`<li>${e}</li>\n`}checkbox(e){return\"<input \"+(e?'checked=\"\" ':\"\")+'disabled=\"\" type=\"checkbox\">'}paragraph(e){return`<p>${e}</p>\n`}table(e,n){return n&&(n=`<tbody>${n}</tbody>`),`<table>\n<thead>\n`+e+`</thead>\n`+n+`</table>\n`}tablerow(e){return`<tr>\n${e}</tr>\n`}tablecell(e,n){const t=n.header?\"th\":\"td\";return(n.align?`<${t} align=\"${n.align}\">`:`<${t}>`)+e+`</${t}>\n`}strong(e){return`<strong>${e}</strong>`}em(e){return`<em>${e}</em>`}codespan(e){return`<code>${e}</code>`}br(){return\"<br>\"}del(e){return`<del>${e}</del>`}link(e,n,t){const s=tn(e);if(s===null)return t;e=s;let r='<a href=\"'+e+'\"';return n&&(r+=' title=\"'+n+'\"'),r+=\">\"+t+\"</a>\",r}image(e,n,t){const s=tn(e);if(s===null)return t;e=s;let r=`<img src=\"${e}\" alt=\"${t}\"`;return n&&(r+=` title=\"${n}\"`),r+=\">\",r}text(e){return e}}class Dt{strong(e){return e}em(e){return e}codespan(e){return e}del(e){return e}html(e){return e}text(e){return e}link(e,n,t){return\"\"+t}image(e,n,t){return\"\"+t}br(){return\"\"}}class J{options;renderer;textRenderer;constructor(e){this.options=e||de,this.options.renderer=this.options.renderer||new it,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new Dt}static parse(e,n){return new J(n).parse(e)}static parseInline(e,n){return new J(n).parseInline(e)}parse(e,n=!0){let t=\"\";for(let s=0;s<e.length;s++){const r=e[s];if(this.options.extensions&&this.options.extensions.renderers&&this.options.extensions.renderers[r.type]){const i=r,l=this.options.extensions.renderers[i.type].call({parser:this},i);if(l!==!1||![\"space\",\"hr\",\"heading\",\"code\",\"table\",\"blockquote\",\"list\",\"html\",\"paragraph\",\"text\"].includes(i.type)){t+=l||\"\";continue}}switch(r.type){case\"space\":continue;case\"hr\":{t+=this.renderer.hr();continue}case\"heading\":{const i=r;t+=this.renderer.heading(this.parseInline(i.tokens),i.depth,Yn(this.parseInline(i.tokens,this.textRenderer)));continue}case\"code\":{const i=r;t+=this.renderer.code(i.text,i.lang,!!i.escaped);continue}case\"table\":{const i=r;let l=\"\",a=\"\";for(let p=0;p<i.header.length;p++)a+=this.renderer.tablecell(this.parseInline(i.header[p].tokens),{header:!0,align:i.align[p]});l+=this.renderer.tablerow(a);let g=\"\";for(let p=0;p<i.rows.length;p++){const m=i.rows[p];a=\"\";for(let d=0;d<m.length;d++)a+=this.renderer.tablecell(this.parseInline(m[d].tokens),{header:!1,align:i.align[d]});g+=this.renderer.tablerow(a)}t+=this.renderer.table(l,g);continue}case\"blockquote\":{const i=r,l=this.parse(i.tokens);t+=this.renderer.blockquote(l);continue}case\"list\":{const i=r,l=i.ordered,a=i.start,g=i.loose;let p=\"\";for(let m=0;m<i.items.length;m++){const d=i.items[m],x=d.checked,O=d.task;let $=\"\";if(d.task){const B=this.renderer.checkbox(!!x);g?d.tokens.length>0&&d.tokens[0].type===\"paragraph\"?(d.tokens[0].text=B+\" \"+d.tokens[0].text,d.tokens[0].tokens&&d.tokens[0].tokens.length>0&&d.tokens[0].tokens[0].type===\"text\"&&(d.tokens[0].tokens[0].text=B+\" \"+d.tokens[0].tokens[0].text)):d.tokens.unshift({type:\"text\",text:B+\" \"}):$+=B+\" \"}$+=this.parse(d.tokens,g),p+=this.renderer.listitem($,O,!!x)}t+=this.renderer.list(p,l,a);continue}case\"html\":{const i=r;t+=this.renderer.html(i.text,i.block);continue}case\"paragraph\":{const i=r;t+=this.renderer.paragraph(this.parseInline(i.tokens));continue}case\"text\":{let i=r,l=i.tokens?this.parseInline(i.tokens):i.text;for(;s+1<e.length&&e[s+1].type===\"text\";)i=e[++s],l+=`\n`+(i.tokens?this.parseInline(i.tokens):i.text);t+=n?this.renderer.paragraph(l):l;continue}default:{const i='Token with \"'+r.type+'\" type was not found.';if(this.options.silent)return console.error(i),\"\";throw new Error(i)}}}return t}parseInline(e,n){n=n||this.renderer;let t=\"\";for(let s=0;s<e.length;s++){const r=e[s];if(this.options.extensions&&this.options.extensions.renderers&&this.options.extensions.renderers[r.type]){const i=this.options.extensions.renderers[r.type].call({parser:this},r);if(i!==!1||![\"escape\",\"html\",\"link\",\"image\",\"strong\",\"em\",\"codespan\",\"br\",\"del\",\"text\"].includes(r.type)){t+=i||\"\";continue}}switch(r.type){case\"escape\":{const i=r;t+=n.text(i.text);break}case\"html\":{const i=r;t+=n.html(i.text);break}case\"link\":{const i=r;t+=n.link(i.href,i.title,this.parseInline(i.tokens,n));break}case\"image\":{const i=r;t+=n.image(i.href,i.title,i.text);break}case\"strong\":{const i=r;t+=n.strong(this.parseInline(i.tokens,n));break}case\"em\":{const i=r;t+=n.em(this.parseInline(i.tokens,n));break}case\"codespan\":{const i=r;t+=n.codespan(i.text);break}case\"br\":{t+=n.br();break}case\"del\":{const i=r;t+=n.del(this.parseInline(i.tokens,n));break}case\"text\":{const i=r;t+=n.text(i.text);break}default:{const i='Token with \"'+r.type+'\" type was not found.';if(this.options.silent)return console.error(i),\"\";throw new Error(i)}}}return t}}class Je{options;constructor(e){this.options=e||de}static passThroughHooks=new Set([\"preprocess\",\"postprocess\",\"processAllTokens\"]);preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}}class yi{defaults=St();options=this.setOptions;parse=this.#e(K.lex,J.parse);parseInline=this.#e(K.lexInline,J.parseInline);Parser=J;Renderer=it;TextRenderer=Dt;Lexer=K;Tokenizer=tt;Hooks=Je;constructor(...e){this.use(...e)}walkTokens(e,n){let t=[];for(const s of e)switch(t=t.concat(n.call(this,s)),s.type){case\"table\":{const r=s;for(const i of r.header)t=t.concat(this.walkTokens(i.tokens,n));for(const i of r.rows)for(const l of i)t=t.concat(this.walkTokens(l.tokens,n));break}case\"list\":{const r=s;t=t.concat(this.walkTokens(r.items,n));break}default:{const r=s;this.defaults.extensions?.childTokens?.[r.type]?this.defaults.extensions.childTokens[r.type].forEach(i=>{t=t.concat(this.walkTokens(r[i],n))}):r.tokens&&(t=t.concat(this.walkTokens(r.tokens,n)))}}return t}use(...e){const n=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(t=>{const s={...t};if(s.async=this.defaults.async||s.async||!1,t.extensions&&(t.extensions.forEach(r=>{if(!r.name)throw new Error(\"extension name required\");if(\"renderer\"in r){const i=n.renderers[r.name];i?n.renderers[r.name]=function(...l){let a=r.renderer.apply(this,l);return a===!1&&(a=i.apply(this,l)),a}:n.renderers[r.name]=r.renderer}if(\"tokenizer\"in r){if(!r.level||r.level!==\"block\"&&r.level!==\"inline\")throw new Error(\"extension level must be 'block' or 'inline'\");const i=n[r.level];i?i.unshift(r.tokenizer):n[r.level]=[r.tokenizer],r.start&&(r.level===\"block\"?n.startBlock?n.startBlock.push(r.start):n.startBlock=[r.start]:r.level===\"inline\"&&(n.startInline?n.startInline.push(r.start):n.startInline=[r.start]))}\"childTokens\"in r&&r.childTokens&&(n.childTokens[r.name]=r.childTokens)}),s.extensions=n),t.renderer){const r=this.defaults.renderer||new it(this.defaults);for(const i in t.renderer){if(!(i in r))throw new Error(`renderer '${i}' does not exist`);if(i===\"options\")continue;const l=i,a=t.renderer[l],g=r[l];r[l]=(...p)=>{let m=a.apply(r,p);return m===!1&&(m=g.apply(r,p)),m||\"\"}}s.renderer=r}if(t.tokenizer){const r=this.defaults.tokenizer||new tt(this.defaults);for(const i in t.tokenizer){if(!(i in r))throw new Error(`tokenizer '${i}' does not exist`);if([\"options\",\"rules\",\"lexer\"].includes(i))continue;const l=i,a=t.tokenizer[l],g=r[l];r[l]=(...p)=>{let m=a.apply(r,p);return m===!1&&(m=g.apply(r,p)),m}}s.tokenizer=r}if(t.hooks){const r=this.defaults.hooks||new Je;for(const i in t.hooks){if(!(i in r))throw new Error(`hook '${i}' does not exist`);if(i===\"options\")continue;const l=i,a=t.hooks[l],g=r[l];Je.passThroughHooks.has(i)?r[l]=p=>{if(this.defaults.async)return Promise.resolve(a.call(r,p)).then(d=>g.call(r,d));const m=a.call(r,p);return g.call(r,m)}:r[l]=(...p)=>{let m=a.apply(r,p);return m===!1&&(m=g.apply(r,p)),m}}s.hooks=r}if(t.walkTokens){const r=this.defaults.walkTokens,i=t.walkTokens;s.walkTokens=function(l){let a=[];return a.push(i.call(this,l)),r&&(a=a.concat(r.call(this,l))),a}}this.defaults={...this.defaults,...s}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,n){return K.lex(e,n??this.defaults)}parser(e,n){return J.parse(e,n??this.defaults)}#e(e,n){return(t,s)=>{const r={...s},i={...this.defaults,...r};this.defaults.async===!0&&r.async===!1&&(i.silent||console.warn(\"marked(): The async option was set to true by an extension. The async: false option sent to parse will be ignored.\"),i.async=!0);const l=this.#t(!!i.silent,!!i.async);if(typeof t>\"u\"||t===null)return l(new Error(\"marked(): input parameter is undefined or null\"));if(typeof t!=\"string\")return l(new Error(\"marked(): input parameter is of type \"+Object.prototype.toString.call(t)+\", string expected\"));if(i.hooks&&(i.hooks.options=i),i.async)return Promise.resolve(i.hooks?i.hooks.preprocess(t):t).then(a=>e(a,i)).then(a=>i.hooks?i.hooks.processAllTokens(a):a).then(a=>i.walkTokens?Promise.all(this.walkTokens(a,i.walkTokens)).then(()=>a):a).then(a=>n(a,i)).then(a=>i.hooks?i.hooks.postprocess(a):a).catch(l);try{i.hooks&&(t=i.hooks.preprocess(t));let a=e(t,i);i.hooks&&(a=i.hooks.processAllTokens(a)),i.walkTokens&&this.walkTokens(a,i.walkTokens);let g=n(a,i);return i.hooks&&(g=i.hooks.postprocess(g)),g}catch(a){return l(a)}}}#t(e,n){return t=>{if(t.message+=`\nPlease report this to https://github.com/markedjs/marked.`,e){const s=\"<p>An error occurred:</p><pre>\"+H(t.message+\"\",!0)+\"</pre>\";return n?Promise.resolve(s):s}if(n)return Promise.reject(t);throw t}}}const ge=new yi;function b(c,e){return ge.parse(c,e)}b.options=b.setOptions=function(c){return ge.setOptions(c),b.defaults=ge.defaults,gn(b.defaults),b};b.getDefaults=St;b.defaults=de;b.use=function(...c){return ge.use(...c),b.defaults=ge.defaults,gn(b.defaults),b};b.walkTokens=function(c,e){return ge.walkTokens(c,e)};b.parseInline=ge.parseInline;b.Parser=J;b.parser=J.parse;b.Renderer=it;b.TextRenderer=Dt;b.Lexer=K;b.lexer=K.lex;b.Tokenizer=tt;b.Hooks=Je;b.parse=b;b.options;b.setOptions;b.use;b.walkTokens;b.parseInline;J.parse;K.lex;/*! @license DOMPurify 3.0.8 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.0.8/LICENSE */const{entries:An,setPrototypeOf:on,isFrozen:Ai,getPrototypeOf:Ei,getOwnPropertyDescriptor:Nt}=Object;let{freeze:v,seal:Y,create:En}=Object,{apply:At,construct:Et}=typeof Reflect<\"u\"&&Reflect;v||(v=function(e){return e});Y||(Y=function(e){return e});At||(At=function(e,n,t){return e.apply(n,t)});Et||(Et=function(e,n){return new e(...n)});const Qe=G(Array.prototype.forEach),ln=G(Array.prototype.pop),Oe=G(Array.prototype.push),et=G(String.prototype.toLowerCase),xt=G(String.prototype.toString),Si=G(String.prototype.match),ve=G(String.prototype.replace),Ri=G(String.prototype.indexOf),Li=G(String.prototype.trim),F=G(RegExp.prototype.test),Me=$i(TypeError);function G(c){return function(e){for(var n=arguments.length,t=new Array(n>1?n-1:0),s=1;s<n;s++)t[s-1]=arguments[s];return At(c,e,t)}}function $i(c){return function(){for(var e=arguments.length,n=new Array(e),t=0;t<e;t++)n[t]=arguments[t];return Et(c,n)}}function k(c,e){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:et;on&&on(c,null);let t=e.length;for(;t--;){let s=e[t];if(typeof s==\"string\"){const r=n(s);r!==s&&(Ai(e)||(e[t]=r),s=r)}c[s]=!0}return c}function Ii(c){for(let e=0;e<c.length;e++)Nt(c,e)===void 0&&(c[e]=null);return c}function he(c){const e=En(null);for(const[n,t]of An(c))Nt(c,n)!==void 0&&(Array.isArray(t)?e[n]=Ii(t):t&&typeof t==\"object\"&&t.constructor===Object?e[n]=he(t):e[n]=t);return e}function Ve(c,e){for(;c!==null;){const t=Nt(c,e);if(t){if(t.get)return G(t.get);if(typeof t.value==\"function\")return G(t.value)}c=Ei(c)}function n(t){return console.warn(\"fallback value for\",t),null}return n}const an=v([\"a\",\"abbr\",\"acronym\",\"address\",\"area\",\"article\",\"aside\",\"audio\",\"b\",\"bdi\",\"bdo\",\"big\",\"blink\",\"blockquote\",\"body\",\"br\",\"button\",\"canvas\",\"caption\",\"center\",\"cite\",\"code\",\"col\",\"colgroup\",\"content\",\"data\",\"datalist\",\"dd\",\"decorator\",\"del\",\"details\",\"dfn\",\"dialog\",\"dir\",\"div\",\"dl\",\"dt\",\"element\",\"em\",\"fieldset\",\"figcaption\",\"figure\",\"font\",\"footer\",\"form\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"head\",\"header\",\"hgroup\",\"hr\",\"html\",\"i\",\"img\",\"input\",\"ins\",\"kbd\",\"label\",\"legend\",\"li\",\"main\",\"map\",\"mark\",\"marquee\",\"menu\",\"menuitem\",\"meter\",\"nav\",\"nobr\",\"ol\",\"optgroup\",\"option\",\"output\",\"p\",\"picture\",\"pre\",\"progress\",\"q\",\"rp\",\"rt\",\"ruby\",\"s\",\"samp\",\"section\",\"select\",\"shadow\",\"small\",\"source\",\"spacer\",\"span\",\"strike\",\"strong\",\"style\",\"sub\",\"summary\",\"sup\",\"table\",\"tbody\",\"td\",\"template\",\"textarea\",\"tfoot\",\"th\",\"thead\",\"time\",\"tr\",\"track\",\"tt\",\"u\",\"ul\",\"var\",\"video\",\"wbr\"]),bt=v([\"svg\",\"a\",\"altglyph\",\"altglyphdef\",\"altglyphitem\",\"animatecolor\",\"animatemotion\",\"animatetransform\",\"circle\",\"clippath\",\"defs\",\"desc\",\"ellipse\",\"filter\",\"font\",\"g\",\"glyph\",\"glyphref\",\"hkern\",\"image\",\"line\",\"lineargradient\",\"marker\",\"mask\",\"metadata\",\"mpath\",\"path\",\"pattern\",\"polygon\",\"polyline\",\"radialgradient\",\"rect\",\"stop\",\"style\",\"switch\",\"symbol\",\"text\",\"textpath\",\"title\",\"tref\",\"tspan\",\"view\",\"vkern\"]),Tt=v([\"feBlend\",\"feColorMatrix\",\"feComponentTransfer\",\"feComposite\",\"feConvolveMatrix\",\"feDiffuseLighting\",\"feDisplacementMap\",\"feDistantLight\",\"feDropShadow\",\"feFlood\",\"feFuncA\",\"feFuncB\",\"feFuncG\",\"feFuncR\",\"feGaussianBlur\",\"feImage\",\"feMerge\",\"feMergeNode\",\"feMorphology\",\"feOffset\",\"fePointLight\",\"feSpecularLighting\",\"feSpotLight\",\"feTile\",\"feTurbulence\"]),Ci=v([\"animate\",\"color-profile\",\"cursor\",\"discard\",\"font-face\",\"font-face-format\",\"font-face-name\",\"font-face-src\",\"font-face-uri\",\"foreignobject\",\"hatch\",\"hatchpath\",\"mesh\",\"meshgradient\",\"meshpatch\",\"meshrow\",\"missing-glyph\",\"script\",\"set\",\"solidcolor\",\"unknown\",\"use\"]),_t=v([\"math\",\"menclose\",\"merror\",\"mfenced\",\"mfrac\",\"mglyph\",\"mi\",\"mlabeledtr\",\"mmultiscripts\",\"mn\",\"mo\",\"mover\",\"mpadded\",\"mphantom\",\"mroot\",\"mrow\",\"ms\",\"mspace\",\"msqrt\",\"mstyle\",\"msub\",\"msup\",\"msubsup\",\"mtable\",\"mtd\",\"mtext\",\"mtr\",\"munder\",\"munderover\",\"mprescripts\"]),Di=v([\"maction\",\"maligngroup\",\"malignmark\",\"mlongdiv\",\"mscarries\",\"mscarry\",\"msgroup\",\"mstack\",\"msline\",\"msrow\",\"semantics\",\"annotation\",\"annotation-xml\",\"mprescripts\",\"none\"]),cn=v([\"#text\"]),un=v([\"accept\",\"action\",\"align\",\"alt\",\"autocapitalize\",\"autocomplete\",\"autopictureinpicture\",\"autoplay\",\"background\",\"bgcolor\",\"border\",\"capture\",\"cellpadding\",\"cellspacing\",\"checked\",\"cite\",\"class\",\"clear\",\"color\",\"cols\",\"colspan\",\"controls\",\"controlslist\",\"coords\",\"crossorigin\",\"datetime\",\"decoding\",\"default\",\"dir\",\"disabled\",\"disablepictureinpicture\",\"disableremoteplayback\",\"download\",\"draggable\",\"enctype\",\"enterkeyhint\",\"face\",\"for\",\"headers\",\"height\",\"hidden\",\"high\",\"href\",\"hreflang\",\"id\",\"inputmode\",\"integrity\",\"ismap\",\"kind\",\"label\",\"lang\",\"list\",\"loading\",\"loop\",\"low\",\"max\",\"maxlength\",\"media\",\"method\",\"min\",\"minlength\",\"multiple\",\"muted\",\"name\",\"nonce\",\"noshade\",\"novalidate\",\"nowrap\",\"open\",\"optimum\",\"pattern\",\"placeholder\",\"playsinline\",\"poster\",\"preload\",\"pubdate\",\"radiogroup\",\"readonly\",\"rel\",\"required\",\"rev\",\"reversed\",\"role\",\"rows\",\"rowspan\",\"spellcheck\",\"scope\",\"selected\",\"shape\",\"size\",\"sizes\",\"span\",\"srclang\",\"start\",\"src\",\"srcset\",\"step\",\"style\",\"summary\",\"tabindex\",\"title\",\"translate\",\"type\",\"usemap\",\"valign\",\"value\",\"width\",\"xmlns\",\"slot\"]),wt=v([\"accent-height\",\"accumulate\",\"additive\",\"alignment-baseline\",\"ascent\",\"attributename\",\"attributetype\",\"azimuth\",\"basefrequency\",\"baseline-shift\",\"begin\",\"bias\",\"by\",\"class\",\"clip\",\"clippathunits\",\"clip-path\",\"clip-rule\",\"color\",\"color-interpolation\",\"color-interpolation-filters\",\"color-profile\",\"color-rendering\",\"cx\",\"cy\",\"d\",\"dx\",\"dy\",\"diffuseconstant\",\"direction\",\"display\",\"divisor\",\"dur\",\"edgemode\",\"elevation\",\"end\",\"fill\",\"fill-opacity\",\"fill-rule\",\"filter\",\"filterunits\",\"flood-color\",\"flood-opacity\",\"font-family\",\"font-size\",\"font-size-adjust\",\"font-stretch\",\"font-style\",\"font-variant\",\"font-weight\",\"fx\",\"fy\",\"g1\",\"g2\",\"glyph-name\",\"glyphref\",\"gradientunits\",\"gradienttransform\",\"height\",\"href\",\"id\",\"image-rendering\",\"in\",\"in2\",\"k\",\"k1\",\"k2\",\"k3\",\"k4\",\"kerning\",\"keypoints\",\"keysplines\",\"keytimes\",\"lang\",\"lengthadjust\",\"letter-spacing\",\"kernelmatrix\",\"kernelunitlength\",\"lighting-color\",\"local\",\"marker-end\",\"marker-mid\",\"marker-start\",\"markerheight\",\"markerunits\",\"markerwidth\",\"maskcontentunits\",\"maskunits\",\"max\",\"mask\",\"media\",\"method\",\"mode\",\"min\",\"name\",\"numoctaves\",\"offset\",\"operator\",\"opacity\",\"order\",\"orient\",\"orientation\",\"origin\",\"overflow\",\"paint-order\",\"path\",\"pathlength\",\"patterncontentunits\",\"patterntransform\",\"patternunits\",\"points\",\"preservealpha\",\"preserveaspectratio\",\"primitiveunits\",\"r\",\"rx\",\"ry\",\"radius\",\"refx\",\"refy\",\"repeatcount\",\"repeatdur\",\"restart\",\"result\",\"rotate\",\"scale\",\"seed\",\"shape-rendering\",\"specularconstant\",\"specularexponent\",\"spreadmethod\",\"startoffset\",\"stddeviation\",\"stitchtiles\",\"stop-color\",\"stop-opacity\",\"stroke-dasharray\",\"stroke-dashoffset\",\"stroke-linecap\",\"stroke-linejoin\",\"stroke-miterlimit\",\"stroke-opacity\",\"stroke\",\"stroke-width\",\"style\",\"surfacescale\",\"systemlanguage\",\"tabindex\",\"targetx\",\"targety\",\"transform\",\"transform-origin\",\"text-anchor\",\"text-decoration\",\"text-rendering\",\"textlength\",\"type\",\"u1\",\"u2\",\"unicode\",\"values\",\"viewbox\",\"visibility\",\"version\",\"vert-adv-y\",\"vert-origin-x\",\"vert-origin-y\",\"width\",\"word-spacing\",\"wrap\",\"writing-mode\",\"xchannelselector\",\"ychannelselector\",\"x\",\"x1\",\"x2\",\"xmlns\",\"y\",\"y1\",\"y2\",\"z\",\"zoomandpan\"]),pn=v([\"accent\",\"accentunder\",\"align\",\"bevelled\",\"close\",\"columnsalign\",\"columnlines\",\"columnspan\",\"denomalign\",\"depth\",\"dir\",\"display\",\"displaystyle\",\"encoding\",\"fence\",\"frame\",\"height\",\"href\",\"id\",\"largeop\",\"length\",\"linethickness\",\"lspace\",\"lquote\",\"mathbackground\",\"mathcolor\",\"mathsize\",\"mathvariant\",\"maxsize\",\"minsize\",\"movablelimits\",\"notation\",\"numalign\",\"open\",\"rowalign\",\"rowlines\",\"rowspacing\",\"rowspan\",\"rspace\",\"rquote\",\"scriptlevel\",\"scriptminsize\",\"scriptsizemultiplier\",\"selection\",\"separator\",\"separators\",\"stretchy\",\"subscriptshift\",\"supscriptshift\",\"symmetric\",\"voffset\",\"width\",\"xmlns\"]),Ke=v([\"xlink:href\",\"xml:id\",\"xlink:title\",\"xml:space\",\"xmlns:xlink\"]),Ni=Y(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm),Oi=Y(/<%[\\w\\W]*|[\\w\\W]*%>/gm),vi=Y(/\\${[\\w\\W]*}/gm),Mi=Y(/^data-[\\-\\w.\\u00B7-\\uFFFF]/),zi=Y(/^aria-[\\-\\w]+$/),Sn=Y(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i),Pi=Y(/^(?:\\w+script|data):/i),Ui=Y(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g),Rn=Y(/^html$/i);var fn=Object.freeze({__proto__:null,MUSTACHE_EXPR:Ni,ERB_EXPR:Oi,TMPLIT_EXPR:vi,DATA_ATTR:Mi,ARIA_ATTR:zi,IS_ALLOWED_URI:Sn,IS_SCRIPT_OR_DATA:Pi,ATTR_WHITESPACE:Ui,DOCTYPE_NAME:Rn});const Fi=function(){return typeof window>\"u\"?null:window},Hi=function(e,n){if(typeof e!=\"object\"||typeof e.createPolicy!=\"function\")return null;let t=null;const s=\"data-tt-policy-suffix\";n&&n.hasAttribute(s)&&(t=n.getAttribute(s));const r=\"dompurify\"+(t?\"#\"+t:\"\");try{return e.createPolicy(r,{createHTML(i){return i},createScriptURL(i){return i}})}catch{return console.warn(\"TrustedTypes policy \"+r+\" could not be created.\"),null}};function Ln(){let c=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Fi();const e=h=>Ln(h);if(e.version=\"3.0.8\",e.removed=[],!c||!c.document||c.document.nodeType!==9)return e.isSupported=!1,e;let{document:n}=c;const t=n,s=t.currentScript,{DocumentFragment:r,HTMLTemplateElement:i,Node:l,Element:a,NodeFilter:g,NamedNodeMap:p=c.NamedNodeMap||c.MozNamedAttrMap,HTMLFormElement:m,DOMParser:d,trustedTypes:x}=c,O=a.prototype,$=Ve(O,\"cloneNode\"),B=Ve(O,\"nextSibling\"),ce=Ve(O,\"childNodes\"),y=Ve(O,\"parentNode\");if(typeof i==\"function\"){const h=n.createElement(\"template\");h.content&&h.content.ownerDocument&&(n=h.content.ownerDocument)}let _,I=\"\";const{implementation:C,createNodeIterator:j,createDocumentFragment:re,getElementsByTagName:M}=n,{importNode:U}=t;let W={};e.isSupported=typeof An==\"function\"&&typeof y==\"function\"&&C&&C.createHTMLDocument!==void 0;const{MUSTACHE_EXPR:me,ERB_EXPR:ke,TMPLIT_EXPR:Se,DATA_ATTR:xe,ARIA_ATTR:rt,IS_SCRIPT_OR_DATA:Fe,ATTR_WHITESPACE:R}=fn;let{IS_ALLOWED_URI:ee}=fn,E=null;const Re=k({},[...an,...bt,...Tt,..._t,...cn]);let S=null;const He=k({},[...un,...wt,...pn,...Ke]);let A=Object.seal(En(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),ue=null,q=null,X=!0,te=!0,Q=!1,Be=!0,Z=!1,ne=!1,Le=!1,be=!1,oe=!1,Te=!1,_e=!1,$e=!0,We=!1;const ot=\"user-content-\";let lt=!0,Ie=!1,we={},ye=null;const Ot=k({},[\"annotation-xml\",\"audio\",\"colgroup\",\"desc\",\"foreignobject\",\"head\",\"iframe\",\"math\",\"mi\",\"mn\",\"mo\",\"ms\",\"mtext\",\"noembed\",\"noframes\",\"noscript\",\"plaintext\",\"script\",\"style\",\"svg\",\"template\",\"thead\",\"title\",\"video\",\"xmp\"]);let vt=null;const Mt=k({},[\"audio\",\"video\",\"img\",\"source\",\"image\",\"track\"]);let at=null;const zt=k({},[\"alt\",\"class\",\"for\",\"id\",\"label\",\"name\",\"pattern\",\"placeholder\",\"role\",\"summary\",\"title\",\"value\",\"style\",\"xmlns\"]),Ge=\"http://www.w3.org/1998/Math/MathML\",qe=\"http://www.w3.org/2000/svg\",ie=\"http://www.w3.org/1999/xhtml\";let Ae=ie,ct=!1,ut=null;const $n=k({},[Ge,qe,ie],xt);let Ce=null;const In=[\"application/xhtml+xml\",\"text/html\"],Cn=\"text/html\";let L=null,Ee=null;const Dn=n.createElement(\"form\"),Pt=function(o){return o instanceof RegExp||o instanceof Function},pt=function(){let o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!(Ee&&Ee===o)){if((!o||typeof o!=\"object\")&&(o={}),o=he(o),Ce=In.indexOf(o.PARSER_MEDIA_TYPE)===-1?Cn:o.PARSER_MEDIA_TYPE,L=Ce===\"application/xhtml+xml\"?xt:et,E=\"ALLOWED_TAGS\"in o?k({},o.ALLOWED_TAGS,L):Re,S=\"ALLOWED_ATTR\"in o?k({},o.ALLOWED_ATTR,L):He,ut=\"ALLOWED_NAMESPACES\"in o?k({},o.ALLOWED_NAMESPACES,xt):$n,at=\"ADD_URI_SAFE_ATTR\"in o?k(he(zt),o.ADD_URI_SAFE_ATTR,L):zt,vt=\"ADD_DATA_URI_TAGS\"in o?k(he(Mt),o.ADD_DATA_URI_TAGS,L):Mt,ye=\"FORBID_CONTENTS\"in o?k({},o.FORBID_CONTENTS,L):Ot,ue=\"FORBID_TAGS\"in o?k({},o.FORBID_TAGS,L):{},q=\"FORBID_ATTR\"in o?k({},o.FORBID_ATTR,L):{},we=\"USE_PROFILES\"in o?o.USE_PROFILES:!1,X=o.ALLOW_ARIA_ATTR!==!1,te=o.ALLOW_DATA_ATTR!==!1,Q=o.ALLOW_UNKNOWN_PROTOCOLS||!1,Be=o.ALLOW_SELF_CLOSE_IN_ATTR!==!1,Z=o.SAFE_FOR_TEMPLATES||!1,ne=o.WHOLE_DOCUMENT||!1,oe=o.RETURN_DOM||!1,Te=o.RETURN_DOM_FRAGMENT||!1,_e=o.RETURN_TRUSTED_TYPE||!1,be=o.FORCE_BODY||!1,$e=o.SANITIZE_DOM!==!1,We=o.SANITIZE_NAMED_PROPS||!1,lt=o.KEEP_CONTENT!==!1,Ie=o.IN_PLACE||!1,ee=o.ALLOWED_URI_REGEXP||Sn,Ae=o.NAMESPACE||ie,A=o.CUSTOM_ELEMENT_HANDLING||{},o.CUSTOM_ELEMENT_HANDLING&&Pt(o.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(A.tagNameCheck=o.CUSTOM_ELEMENT_HANDLING.tagNameCheck),o.CUSTOM_ELEMENT_HANDLING&&Pt(o.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(A.attributeNameCheck=o.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),o.CUSTOM_ELEMENT_HANDLING&&typeof o.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements==\"boolean\"&&(A.allowCustomizedBuiltInElements=o.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),Z&&(te=!1),Te&&(oe=!0),we&&(E=k({},cn),S=[],we.html===!0&&(k(E,an),k(S,un)),we.svg===!0&&(k(E,bt),k(S,wt),k(S,Ke)),we.svgFilters===!0&&(k(E,Tt),k(S,wt),k(S,Ke)),we.mathMl===!0&&(k(E,_t),k(S,pn),k(S,Ke))),o.ADD_TAGS&&(E===Re&&(E=he(E)),k(E,o.ADD_TAGS,L)),o.ADD_ATTR&&(S===He&&(S=he(S)),k(S,o.ADD_ATTR,L)),o.ADD_URI_SAFE_ATTR&&k(at,o.ADD_URI_SAFE_ATTR,L),o.FORBID_CONTENTS&&(ye===Ot&&(ye=he(ye)),k(ye,o.FORBID_CONTENTS,L)),lt&&(E[\"#text\"]=!0),ne&&k(E,[\"html\",\"head\",\"body\"]),E.table&&(k(E,[\"tbody\"]),delete ue.tbody),o.TRUSTED_TYPES_POLICY){if(typeof o.TRUSTED_TYPES_POLICY.createHTML!=\"function\")throw Me('TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.');if(typeof o.TRUSTED_TYPES_POLICY.createScriptURL!=\"function\")throw Me('TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.');_=o.TRUSTED_TYPES_POLICY,I=_.createHTML(\"\")}else _===void 0&&(_=Hi(x,s)),_!==null&&typeof I==\"string\"&&(I=_.createHTML(\"\"));v&&v(o),Ee=o}},Ut=k({},[\"mi\",\"mo\",\"mn\",\"ms\",\"mtext\"]),Ft=k({},[\"foreignobject\",\"desc\",\"title\",\"annotation-xml\"]),Nn=k({},[\"title\",\"style\",\"font\",\"a\",\"script\"]),Ht=k({},[...bt,...Tt,...Ci]),Bt=k({},[..._t,...Di]),On=function(o){let u=y(o);(!u||!u.tagName)&&(u={namespaceURI:Ae,tagName:\"template\"});const f=et(o.tagName),w=et(u.tagName);return ut[o.namespaceURI]?o.namespaceURI===qe?u.namespaceURI===ie?f===\"svg\":u.namespaceURI===Ge?f===\"svg\"&&(w===\"annotation-xml\"||Ut[w]):!!Ht[f]:o.namespaceURI===Ge?u.namespaceURI===ie?f===\"math\":u.namespaceURI===qe?f===\"math\"&&Ft[w]:!!Bt[f]:o.namespaceURI===ie?u.namespaceURI===qe&&!Ft[w]||u.namespaceURI===Ge&&!Ut[w]?!1:!Bt[f]&&(Nn[f]||!Ht[f]):!!(Ce===\"application/xhtml+xml\"&&ut[o.namespaceURI]):!1},pe=function(o){Oe(e.removed,{element:o});try{o.parentNode.removeChild(o)}catch{o.remove()}},ft=function(o,u){try{Oe(e.removed,{attribute:u.getAttributeNode(o),from:u})}catch{Oe(e.removed,{attribute:null,from:u})}if(u.removeAttribute(o),o===\"is\"&&!S[o])if(oe||Te)try{pe(u)}catch{}else try{u.setAttribute(o,\"\")}catch{}},Wt=function(o){let u=null,f=null;if(be)o=\"<remove></remove>\"+o;else{const N=Si(o,/^[\\r\\n\\t ]+/);f=N&&N[0]}Ce===\"application/xhtml+xml\"&&Ae===ie&&(o='<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>'+o+\"</body></html>\");const w=_?_.createHTML(o):o;if(Ae===ie)try{u=new d().parseFromString(w,Ce)}catch{}if(!u||!u.documentElement){u=C.createDocument(Ae,\"template\",null);try{u.documentElement.innerHTML=ct?I:w}catch{}}const D=u.body||u.documentElement;return o&&f&&D.insertBefore(n.createTextNode(f),D.childNodes[0]||null),Ae===ie?M.call(u,ne?\"html\":\"body\")[0]:ne?u.documentElement:D},Gt=function(o){return j.call(o.ownerDocument||o,o,g.SHOW_ELEMENT|g.SHOW_COMMENT|g.SHOW_TEXT,null)},vn=function(o){return o instanceof m&&(typeof o.nodeName!=\"string\"||typeof o.textContent!=\"string\"||typeof o.removeChild!=\"function\"||!(o.attributes instanceof p)||typeof o.removeAttribute!=\"function\"||typeof o.setAttribute!=\"function\"||typeof o.namespaceURI!=\"string\"||typeof o.insertBefore!=\"function\"||typeof o.hasChildNodes!=\"function\")},qt=function(o){return typeof l==\"function\"&&o instanceof l},se=function(o,u,f){W[o]&&Qe(W[o],w=>{w.call(e,u,f,Ee)})},Zt=function(o){let u=null;if(se(\"beforeSanitizeElements\",o,null),vn(o))return pe(o),!0;const f=L(o.nodeName);if(se(\"uponSanitizeElement\",o,{tagName:f,allowedTags:E}),o.hasChildNodes()&&!qt(o.firstElementChild)&&F(/<[/\\w]/g,o.innerHTML)&&F(/<[/\\w]/g,o.textContent))return pe(o),!0;if(!E[f]||ue[f]){if(!ue[f]&&jt(f)&&(A.tagNameCheck instanceof RegExp&&F(A.tagNameCheck,f)||A.tagNameCheck instanceof Function&&A.tagNameCheck(f)))return!1;if(lt&&!ye[f]){const w=y(o)||o.parentNode,D=ce(o)||o.childNodes;if(D&&w){const N=D.length;for(let z=N-1;z>=0;--z)w.insertBefore($(D[z],!0),B(o))}}return pe(o),!0}return o instanceof a&&!On(o)||(f===\"noscript\"||f===\"noembed\"||f===\"noframes\")&&F(/<\\/no(script|embed|frames)/i,o.innerHTML)?(pe(o),!0):(Z&&o.nodeType===3&&(u=o.textContent,Qe([me,ke,Se],w=>{u=ve(u,w,\" \")}),o.textContent!==u&&(Oe(e.removed,{element:o.cloneNode()}),o.textContent=u)),se(\"afterSanitizeElements\",o,null),!1)},Yt=function(o,u,f){if($e&&(u===\"id\"||u===\"name\")&&(f in n||f in Dn))return!1;if(!(te&&!q[u]&&F(xe,u))){if(!(X&&F(rt,u))){if(!S[u]||q[u]){if(!(jt(o)&&(A.tagNameCheck instanceof RegExp&&F(A.tagNameCheck,o)||A.tagNameCheck instanceof Function&&A.tagNameCheck(o))&&(A.attributeNameCheck instanceof RegExp&&F(A.attributeNameCheck,u)||A.attributeNameCheck instanceof Function&&A.attributeNameCheck(u))||u===\"is\"&&A.allowCustomizedBuiltInElements&&(A.tagNameCheck instanceof RegExp&&F(A.tagNameCheck,f)||A.tagNameCheck instanceof Function&&A.tagNameCheck(f))))return!1}else if(!at[u]){if(!F(ee,ve(f,R,\"\"))){if(!((u===\"src\"||u===\"xlink:href\"||u===\"href\")&&o!==\"script\"&&Ri(f,\"data:\")===0&&vt[o])){if(!(Q&&!F(Fe,ve(f,R,\"\")))){if(f)return!1}}}}}}return!0},jt=function(o){return o.indexOf(\"-\")>0},Xt=function(o){se(\"beforeSanitizeAttributes\",o,null);const{attributes:u}=o;if(!u)return;const f={attrName:\"\",attrValue:\"\",keepAttr:!0,allowedAttributes:S};let w=u.length;for(;w--;){const D=u[w],{name:N,namespaceURI:z,value:fe}=D,De=L(N);let P=N===\"value\"?fe:Li(fe);if(f.attrName=De,f.attrValue=P,f.keepAttr=!0,f.forceKeepAttr=void 0,se(\"uponSanitizeAttribute\",o,f),P=f.attrValue,f.forceKeepAttr||(ft(N,o),!f.keepAttr))continue;if(!Be&&F(/\\/>/i,P)){ft(N,o);continue}Z&&Qe([me,ke,Se],Vt=>{P=ve(P,Vt,\" \")});const Qt=L(o.nodeName);if(Yt(Qt,De,P)){if(We&&(De===\"id\"||De===\"name\")&&(ft(N,o),P=ot+P),_&&typeof x==\"object\"&&typeof x.getAttributeType==\"function\"&&!z)switch(x.getAttributeType(Qt,De)){case\"TrustedHTML\":{P=_.createHTML(P);break}case\"TrustedScriptURL\":{P=_.createScriptURL(P);break}}try{z?o.setAttributeNS(z,N,P):o.setAttribute(N,P),ln(e.removed)}catch{}}}se(\"afterSanitizeAttributes\",o,null)},Mn=function h(o){let u=null;const f=Gt(o);for(se(\"beforeSanitizeShadowDOM\",o,null);u=f.nextNode();)se(\"uponSanitizeShadowNode\",u,null),!Zt(u)&&(u.content instanceof r&&h(u.content),Xt(u));se(\"afterSanitizeShadowDOM\",o,null)};return e.sanitize=function(h){let o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},u=null,f=null,w=null,D=null;if(ct=!h,ct&&(h=\"<!-->\"),typeof h!=\"string\"&&!qt(h))if(typeof h.toString==\"function\"){if(h=h.toString(),typeof h!=\"string\")throw Me(\"dirty is not a string, aborting\")}else throw Me(\"toString is not a function\");if(!e.isSupported)return h;if(Le||pt(o),e.removed=[],typeof h==\"string\"&&(Ie=!1),Ie){if(h.nodeName){const fe=L(h.nodeName);if(!E[fe]||ue[fe])throw Me(\"root node is forbidden and cannot be sanitized in-place\")}}else if(h instanceof l)u=Wt(\"<!---->\"),f=u.ownerDocument.importNode(h,!0),f.nodeType===1&&f.nodeName===\"BODY\"||f.nodeName===\"HTML\"?u=f:u.appendChild(f);else{if(!oe&&!Z&&!ne&&h.indexOf(\"<\")===-1)return _&&_e?_.createHTML(h):h;if(u=Wt(h),!u)return oe?null:_e?I:\"\"}u&&be&&pe(u.firstChild);const N=Gt(Ie?h:u);for(;w=N.nextNode();)Zt(w)||(w.content instanceof r&&Mn(w.content),Xt(w));if(Ie)return h;if(oe){if(Te)for(D=re.call(u.ownerDocument);u.firstChild;)D.appendChild(u.firstChild);else D=u;return(S.shadowroot||S.shadowrootmode)&&(D=U.call(t,D,!0)),D}let z=ne?u.outerHTML:u.innerHTML;return ne&&E[\"!doctype\"]&&u.ownerDocument&&u.ownerDocument.doctype&&u.ownerDocument.doctype.name&&F(Rn,u.ownerDocument.doctype.name)&&(z=\"<!DOCTYPE \"+u.ownerDocument.doctype.name+`>\n`+z),Z&&Qe([me,ke,Se],fe=>{z=ve(z,fe,\" \")}),_&&_e?_.createHTML(z):z},e.setConfig=function(){let h=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};pt(h),Le=!0},e.clearConfig=function(){Ee=null,Le=!1},e.isValidAttribute=function(h,o,u){Ee||pt({});const f=L(h),w=L(o);return Yt(f,w,u)},e.addHook=function(h,o){typeof o==\"function\"&&(W[h]=W[h]||[],Oe(W[h],o))},e.removeHook=function(h){if(W[h])return ln(W[h])},e.removeHooks=function(h){W[h]&&(W[h]=[])},e.removeAllHooks=function(){W={}},e}var hn=Ln(),Bi=ae('<main class=\"flex flex-col overflow-y-auto flex-grow\"><div id=chat-container class=\"flex-grow overflow-y-auto\"><div class=\"container mx-auto px-2 max-w-5xl\"><div class=\"py-4 text-center font-thin\"></div></div><div id=chat-thread class=\"w-full border-t border-slate-500\"></div></div><div><!$><!/><div class=\"py-2 px-4 justify-center items-center text-xs flex space-x-2\"id=example-buttons></div><form class=\"p-2 flex\"id=chat-form><div class=\"container flex mx-auto max-w-5xl\"><div id=user-input style=height:max-content; class=\"flex-grow px-4 py-2 border border-slate-500 rounded-lg focus:outline-none focus:ring focus:ring-blue-300\"placeholder=\"Ask something...\"></div><button type=submit id=submit-btn class=\"ml-2 px-4 py-2 rounded-lg text-slate-400 bg-slate-600 hover:bg-slate-700\">'),Wi=ae('<div><div class=\"px-2 py-8 mx-auto max-w-5xl\"><article class=\"prose max-w-full\"></article><!$><!/>'),Gi=ae('<button class=\"m-2 px-3 py-1 text-sm bg-accent hover:bg-base-100 rounded-lg\">'),qi=ae('<dialog class=modal><div class=modal-box><h3 class=\"font-bold text-lg\">📖 <!$><!/> [p. <!$><!/>]</h3><p class=py-4></p></div><form method=dialog class=modal-backdrop><button>close'),Zi=ae('<div class=text-center><div id=warning-card class=\"bg-orange-300 p-2 text-orange-900 text-sm rounded-lg font-semibold mb-2 hidden inline-block\">'),Yi=ae('<button class=\"px-4 py-1 bg-neutral-content text-slate-600 rounded-lg hover:bg-slate-400\">'),ji=ae('<i id=loading-spinner class=\"fas fa-spinner fa-spin\">'),Xi=ae('<i id=send-icon class=\"fas fa-paper-plane\">');function Ki(){const c=Fn(Bn),[e,n]=Ze([{message:\"How can I help you today?\",type:\"bot\",sources:[]}]),[t,s]=Ze(\"\"),[r,i]=Ze(\"\"),[l,a]=Ze(!1);let g,p;const m=(y,_=\"bot\")=>{n(I=>[...I,{message:y,type:_,sources:[]}]),p.scrollTop=p.scrollHeight};function d(y){y.preventDefault(),$()}function x(y){s(y.target.innerText)}function O(y){y.key===\"Enter\"&&!y.shiftKey&&(y.preventDefault(),$())}function $(){if(l()){i(\"⏳ Thinking...\");return}if(t().trim()!==\"\"){m(t(),\"user\");const y={prompt:t()};g.send(JSON.stringify(y)),a(!0),s(\"\")}}function B(y){const I=`${y.protocol===\"https:\"?\"wss:\":\"ws:\"}//${y.host}/chat`;console.log(`🔌 Connecting to ${I}`),g=new WebSocket(I),g.onopen=()=>{console.log(\"🔌 Connected to the API websocket\")},g.onclose=C=>{console.warn(\"WebSocket closed with code:\",C.code,\"reason:\",C.reason),a(!1),setTimeout(()=>{console.log(\"♻️ Attempting to reconnect...\"),B(y)},2e3)},g.onerror=C=>{console.error(\"WebSocket error:\",C),m(\"An error happened, please retry.\"),a(!1)},g.onmessage=C=>{const j=JSON.parse(C.data);j.type===\"start\"?m(\"\",\"bot\"):j.type===\"stream\"?n(re=>{const M=[...re],U=M.length-1;return U>=0&&(M[U]={...M[U],message:M[U].message+j.message}),M}):j.type===\"end\"&&(j.sources&&n(re=>{const M=[...re],U=M.length-1;return U>=0&&(M[U]={...M[U],sources:j.sources}),M}),console.log(\"Messages:\",e()),a(!1),i(\"\"))}}const ce=new URL(`${Hn}/chat`);return B(ce),(()=>{var y=le(Bi),_=y.firstChild,I=_.firstChild,C=I.firstChild,j=I.nextSibling,re=_.nextSibling,M=re.firstChild,[U,W]=Ye(M.nextSibling),me=U.nextSibling,ke=me.nextSibling,Se=ke.firstChild,xe=Se.firstChild,rt=xe.nextSibling,Fe=p;return typeof Fe==\"function\"?Pn(Fe,_):p=_,V(j,ht(kt,{get each(){return e()},children:(R,ee)=>(()=>{var E=le(Wi),Re=E.firstChild,S=Re.firstChild,He=S.nextSibling,[A,ue]=Ye(He.nextSibling);return V(Re,(()=>{var q=gt(()=>R.sources.length>0);return()=>q()&&ht(kt,{get each(){return R.sources},children:(X,te)=>[(()=>{var Q=le(Gi);return Q.$$click=()=>document.getElementById(`source_modal_${ee()}_${te()}`)?.showModal(),V(Q,()=>X.metadata.filename),mt(),Q})(),(()=>{var Q=le(qi),Be=Q.firstChild,Z=Be.firstChild,ne=Z.firstChild,Le=ne.nextSibling,[be,oe]=Ye(Le.nextSibling),Te=be.nextSibling,_e=Te.nextSibling,[$e,We]=Ye(_e.nextSibling);$e.nextSibling;var ot=Z.nextSibling;return V(Z,()=>X.metadata.filename,be,oe),V(Z,()=>X.metadata.page,$e,We),V(ot,()=>X.page_content),dt(()=>Kt(Q,\"id\",`source_modal_${ee()}_${te()}`)),Q})()]})})(),A,ue),dt(q=>{var X=`border-b border-slate-500 ${R.type===\"user\"?\"bg-accent\":\"bg-secondary\"}`,te=hn.sanitize(b.parse(R.message).toString());return X!==q.e&&Un(E,q.e=X),te!==q.t&&Jt(S,\"innerHTML\",q.t=te),q},{e:void 0,t:void 0}),E})()})),V(re,(()=>{var R=gt(()=>r().length>0);return()=>R()&&le(Zi)})(),U,W),V(me,ht(kt,{get each(){return c().info.examples},children:R=>(()=>{var ee=le(Yi);return ee.$$click=()=>{s(R),$()},V(ee,R),mt(),ee})()})),ke.addEventListener(\"submit\",R=>d(R)),xe.$$keydown=R=>O(R),xe.$$input=R=>x(R),Kt(xe,\"contenteditable\",!0),V(rt,(()=>{var R=gt(()=>!!l());return()=>R()?le(ji):le(Xi)})()),dt(()=>Jt(C,\"innerHTML\",hn.sanitize(b.parse(c().info.description).toString()))),mt(),y})()}zn([\"input\",\"keydown\",\"click\"]);export{Ki as default};\n"
  },
  {
    "path": "src/libre_chat/webapp/_astro/client.XqyIkt4q.js",
    "content": "import{p as F,q as I,b as d,S as L}from\"./web.zg9RI5L8.js\";var R=t=>(u,l,s,{client:a})=>{if(!t.hasAttribute(\"ssr\"))return;const i=a!==\"only\",c=i?F:I;let o,r={};if(Object.keys(s).length>0){if(a!==\"only\"){const e=document.createTreeWalker(t,NodeFilter.SHOW_ELEMENT,n=>n===t?NodeFilter.FILTER_SKIP:n.nodeName===\"ASTRO-SLOT\"?NodeFilter.FILTER_ACCEPT:n.nodeName===\"ASTRO-ISLAND\"?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_SKIP);for(;o=e.nextNode();)r[o.getAttribute(\"name\")||\"default\"]=o}for(const[e,n]of Object.entries(s))r[e]||(r[e]=document.createElement(\"astro-slot\"),e!==\"default\"&&r[e].setAttribute(\"name\",e),r[e].innerHTML=n)}const{default:f,...E}=r,T=t.dataset.solidRenderId,N=c(()=>{const e=()=>d(u,{...l,...E,children:f});return i?d(L,{get children(){return e()}}):e()},t,{renderId:T});t.addEventListener(\"astro:unmount\",()=>N(),{once:!0})};export{R as default};\n"
  },
  {
    "path": "src/libre_chat/webapp/_astro/nanostores.RVhpkXze.js",
    "content": "import{$ as y,l as K,m as L,n as M,c as W,o as z}from\"./web.zg9RI5L8.js\";const C=Symbol(\"store-raw\"),j=Symbol(\"store-node\"),O=Symbol(\"store-has\"),N=Symbol(\"store-self\");function T(n){let e=n[y];if(!e&&(Object.defineProperty(n,y,{value:e=new Proxy(n,V)}),!Array.isArray(n))){const f=Object.keys(n),o=Object.getOwnPropertyDescriptors(n);for(let i=0,l=f.length;i<l;i++){const t=f[i];o[t].get&&Object.defineProperty(n,t,{enumerable:o[t].enumerable,get:o[t].get.bind(e)})}}return e}function w(n){let e;return n!=null&&typeof n==\"object\"&&(n[y]||!(e=Object.getPrototypeOf(n))||e===Object.prototype||Array.isArray(n))}function S(n,e=new Set){let f,o,i,l;if(f=n!=null&&n[C])return f;if(!w(n)||e.has(n))return n;if(Array.isArray(n)){Object.isFrozen(n)?n=n.slice(0):e.add(n);for(let t=0,d=n.length;t<d;t++)i=n[t],(o=S(i,e))!==i&&(n[t]=o)}else{Object.isFrozen(n)?n=Object.assign({},n):e.add(n);const t=Object.keys(n),d=Object.getOwnPropertyDescriptors(n);for(let c=0,r=t.length;c<r;c++)l=t[c],!d[l].get&&(i=n[l],(o=S(i,e))!==i&&(n[l]=o))}return n}function E(n,e){let f=n[e];return f||Object.defineProperty(n,e,{value:f=Object.create(null)}),f}function v(n,e,f){if(n[e])return n[e];const[o,i]=W(f,{equals:!1,internal:!0});return o.$=i,n[e]=o}function B(n,e){const f=Reflect.getOwnPropertyDescriptor(n,e);return!f||f.get||!f.configurable||e===y||e===j||(delete f.value,delete f.writable,f.get=()=>n[y][e]),f}function F(n){L()&&v(E(n,j),N)()}function Q(n){return F(n),Reflect.ownKeys(n)}const V={get(n,e,f){if(e===C)return n;if(e===y)return f;if(e===K)return F(n),f;const o=E(n,j),i=o[e];let l=i?i():n[e];if(e===j||e===O||e===\"__proto__\")return l;if(!i){const t=Object.getOwnPropertyDescriptor(n,e);L()&&(typeof l!=\"function\"||n.hasOwnProperty(e))&&!(t&&t.get)&&(l=v(o,e,l)())}return w(l)?T(l):l},has(n,e){return e===C||e===y||e===K||e===j||e===O||e===\"__proto__\"?!0:(L()&&v(E(n,O),e)(),e in n)},set(){return!0},deleteProperty(){return!0},ownKeys:Q,getOwnPropertyDescriptor:B};function b(n,e,f,o=!1){if(!o&&n[e]===f)return;const i=n[e],l=n.length;f===void 0?(delete n[e],n[O]&&n[O][e]&&i!==void 0&&n[O][e].$()):(n[e]=f,n[O]&&n[O][e]&&i===void 0&&n[O][e].$());let t=E(n,j),d;if((d=v(t,e,i))&&d.$(()=>f),Array.isArray(n)&&n.length!==l){for(let c=n.length;c<l;c++)(d=t[c])&&d.$();(d=v(t,\"length\",l))&&d.$(n.length)}(d=t[N])&&d.$()}function U(n,e){const f=Object.keys(e);for(let o=0;o<f.length;o+=1){const i=f[o];b(n,i,e[i])}}function X(n,e){if(typeof e==\"function\"&&(e=e(n)),e=S(e),Array.isArray(e)){if(n===e)return;let f=0,o=e.length;for(;f<o;f++){const i=e[f];n[f]!==i&&b(n,f,i)}b(n,\"length\",o)}else U(n,e)}function R(n,e,f=[]){let o,i=n;if(e.length>1){o=e.shift();const t=typeof o,d=Array.isArray(n);if(Array.isArray(o)){for(let c=0;c<o.length;c++)R(n,[o[c]].concat(e),f);return}else if(d&&t===\"function\"){for(let c=0;c<n.length;c++)o(n[c],c)&&R(n,[c].concat(e),f);return}else if(d&&t===\"object\"){const{from:c=0,to:r=n.length-1,by:s=1}=o;for(let u=c;u<=r;u+=s)R(n,[u].concat(e),f);return}else if(e.length>1){R(n[o],e,[o].concat(f));return}i=n[o],f=[o].concat(f)}let l=e[0];typeof l==\"function\"&&(l=l(i,f),l===i)||o===void 0&&l==null||(l=S(l),o===void 0||w(i)&&w(l)&&!Array.isArray(l)?U(i,l):b(n,o,l))}function q(...[n,e]){const f=S(n||{}),o=Array.isArray(f),i=T(f);function l(...t){M(()=>{o&&t.length===1?X(f,t[0]):R(f,t)})}return[i,l]}const I=Symbol(\"store-root\");function P(n,e,f,o,i){const l=e[f];if(n===l)return;const t=Array.isArray(n);if(f!==I&&(!w(n)||!w(l)||t!==Array.isArray(l)||i&&n[i]!==l[i])){b(e,f,n);return}if(t){if(n.length&&l.length&&(!o||i&&n[0]&&n[0][i]!=null)){let r,s,u,a,A,g,p,$;for(u=0,a=Math.min(l.length,n.length);u<a&&(l[u]===n[u]||i&&l[u]&&n[u]&&l[u][i]===n[u][i]);u++)P(n[u],l,u,o,i);const _=new Array(n.length),D=new Map;for(a=l.length-1,A=n.length-1;a>=u&&A>=u&&(l[a]===n[A]||i&&l[u]&&n[u]&&l[a][i]===n[A][i]);a--,A--)_[A]=l[a];if(u>A||u>a){for(s=u;s<=A;s++)b(l,s,n[s]);for(;s<n.length;s++)b(l,s,_[s]),P(n[s],l,s,o,i);l.length>n.length&&b(l,\"length\",n.length);return}for(p=new Array(A+1),s=A;s>=u;s--)g=n[s],$=i&&g?g[i]:g,r=D.get($),p[s]=r===void 0?-1:r,D.set($,s);for(r=u;r<=a;r++)g=l[r],$=i&&g?g[i]:g,s=D.get($),s!==void 0&&s!==-1&&(_[s]=l[r],s=p[s],D.set($,s));for(s=u;s<n.length;s++)s in _?(b(l,s,_[s]),P(n[s],l,s,o,i)):b(l,s,n[s])}else for(let r=0,s=n.length;r<s;r++)P(n[r],l,r,o,i);l.length>n.length&&b(l,\"length\",n.length);return}const d=Object.keys(n);for(let r=0,s=d.length;r<s;r++)P(n[d[r]],l,d[r],o,i);const c=Object.keys(l);for(let r=0,s=c.length;r<s;r++)n[c[r]]===void 0&&b(l,c[r],void 0)}function H(n,e={}){const{merge:f,key:o=\"id\"}=e,i=S(n);return l=>{if(!w(l)||!w(i))return i;const t=P(i,{[I]:l},I,f,o);return t===void 0?l:t}}function x(n){let e=n.get(),[f,o]=Y(e),i=n.subscribe(o);return z(()=>i()),f}function Y(n){let[e,f]=q({value:n});return[()=>e.value,o=>{let i=S(e.value);return typeof o==\"function\"&&(o=o(i)),f(\"value\",H(o)),e.value}]}let h=[],G=(n,e)=>{let f=[],o={get(){return o.lc||o.listen(()=>{})(),o.value},l:e||0,lc:0,listen(i,l){return o.lc=f.push(i,l||o.l)/2,()=>{let t=f.indexOf(i);~t&&(f.splice(t,2),--o.lc)}},notify(i){let l=!h.length;for(let t=0;t<f.length;t+=2)h.push(f[t],f[t+1],o.value,i);if(l){for(let t=0;t<h.length;t+=4){let d;for(let c=t+1;!d&&(c+=4)<h.length;)h[c]<h[t+1]&&(d=h.push(h[t],h[t+1],h[t+2],h[t+3]));d||h[t](h[t+2],h[t+3])}h.length=0}},off(){},set(i){o.value!==i&&(o.value=i,o.notify())},subscribe(i,l){let t=o.listen(i,l);return i(o.value),t},value:n};return o};const J=G({info:{title:\"Libre Chat\",description:\"Open source chatbot\",repository_url:\"https://github.com/vemonet/libre-chat\",favicon:\"https://raw.github.com/vemonet/libre-chat/main/docs/docs/assets/logo.png\",examples:[\"What is the capital of the Netherlands?\"]},llm:{},vector:{}});function m(n){J.set(n)}const k={BASE_URL:\"/\",MODE:\"production\",DEV:!1,PROD:!0,SSR:!1,SITE:void 0,ASSETS_PREFIX:void 0}.PUBLIC_API_URL||window.origin;export{J as $,k as a,x as p,m as s};\n"
  },
  {
    "path": "src/libre_chat/webapp/_astro/web.zg9RI5L8.js",
    "content": "const u={context:void 0,registry:void 0};function N(e){u.context=e}function de(){return{...u.context,id:`${u.context.id}${u.context.count++}-`,count:0}}const he=(e,t)=>e===t,je=Symbol(\"solid-proxy\"),pe=Symbol(\"solid-track\"),j={equals:he};let z=re;const T=1,I=2,ee={owned:null,cleanups:null,context:null,owner:null};var d=null;let R=null,ge=null,h=null,b=null,m=null,Y=0;function F(e,t){const n=h,s=d,i=e.length===0,r=t===void 0?s:t,f=i?ee:{owned:null,cleanups:null,context:r?r.context:null,owner:r},l=i?e:()=>e(()=>$(()=>q(f)));d=f,h=null;try{return P(l,!0)}finally{h=n,d=s}}function V(e,t){t=t?Object.assign({},j,t):j;const n={value:e,observers:null,observerSlots:null,comparator:t.equals||void 0},s=i=>(typeof i==\"function\"&&(i=i(n.value)),le(n,i));return[ie.bind(n),s]}function M(e,t,n){const s=W(e,t,!1,T);B(s)}function Ie(e,t,n){z=me;const s=W(e,t,!1,T),i=O&&se(O);i&&(s.suspense=i),(!n||!n.render)&&(s.user=!0),m?m.push(s):B(s)}function L(e,t,n){n=n?Object.assign({},j,n):j;const s=W(e,t,!0,0);return s.observers=null,s.observerSlots=null,s.comparator=n.equals||void 0,B(s),ie.bind(s)}function Me(e){return P(e,!1)}function $(e){if(h===null)return e();const t=h;h=null;try{return e()}finally{h=t}}function te(e){return d===null||(d.cleanups===null?d.cleanups=[e]:d.cleanups.push(e)),e}function Oe(){return h}function ye(){return d}function be(e){m.push.apply(m,e),e.length=0}function ne(e,t){const n=Symbol(\"context\");return{id:n,Provider:ve(n),defaultValue:e}}function se(e){return d&&d.context&&d.context[e.id]!==void 0?d.context[e.id]:e.defaultValue}function xe(e){const t=L(e),n=L(()=>K(t()));return n.toArray=()=>{const s=n();return Array.isArray(s)?s:s!=null?[s]:[]},n}let O;function we(){return O||(O=ne())}function ie(){if(this.sources&&this.state)if(this.state===T)B(this);else{const e=b;b=null,P(()=>U(this),!1),b=e}if(h){const e=this.observers?this.observers.length:0;h.sources?(h.sources.push(this),h.sourceSlots.push(e)):(h.sources=[this],h.sourceSlots=[e]),this.observers?(this.observers.push(h),this.observerSlots.push(h.sources.length-1)):(this.observers=[h],this.observerSlots=[h.sources.length-1])}return this.value}function le(e,t,n){let s=e.value;return(!e.comparator||!e.comparator(s,t))&&(e.value=t,e.observers&&e.observers.length&&P(()=>{for(let i=0;i<e.observers.length;i+=1){const r=e.observers[i],f=R&&R.running;f&&R.disposed.has(r),(f?!r.tState:!r.state)&&(r.pure?b.push(r):m.push(r),r.observers&&oe(r)),f||(r.state=T)}if(b.length>1e6)throw b=[],new Error},!1)),t}function B(e){if(!e.fn)return;q(e);const t=Y;Ae(e,e.value,t)}function Ae(e,t,n){let s;const i=d,r=h;h=d=e;try{s=e.fn(t)}catch(f){return e.pure&&(e.state=T,e.owned&&e.owned.forEach(q),e.owned=null),e.updatedAt=n+1,fe(f)}finally{h=r,d=i}(!e.updatedAt||e.updatedAt<=n)&&(e.updatedAt!=null&&\"observers\"in e?le(e,s):e.value=s,e.updatedAt=n)}function W(e,t,n,s=T,i){const r={fn:e,state:s,updatedAt:null,owned:null,sources:null,sourceSlots:null,cleanups:null,value:t,owner:d,context:d?d.context:null,pure:n};return d===null||d!==ee&&(d.owned?d.owned.push(r):d.owned=[r]),r}function _(e){if(e.state===0)return;if(e.state===I)return U(e);if(e.suspense&&$(e.suspense.inFallback))return e.suspense.effects.push(e);const t=[e];for(;(e=e.owner)&&(!e.updatedAt||e.updatedAt<Y);)e.state&&t.push(e);for(let n=t.length-1;n>=0;n--)if(e=t[n],e.state===T)B(e);else if(e.state===I){const s=b;b=null,P(()=>U(e,t[0]),!1),b=s}}function P(e,t){if(b)return e();let n=!1;t||(b=[]),m?n=!0:m=[],Y++;try{const s=e();return Se(n),s}catch(s){n||(m=null),b=null,fe(s)}}function Se(e){if(b&&(re(b),b=null),e)return;const t=m;m=null,t.length&&P(()=>z(t),!1)}function re(e){for(let t=0;t<e.length;t++)_(e[t])}function me(e){let t,n=0;for(t=0;t<e.length;t++){const s=e[t];s.user?e[n++]=s:_(s)}if(u.context){if(u.count){u.effects||(u.effects=[]),u.effects.push(...e.slice(0,n));return}else u.effects&&(e=[...u.effects,...e],n+=u.effects.length,delete u.effects);N()}for(t=0;t<n;t++)_(e[t])}function U(e,t){e.state=0;for(let n=0;n<e.sources.length;n+=1){const s=e.sources[n];if(s.sources){const i=s.state;i===T?s!==t&&(!s.updatedAt||s.updatedAt<Y)&&_(s):i===I&&U(s,t)}}}function oe(e){for(let t=0;t<e.observers.length;t+=1){const n=e.observers[t];n.state||(n.state=I,n.pure?b.push(n):m.push(n),n.observers&&oe(n))}}function q(e){let t;if(e.sources)for(;e.sources.length;){const n=e.sources.pop(),s=e.sourceSlots.pop(),i=n.observers;if(i&&i.length){const r=i.pop(),f=n.observerSlots.pop();s<i.length&&(r.sourceSlots[f]=s,i[s]=r,n.observerSlots[s]=f)}}if(e.owned){for(t=e.owned.length-1;t>=0;t--)q(e.owned[t]);e.owned=null}if(e.cleanups){for(t=e.cleanups.length-1;t>=0;t--)e.cleanups[t]();e.cleanups=null}e.state=0}function Ce(e){return e instanceof Error?e:new Error(typeof e==\"string\"?e:\"Unknown error\",{cause:e})}function fe(e,t=d){throw Ce(e)}function K(e){if(typeof e==\"function\"&&!e.length)return K(e());if(Array.isArray(e)){const t=[];for(let n=0;n<e.length;n++){const s=K(e[n]);Array.isArray(s)?t.push.apply(t,s):t.push(s)}return t}return e}function ve(e,t){return function(s){let i;return M(()=>i=$(()=>(d.context={...d.context,[e]:s.value},xe(()=>s.children))),void 0),i}}const Ee=Symbol(\"fallback\");function X(e){for(let t=0;t<e.length;t++)e[t]()}function $e(e,t,n={}){let s=[],i=[],r=[],f=0,l=t.length>1?[]:null;return te(()=>X(r)),()=>{let a=e()||[],c,o;return a[pe],$(()=>{let p=a.length,g,w,A,E,C,y,S,v,k;if(p===0)f!==0&&(X(r),r=[],s=[],i=[],f=0,l&&(l=[])),n.fallback&&(s=[Ee],i[0]=F(ae=>(r[0]=ae,n.fallback())),f=1);else if(f===0){for(i=new Array(p),o=0;o<p;o++)s[o]=a[o],i[o]=F(x);f=p}else{for(A=new Array(p),E=new Array(p),l&&(C=new Array(p)),y=0,S=Math.min(f,p);y<S&&s[y]===a[y];y++);for(S=f-1,v=p-1;S>=y&&v>=y&&s[S]===a[v];S--,v--)A[v]=i[S],E[v]=r[S],l&&(C[v]=l[S]);for(g=new Map,w=new Array(v+1),o=v;o>=y;o--)k=a[o],c=g.get(k),w[o]=c===void 0?-1:c,g.set(k,o);for(c=y;c<=S;c++)k=s[c],o=g.get(k),o!==void 0&&o!==-1?(A[o]=i[c],E[o]=r[c],l&&(C[o]=l[c]),o=w[o],g.set(k,o)):r[c]();for(o=y;o<p;o++)o in A?(i[o]=A[o],r[o]=E[o],l&&(l[o]=C[o],l[o](o))):i[o]=F(x);i=i.slice(0,f=p),s=a.slice(0)}return i});function x(p){if(r[o]=p,l){const[g,w]=V(o);return l[o]=w,t(a[o],g)}return t(a[o])}}}let ue=!1;function Te(){ue=!0}function Ne(e,t){if(ue&&u.context){const n=u.context;N(de());const s=$(()=>e(t||{}));return N(n),s}return $(()=>e(t||{}))}function _e(e){const t=\"fallback\"in e&&{fallback:()=>e.fallback};return L($e(()=>e.each,e.children,t||void 0))}const ke=ne();function Ue(e){let t=0,n,s,i,r,f;const[l,a]=V(!1),c=we(),o={increment:()=>{++t===1&&a(!0)},decrement:()=>{--t===0&&a(!1)},inFallback:l,effects:[],resolved:!1},x=ye();if(u.context&&u.load){const w=u.context.id+u.context.count;let A=u.load(w);if(A&&(typeof A!=\"object\"||A.status!==\"success\")&&(i=A),i&&i!==\"$$f\"){const[E,C]=V(void 0,{equals:!1});r=E,i.then(()=>{u.gather(w),N(s),C(),N()}).catch(y=>{if(y||u.done)return y&&(f=y),C()})}}const p=se(ke);p&&(n=p.register(o.inFallback));let g;return te(()=>g&&g()),Ne(c.Provider,{value:o,get children(){return L(()=>{if(f)throw f;if(s=u.context,r)return r(),r=void 0;s&&i===\"$$f\"&&N();const w=L(()=>e.children);return L(A=>{const E=o.inFallback(),{showContent:C=!0,showFallback:y=!0}=n?n():{};if((!E||i&&i!==\"$$f\")&&C)return o.resolved=!0,g&&g(),g=s=i=void 0,be(o.effects),w();if(y)return g?A:F(S=>(g=S,s&&(N({id:s.id+\"f\",count:0}),s=void 0),e.fallback),x)})})}})}function He(e,t,n){let s=n.length,i=t.length,r=s,f=0,l=0,a=t[i-1].nextSibling,c=null;for(;f<i||l<r;){if(t[f]===n[l]){f++,l++;continue}for(;t[i-1]===n[r-1];)i--,r--;if(i===f){const o=r<s?l?n[l-1].nextSibling:n[r-l]:a;for(;l<r;)e.insertBefore(n[l++],o)}else if(r===l)for(;f<i;)(!c||!c.has(t[f]))&&t[f].remove(),f++;else if(t[f]===n[r-1]&&n[l]===t[i-1]){const o=t[--i].nextSibling;e.insertBefore(n[l++],t[f++].nextSibling),e.insertBefore(n[--r],o),t[i]=n[r]}else{if(!c){c=new Map;let x=l;for(;x<r;)c.set(n[x],x++)}const o=c.get(t[f]);if(o!=null)if(l<o&&o<r){let x=f,p=1,g;for(;++x<i&&x<r&&!((g=c.get(t[x]))==null||g!==o+p);)p++;if(p>o-l){const w=t[f];for(;l<o;)e.insertBefore(n[l++],w)}else e.replaceChild(n[l++],t[f++])}else f++;else t[f++].remove()}}}const Q=\"_$DX_DELEGATE\";function Le(e,t,n,s={}){let i;return F(r=>{i=r,t===document?e():Pe(t,e(),t.firstChild?null:void 0,n)},s.owner),()=>{i(),t.textContent=\"\"}}function De(e,t,n){let s;const i=()=>{const f=document.createElement(\"template\");return f.innerHTML=e,n?f.content.firstChild.firstChild:f.content.firstChild},r=t?()=>$(()=>document.importNode(s||(s=i()),!0)):()=>(s||(s=i())).cloneNode(!0);return r.cloneNode=r,r}function Ye(e,t=window.document){const n=t[Q]||(t[Q]=new Set);for(let s=0,i=e.length;s<i;s++){const r=e[s];n.has(r)||(n.add(r),t.addEventListener(r,ce))}}function qe(e,t,n){!u.context&&(e[t]=n)}function Re(e,t,n){u.context||(n==null?e.removeAttribute(t):e.setAttribute(t,n))}function Ve(e,t){u.context||(t==null?e.removeAttribute(\"class\"):e.className=t)}function Ke(e,t,n){return $(()=>e(t,n))}function Pe(e,t,n,s){if(n!==void 0&&!s&&(s=[]),typeof t!=\"function\")return D(e,t,s,n);M(i=>D(e,t(),i,n),s)}function Fe(e,t,n={}){u.completed=globalThis._$HY.completed,u.events=globalThis._$HY.events,u.load=i=>globalThis._$HY.r[i],u.has=i=>i in globalThis._$HY.r,u.gather=i=>Z(t,i),u.registry=new Map,u.context={id:n.renderId||\"\",count:0},Z(t,n.renderId);const s=Le(e,t,[...t.childNodes],n);return u.context=null,s}function Ge(e){let t,n;return!u.context||!(t=u.registry.get(n=Be()))?e():(u.completed&&u.completed.add(t),u.registry.delete(n),t)}function We(e){let t=e,n=0,s=[];if(u.context)for(;t;){if(t.nodeType===8){const i=t.nodeValue;if(i===\"$\")n++;else if(i===\"/\"){if(n===0)return[t,s];n--}}s.push(t),t=t.nextSibling}return[t,s]}function Xe(){u.events&&!u.events.queued&&(queueMicrotask(()=>{const{completed:e,events:t}=u;for(t.queued=!1;t.length;){const[n,s]=t[0];if(!e.has(n))return;ce(s),t.shift()}}),u.events.queued=!0)}function ce(e){const t=`$$${e.type}`;let n=e.composedPath&&e.composedPath()[0]||e.target;for(e.target!==n&&Object.defineProperty(e,\"target\",{configurable:!0,value:n}),Object.defineProperty(e,\"currentTarget\",{configurable:!0,get(){return n||document}}),u.registry&&!u.done&&(u.done=_$HY.done=!0);n;){const s=n[t];if(s&&!n.disabled){const i=n[`${t}Data`];if(i!==void 0?s.call(n,i,e):s.call(n,e),e.cancelBubble)return}n=n._$host||n.parentNode||n.host}}function D(e,t,n,s,i){if(u.context){!n&&(n=[...e.childNodes]);let l=[];for(let a=0;a<n.length;a++){const c=n[a];c.nodeType===8&&c.data.slice(0,2)===\"!$\"?c.remove():l.push(c)}n=l}for(;typeof n==\"function\";)n=n();if(t===n)return n;const r=typeof t,f=s!==void 0;if(e=f&&n[0]&&n[0].parentNode||e,r===\"string\"||r===\"number\"){if(u.context)return n;if(r===\"number\"&&(t=t.toString()),f){let l=n[0];l&&l.nodeType===3?l.data=t:l=document.createTextNode(t),n=H(e,n,s,l)}else n!==\"\"&&typeof n==\"string\"?n=e.firstChild.data=t:n=e.textContent=t}else if(t==null||r===\"boolean\"){if(u.context)return n;n=H(e,n,s)}else{if(r===\"function\")return M(()=>{let l=t();for(;typeof l==\"function\";)l=l();n=D(e,l,n,s)}),()=>n;if(Array.isArray(t)){const l=[],a=n&&Array.isArray(n);if(G(l,t,n,i))return M(()=>n=D(e,l,n,s,!0)),()=>n;if(u.context){if(!l.length)return n;if(s===void 0)return[...e.childNodes];let c=l[0],o=[c];for(;(c=c.nextSibling)!==s;)o.push(c);return n=o}if(l.length===0){if(n=H(e,n,s),f)return n}else a?n.length===0?J(e,l,s):He(e,n,l):(n&&H(e),J(e,l));n=l}else if(t.nodeType){if(u.context&&t.parentNode)return n=f?[t]:t;if(Array.isArray(n)){if(f)return n=H(e,n,s,t);H(e,n,null,t)}else n==null||n===\"\"||!e.firstChild?e.appendChild(t):e.replaceChild(t,e.firstChild);n=t}}return n}function G(e,t,n,s){let i=!1;for(let r=0,f=t.length;r<f;r++){let l=t[r],a=n&&n[r],c;if(!(l==null||l===!0||l===!1))if((c=typeof l)==\"object\"&&l.nodeType)e.push(l);else if(Array.isArray(l))i=G(e,l,a)||i;else if(c===\"function\")if(s){for(;typeof l==\"function\";)l=l();i=G(e,Array.isArray(l)?l:[l],Array.isArray(a)?a:[a])||i}else e.push(l),i=!0;else{const o=String(l);a&&a.nodeType===3&&a.data===o?e.push(a):e.push(document.createTextNode(o))}}return i}function J(e,t,n=null){for(let s=0,i=t.length;s<i;s++)e.insertBefore(t[s],n)}function H(e,t,n,s){if(n===void 0)return e.textContent=\"\";const i=s||document.createTextNode(\"\");if(t.length){let r=!1;for(let f=t.length-1;f>=0;f--){const l=t[f];if(i!==l){const a=l.parentNode===e;!r&&!f?a?e.replaceChild(i,l):e.insertBefore(i,n):a&&l.remove()}else r=!0}}else e.insertBefore(i,n);return[i]}function Z(e,t){const n=e.querySelectorAll(\"*[data-hk]\");for(let s=0;s<n.length;s++){const i=n[s],r=i.getAttribute(\"data-hk\");(!t||r.startsWith(t))&&!u.registry.has(r)&&u.registry.set(r,i)}}function Be(){const e=u.context;return`${e.id}${e.count++}`}const Qe=(...e)=>(Te(),Fe(...e));export{je as $,_e as F,Ue as S,We as a,Ne as b,V as c,Ye as d,L as e,M as f,Ge as g,qe as h,Pe as i,Ve as j,Ie as k,pe as l,Oe as m,Me as n,te as o,Qe as p,Le as q,Xe as r,Re as s,De as t,Ke as u};\n"
  },
  {
    "path": "src/libre_chat/webapp/admin/index.html",
    "content": "<!DOCTYPE html><html lang=\"en\" data-theme=\"dark\"> <head><meta charset=\"UTF-8\"><meta name=\"description\" content=\"Open source chatbot\"><meta name=\"viewport\" content=\"width=device-width\"><link rel=\"icon\" type=\"image/svg+xml\" href=\"/logo.png\"><meta name=\"generator\" content=\"Astro v4.1.1\"><title>Libre Chat</title><link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css\"><link rel=\"stylesheet\" href=\"/_astro/admin.e50kLjN3.css\" /></head> <body class=\"flex flex-col h-screen\"> <style>astro-island,astro-slot,astro-static-slot{display:contents}</style><script>(()=>{var e=async t=>{await(await t())()};(self.Astro||(self.Astro={})).only=e;window.dispatchEvent(new Event(\"astro:only\"));})();;(()=>{var b=Object.defineProperty;var f=(c,o,i)=>o in c?b(c,o,{enumerable:!0,configurable:!0,writable:!0,value:i}):c[o]=i;var l=(c,o,i)=>(f(c,typeof o!=\"symbol\"?o+\"\":o,i),i);var p;{let c={0:t=>m(t),1:t=>i(t),2:t=>new RegExp(t),3:t=>new Date(t),4:t=>new Map(i(t)),5:t=>new Set(i(t)),6:t=>BigInt(t),7:t=>new URL(t),8:t=>new Uint8Array(t),9:t=>new Uint16Array(t),10:t=>new Uint32Array(t)},o=t=>{let[e,r]=t;return e in c?c[e](r):void 0},i=t=>t.map(o),m=t=>typeof t!=\"object\"||t===null?t:Object.fromEntries(Object.entries(t).map(([e,r])=>[e,o(r)]));customElements.get(\"astro-island\")||customElements.define(\"astro-island\",(p=class extends HTMLElement{constructor(){super(...arguments);l(this,\"Component\");l(this,\"hydrator\");l(this,\"hydrate\",async()=>{var d;if(!this.hydrator||!this.isConnected)return;let e=(d=this.parentElement)==null?void 0:d.closest(\"astro-island[ssr]\");if(e){e.addEventListener(\"astro:hydrate\",this.hydrate,{once:!0});return}let r=this.querySelectorAll(\"astro-slot\"),a={},h=this.querySelectorAll(\"template[data-astro-template]\");for(let n of h){let s=n.closest(this.tagName);s!=null&&s.isSameNode(this)&&(a[n.getAttribute(\"data-astro-template\")||\"default\"]=n.innerHTML,n.remove())}for(let n of r){let s=n.closest(this.tagName);s!=null&&s.isSameNode(this)&&(a[n.getAttribute(\"name\")||\"default\"]=n.innerHTML)}let u;try{u=this.hasAttribute(\"props\")?m(JSON.parse(this.getAttribute(\"props\"))):{}}catch(n){let s=this.getAttribute(\"component-url\")||\"<unknown>\",y=this.getAttribute(\"component-export\");throw y&&(s+=` (export ${y})`),console.error(`[hydrate] Error parsing props for component ${s}`,this.getAttribute(\"props\"),n),n}await this.hydrator(this)(this.Component,u,a,{client:this.getAttribute(\"client\")}),this.removeAttribute(\"ssr\"),this.dispatchEvent(new CustomEvent(\"astro:hydrate\"))});l(this,\"unmount\",()=>{this.isConnected||this.dispatchEvent(new CustomEvent(\"astro:unmount\"))})}disconnectedCallback(){document.removeEventListener(\"astro:after-swap\",this.unmount),document.addEventListener(\"astro:after-swap\",this.unmount,{once:!0})}connectedCallback(){if(!this.hasAttribute(\"await-children\")||document.readyState===\"interactive\"||document.readyState===\"complete\")this.childrenConnectedCallback();else{let e=()=>{document.removeEventListener(\"DOMContentLoaded\",e),r.disconnect(),this.childrenConnectedCallback()},r=new MutationObserver(()=>{var a;((a=this.lastChild)==null?void 0:a.nodeType)===Node.COMMENT_NODE&&this.lastChild.nodeValue===\"astro:end\"&&(this.lastChild.remove(),e())});r.observe(this,{childList:!0}),document.addEventListener(\"DOMContentLoaded\",e)}}async childrenConnectedCallback(){let e=this.getAttribute(\"before-hydration-url\");e&&await import(e),this.start()}start(){let e=JSON.parse(this.getAttribute(\"opts\")),r=this.getAttribute(\"client\");if(Astro[r]===void 0){window.addEventListener(`astro:${r}`,()=>this.start(),{once:!0});return}Astro[r](async()=>{let a=this.getAttribute(\"renderer-url\"),[h,{default:u}]=await Promise.all([import(this.getAttribute(\"component-url\")),a?import(a):()=>()=>{}]),d=this.getAttribute(\"component-export\")||\"default\";if(!d.includes(\".\"))this.Component=h[d];else{this.Component=h;for(let n of d.split(\".\"))this.Component=this.Component[n]}return this.hydrator=u,this.hydrate},e,this)}attributeChangedCallback(){this.hydrate()}},l(p,\"observedAttributes\",[\"props\"]),p))}})();</script><astro-island uid=\"Z296hu9\" component-url=\"/_astro/Nav.FPLT-AC_.js\" component-export=\"default\" renderer-url=\"/_astro/client.XqyIkt4q.js\" props=\"{}\" ssr=\"\" client=\"only\" opts=\"{&quot;name&quot;:&quot;Nav&quot;,&quot;value&quot;:&quot;solid&quot;}\"></astro-island>  <astro-island uid=\"ZbLOwO\" component-url=\"/_astro/admin.uwsUQjhr.js\" component-export=\"default\" renderer-url=\"/_astro/client.XqyIkt4q.js\" props=\"{}\" ssr=\"\" client=\"only\" opts=\"{&quot;name&quot;:&quot;AdminUi&quot;,&quot;value&quot;:&quot;solid&quot;}\"></astro-island>  </body></html>\n"
  },
  {
    "path": "src/libre_chat/webapp/index.html",
    "content": "<!DOCTYPE html><html lang=\"en\" data-theme=\"dark\"> <head><meta charset=\"UTF-8\"><meta name=\"description\" content=\"Open source chatbot\"><meta name=\"viewport\" content=\"width=device-width\"><link rel=\"icon\" type=\"image/svg+xml\" href=\"/logo.png\"><meta name=\"generator\" content=\"Astro v4.1.1\"><title>Libre Chat</title><link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css\"><link rel=\"stylesheet\" href=\"/_astro/admin.e50kLjN3.css\" /></head> <body class=\"flex flex-col h-screen\"> <style>astro-island,astro-slot,astro-static-slot{display:contents}</style><script>(()=>{var e=async t=>{await(await t())()};(self.Astro||(self.Astro={})).only=e;window.dispatchEvent(new Event(\"astro:only\"));})();;(()=>{var b=Object.defineProperty;var f=(c,o,i)=>o in c?b(c,o,{enumerable:!0,configurable:!0,writable:!0,value:i}):c[o]=i;var l=(c,o,i)=>(f(c,typeof o!=\"symbol\"?o+\"\":o,i),i);var p;{let c={0:t=>m(t),1:t=>i(t),2:t=>new RegExp(t),3:t=>new Date(t),4:t=>new Map(i(t)),5:t=>new Set(i(t)),6:t=>BigInt(t),7:t=>new URL(t),8:t=>new Uint8Array(t),9:t=>new Uint16Array(t),10:t=>new Uint32Array(t)},o=t=>{let[e,r]=t;return e in c?c[e](r):void 0},i=t=>t.map(o),m=t=>typeof t!=\"object\"||t===null?t:Object.fromEntries(Object.entries(t).map(([e,r])=>[e,o(r)]));customElements.get(\"astro-island\")||customElements.define(\"astro-island\",(p=class extends HTMLElement{constructor(){super(...arguments);l(this,\"Component\");l(this,\"hydrator\");l(this,\"hydrate\",async()=>{var d;if(!this.hydrator||!this.isConnected)return;let e=(d=this.parentElement)==null?void 0:d.closest(\"astro-island[ssr]\");if(e){e.addEventListener(\"astro:hydrate\",this.hydrate,{once:!0});return}let r=this.querySelectorAll(\"astro-slot\"),a={},h=this.querySelectorAll(\"template[data-astro-template]\");for(let n of h){let s=n.closest(this.tagName);s!=null&&s.isSameNode(this)&&(a[n.getAttribute(\"data-astro-template\")||\"default\"]=n.innerHTML,n.remove())}for(let n of r){let s=n.closest(this.tagName);s!=null&&s.isSameNode(this)&&(a[n.getAttribute(\"name\")||\"default\"]=n.innerHTML)}let u;try{u=this.hasAttribute(\"props\")?m(JSON.parse(this.getAttribute(\"props\"))):{}}catch(n){let s=this.getAttribute(\"component-url\")||\"<unknown>\",y=this.getAttribute(\"component-export\");throw y&&(s+=` (export ${y})`),console.error(`[hydrate] Error parsing props for component ${s}`,this.getAttribute(\"props\"),n),n}await this.hydrator(this)(this.Component,u,a,{client:this.getAttribute(\"client\")}),this.removeAttribute(\"ssr\"),this.dispatchEvent(new CustomEvent(\"astro:hydrate\"))});l(this,\"unmount\",()=>{this.isConnected||this.dispatchEvent(new CustomEvent(\"astro:unmount\"))})}disconnectedCallback(){document.removeEventListener(\"astro:after-swap\",this.unmount),document.addEventListener(\"astro:after-swap\",this.unmount,{once:!0})}connectedCallback(){if(!this.hasAttribute(\"await-children\")||document.readyState===\"interactive\"||document.readyState===\"complete\")this.childrenConnectedCallback();else{let e=()=>{document.removeEventListener(\"DOMContentLoaded\",e),r.disconnect(),this.childrenConnectedCallback()},r=new MutationObserver(()=>{var a;((a=this.lastChild)==null?void 0:a.nodeType)===Node.COMMENT_NODE&&this.lastChild.nodeValue===\"astro:end\"&&(this.lastChild.remove(),e())});r.observe(this,{childList:!0}),document.addEventListener(\"DOMContentLoaded\",e)}}async childrenConnectedCallback(){let e=this.getAttribute(\"before-hydration-url\");e&&await import(e),this.start()}start(){let e=JSON.parse(this.getAttribute(\"opts\")),r=this.getAttribute(\"client\");if(Astro[r]===void 0){window.addEventListener(`astro:${r}`,()=>this.start(),{once:!0});return}Astro[r](async()=>{let a=this.getAttribute(\"renderer-url\"),[h,{default:u}]=await Promise.all([import(this.getAttribute(\"component-url\")),a?import(a):()=>()=>{}]),d=this.getAttribute(\"component-export\")||\"default\";if(!d.includes(\".\"))this.Component=h[d];else{this.Component=h;for(let n of d.split(\".\"))this.Component=this.Component[n]}return this.hydrator=u,this.hydrate},e,this)}attributeChangedCallback(){this.hydrate()}},l(p,\"observedAttributes\",[\"props\"]),p))}})();</script><astro-island uid=\"Z296hu9\" component-url=\"/_astro/Nav.FPLT-AC_.js\" component-export=\"default\" renderer-url=\"/_astro/client.XqyIkt4q.js\" props=\"{}\" ssr=\"\" client=\"only\" opts=\"{&quot;name&quot;:&quot;Nav&quot;,&quot;value&quot;:&quot;solid&quot;}\"></astro-island>  <astro-island uid=\"Z2889GM\" component-url=\"/_astro/chat.mnOtRnw4.js\" component-export=\"default\" renderer-url=\"/_astro/client.XqyIkt4q.js\" props=\"{}\" ssr=\"\" client=\"only\" opts=\"{&quot;name&quot;:&quot;Chat&quot;,&quot;value&quot;:&quot;solid&quot;}\"></astro-island>  </body></html>\n"
  },
  {
    "path": "tests/__init__.py",
    "content": "\"\"\"Tests for :mod:`libre_chat`.\"\"\"\n"
  },
  {
    "path": "tests/config/additional-prop.yml",
    "content": "# Config for a generic conversational agent\nllm:\n  model_path: ./models/mixtral-8x7b-instruct-v0.1.Q2_K.gguf\n  model_download: https://huggingface.co/TheBloke/Mixtral-8x7B-Instruct-v0.1-GGUF/resolve/main/mixtral-8x7b-instruct-v0.1.Q2_K.gguf\n  temperature: 0.01    # Config how creative, but also potentially wrong, the model can be. 0 is safe, 1 is adventurous\n  max_new_tokens: 1024 # Max number of words the LLM can generate\n  # Always use input for the human input variable with a generic agent\n  prompt_variables: [input, history]\n  prompt_template: |\n    Your are an assistant, please help me\n\n    {history}\n    User: {input}\n    AI Assistant:\n\nvector:\n  vector_path: null # Path to the vectorstore to do QA retrieval, e.g. ./vectorstore/db_faiss\n  # Set to null to deploy a generic conversational agent\n  vector_download: null\n  embeddings_path: ./embeddings/all-MiniLM-L6-v2 # Path to embeddings used to generate the vectors, or use directly from HuggingFace: sentence-transformers/all-MiniLM-L6-v2\n  embeddings_download: https://public.ukp.informatik.tu-darmstadt.de/reimers/sentence-transformers/v0.2/all-MiniLM-L6-v2.zip\n  documents_path: ./documents # Path to documents to vectorize\n  chunk_size: 500             # Maximum size of chunks, in terms of number of characters\n  chunk_overlap: 50           # Overlap in characters between chunks\n  chain_type: stuff           # Or: map_reduce, reduce, map_rerank. More details: https://docs.langchain.com/docs/components/chains/index_related_chains\n  search_type: similarity     # Or: similarity_score_threshold, mmr. More details: https://python.langchain.com/docs/modules/data_connection/retrievers/vectorstore\n  return_sources_count: 2     # Number of sources to return when generating an answer\n  score_threshold: null       # If using the similarity_score_threshold search type. Between 0 and 1\n  additional_prop: added\n\ninfo:\n  title: \"Libre Chat\"\n  version: \"0.1.0\"\n  description: |\n    Open source and free chatbot powered by [LangChain](https://python.langchain.com) and [llama.cpp](https://github.com/ggerganov/llama.cpp)\n  examples:\n  - What is the capital of the Netherlands?\n  - Which drugs are approved by the FDA to mitigate Alzheimer symptoms?\n  - How can I create a logger with timestamp using python logging?\n  favicon: https://raw.github.com/vemonet/libre-chat/main/docs/docs/assets/logo.png\n  repository_url: https://github.com/vemonet/libre-chat\n  public_url: https://chat.semanticscience.org\n  contact:\n    name: Vincent Emonet\n    email: vincent.emonet@gmail.com\n  license_info:\n    name: MIT license\n    url: https://raw.github.com/vemonet/libre-chat/main/LICENSE.txt\n  workers: 4\n"
  },
  {
    "path": "tests/test_api.py",
    "content": "\"\"\"Test a generic conversational chatbot without vectorstore\"\"\"\nimport json\n\nfrom fastapi.testclient import TestClient\n\nfrom libre_chat.conf import parse_conf\nfrom libre_chat.endpoint import ChatEndpoint\nfrom libre_chat.llm import Llm\n\nprompt = {\"prompt\": \"What is the capital of the Netherlands?\"}\nconf = parse_conf(\"tests/config/additional-prop.yml\")\nconf.auth.admin_pass = \"testpass\"\nllm = Llm(conf=conf)\napp = ChatEndpoint(llm=llm, conf=conf, examples=[prompt[\"prompt\"]])\nclient = TestClient(app)\n\n\ndef test_post_prompt_conversation() -> None:\n    \"\"\"Test POST prompt using model with a generic LLM\"\"\"\n    response = client.post(\n        \"/prompt\",\n        data=json.dumps(prompt),\n        headers={\"Content-Type\": \"application/json\"},\n    )\n    resp = response.json()\n    assert response.status_code == 200\n    assert \"amsterdam\" in resp[\"result\"].lower()\n\n\ndef test_get_prompt_conversation() -> None:\n    \"\"\"Test GET prompt using model with a generic LLM\"\"\"\n    response = client.get(\"/prompt\", params={\"prompt\": prompt})\n    resp = response.json()\n    assert response.status_code == 200\n    assert \"amsterdam\" in resp[\"result\"].lower()\n\n\ndef test_websocket_prompt_conversation() -> None:\n    with client.websocket_connect(\"/chat\") as websocket:\n        websocket.send_json(prompt)\n        while True:\n            resp = websocket.receive_json()\n            if resp[\"type\"] == \"end\":\n                assert resp[\"sender\"] == \"bot\"\n                assert \"amsterdam\" in resp[\"message\"].lower()\n                break\n            else:\n                pass  # wait for the end\n\n\ndef test_get_gradio_ui() -> None:\n    \"\"\"Test get gradio UI\"\"\"\n    response = client.get(\"/\")\n    assert response.status_code == 200\n\n\n# def test_get_alternative_ui() -> None:\n#     \"\"\"Test get alternative UI\"\"\"\n#     response = client.get(\"/ui\")\n#     assert response.status_code == 200\n"
  },
  {
    "path": "tests/test_api_qa.py",
    "content": "\"\"\"Test a question-answering chatbot with a vectorstore\"\"\"\nimport os\n\nfrom fastapi.testclient import TestClient\n\nfrom libre_chat.conf import parse_conf\nfrom libre_chat.endpoint import ChatEndpoint\nfrom libre_chat.llm import Llm\n\nprompt = {\"prompt\": \"What is the capital of the Netherlands?\"}\nconf = parse_conf(\"config/chat-vectorstore-qa.yml\")\nconf.auth.admin_pass = \"adminpass\"\nllm = Llm(conf=conf)\napp = ChatEndpoint(llm=llm, conf=conf)\nclient = TestClient(app)\n\n\ndef test_websocket_prompt_vectorstore_qa() -> None:\n    with client.websocket_connect(\"/chat\") as websocket:\n        websocket.send_json(prompt)\n        while True:\n            resp = websocket.receive_json()\n            if resp[\"type\"] == \"end\":\n                assert resp[\"sender\"] == \"bot\"\n                assert \"amsterdam\" in resp[\"message\"].lower()\n                assert len(resp[\"sources\"]) > 0\n                break\n            else:\n                pass  # wait for the end\n\n\ndef test_documents_success_upload() -> None:\n    files = [\n        (\"files\", (\"test.txt\", b\"content\")),\n    ]\n    with open(\"tests/config/amsterdam.zip\", \"rb\") as zip_file:\n        files.append((\"files\", (\"amsterdam.zip\", zip_file.read())))\n\n    response = client.post(\n        \"/documents\",\n        files=files,\n        params={\"admin_pass\": conf.auth.admin_pass},\n    )\n    assert response.status_code == 200\n    assert \"Documents uploaded\" in response.json()[\"message\"]\n\n\ndef test_documents_success_list() -> None:\n    response = client.get(\"/documents\", params={\"admin_pass\": conf.auth.admin_pass})\n    resp = response.json()\n    assert response.status_code == 200\n    assert resp[\"count\"] > 0\n    assert \"test.txt\" in resp[\"files\"]\n    os.remove(\"documents/test.txt\")\n    os.remove(\"documents/amsterdam.txt\")\n\n\ndef test_wrong_pass() -> None:\n    files = [\n        (\"files\", (\"test.txt\", b\"content\")),\n    ]\n    resp = client.post(\n        \"/documents\",\n        files=files,\n        params={\"admin_pass\": \"\"},\n    )\n    assert resp.status_code == 403\n    resp = client.get(\"/documents\", params={\"admin_pass\": \"\"})\n    assert resp.status_code == 403\n    resp = client.get(\"/config\", params={\"admin_pass\": \"\"})\n    assert resp.status_code == 403\n    resp = client.post(\"/config\", json=conf.dict(), params={\"admin_pass\": \"\"})\n    assert resp.status_code == 403\n\n\ndef test_documents_empty_files() -> None:\n    resp = client.post(\n        \"/documents\",\n        files=[],\n        params={\"admin_pass\": conf.auth.admin_pass},\n    )\n    assert resp.status_code == 422\n\n\ndef test_get_config() -> None:\n    response = client.get(\"/config\", params={\"admin_pass\": conf.auth.admin_pass})\n    resp = response.json()\n    assert response.status_code == 200\n    assert resp[\"llm\"][\"model_path\"] == conf.llm.model_path\n\n\ndef test_post_config() -> None:\n    conf_test = conf\n    conf_test.llm.model_path = \"changedmodel\"\n    response = client.post(\n        \"/config\", json=conf_test.dict(), params={\"admin_pass\": conf.auth.admin_pass}\n    )\n    resp = response.json()\n    assert response.status_code == 200\n    assert resp[\"llm\"][\"model_path\"] == \"changedmodel\"\n"
  },
  {
    "path": "tests/test_cli.py",
    "content": "import shutil\nfrom unittest.mock import MagicMock, patch\n\nfrom typer.testing import CliRunner\n\nfrom libre_chat.__main__ import cli\n\nrunner = CliRunner()\n\n\ndef test_help() -> None:\n    result = runner.invoke(cli, [\"--help\"])\n    assert result.exit_code == 0\n\n\ndef test_version() -> None:\n    result = runner.invoke(cli, [\"version\"])\n    assert result.exit_code == 0\n\n\ndef test_build() -> None:\n    result = runner.invoke(\n        cli,\n        [\n            \"build\",\n            \"config/chat-vectorstore-qa.yml\",\n            \"--vector\",\n            \"vectorstore/db_faiss\",\n            \"--documents\",\n            \"documents\",\n        ],\n    )\n    assert result.exit_code == 0\n\n\ndef test_build_no_args() -> None:\n    shutil.rmtree(\"vectorstore/db_faiss\")\n    result = runner.invoke(\n        cli,\n        [\n            \"build\",\n            \"config/chat-vectorstore-qa.yml\",\n        ],\n    )\n    assert result.exit_code == 0\n\n\n# Mock uvicorn.run to prevent API hanging\n@patch(\"libre_chat.__main__.uvicorn.run\")\ndef test_start(mock_run: MagicMock) -> None:\n    mock_run.return_value = None\n    result = runner.invoke(cli, [\"start\"])\n    assert result.exit_code == 0\n"
  },
  {
    "path": "tests/test_llm.py",
    "content": "import os\nimport shutil\n\nimport pytest\n\nfrom libre_chat.conf import parse_conf\nfrom libre_chat.llm import Llm\n\nllm = Llm(conf=parse_conf(\"config/chat-vectorstore-qa.yml\"))\ncapital_query = \"What is the capital of the Netherlands?\"\n\n\ndef test_query_vectorstore_capital() -> None:\n    \"\"\"Test capital query with vectorstore for PDF\"\"\"\n    resp = llm.query(capital_query)\n    assert len(resp[\"source_documents\"]) >= 1\n    assert \"amsterdam\" in resp[\"result\"].lower()\n\n\ndef test_query_vectorstore_gdp() -> None:\n    \"\"\"Test GDP query with vectorstore for CSV\"\"\"\n    resp = llm.query(\"What was the GDP of France in 1998?\")\n    assert len(resp[\"source_documents\"]) >= 1\n\n\n# def test_query_vectorstore_drug() -> None:\n#     \"\"\"Test capital query with vectorstore for PDF\"\"\"\n#     resp = llm.query(\"Which drugs can be used to mitigate Alzheimer symptoms??\")\n#     assert len(resp[\"source_documents\"]) >= 1\n\n\ndef test_failed_empty_query() -> None:\n    \"\"\"Test failed empty query to LLM\"\"\"\n    with pytest.raises(ValueError) as exc_info:\n        llm.query(\"\")\n    assert str(exc_info.value) == \"Provide a prompt\"\n\n\n@pytest.mark.asyncio\nasync def test_failed_empty_aquery() -> None:\n    \"\"\"Test failed empty query to LLM\"\"\"\n    with pytest.raises(ValueError) as exc_info:\n        await llm.aquery(\"\")\n    assert str(exc_info.value) == \"Provide a prompt\"\n\n\ndef test_build_vectorstore() -> None:\n    \"\"\"Test building the vectorstore\"\"\"\n    shutil.rmtree(llm.conf.vector.vector_path)\n    llm.build_vectorstore()\n    assert os.path.exists(llm.conf.vector.vector_path)\n    # And with providing a docs path\n    shutil.rmtree(llm.conf.vector.vector_path)\n    llm.build_vectorstore(documents_path=\"documents\")\n    assert os.path.exists(llm.conf.vector.vector_path)\n\n\ndef test_build_failed_no_docs() -> None:\n    \"\"\"Test fail building the vectorstore when no documents\"\"\"\n    conf = parse_conf(\"config/chat-vectorstore-qa.yml\")\n    conf.vector.documents_path = \"tests/tmp/nothinghere\"\n    llm_empt = Llm(conf)\n    shutil.rmtree(llm.conf.vector.vector_path)\n    # with pytest.raises(ValueError) as exc_info:\n    llm_empt.build_vectorstore()\n    res = llm.query(\"anything\")\n    assert \"vectorstore has not been built\" in res[\"result\"]\n    assert not os.path.exists(llm.conf.vector.vector_path)\n    # assert \"No documents found\" in str(exc_info.value)\n\n\ndef test_similarity_score_threshold() -> None:\n    \"\"\"Test similarity_score_threshold with vectorstore\"\"\"\n    conf = parse_conf(\"config/chat-vectorstore-qa.yml\")\n    conf.vector.search_type = \"similarity_score_threshold\"\n    conf.vector.score_threshold = 0.4\n    Llm(conf)\n    resp = llm.query(capital_query)\n    assert len(resp[\"source_documents\"]) >= 1\n\n\ndef test_documents_dir_dont_exist() -> None:\n    \"\"\"Test documents dir created if doesn't exist\"\"\"\n    tmp_docs = \"tests/tmp/docs\"\n    conf = parse_conf(\"config/chat-conversation.yml\")\n    conf.vector.documents_path = tmp_docs\n    Llm(conf)\n    assert os.path.exists(tmp_docs)\n\n\ndef test_llm_failed_no_prompt_variables() -> None:\n    \"\"\"Test fail building Llm when no prompt variable provided\"\"\"\n    with pytest.raises(Exception) as exc_info:\n        Llm(conf=parse_conf(\"config/chat-vectorstore-qa.yml\"), prompt_variables=[])\n    assert \"You should provide at least 1 template variable\" in str(exc_info.value)\n\n\ndef test_no_prompt_template() -> None:\n    \"\"\"Test no prompt templates provided\"\"\"\n    conf_conv = parse_conf(\"config/chat-conversation.yml\")\n    conf_conv.llm.prompt_template = \"\"\n    llm_conv = Llm(conf=conf_conv)\n    assert \"{input}\" in llm_conv.prompt_template\n    conf_qa = parse_conf(\"config/chat-vectorstore-qa.yml\")\n    conf_qa.llm.prompt_template = \"\"\n    llm_qa = Llm(conf=conf_qa)\n    assert \"{question}\" in llm_qa.prompt_template\n\n\n# @patch(\"torch.cuda.is_available\")\n# @patch(\"torch.cuda.device\")\n# def test_cuda(mock_device: MagicMock, mock_is_available: MagicMock) -> None:\n#     \"\"\"Pretend we have GPU, but run on cpu anyway\"\"\"\n#     mock_device.return_value = \"cpu\"\n#     mock_is_available.return_value = True\n#     llm = Llm(conf=parse_conf(\"tests/config/additional-prop.yml\"))\n#     assert llm is not None\n\n\n# def test_failed_query_no_result() -> None:\n#     \"\"\"Test failed query to LLM return no result\"\"\"\n#     with patch.object(llm, \"dbqa\") as mock_dbqa:\n#         mock_dbqa.return_value = {\"source_documents\": []}\n#         with pytest.raises(Exception) as exc_info:\n#             llm.query(\"Nothing\")\n#         assert \"No result was returned by the LLM\" in str(exc_info.value)\n"
  },
  {
    "path": "tests/test_utils.py",
    "content": "import os\n\nimport pytest\n\nfrom libre_chat.conf import parse_conf\nfrom libre_chat.utils import ChatResponse, download_file, parallel_download\n\n\ndef test_no_conf_file() -> None:\n    \"\"\"Test no conf file found\"\"\"\n    conf = parse_conf(\"nothinghere.yml\")\n    assert len(conf.llm.model_path) > 2\n\n\ndef test_chat_response() -> None:\n    \"\"\"Test ChatResponse schema\"\"\"\n    with pytest.raises(ValueError) as exc_info:\n        ChatResponse(message=\"toast\", sender=\"wrong\")\n    assert \"sender must be bot or user\" in str(exc_info.value)\n    with pytest.raises(ValueError) as exc_info:\n        ChatResponse(message=\"toast\", type=\"wrong\")\n    assert \"type must be start, stream or end\" in str(exc_info.value)\n\n\ndef test_download_file_fail() -> None:\n    \"\"\"Test fail downloading file\"\"\"\n    download_file(\"http://broken\", \"tests/tmp/noddl\")\n    assert not os.path.exists(\"tests/tmp/noddl\")\n\n\ndef test_parallel_download_success() -> None:\n    \"\"\"Test downloading file\"\"\"\n    ddl_test = [\n        {\n            \"url\": \"https://raw.githubusercontent.com/vemonet/libre-chat/main/README.md\",\n            \"path\": \"tests/tmp/README.md\",\n        },\n        {\n            \"url\": \"https://github.com/vemonet/libre-chat/raw/main/tests/config/amsterdam.zip\",\n            \"path\": \"tests/tmp/amsterdam.txt\",\n        },\n    ]\n    parallel_download(ddl_test)\n    assert os.path.exists(\"tests/tmp/amsterdam.txt\")\n"
  }
]