diff --git a/.coverage b/.coverage deleted file mode 100644 index 4f5d9f6..0000000 Binary files a/.coverage and /dev/null differ diff --git a/.coveragerc b/.coveragerc deleted file mode 100644 index 7e468bc..0000000 --- a/.coveragerc +++ /dev/null @@ -1,11 +0,0 @@ -[run] -omit = - *__init__* - */usr/local/lib* - *test* - -[report] -omit = - *test* - */usr/local/lib* - */__init__.py diff --git a/.env.dev b/.env.dev deleted file mode 100644 index be2718e..0000000 --- a/.env.dev +++ /dev/null @@ -1,10 +0,0 @@ -ENV=dev -APP_NAME=Whitebox | Development -APP_NAME_CRON=Whitebox | Development - -DATABASE_URL=postgresql://postgres:postgres@localhost:5432/postgres - -VERSION=0.1.0 -METRICS_CRON=*/15 * * * * - -MODEL_PATH=models diff --git a/.env.test b/.env.test deleted file mode 100644 index dadc992..0000000 --- a/.env.test +++ /dev/null @@ -1,11 +0,0 @@ -ENV=test -APP_NAME=Whitebox | Test -APP_NAME_CRON=Whitebox | Test -SECRET_KEY=3beae33e30bcdaf6b172e17dc8f26341 - -DATABASE_URL=postgresql://postgres:postgres@localhost:5432/test - -VERSION=0.1.0 -METRICS_CRON=*/15 * * * * - -MODEL_PATH=models/test_model \ No newline at end of file diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 76ff399..0000000 --- a/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -# Ignore Jupyter notebooks from Git stats -*.ipynb linguist-documentation \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index dd84ea7..0000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -name: Bug report -about: Create a report to help us improve -title: '' -labels: '' -assignees: '' - ---- - -**Describe the bug** -A clear and concise description of what the bug is. - -**To Reproduce** -Steps to reproduce the behavior: -1. Go to '...' -2. Click on '....' -3. Scroll down to '....' -4. See error - -**Expected behavior** -A clear and concise description of what you expected to happen. - -**Screenshots** -If applicable, add screenshots to help explain your problem. - -**Desktop (please complete the following information):** - - OS: [e.g. iOS] - - Browser [e.g. chrome, safari] - - Version [e.g. 22] - -**Smartphone (please complete the following information):** - - Device: [e.g. iPhone6] - - OS: [e.g. iOS8.1] - - Browser [e.g. stock browser, safari] - - Version [e.g. 22] - -**Additional context** -Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index bbcbbe7..0000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -name: Feature request -about: Suggest an idea for this project -title: '' -labels: '' -assignees: '' - ---- - -**Is your feature request related to a problem? Please describe.** -A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] - -**Describe the solution you'd like** -A clear and concise description of what you want to happen. - -**Describe alternatives you've considered** -A clear and concise description of any alternative solutions or features you've considered. - -**Additional context** -Add any other context or screenshots about the feature request here. diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index cd20eeb..0000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,5 +0,0 @@ -- [ ] closes #xxxx (Replace xxxx with the GitHub issue number) -- [ ] `Tests added and passed` if fixing a bug or adding a new feature. -- [ ] All `code checks passed`. -- [ ] Added `type annotations` to new arguments/methods/functions. -- [ ] Updated documentation. \ No newline at end of file diff --git a/.github/scripts/bump_chart_version.py b/.github/scripts/bump_chart_version.py deleted file mode 100644 index af24ea9..0000000 --- a/.github/scripts/bump_chart_version.py +++ /dev/null @@ -1,19 +0,0 @@ -import yaml -import sys - -with open("helm_charts/whitebox/Chart.yaml", "r") as f: - chart = yaml.safe_load(f) - -if len(sys.argv) < 2: - raise Exception("Version number not provided") - -# If it starts with a v, remove it -if sys.argv[1].startswith("v"): - sys.argv[1] = sys.argv[1][1:] - -chart["version"] = sys.argv[1] - -with open("helm_charts/whitebox/Chart.yaml", "w") as f: - yaml.dump(chart, f) - -print(f"Updated chart version to {sys.argv[1]}") diff --git a/.github/workflows/black.yml b/.github/workflows/black.yml deleted file mode 100644 index f6de9a8..0000000 --- a/.github/workflows/black.yml +++ /dev/null @@ -1,9 +0,0 @@ -name: Black Formatter - -on: pull_request -jobs: - lint: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: psf/black@23.1.0 \ No newline at end of file diff --git a/.github/workflows/docs_publish.yml b/.github/workflows/docs_publish.yml deleted file mode 100644 index 6f639e5..0000000 --- a/.github/workflows/docs_publish.yml +++ /dev/null @@ -1,17 +0,0 @@ -name: Publish docs -on: - release: - types: [published] - -permissions: - contents: write -jobs: - deploy: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-python@v4 - with: - python-version: "3.10" - - run: pip install mkdocs-material - - run: mkdocs gh-deploy --config-file docs/mkdocs/mkdocs.yml --force diff --git a/.github/workflows/helm_charts_release.yml b/.github/workflows/helm_charts_release.yml deleted file mode 100644 index bcf4d06..0000000 --- a/.github/workflows/helm_charts_release.yml +++ /dev/null @@ -1,40 +0,0 @@ -name: Release Charts - -on: - release: - types: [published] - -jobs: - release_charts: - permissions: - contents: write - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v2 - with: - fetch-depth: 0 - - - name: Install Helm - uses: azure/setup-helm@v3 - with: - version: v3.10.0 - - - name: Set up Python 3.9 - uses: actions/setup-python@v2 - with: - python-version: 3.9 - - - name: Extract chart version and remove v prefix - id: extract_version - run: | - CHART_VERSION=$(echo ${{ github.ref }} | cut -d'/' -f3) - echo "::set-output name=version::${CHART_VERSION#v}" - - - name: Package whitebox chart - run: | - helm package -u --version ${{ steps.extract_version.outputs.version }} helm_charts/whitebox - - - name: Publish whitebox chart - run: | - curl --data-binary "@whitebox-${{ steps.extract_version.outputs.version }}.tgz" chartmuseum.squaredev.io/api/charts -u ${{ secrets.CHARTMUSEUM_USERNAME }}:${{ secrets.CHARTMUSEUM_PASSWORD }} diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml deleted file mode 100644 index b315284..0000000 --- a/.github/workflows/main.yml +++ /dev/null @@ -1,23 +0,0 @@ -name: Test & Publish - -on: - push: - branches: [main] - - workflow_dispatch: - -jobs: - test: - uses: ./.github/workflows/test.yml - - whitebox: - needs: - - test - uses: squaredev-io/gh-workflows/.github/workflows/base_build_publish.yml@main - with: - image: whitebox - dockerfile: Dockerfile - runs-on: ubuntu-latest - secrets: - docker_username: ${{ secrets.DOCKER_USERNAME }} - docker_access_token: ${{ secrets.DOCKER_ACCESS_TOKEN }} diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml deleted file mode 100644 index 6617f2a..0000000 --- a/.github/workflows/pull_request.yml +++ /dev/null @@ -1,13 +0,0 @@ -name: Test - -on: - pull_request: - branches: [main] - paths-ignore: - - 'docs/**' - - workflow_dispatch: - -jobs: - test: - uses: ./.github/workflows/test.yml diff --git a/.github/workflows/release_pypi_package.yml b/.github/workflows/release_pypi_package.yml deleted file mode 100644 index 7541b83..0000000 --- a/.github/workflows/release_pypi_package.yml +++ /dev/null @@ -1,30 +0,0 @@ -name: Release PyPI Package - -on: - release: - types: [published] - -jobs: - release_package: - permissions: - contents: write - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v2 - with: - fetch-depth: 0 - - - name: Set up Python 3.9 - uses: actions/setup-python@v2 - with: - python-version: 3.9 - - - name: Build a binary wheel and a source tarball. - run: pip install wheel && python setup.py sdist bdist_wheel - - - name: Publish distribution 📦 to PyPI - if: startsWith(github.ref, 'refs/tags') - uses: pypa/gh-action-pypi-publish@release/v1 - with: - password: ${{ secrets.PYPI_API_TOKEN }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml deleted file mode 100644 index 3c12f07..0000000 --- a/.github/workflows/test.yml +++ /dev/null @@ -1,34 +0,0 @@ -# On workflow call - -name: test - -on: workflow_call - -jobs: - test: - runs-on: ubuntu-latest - services: - postgres: - image: postgres - env: - POSTGRES_DB: test - POSTGRES_PASSWORD: postgres - ports: - - '5432:5432' - options: >- - --health-cmd pg_isready - --health-interval 10s - --health-timeout 5s - --health-retries 5 - steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v3 - - uses: actions/setup-python@v4 - with: - python-version: '3.10' - cache: 'pip' # caching pip dependencies - - run: sudo apt-get update && sudo apt-get install libpq-dev postgresql-client -y - - run: pip install -r requirements.txt - - name: Test - run: ENV="test" pytest - timeout-minutes: 4 diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 854a5ed..0000000 --- a/.gitignore +++ /dev/null @@ -1,17 +0,0 @@ -.venv -__pycache__/ -*__pycache__ -*.vscode -*.py[cod] -*$py.class -.pytest_cache -*.DS_Store -check_data/ -/models/ -*.ipynb_checkpoints -*.db -site/ -test.ipynb -dist/ -build/ -whitebox_sdk.egg-info diff --git a/whitebox/analytics/__init__.py b/.nojekyll similarity index 100% rename from whitebox/analytics/__init__.py rename to .nojekyll diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml deleted file mode 100644 index 39c1cb3..0000000 --- a/.pre-commit-config.yaml +++ /dev/null @@ -1,6 +0,0 @@ -repos: - - repo: https://github.com/psf/black - rev: 23.1.0 - hooks: - - id: black - entry: bash -c 'black "$@"; git add -u' -- diff --git a/.streamlit/config.toml b/.streamlit/config.toml deleted file mode 100644 index 9fbc757..0000000 --- a/.streamlit/config.toml +++ /dev/null @@ -1,6 +0,0 @@ -[theme] -base="dark" -primaryColor="#21babe" -backgroundColor="#1e2025" -secondaryBackgroundColor="#252a33" - diff --git a/404.html b/404.html new file mode 100644 index 0000000..9b1e5c2 --- /dev/null +++ b/404.html @@ -0,0 +1,538 @@ + + + + + + + + + + + + + + + + + + Whitebox + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ +

404 - Not found

+ +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md deleted file mode 100644 index 18c9147..0000000 --- a/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,128 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -We as members, contributors, and leaders pledge to make participation in our -community a harassment-free experience for everyone, regardless of age, body -size, visible or invisible disability, ethnicity, sex characteristics, gender -identity and expression, level of experience, education, socio-economic status, -nationality, personal appearance, race, religion, or sexual identity -and orientation. - -We pledge to act and interact in ways that contribute to an open, welcoming, -diverse, inclusive, and healthy community. - -## Our Standards - -Examples of behavior that contributes to a positive environment for our -community include: - -* Demonstrating empathy and kindness toward other people -* Being respectful of differing opinions, viewpoints, and experiences -* Giving and gracefully accepting constructive feedback -* Accepting responsibility and apologizing to those affected by our mistakes, - and learning from the experience -* Focusing on what is best not just for us as individuals, but for the - overall community - -Examples of unacceptable behavior include: - -* The use of sexualized language or imagery, and sexual attention or - advances of any kind -* Trolling, insulting or derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or email - address, without their explicit permission -* Other conduct which could reasonably be considered inappropriate in a - professional setting - -## Enforcement Responsibilities - -Community leaders are responsible for clarifying and enforcing our standards of -acceptable behavior and will take appropriate and fair corrective action in -response to any behavior that they deem inappropriate, threatening, offensive, -or harmful. - -Community leaders have the right and responsibility to remove, edit, or reject -comments, commits, code, wiki edits, issues, and other contributions that are -not aligned to this Code of Conduct, and will communicate reasons for moderation -decisions when appropriate. - -## Scope - -This Code of Conduct applies within all community spaces, and also applies when -an individual is officially representing the community in public spaces. -Examples of representing our community include using an official e-mail address, -posting via an official social media account, or acting as an appointed -representative at an online or offline event. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported to the community leaders responsible for enforcement at -. -All complaints will be reviewed and investigated promptly and fairly. - -All community leaders are obligated to respect the privacy and security of the -reporter of any incident. - -## Enforcement Guidelines - -Community leaders will follow these Community Impact Guidelines in determining -the consequences for any action they deem in violation of this Code of Conduct: - -### 1. Correction - -**Community Impact**: Use of inappropriate language or other behavior deemed -unprofessional or unwelcome in the community. - -**Consequence**: A private, written warning from community leaders, providing -clarity around the nature of the violation and an explanation of why the -behavior was inappropriate. A public apology may be requested. - -### 2. Warning - -**Community Impact**: A violation through a single incident or series -of actions. - -**Consequence**: A warning with consequences for continued behavior. No -interaction with the people involved, including unsolicited interaction with -those enforcing the Code of Conduct, for a specified period of time. This -includes avoiding interactions in community spaces as well as external channels -like social media. Violating these terms may lead to a temporary or -permanent ban. - -### 3. Temporary Ban - -**Community Impact**: A serious violation of community standards, including -sustained inappropriate behavior. - -**Consequence**: A temporary ban from any sort of interaction or public -communication with the community for a specified period of time. No public or -private interaction with the people involved, including unsolicited interaction -with those enforcing the Code of Conduct, is allowed during this period. -Violating these terms may lead to a permanent ban. - -### 4. Permanent Ban - -**Community Impact**: Demonstrating a pattern of violation of community -standards, including sustained inappropriate behavior, harassment of an -individual, or aggression toward or disparagement of classes of individuals. - -**Consequence**: A permanent ban from any sort of public interaction within -the community. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], -version 2.0, available at -https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. - -Community Impact Guidelines were inspired by [Mozilla's code of conduct -enforcement ladder](https://github.com/mozilla/diversity). - -[homepage]: https://www.contributor-covenant.org - -For answers to common questions about this code of conduct, see the FAQ at -https://www.contributor-covenant.org/faq. Translations are available at -https://www.contributor-covenant.org/translations. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index 5ee0f0b..0000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,14 +0,0 @@ -# Contributing to Whitebox -We welcome contributions to the Whitebox project! If you're interested in helping out, please join our Discord server: https://discord.gg/TPw5vXqn - -## How to contribute -1. Fork the Whitebox repository -2. Create a new branch for your changes -3. Make your changes -4. Submit a pull request -Please make sure to follow the project's coding style and to add test cases for any new or changed functionality. Also update the docs where needed. - -## Bug reports and feature requests -If you find a bug or have a feature request, please open an issue on the GitHub repository. - -Thank you for your interest in contributing to Whitebox! diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 908029e..0000000 --- a/Dockerfile +++ /dev/null @@ -1,15 +0,0 @@ -FROM python:3.10 - -RUN apt-get update && apt-get install libpq-dev python-dev -y - -WORKDIR /whitebox - -COPY requirements.txt requirements.txt - -RUN pip install -r requirements.txt - -COPY . . - -EXPOSE 8000 - -ENTRYPOINT ENV=dev uvicorn whitebox.main:app --reload --host 0.0.0.0 --port 8000 diff --git a/LICENCE b/LICENCE deleted file mode 100644 index 52255f4..0000000 --- a/LICENCE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) [2022] [Squaredev BV] - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/README.md b/README.md deleted file mode 100644 index 1040be1..0000000 --- a/README.md +++ /dev/null @@ -1,158 +0,0 @@ -Update June 19, 2023: Whitebox is now prioritizing monitoring LLMs. This repo is no longer maintained, but our commitment to building fair and responsible AI applications remains. If you're passionate about ML or React and want to join us as a founding engineer, reach out to Kostas on Discord. - ---- - -# Whitebox - E2E machine learning monitoring - -

- Whitebox is an open source E2E ML monitoring platform with edge capabilities that plays nicely with kubernetes - -

- ---- - -**Documentation**: https://whitebox-ai.github.io/whitebox - -**Source Code**: https://github.com/whitebox-ai/whitebox - -**Roadmap**: https://github.com/whitebox-ai/whitebox/milestones - -**Issue tracking** https://github.com/orgs/whitebox-ai/projects/1/views/3 - -**Discord**: https://discord.gg/G5TKJMmGUt - ---- - -Whitebox is an open source E2E ML monitoring platform with edge capabilities that plays nicely with kubernetes. - -The key features are: - -- **Classification models metrics** -- **Regression models metrics** -- **Data / model drift monitoring** -- **Alerts** - -Design guidelines: - -- **Easy**: Very easy to set up and get started with. -- **Intuitive**: Designed to be intuitive and easy to use. -- **Pythonic SDK**: Pythonic SDK for building your own monitoring infrastructure. -- **Robust**: Get production-ready MLOps system. -- **Kubernetes**: Get production-ready code. With automatic interactive documentation. - -# Installation - -Install the server using `docker compose`. See the [docs](https://whitebox-ai.github.io/whitebox/tutorial/installation) for more info. - -Install the SDK with `pip`: - -```bash -pip install whitebox-sdk -``` - -# How to use - -After you are done installing the server and the SDK, you can start using it. - -After you get the API key, all you have to do is create an instance of the Whitebox class adding your host and API key as parameters: - -```python -from whitebox import Whitebox - -wb = Whitebox(host="127.0.0.1:8000", api_key="some_api_key") -``` - -Now you're ready to start using Whitebox! Read the [documentation](https://whitebox-ai.github.io/whitebox/) to learn more about the SDK. - -# Set up locally for development - -Whitebox supports Postgres and SQLite. You can use either one of them. -If you want to use SQLite, you need to set up a SQLite database and set the `DATABASE_URL` environment variable to the database URL. -If you want to use Postgres, you don't need to do anything. Just have a Postgres database running and set the `DATABASE_URL` environment variable to the database URL. - -### Install packages: - -```bash -python -m venv .venv -pip install -r requirements.txt -pre-commit install -``` - -### Run the server: - -```bash -ENV=dev uvicorn whitebox.main:app --reload -``` - -### Quick way to start a postgres database: - -```bash -docker compose up postgres -d -``` - -### Tests: - -- Run: `ENV=test pytest` or `ENV=test pytest -s` to preserve logs. -- Watch: `ENV=test ptw` -- Run test coverage `ENV=test coverage run -m pytest` -- Look at coverage report: `coverage report` or `coverage html` to generate an html. To view it in your browser open the `htmlcov/index.html` file. - -### Docs - -**Documentation is hosted bby GitHub here**: https://whitebox-ai.github.io/whitebox - -``` -mkdocs serve -f docs/mkdocs/mkdocs.yml -a localhost:8001 -``` - -# Deploy Whitebox - -## Using docker - -Whitebox uses postgres as its database. They need to run in the same docker network. An example docker-compose file is located in the `examples` folder. Make sure you replace the SECRET_KEY with one of your own. Look below for more info. - -```bash -docker-compose -f examples/docker-compose/docker-compose.yml up -``` - -If you just need to run Whitebox, make sure you set the `DATABASE_URL` in the environment. - -```bash -docker run -dp 8000:8000 sqdhub/whitebox:main -e DATABASE_URL=postgresql://user:password@host:port/db_name -``` - -To save the api key encrypted in the database, provide a SECRET_KEY variable in the environment that is consisted of a 16 bytes string. - -```bash -python -c "from secrets import token_hex; print(token_hex(16))" -``` - -**_Save this token somewhere safe._** - -The api key can be retrieved directly from the postgres database: - -```bash -API_KEY=$(docker exec /bin/sh -c "psql -U postgres -c \"SELECT api_key FROM users WHERE username='admin';\" -tA") - -echo $API_KEY -``` - -If you've set the `SECRET_KEY` in the environment get the decrypted key using: - -```bash -docker exec /usr/local/bin/python scripts/decrypt_api_key.py $API_KEY -``` - -## Using Helm - -You can also install Whitebox server and all of its dependencies in your k8s cluster using `helm` - -```bash -helm repo add squaredev https://chartmuseum.squaredev.io/ -helm repo update -helm install whitebox squaredev/whitebox -``` - -# Contributing - -We happily welcome contributions to Whitebox. You can start by opening a new issue! diff --git a/SECURITY.md b/SECURITY.md deleted file mode 100644 index 3fb3c4b..0000000 --- a/SECURITY.md +++ /dev/null @@ -1,5 +0,0 @@ -# Security Policy - -## Reporting a Vulnerability - -Open an issue with the security label. Use the bug template. diff --git a/assets/images/favicon.png b/assets/images/favicon.png new file mode 100644 index 0000000..1cf13b9 Binary files /dev/null and b/assets/images/favicon.png differ diff --git a/assets/javascripts/bundle.2a6f1dda.min.js b/assets/javascripts/bundle.2a6f1dda.min.js new file mode 100644 index 0000000..2f912a0 --- /dev/null +++ b/assets/javascripts/bundle.2a6f1dda.min.js @@ -0,0 +1,29 @@ +"use strict";(()=>{var Hi=Object.create;var xr=Object.defineProperty;var Pi=Object.getOwnPropertyDescriptor;var $i=Object.getOwnPropertyNames,Ht=Object.getOwnPropertySymbols,Ii=Object.getPrototypeOf,Er=Object.prototype.hasOwnProperty,an=Object.prototype.propertyIsEnumerable;var on=(e,t,r)=>t in e?xr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,P=(e,t)=>{for(var r in t||(t={}))Er.call(t,r)&&on(e,r,t[r]);if(Ht)for(var r of Ht(t))an.call(t,r)&&on(e,r,t[r]);return e};var sn=(e,t)=>{var r={};for(var n in e)Er.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&Ht)for(var n of Ht(e))t.indexOf(n)<0&&an.call(e,n)&&(r[n]=e[n]);return r};var Pt=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var Fi=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of $i(t))!Er.call(e,o)&&o!==r&&xr(e,o,{get:()=>t[o],enumerable:!(n=Pi(t,o))||n.enumerable});return e};var yt=(e,t,r)=>(r=e!=null?Hi(Ii(e)):{},Fi(t||!e||!e.__esModule?xr(r,"default",{value:e,enumerable:!0}):r,e));var fn=Pt((wr,cn)=>{(function(e,t){typeof wr=="object"&&typeof cn!="undefined"?t():typeof define=="function"&&define.amd?define(t):t()})(wr,function(){"use strict";function e(r){var n=!0,o=!1,i=null,s={text:!0,search:!0,url:!0,tel:!0,email:!0,password:!0,number:!0,date:!0,month:!0,week:!0,time:!0,datetime:!0,"datetime-local":!0};function a(O){return!!(O&&O!==document&&O.nodeName!=="HTML"&&O.nodeName!=="BODY"&&"classList"in O&&"contains"in O.classList)}function f(O){var Ke=O.type,De=O.tagName;return!!(De==="INPUT"&&s[Ke]&&!O.readOnly||De==="TEXTAREA"&&!O.readOnly||O.isContentEditable)}function c(O){O.classList.contains("focus-visible")||(O.classList.add("focus-visible"),O.setAttribute("data-focus-visible-added",""))}function u(O){O.hasAttribute("data-focus-visible-added")&&(O.classList.remove("focus-visible"),O.removeAttribute("data-focus-visible-added"))}function p(O){O.metaKey||O.altKey||O.ctrlKey||(a(r.activeElement)&&c(r.activeElement),n=!0)}function m(O){n=!1}function d(O){a(O.target)&&(n||f(O.target))&&c(O.target)}function h(O){a(O.target)&&(O.target.classList.contains("focus-visible")||O.target.hasAttribute("data-focus-visible-added"))&&(o=!0,window.clearTimeout(i),i=window.setTimeout(function(){o=!1},100),u(O.target))}function v(O){document.visibilityState==="hidden"&&(o&&(n=!0),B())}function B(){document.addEventListener("mousemove",z),document.addEventListener("mousedown",z),document.addEventListener("mouseup",z),document.addEventListener("pointermove",z),document.addEventListener("pointerdown",z),document.addEventListener("pointerup",z),document.addEventListener("touchmove",z),document.addEventListener("touchstart",z),document.addEventListener("touchend",z)}function ne(){document.removeEventListener("mousemove",z),document.removeEventListener("mousedown",z),document.removeEventListener("mouseup",z),document.removeEventListener("pointermove",z),document.removeEventListener("pointerdown",z),document.removeEventListener("pointerup",z),document.removeEventListener("touchmove",z),document.removeEventListener("touchstart",z),document.removeEventListener("touchend",z)}function z(O){O.target.nodeName&&O.target.nodeName.toLowerCase()==="html"||(n=!1,ne())}document.addEventListener("keydown",p,!0),document.addEventListener("mousedown",m,!0),document.addEventListener("pointerdown",m,!0),document.addEventListener("touchstart",m,!0),document.addEventListener("visibilitychange",v,!0),B(),r.addEventListener("focus",d,!0),r.addEventListener("blur",h,!0),r.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&r.host?r.host.setAttribute("data-js-focus-visible",""):r.nodeType===Node.DOCUMENT_NODE&&(document.documentElement.classList.add("js-focus-visible"),document.documentElement.setAttribute("data-js-focus-visible",""))}if(typeof window!="undefined"&&typeof document!="undefined"){window.applyFocusVisiblePolyfill=e;var t;try{t=new CustomEvent("focus-visible-polyfill-ready")}catch(r){t=document.createEvent("CustomEvent"),t.initCustomEvent("focus-visible-polyfill-ready",!1,!1,{})}window.dispatchEvent(t)}typeof document!="undefined"&&e(document)})});var un=Pt(Sr=>{(function(e){var t=function(){try{return!!Symbol.iterator}catch(c){return!1}},r=t(),n=function(c){var u={next:function(){var p=c.shift();return{done:p===void 0,value:p}}};return r&&(u[Symbol.iterator]=function(){return u}),u},o=function(c){return encodeURIComponent(c).replace(/%20/g,"+")},i=function(c){return decodeURIComponent(String(c).replace(/\+/g," "))},s=function(){var c=function(p){Object.defineProperty(this,"_entries",{writable:!0,value:{}});var m=typeof p;if(m!=="undefined")if(m==="string")p!==""&&this._fromString(p);else if(p instanceof c){var d=this;p.forEach(function(ne,z){d.append(z,ne)})}else if(p!==null&&m==="object")if(Object.prototype.toString.call(p)==="[object Array]")for(var h=0;hd[0]?1:0}),c._entries&&(c._entries={});for(var p=0;p1?i(d[1]):"")}})})(typeof global!="undefined"?global:typeof window!="undefined"?window:typeof self!="undefined"?self:Sr);(function(e){var t=function(){try{var o=new e.URL("b","http://a");return o.pathname="c d",o.href==="http://a/c%20d"&&o.searchParams}catch(i){return!1}},r=function(){var o=e.URL,i=function(f,c){typeof f!="string"&&(f=String(f)),c&&typeof c!="string"&&(c=String(c));var u=document,p;if(c&&(e.location===void 0||c!==e.location.href)){c=c.toLowerCase(),u=document.implementation.createHTMLDocument(""),p=u.createElement("base"),p.href=c,u.head.appendChild(p);try{if(p.href.indexOf(c)!==0)throw new Error(p.href)}catch(O){throw new Error("URL unable to set base "+c+" due to "+O)}}var m=u.createElement("a");m.href=f,p&&(u.body.appendChild(m),m.href=m.href);var d=u.createElement("input");if(d.type="url",d.value=f,m.protocol===":"||!/:/.test(m.href)||!d.checkValidity()&&!c)throw new TypeError("Invalid URL");Object.defineProperty(this,"_anchorElement",{value:m});var h=new e.URLSearchParams(this.search),v=!0,B=!0,ne=this;["append","delete","set"].forEach(function(O){var Ke=h[O];h[O]=function(){Ke.apply(h,arguments),v&&(B=!1,ne.search=h.toString(),B=!0)}}),Object.defineProperty(this,"searchParams",{value:h,enumerable:!0});var z=void 0;Object.defineProperty(this,"_updateSearchParams",{enumerable:!1,configurable:!1,writable:!1,value:function(){this.search!==z&&(z=this.search,B&&(v=!1,this.searchParams._fromString(this.search),v=!0))}})},s=i.prototype,a=function(f){Object.defineProperty(s,f,{get:function(){return this._anchorElement[f]},set:function(c){this._anchorElement[f]=c},enumerable:!0})};["hash","host","hostname","port","protocol"].forEach(function(f){a(f)}),Object.defineProperty(s,"search",{get:function(){return this._anchorElement.search},set:function(f){this._anchorElement.search=f,this._updateSearchParams()},enumerable:!0}),Object.defineProperties(s,{toString:{get:function(){var f=this;return function(){return f.href}}},href:{get:function(){return this._anchorElement.href.replace(/\?$/,"")},set:function(f){this._anchorElement.href=f,this._updateSearchParams()},enumerable:!0},pathname:{get:function(){return this._anchorElement.pathname.replace(/(^\/?)/,"/")},set:function(f){this._anchorElement.pathname=f},enumerable:!0},origin:{get:function(){var f={"http:":80,"https:":443,"ftp:":21}[this._anchorElement.protocol],c=this._anchorElement.port!=f&&this._anchorElement.port!=="";return this._anchorElement.protocol+"//"+this._anchorElement.hostname+(c?":"+this._anchorElement.port:"")},enumerable:!0},password:{get:function(){return""},set:function(f){},enumerable:!0},username:{get:function(){return""},set:function(f){},enumerable:!0}}),i.createObjectURL=function(f){return o.createObjectURL.apply(o,arguments)},i.revokeObjectURL=function(f){return o.revokeObjectURL.apply(o,arguments)},e.URL=i};if(t()||r(),e.location!==void 0&&!("origin"in e.location)){var n=function(){return e.location.protocol+"//"+e.location.hostname+(e.location.port?":"+e.location.port:"")};try{Object.defineProperty(e.location,"origin",{get:n,enumerable:!0})}catch(o){setInterval(function(){e.location.origin=n()},100)}}})(typeof global!="undefined"?global:typeof window!="undefined"?window:typeof self!="undefined"?self:Sr)});var Qr=Pt((Lt,Kr)=>{/*! + * clipboard.js v2.0.11 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */(function(t,r){typeof Lt=="object"&&typeof Kr=="object"?Kr.exports=r():typeof define=="function"&&define.amd?define([],r):typeof Lt=="object"?Lt.ClipboardJS=r():t.ClipboardJS=r()})(Lt,function(){return function(){var e={686:function(n,o,i){"use strict";i.d(o,{default:function(){return ki}});var s=i(279),a=i.n(s),f=i(370),c=i.n(f),u=i(817),p=i.n(u);function m(j){try{return document.execCommand(j)}catch(T){return!1}}var d=function(T){var w=p()(T);return m("cut"),w},h=d;function v(j){var T=document.documentElement.getAttribute("dir")==="rtl",w=document.createElement("textarea");w.style.fontSize="12pt",w.style.border="0",w.style.padding="0",w.style.margin="0",w.style.position="absolute",w.style[T?"right":"left"]="-9999px";var k=window.pageYOffset||document.documentElement.scrollTop;return w.style.top="".concat(k,"px"),w.setAttribute("readonly",""),w.value=j,w}var B=function(T,w){var k=v(T);w.container.appendChild(k);var F=p()(k);return m("copy"),k.remove(),F},ne=function(T){var w=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body},k="";return typeof T=="string"?k=B(T,w):T instanceof HTMLInputElement&&!["text","search","url","tel","password"].includes(T==null?void 0:T.type)?k=B(T.value,w):(k=p()(T),m("copy")),k},z=ne;function O(j){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?O=function(w){return typeof w}:O=function(w){return w&&typeof Symbol=="function"&&w.constructor===Symbol&&w!==Symbol.prototype?"symbol":typeof w},O(j)}var Ke=function(){var T=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},w=T.action,k=w===void 0?"copy":w,F=T.container,q=T.target,Le=T.text;if(k!=="copy"&&k!=="cut")throw new Error('Invalid "action" value, use either "copy" or "cut"');if(q!==void 0)if(q&&O(q)==="object"&&q.nodeType===1){if(k==="copy"&&q.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if(k==="cut"&&(q.hasAttribute("readonly")||q.hasAttribute("disabled")))throw new Error(`Invalid "target" attribute. You can't cut text from elements with "readonly" or "disabled" attributes`)}else throw new Error('Invalid "target" value, use a valid Element');if(Le)return z(Le,{container:F});if(q)return k==="cut"?h(q):z(q,{container:F})},De=Ke;function Fe(j){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Fe=function(w){return typeof w}:Fe=function(w){return w&&typeof Symbol=="function"&&w.constructor===Symbol&&w!==Symbol.prototype?"symbol":typeof w},Fe(j)}function Oi(j,T){if(!(j instanceof T))throw new TypeError("Cannot call a class as a function")}function nn(j,T){for(var w=0;w0&&arguments[0]!==void 0?arguments[0]:{};this.action=typeof F.action=="function"?F.action:this.defaultAction,this.target=typeof F.target=="function"?F.target:this.defaultTarget,this.text=typeof F.text=="function"?F.text:this.defaultText,this.container=Fe(F.container)==="object"?F.container:document.body}},{key:"listenClick",value:function(F){var q=this;this.listener=c()(F,"click",function(Le){return q.onClick(Le)})}},{key:"onClick",value:function(F){var q=F.delegateTarget||F.currentTarget,Le=this.action(q)||"copy",kt=De({action:Le,container:this.container,target:this.target(q),text:this.text(q)});this.emit(kt?"success":"error",{action:Le,text:kt,trigger:q,clearSelection:function(){q&&q.focus(),window.getSelection().removeAllRanges()}})}},{key:"defaultAction",value:function(F){return yr("action",F)}},{key:"defaultTarget",value:function(F){var q=yr("target",F);if(q)return document.querySelector(q)}},{key:"defaultText",value:function(F){return yr("text",F)}},{key:"destroy",value:function(){this.listener.destroy()}}],[{key:"copy",value:function(F){var q=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body};return z(F,q)}},{key:"cut",value:function(F){return h(F)}},{key:"isSupported",value:function(){var F=arguments.length>0&&arguments[0]!==void 0?arguments[0]:["copy","cut"],q=typeof F=="string"?[F]:F,Le=!!document.queryCommandSupported;return q.forEach(function(kt){Le=Le&&!!document.queryCommandSupported(kt)}),Le}}]),w}(a()),ki=Ri},828:function(n){var o=9;if(typeof Element!="undefined"&&!Element.prototype.matches){var i=Element.prototype;i.matches=i.matchesSelector||i.mozMatchesSelector||i.msMatchesSelector||i.oMatchesSelector||i.webkitMatchesSelector}function s(a,f){for(;a&&a.nodeType!==o;){if(typeof a.matches=="function"&&a.matches(f))return a;a=a.parentNode}}n.exports=s},438:function(n,o,i){var s=i(828);function a(u,p,m,d,h){var v=c.apply(this,arguments);return u.addEventListener(m,v,h),{destroy:function(){u.removeEventListener(m,v,h)}}}function f(u,p,m,d,h){return typeof u.addEventListener=="function"?a.apply(null,arguments):typeof m=="function"?a.bind(null,document).apply(null,arguments):(typeof u=="string"&&(u=document.querySelectorAll(u)),Array.prototype.map.call(u,function(v){return a(v,p,m,d,h)}))}function c(u,p,m,d){return function(h){h.delegateTarget=s(h.target,p),h.delegateTarget&&d.call(u,h)}}n.exports=f},879:function(n,o){o.node=function(i){return i!==void 0&&i instanceof HTMLElement&&i.nodeType===1},o.nodeList=function(i){var s=Object.prototype.toString.call(i);return i!==void 0&&(s==="[object NodeList]"||s==="[object HTMLCollection]")&&"length"in i&&(i.length===0||o.node(i[0]))},o.string=function(i){return typeof i=="string"||i instanceof String},o.fn=function(i){var s=Object.prototype.toString.call(i);return s==="[object Function]"}},370:function(n,o,i){var s=i(879),a=i(438);function f(m,d,h){if(!m&&!d&&!h)throw new Error("Missing required arguments");if(!s.string(d))throw new TypeError("Second argument must be a String");if(!s.fn(h))throw new TypeError("Third argument must be a Function");if(s.node(m))return c(m,d,h);if(s.nodeList(m))return u(m,d,h);if(s.string(m))return p(m,d,h);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function c(m,d,h){return m.addEventListener(d,h),{destroy:function(){m.removeEventListener(d,h)}}}function u(m,d,h){return Array.prototype.forEach.call(m,function(v){v.addEventListener(d,h)}),{destroy:function(){Array.prototype.forEach.call(m,function(v){v.removeEventListener(d,h)})}}}function p(m,d,h){return a(document.body,m,d,h)}n.exports=f},817:function(n){function o(i){var s;if(i.nodeName==="SELECT")i.focus(),s=i.value;else if(i.nodeName==="INPUT"||i.nodeName==="TEXTAREA"){var a=i.hasAttribute("readonly");a||i.setAttribute("readonly",""),i.select(),i.setSelectionRange(0,i.value.length),a||i.removeAttribute("readonly"),s=i.value}else{i.hasAttribute("contenteditable")&&i.focus();var f=window.getSelection(),c=document.createRange();c.selectNodeContents(i),f.removeAllRanges(),f.addRange(c),s=f.toString()}return s}n.exports=o},279:function(n){function o(){}o.prototype={on:function(i,s,a){var f=this.e||(this.e={});return(f[i]||(f[i]=[])).push({fn:s,ctx:a}),this},once:function(i,s,a){var f=this;function c(){f.off(i,c),s.apply(a,arguments)}return c._=s,this.on(i,c,a)},emit:function(i){var s=[].slice.call(arguments,1),a=((this.e||(this.e={}))[i]||[]).slice(),f=0,c=a.length;for(f;f{"use strict";/*! + * escape-html + * Copyright(c) 2012-2013 TJ Holowaychuk + * Copyright(c) 2015 Andreas Lubbe + * Copyright(c) 2015 Tiancheng "Timothy" Gu + * MIT Licensed + */var is=/["'&<>]/;Jo.exports=as;function as(e){var t=""+e,r=is.exec(t);if(!r)return t;var n,o="",i=0,s=0;for(i=r.index;i0&&i[i.length-1])&&(c[0]===6||c[0]===2)){r=0;continue}if(c[0]===3&&(!i||c[1]>i[0]&&c[1]=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function W(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var n=r.call(e),o,i=[],s;try{for(;(t===void 0||t-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(a){s={error:a}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(s)throw s.error}}return i}function D(e,t,r){if(r||arguments.length===2)for(var n=0,o=t.length,i;n1||a(m,d)})})}function a(m,d){try{f(n[m](d))}catch(h){p(i[0][3],h)}}function f(m){m.value instanceof Ze?Promise.resolve(m.value.v).then(c,u):p(i[0][2],m)}function c(m){a("next",m)}function u(m){a("throw",m)}function p(m,d){m(d),i.shift(),i.length&&a(i[0][0],i[0][1])}}function mn(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator],r;return t?t.call(e):(e=typeof xe=="function"?xe(e):e[Symbol.iterator](),r={},n("next"),n("throw"),n("return"),r[Symbol.asyncIterator]=function(){return this},r);function n(i){r[i]=e[i]&&function(s){return new Promise(function(a,f){s=e[i](s),o(a,f,s.done,s.value)})}}function o(i,s,a,f){Promise.resolve(f).then(function(c){i({value:c,done:a})},s)}}function A(e){return typeof e=="function"}function at(e){var t=function(n){Error.call(n),n.stack=new Error().stack},r=e(t);return r.prototype=Object.create(Error.prototype),r.prototype.constructor=r,r}var It=at(function(e){return function(r){e(this),this.message=r?r.length+` errors occurred during unsubscription: +`+r.map(function(n,o){return o+1+") "+n.toString()}).join(` + `):"",this.name="UnsubscriptionError",this.errors=r}});function Ve(e,t){if(e){var r=e.indexOf(t);0<=r&&e.splice(r,1)}}var je=function(){function e(t){this.initialTeardown=t,this.closed=!1,this._parentage=null,this._finalizers=null}return e.prototype.unsubscribe=function(){var t,r,n,o,i;if(!this.closed){this.closed=!0;var s=this._parentage;if(s)if(this._parentage=null,Array.isArray(s))try{for(var a=xe(s),f=a.next();!f.done;f=a.next()){var c=f.value;c.remove(this)}}catch(v){t={error:v}}finally{try{f&&!f.done&&(r=a.return)&&r.call(a)}finally{if(t)throw t.error}}else s.remove(this);var u=this.initialTeardown;if(A(u))try{u()}catch(v){i=v instanceof It?v.errors:[v]}var p=this._finalizers;if(p){this._finalizers=null;try{for(var m=xe(p),d=m.next();!d.done;d=m.next()){var h=d.value;try{dn(h)}catch(v){i=i!=null?i:[],v instanceof It?i=D(D([],W(i)),W(v.errors)):i.push(v)}}}catch(v){n={error:v}}finally{try{d&&!d.done&&(o=m.return)&&o.call(m)}finally{if(n)throw n.error}}}if(i)throw new It(i)}},e.prototype.add=function(t){var r;if(t&&t!==this)if(this.closed)dn(t);else{if(t instanceof e){if(t.closed||t._hasParent(this))return;t._addParent(this)}(this._finalizers=(r=this._finalizers)!==null&&r!==void 0?r:[]).push(t)}},e.prototype._hasParent=function(t){var r=this._parentage;return r===t||Array.isArray(r)&&r.includes(t)},e.prototype._addParent=function(t){var r=this._parentage;this._parentage=Array.isArray(r)?(r.push(t),r):r?[r,t]:t},e.prototype._removeParent=function(t){var r=this._parentage;r===t?this._parentage=null:Array.isArray(r)&&Ve(r,t)},e.prototype.remove=function(t){var r=this._finalizers;r&&Ve(r,t),t instanceof e&&t._removeParent(this)},e.EMPTY=function(){var t=new e;return t.closed=!0,t}(),e}();var Tr=je.EMPTY;function Ft(e){return e instanceof je||e&&"closed"in e&&A(e.remove)&&A(e.add)&&A(e.unsubscribe)}function dn(e){A(e)?e():e.unsubscribe()}var Ae={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1};var st={setTimeout:function(e,t){for(var r=[],n=2;n0},enumerable:!1,configurable:!0}),t.prototype._trySubscribe=function(r){return this._throwIfClosed(),e.prototype._trySubscribe.call(this,r)},t.prototype._subscribe=function(r){return this._throwIfClosed(),this._checkFinalizedStatuses(r),this._innerSubscribe(r)},t.prototype._innerSubscribe=function(r){var n=this,o=this,i=o.hasError,s=o.isStopped,a=o.observers;return i||s?Tr:(this.currentObservers=null,a.push(r),new je(function(){n.currentObservers=null,Ve(a,r)}))},t.prototype._checkFinalizedStatuses=function(r){var n=this,o=n.hasError,i=n.thrownError,s=n.isStopped;o?r.error(i):s&&r.complete()},t.prototype.asObservable=function(){var r=new U;return r.source=this,r},t.create=function(r,n){return new wn(r,n)},t}(U);var wn=function(e){ie(t,e);function t(r,n){var o=e.call(this)||this;return o.destination=r,o.source=n,o}return t.prototype.next=function(r){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.next)===null||o===void 0||o.call(n,r)},t.prototype.error=function(r){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.error)===null||o===void 0||o.call(n,r)},t.prototype.complete=function(){var r,n;(n=(r=this.destination)===null||r===void 0?void 0:r.complete)===null||n===void 0||n.call(r)},t.prototype._subscribe=function(r){var n,o;return(o=(n=this.source)===null||n===void 0?void 0:n.subscribe(r))!==null&&o!==void 0?o:Tr},t}(E);var Et={now:function(){return(Et.delegate||Date).now()},delegate:void 0};var wt=function(e){ie(t,e);function t(r,n,o){r===void 0&&(r=1/0),n===void 0&&(n=1/0),o===void 0&&(o=Et);var i=e.call(this)||this;return i._bufferSize=r,i._windowTime=n,i._timestampProvider=o,i._buffer=[],i._infiniteTimeWindow=!0,i._infiniteTimeWindow=n===1/0,i._bufferSize=Math.max(1,r),i._windowTime=Math.max(1,n),i}return t.prototype.next=function(r){var n=this,o=n.isStopped,i=n._buffer,s=n._infiniteTimeWindow,a=n._timestampProvider,f=n._windowTime;o||(i.push(r),!s&&i.push(a.now()+f)),this._trimBuffer(),e.prototype.next.call(this,r)},t.prototype._subscribe=function(r){this._throwIfClosed(),this._trimBuffer();for(var n=this._innerSubscribe(r),o=this,i=o._infiniteTimeWindow,s=o._buffer,a=s.slice(),f=0;f0?e.prototype.requestAsyncId.call(this,r,n,o):(r.actions.push(this),r._scheduled||(r._scheduled=ut.requestAnimationFrame(function(){return r.flush(void 0)})))},t.prototype.recycleAsyncId=function(r,n,o){var i;if(o===void 0&&(o=0),o!=null?o>0:this.delay>0)return e.prototype.recycleAsyncId.call(this,r,n,o);var s=r.actions;n!=null&&((i=s[s.length-1])===null||i===void 0?void 0:i.id)!==n&&(ut.cancelAnimationFrame(n),r._scheduled=void 0)},t}(Wt);var Tn=function(e){ie(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.flush=function(r){this._active=!0;var n=this._scheduled;this._scheduled=void 0;var o=this.actions,i;r=r||o.shift();do if(i=r.execute(r.state,r.delay))break;while((r=o[0])&&r.id===n&&o.shift());if(this._active=!1,i){for(;(r=o[0])&&r.id===n&&o.shift();)r.unsubscribe();throw i}},t}(Dt);var we=new Tn(On);var R=new U(function(e){return e.complete()});function Vt(e){return e&&A(e.schedule)}function kr(e){return e[e.length-1]}function Qe(e){return A(kr(e))?e.pop():void 0}function Se(e){return Vt(kr(e))?e.pop():void 0}function zt(e,t){return typeof kr(e)=="number"?e.pop():t}var pt=function(e){return e&&typeof e.length=="number"&&typeof e!="function"};function Nt(e){return A(e==null?void 0:e.then)}function qt(e){return A(e[ft])}function Kt(e){return Symbol.asyncIterator&&A(e==null?void 0:e[Symbol.asyncIterator])}function Qt(e){return new TypeError("You provided "+(e!==null&&typeof e=="object"?"an invalid object":"'"+e+"'")+" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.")}function Ki(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var Yt=Ki();function Gt(e){return A(e==null?void 0:e[Yt])}function Bt(e){return ln(this,arguments,function(){var r,n,o,i;return $t(this,function(s){switch(s.label){case 0:r=e.getReader(),s.label=1;case 1:s.trys.push([1,,9,10]),s.label=2;case 2:return[4,Ze(r.read())];case 3:return n=s.sent(),o=n.value,i=n.done,i?[4,Ze(void 0)]:[3,5];case 4:return[2,s.sent()];case 5:return[4,Ze(o)];case 6:return[4,s.sent()];case 7:return s.sent(),[3,2];case 8:return[3,10];case 9:return r.releaseLock(),[7];case 10:return[2]}})})}function Jt(e){return A(e==null?void 0:e.getReader)}function $(e){if(e instanceof U)return e;if(e!=null){if(qt(e))return Qi(e);if(pt(e))return Yi(e);if(Nt(e))return Gi(e);if(Kt(e))return _n(e);if(Gt(e))return Bi(e);if(Jt(e))return Ji(e)}throw Qt(e)}function Qi(e){return new U(function(t){var r=e[ft]();if(A(r.subscribe))return r.subscribe(t);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function Yi(e){return new U(function(t){for(var r=0;r=2;return function(n){return n.pipe(e?_(function(o,i){return e(o,i,n)}):de,Te(1),r?Pe(t):zn(function(){return new Zt}))}}function Nn(){for(var e=[],t=0;t=2,!0))}function ue(e){e===void 0&&(e={});var t=e.connector,r=t===void 0?function(){return new E}:t,n=e.resetOnError,o=n===void 0?!0:n,i=e.resetOnComplete,s=i===void 0?!0:i,a=e.resetOnRefCountZero,f=a===void 0?!0:a;return function(c){var u,p,m,d=0,h=!1,v=!1,B=function(){p==null||p.unsubscribe(),p=void 0},ne=function(){B(),u=m=void 0,h=v=!1},z=function(){var O=u;ne(),O==null||O.unsubscribe()};return g(function(O,Ke){d++,!v&&!h&&B();var De=m=m!=null?m:r();Ke.add(function(){d--,d===0&&!v&&!h&&(p=jr(z,f))}),De.subscribe(Ke),!u&&d>0&&(u=new tt({next:function(Fe){return De.next(Fe)},error:function(Fe){v=!0,B(),p=jr(ne,o,Fe),De.error(Fe)},complete:function(){h=!0,B(),p=jr(ne,s),De.complete()}}),$(O).subscribe(u))})(c)}}function jr(e,t){for(var r=[],n=2;ne.next(document)),e}function K(e,t=document){return Array.from(t.querySelectorAll(e))}function V(e,t=document){let r=ce(e,t);if(typeof r=="undefined")throw new ReferenceError(`Missing element: expected "${e}" to be present`);return r}function ce(e,t=document){return t.querySelector(e)||void 0}function _e(){return document.activeElement instanceof HTMLElement&&document.activeElement||void 0}function rr(e){return L(b(document.body,"focusin"),b(document.body,"focusout")).pipe(He(1),l(()=>{let t=_e();return typeof t!="undefined"?e.contains(t):!1}),N(e===_e()),G())}function Je(e){return{x:e.offsetLeft,y:e.offsetTop}}function Yn(e){return L(b(window,"load"),b(window,"resize")).pipe(Re(0,we),l(()=>Je(e)),N(Je(e)))}function nr(e){return{x:e.scrollLeft,y:e.scrollTop}}function dt(e){return L(b(e,"scroll"),b(window,"resize")).pipe(Re(0,we),l(()=>nr(e)),N(nr(e)))}var Bn=function(){if(typeof Map!="undefined")return Map;function e(t,r){var n=-1;return t.some(function(o,i){return o[0]===r?(n=i,!0):!1}),n}return function(){function t(){this.__entries__=[]}return Object.defineProperty(t.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),t.prototype.get=function(r){var n=e(this.__entries__,r),o=this.__entries__[n];return o&&o[1]},t.prototype.set=function(r,n){var o=e(this.__entries__,r);~o?this.__entries__[o][1]=n:this.__entries__.push([r,n])},t.prototype.delete=function(r){var n=this.__entries__,o=e(n,r);~o&&n.splice(o,1)},t.prototype.has=function(r){return!!~e(this.__entries__,r)},t.prototype.clear=function(){this.__entries__.splice(0)},t.prototype.forEach=function(r,n){n===void 0&&(n=null);for(var o=0,i=this.__entries__;o0},e.prototype.connect_=function(){!zr||this.connected_||(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),xa?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},e.prototype.disconnect_=function(){!zr||!this.connected_||(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},e.prototype.onTransitionEnd_=function(t){var r=t.propertyName,n=r===void 0?"":r,o=ya.some(function(i){return!!~n.indexOf(i)});o&&this.refresh()},e.getInstance=function(){return this.instance_||(this.instance_=new e),this.instance_},e.instance_=null,e}(),Jn=function(e,t){for(var r=0,n=Object.keys(t);r0},e}(),Zn=typeof WeakMap!="undefined"?new WeakMap:new Bn,eo=function(){function e(t){if(!(this instanceof e))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var r=Ea.getInstance(),n=new Ra(t,r,this);Zn.set(this,n)}return e}();["observe","unobserve","disconnect"].forEach(function(e){eo.prototype[e]=function(){var t;return(t=Zn.get(this))[e].apply(t,arguments)}});var ka=function(){return typeof or.ResizeObserver!="undefined"?or.ResizeObserver:eo}(),to=ka;var ro=new E,Ha=I(()=>H(new to(e=>{for(let t of e)ro.next(t)}))).pipe(x(e=>L(Oe,H(e)).pipe(C(()=>e.disconnect()))),J(1));function he(e){return{width:e.offsetWidth,height:e.offsetHeight}}function ge(e){return Ha.pipe(S(t=>t.observe(e)),x(t=>ro.pipe(_(({target:r})=>r===e),C(()=>t.unobserve(e)),l(()=>he(e)))),N(he(e)))}function bt(e){return{width:e.scrollWidth,height:e.scrollHeight}}function sr(e){let t=e.parentElement;for(;t&&(e.scrollWidth<=t.scrollWidth&&e.scrollHeight<=t.scrollHeight);)t=(e=t).parentElement;return t?e:void 0}var no=new E,Pa=I(()=>H(new IntersectionObserver(e=>{for(let t of e)no.next(t)},{threshold:0}))).pipe(x(e=>L(Oe,H(e)).pipe(C(()=>e.disconnect()))),J(1));function cr(e){return Pa.pipe(S(t=>t.observe(e)),x(t=>no.pipe(_(({target:r})=>r===e),C(()=>t.unobserve(e)),l(({isIntersecting:r})=>r))))}function oo(e,t=16){return dt(e).pipe(l(({y:r})=>{let n=he(e),o=bt(e);return r>=o.height-n.height-t}),G())}var fr={drawer:V("[data-md-toggle=drawer]"),search:V("[data-md-toggle=search]")};function io(e){return fr[e].checked}function qe(e,t){fr[e].checked!==t&&fr[e].click()}function Ue(e){let t=fr[e];return b(t,"change").pipe(l(()=>t.checked),N(t.checked))}function $a(e,t){switch(e.constructor){case HTMLInputElement:return e.type==="radio"?/^Arrow/.test(t):!0;case HTMLSelectElement:case HTMLTextAreaElement:return!0;default:return e.isContentEditable}}function Ia(){return L(b(window,"compositionstart").pipe(l(()=>!0)),b(window,"compositionend").pipe(l(()=>!1))).pipe(N(!1))}function ao(){let e=b(window,"keydown").pipe(_(t=>!(t.metaKey||t.ctrlKey)),l(t=>({mode:io("search")?"search":"global",type:t.key,claim(){t.preventDefault(),t.stopPropagation()}})),_(({mode:t,type:r})=>{if(t==="global"){let n=_e();if(typeof n!="undefined")return!$a(n,r)}return!0}),ue());return Ia().pipe(x(t=>t?R:e))}function Me(){return new URL(location.href)}function ot(e){location.href=e.href}function so(){return new E}function co(e,t){if(typeof t=="string"||typeof t=="number")e.innerHTML+=t.toString();else if(t instanceof Node)e.appendChild(t);else if(Array.isArray(t))for(let r of t)co(e,r)}function M(e,t,...r){let n=document.createElement(e);if(t)for(let o of Object.keys(t))typeof t[o]!="undefined"&&(typeof t[o]!="boolean"?n.setAttribute(o,t[o]):n.setAttribute(o,""));for(let o of r)co(n,o);return n}function ur(e){if(e>999){let t=+((e-950)%1e3>99);return`${((e+1e-6)/1e3).toFixed(t)}k`}else return e.toString()}function fo(){return location.hash.substring(1)}function uo(e){let t=M("a",{href:e});t.addEventListener("click",r=>r.stopPropagation()),t.click()}function Fa(){return b(window,"hashchange").pipe(l(fo),N(fo()),_(e=>e.length>0),J(1))}function po(){return Fa().pipe(l(e=>ce(`[id="${e}"]`)),_(e=>typeof e!="undefined"))}function Nr(e){let t=matchMedia(e);return er(r=>t.addListener(()=>r(t.matches))).pipe(N(t.matches))}function lo(){let e=matchMedia("print");return L(b(window,"beforeprint").pipe(l(()=>!0)),b(window,"afterprint").pipe(l(()=>!1))).pipe(N(e.matches))}function qr(e,t){return e.pipe(x(r=>r?t():R))}function pr(e,t={credentials:"same-origin"}){return pe(fetch(`${e}`,t)).pipe(fe(()=>R),x(r=>r.status!==200?Ot(()=>new Error(r.statusText)):H(r)))}function We(e,t){return pr(e,t).pipe(x(r=>r.json()),J(1))}function mo(e,t){let r=new DOMParser;return pr(e,t).pipe(x(n=>n.text()),l(n=>r.parseFromString(n,"text/xml")),J(1))}function lr(e){let t=M("script",{src:e});return I(()=>(document.head.appendChild(t),L(b(t,"load"),b(t,"error").pipe(x(()=>Ot(()=>new ReferenceError(`Invalid script: ${e}`))))).pipe(l(()=>{}),C(()=>document.head.removeChild(t)),Te(1))))}function ho(){return{x:Math.max(0,scrollX),y:Math.max(0,scrollY)}}function bo(){return L(b(window,"scroll",{passive:!0}),b(window,"resize",{passive:!0})).pipe(l(ho),N(ho()))}function vo(){return{width:innerWidth,height:innerHeight}}function go(){return b(window,"resize",{passive:!0}).pipe(l(vo),N(vo()))}function yo(){return Q([bo(),go()]).pipe(l(([e,t])=>({offset:e,size:t})),J(1))}function mr(e,{viewport$:t,header$:r}){let n=t.pipe(X("size")),o=Q([n,r]).pipe(l(()=>Je(e)));return Q([r,t,o]).pipe(l(([{height:i},{offset:s,size:a},{x:f,y:c}])=>({offset:{x:s.x-f,y:s.y-c+i},size:a})))}(()=>{function e(n,o){parent.postMessage(n,o||"*")}function t(...n){return n.reduce((o,i)=>o.then(()=>new Promise(s=>{let a=document.createElement("script");a.src=i,a.onload=s,document.body.appendChild(a)})),Promise.resolve())}var r=class extends EventTarget{constructor(n){super(),this.url=n,this.m=i=>{i.source===this.w&&(this.dispatchEvent(new MessageEvent("message",{data:i.data})),this.onmessage&&this.onmessage(i))},this.e=(i,s,a,f,c)=>{if(s===`${this.url}`){let u=new ErrorEvent("error",{message:i,filename:s,lineno:a,colno:f,error:c});this.dispatchEvent(u),this.onerror&&this.onerror(u)}};let o=document.createElement("iframe");o.hidden=!0,document.body.appendChild(this.iframe=o),this.w.document.open(),this.w.document.write(` + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

Features

+

Design decisions

+
    +
  • Easy: Very easy to set up and get started with.
  • +
  • Intuitive: Designed to be intuitive and easy to use.
  • +
  • Pythonic SDK: Pythonic SDK for building your own monitoring infrastructure.
  • +
  • Robust: Get production-ready MLOps system.
  • +
  • Kubernetes: Get production-ready code. With automatic interactive documentation.
  • +
+

Descriptive Statistics

+

Whitebox provides a nice list of descriptive statistics of input dataset, making the overview of data easy.

+

Models Metrics

+

Classification Models

+

Whitebox includes comprehensive metrics tracking for classification models. This allows users to easily evaluate the performance of their classification models and identify areas for improvement. Additionally, users can set custom thresholds for each metric to receive alerts when performance deviates from expected results.

+

Regression Models

+

Whitebox includes comprehensive metrics tracking for regression models. This allows users to easily evaluate the performance of their regression models and identify areas for improvement. Additionally, users can set custom thresholds for each metric to receive alerts when performance deviates from expected results.

+

Data / Concept Drift Monitoring

+

Whitebox includes monitoring for data and concept drift. This feature tracks changes in the distribution of the data used to train models and alerts users when significant changes occur. Additionally, it detects changes in the performance of deployed models and alerts users when significant drift is detected. This allows users to identify and address data and model drift early, reducing the risk of poor model performance.

+

Explainable AI

+

Whitebox includes model explaination also. The explainability performed through the explainability report which allows user to know anytime which feature had the most impact on model's prediction.

+

Alerts

+

Whitebox includes an alerting system that allows users to set custom thresholds for metrics and receive notifications when performance deviates from expected results. These alerts can be delivered via email, SMS, or webhook, and can be customized to fit the needs of any organization. This allows users to quickly respond to changes in model performance and take action to improve results.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/helm_charts/whitebox/Chart.yaml b/helm_charts/whitebox/Chart.yaml deleted file mode 100644 index edc6c3a..0000000 --- a/helm_charts/whitebox/Chart.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: v2 -name: whitebox -description: A Machine learning monitoring platform - -type: application -version: 0.1.0 -appVersion: "0.1.0" - -dependencies: - - name: postgresql - version: 12.1.5 - repository: https://charts.bitnami.com/bitnami - condition: postgresql.enabled diff --git a/helm_charts/whitebox/artifacthub-repo.yml b/helm_charts/whitebox/artifacthub-repo.yml deleted file mode 100644 index 4f3040f..0000000 --- a/helm_charts/whitebox/artifacthub-repo.yml +++ /dev/null @@ -1,4 +0,0 @@ -repositoryID: 5276bf98-7f0a-407d-ba4d-5b3083801cd6 -owners: - - name: Squaredev - email: hello@squaredev.io diff --git a/helm_charts/whitebox/templates/_helpers.tpl b/helm_charts/whitebox/templates/_helpers.tpl deleted file mode 100644 index cd9b333..0000000 --- a/helm_charts/whitebox/templates/_helpers.tpl +++ /dev/null @@ -1,62 +0,0 @@ -{{/* -Expand the name of the chart. -*/}} -{{- define "whitebox.name" -}} -{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Create a default fully qualified app name. -We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). -If release name contains chart name it will be used as a full name. -*/}} -{{- define "whitebox.fullname" -}} -{{- if .Values.fullnameOverride }} -{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- $name := default .Chart.Name .Values.nameOverride }} -{{- if contains $name .Release.Name }} -{{- .Release.Name | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} -{{- end }} -{{- end }} -{{- end }} - -{{/* -Create chart name and version as used by the chart label. -*/}} -{{- define "whitebox.chart" -}} -{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Common labels -*/}} -{{- define "whitebox.labels" -}} -helm.sh/chart: {{ include "whitebox.chart" . }} -{{ include "whitebox.selectorLabels" . }} -{{- if .Chart.AppVersion }} -app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} -{{- end }} -app.kubernetes.io/managed-by: {{ .Release.Service }} -{{- end }} - -{{/* -Selector labels -*/}} -{{- define "whitebox.selectorLabels" -}} -app.kubernetes.io/name: {{ include "whitebox.name" . }} -app.kubernetes.io/instance: {{ .Release.Name }} -{{- end }} - -{{/* -Create the name of the service account to use -*/}} -{{- define "whitebox.serviceAccountName" -}} -{{- if .Values.serviceAccount.create }} -{{- default (include "whitebox.fullname" .) .Values.serviceAccount.name }} -{{- else }} -{{- default "default" .Values.serviceAccount.name }} -{{- end }} -{{- end }} diff --git a/helm_charts/whitebox/templates/deployment.yaml b/helm_charts/whitebox/templates/deployment.yaml deleted file mode 100644 index 997d7b7..0000000 --- a/helm_charts/whitebox/templates/deployment.yaml +++ /dev/null @@ -1,48 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: {{ include "whitebox.fullname" . }} - labels: - {{- include "whitebox.labels" . | nindent 4 }} -spec: - replicas: {{ .Values.replicaCount }} - selector: - matchLabels: - {{- include "whitebox.selectorLabels" . | nindent 6 }} - template: - metadata: - {{- with .Values.podAnnotations }} - annotations: - {{- toYaml . | nindent 8 }} - {{- end }} - labels: - {{- include "whitebox.selectorLabels" . | nindent 8 }} - spec: - securityContext: - {{- toYaml .Values.podSecurityContext | nindent 8 }} - containers: - - name: whitebox - securityContext: - {{- toYaml .Values.securityContext | nindent 12 }} - image: sqdhub/whitebox:{{ .Values.image.tag }} - ports: - - name: http - containerPort: 8000 - protocol: TCP - env: - - name: DATABASE_URL - value: postgresql://{{ .Values.postgresql.auth.username | default "postgres" }}:{{ .Values.postgresql.auth.password | default "postgres" }}@{{ .Release.Name }}-postgresql/postgres - resources: - {{- toYaml .Values.resources | nindent 12 }} - {{- with .Values.nodeSelector }} - nodeSelector: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.affinity }} - affinity: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.tolerations }} - tolerations: - {{- toYaml . | nindent 8 }} - {{- end }} diff --git a/helm_charts/whitebox/templates/ingress.yaml b/helm_charts/whitebox/templates/ingress.yaml deleted file mode 100644 index fd5d88a..0000000 --- a/helm_charts/whitebox/templates/ingress.yaml +++ /dev/null @@ -1,61 +0,0 @@ -{{- if .Values.ingress.enabled -}} -{{- $fullName := include "whitebox.fullname" . -}} -{{- $svcPort := .Values.service.port -}} -{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} - {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }} - {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}} - {{- end }} -{{- end }} -{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1 -{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1beta1 -{{- else -}} -apiVersion: extensions/v1beta1 -{{- end }} -kind: Ingress -metadata: - name: {{ $fullName }} - labels: - {{- include "whitebox.labels" . | nindent 4 }} - {{- with .Values.ingress.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -spec: - {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }} - ingressClassName: {{ .Values.ingress.className }} - {{- end }} - {{- if .Values.ingress.tls }} - tls: - {{- range .Values.ingress.tls }} - - hosts: - {{- range .hosts }} - - {{ . | quote }} - {{- end }} - secretName: {{ .secretName }} - {{- end }} - {{- end }} - rules: - {{- range .Values.ingress.hosts }} - - host: {{ .host | quote }} - http: - paths: - {{- range .paths }} - - path: {{ .path }} - {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} - pathType: {{ .pathType }} - {{- end }} - backend: - {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} - service: - name: {{ $fullName }} - port: - number: {{ $svcPort }} - {{- else }} - serviceName: {{ $fullName }} - servicePort: {{ $svcPort }} - {{- end }} - {{- end }} - {{- end }} -{{- end }} diff --git a/helm_charts/whitebox/templates/service.yaml b/helm_charts/whitebox/templates/service.yaml deleted file mode 100644 index dfb5549..0000000 --- a/helm_charts/whitebox/templates/service.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: {{ include "whitebox.fullname" . }} - labels: - {{- include "whitebox.labels" . | nindent 4 }} -spec: - type: {{ .Values.service.type }} - ports: - - port: {{ .Values.service.port }} - targetPort: http - protocol: TCP - name: http - selector: - {{- include "whitebox.selectorLabels" . | nindent 4 }} diff --git a/helm_charts/whitebox/values.yaml b/helm_charts/whitebox/values.yaml deleted file mode 100644 index 469b36a..0000000 --- a/helm_charts/whitebox/values.yaml +++ /dev/null @@ -1,55 +0,0 @@ -replicaCount: 1 - -image: - tag: main - -nameOverride: '' -fullnameOverride: '' - -podAnnotations: {} - -podSecurityContext: {} - -securityContext: {} - -service: - type: ClusterIP - port: 80 - - -ingress: - enabled: false - # className: '' - # annotations: - # kubernetes.io/ingress.class: nginx - # kubernetes.io/tls-acme: "true" - # cert-manager.io/cluster-issuer: letsencrypt-prod - # hosts: - # - host: whitebox.example.com - # paths: - # - path: / - # pathType: Prefix - # tls: - # - secretName: whitebox-tls - # hosts: - # - whitebox.example.com - -resources: {} - -nodeSelector: {} - -tolerations: [] - -affinity: {} - -postgresql: - enabled: true - storageClass: standard - - auth: - username: whitebox - password: whitebox - - primary: - persistence: - size: 100Mi diff --git a/docs/mkdocs/docs/img/favicon.png b/img/favicon.png similarity index 100% rename from docs/mkdocs/docs/img/favicon.png rename to img/favicon.png diff --git a/docs/mkdocs/docs/img/logo-white.png b/img/logo-white.png similarity index 100% rename from docs/mkdocs/docs/img/logo-white.png rename to img/logo-white.png diff --git a/assets/logo.svg b/img/logo.svg similarity index 100% rename from assets/logo.svg rename to img/logo.svg diff --git a/index.html b/index.html new file mode 100644 index 0000000..f553a32 --- /dev/null +++ b/index.html @@ -0,0 +1,620 @@ + + + + + + + + + + + + + + + + + + + + Whitebox + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

Whitebox

+

+ + Whitebox + +

+

+ Whitebox is an open source E2E ML monitoring platform with edge capabilities that plays nicely with kubernetes + +

+ +
+

Documentation: https://whitebox-ai.github.io/whitebox/

+

Source Code: https://github.com/whitebox-ai/whitebox

+

Roadmap: https://github.com/whitebox-ai/whitebox/milestones

+

Issue tracking https://github.com/orgs/whitebox-ai/projects/1/views/3

+

Discord: https://discord.gg/bkAcsx4V

+
+

Whitebox is a dynamic open source E2E ML monitoring platform with edge capabilities that plays nicely with kubernetes.

+

The current key features are:

+
    +
  • Descriptive statistics
  • +
  • Classification models evaluation metrics
  • +
  • Data / Concept drift monitoring
  • +
  • Explainable AI
  • +
  • Alerts
  • +
+

Design guidelines:

+
    +
  • Easy: Very easy to set up and get started with.
  • +
  • Intuitive: Designed to be intuitive and easy to use.
  • +
  • Pythonic SDK: Pythonic SDK for building your own monitoring infrastructure.
  • +
  • Robust: Get production-ready MLOps system.
  • +
  • Kubernetes: Get production-ready code. With automatic interactive documentation.
  • +
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/mkdocs/docs/js/custom.js b/js/custom.js similarity index 100% rename from docs/mkdocs/docs/js/custom.js rename to js/custom.js diff --git a/docs/mkdocs/docs/js/mathjax-config.js b/js/mathjax-config.js similarity index 100% rename from docs/mkdocs/docs/js/mathjax-config.js rename to js/mathjax-config.js diff --git a/docs/mkdocs/docs/js/termynal.js b/js/termynal.js similarity index 100% rename from docs/mkdocs/docs/js/termynal.js rename to js/termynal.js diff --git a/metric-definitions/index.html b/metric-definitions/index.html new file mode 100644 index 0000000..dcca38a --- /dev/null +++ b/metric-definitions/index.html @@ -0,0 +1,1420 @@ + + + + + + + + + + + + + + + + + + + + + + Glossary / Metric definitions - Whitebox + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + + + + + +
+
+ + + + +

Glossary / Metric definitions

+

Descriptive statistics

+

Missing values

+

Missing values metric calculates the summary of the number of missing values per feature. Missing values include NaN in numeric arrays, NaN or None in object arrays and NaT in datetimelike.

+

Non-Missing values

+

Non-Missing values metric calculates the summary of the number of non-missing values per feature. Non-Missing values are all values beside NaN for numeric arrays, NaN or None for object arrays and NaT for datetimelike.

+

Mean or Average value

+

Returns the average value per feature excluding NaN and null values.

+

Minimum value

+

Returns the minimum value per feature.

+

Maximum value

+

Returns the maximum value per feature.

+

Summary

+

Returns the summary of the values per feature. Excludes NaN and null values during calculations.

+

Standard Deviation

+

Returns the sample standard deviation per feature normalized by N-1 excluding NaN and null values during calculations. Formula:

+
+
+σ = \sqrt{Σ(x_i-μ)^2 \over Ν-1} +
+ +
+

Variance

+

Returns the unbiased variance per feature normalized by N-1 excluding NaN and null values during calculations. Formula:

+
+
+σ^2 = {Σ(x_i-μ)^2 \over Ν-1} +
+ +
+

Classification evaluation metrics

+

Confusion Matrix

+

Returns the number of TP, TN, FP and FN. In case of a multi-class classification returns the number of TP, TN, FP and FN per class.

+

A typical example for binary classification could be seen below in which:

+
    +
  • 20 observations were correctly classified as positive.
  • +
  • 10 observations were incorrectly classified as negative while they were actually positive.
  • +
  • 5 observations were incorrectly classified as positive while they were actually negative.
  • +
  • 75 observations were correctly classified as negative.
  • +
+ + + + + + + + + + + + + + + + + + + + +
Predicted PositivePredicted Negative
Actual Positive20 (TP)10 (FN)
Actual Negative5 (FP)75 (TN)
+

A typical example for multi-class classification could be seen below in which:

+
    +
  • 15 observations were correctly classified as Class A.
  • +
  • 5 observations were incorrectly classified as Class B while they were actually Class A.
  • +
  • 2 observations were incorrectly classified as Class C while they were actually Class A.
  • +
  • 4 observations were incorrectly classified as Class A while they were actually Class B.
  • +
  • 20 observations were correctly classified as Class B.
  • +
  • 3 observations were incorrectly classified as Class C while they were actually Class B.
  • +
  • 2 observations were incorrectly classified as Class A while they were actually Class C.
  • +
  • 8 observations were incorrectly classified as Class B while they were actually Class C.
  • +
  • 25 observations were correctly classified as Class C.
  • +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Predicted Class APredicted Class BPredicted Class C
Actual Class A15 (TP_A)52
Actual Class B420 (TP_B)3
Actual Class C2825 (TP_C)
+

Accuracy

+

Returns the accuracy classification score. In multi-class classification, this function computes subset accuracy: the set of labels predicted for a sample must exactly match the corresponding set of labels in y_true. Formula:

+
+
+accuracy = {(TP + TN) \over (TP + TN + FP + FN)} +
+ +
+

Precision

+

Returns the precision classification score. In multi-class classification, returns the below 3 scores:

+
    +
  • micro: Calculate metrics globally by counting the total true positives, false negatives and false positives.
  • +
  • macro: Calculate metrics for each label, and find their unweighted mean. This does not take label imbalance into account.
  • +
  • weighted: Calculate metrics for each label, and find their average weighted by support (the number of true instances for each label). This alters ‘macro’ to account for label imbalance; it can result in an F-score that is not between precision and recall.
  • +
+

Formula:

+
+
+precision = {TP \over (TP + FP)} +
+ +
+

Recall

+

Returns the recall classification score. In multi-class classification, returns the below 3 scores:

+
    +
  • micro: Calculate metrics globally by counting the total true positives, false negatives and false positives.
  • +
  • macro: Calculate metrics for each label, and find their unweighted mean. This does not take label imbalance into account.
  • +
  • weighted: Calculate metrics for each label, and find their average weighted by support (the number of true instances for each label). This alters ‘macro’ to account for label imbalance; it can result in an F-score that is not between precision and recall.
  • +
+

Formula:

+
+
+recall = {TP \over (TP + FN)} +
+ +
+

F1 score

+

Returns the f1 classification score. In multi-class classification, returns the below 3 scores:

+
    +
  • micro: Calculate metrics globally by counting the total true positives, false negatives and false positives.
  • +
  • macro: Calculate metrics for each label, and find their unweighted mean. This does not take label imbalance into account.
  • +
  • weighted: Calculate metrics for each label, and find their average weighted by support (the number of true instances for each label). This alters ‘macro’ to account for label imbalance; it can result in an F-score that is not between precision and recall.
  • +
+

Formula:

+
+
+F1 = 2 * {(precision * recall) \over (precision + recall)} +
+ +
+

Regression evaluation metrics

+

R-Squared

+

In a regression model, R-Squared (also known as R2 or the coefficient of determination) is a statistical metric that quantifies how much of the variance in the dependent variable can be accounted for by the independent variable. R-squared, thus, displays how well the data match the regression model (the goodness of fit).

+

Formula:

+
+
+R^2 = {SS_{regression} \over SS_{total}} +
+ +
+

where:

+
    +
  • SS_{regression} = sum of squares due to regression (explained sum of squares)
  • +
  • SS_{total} = total sum of squares
  • +
+

Mean squared error

+

The degree of inaccuracy in statistical models is gauged by the mean squared error, or MSE. Between the observed and projected values, it evaluates the average squared difference. The MSE is equal to 0 when a model is error-free. As model error increases, its value increases.

+

Formula:

+
+
+MSE = {Σ(y_{i}-y'_{i})^2 \over n} +
+ +
+

where:

+
    +
  • y_{i} = i_{th} observation
  • +
  • y'_{i} = corresponding predicted value
  • +
  • n = number of observations
  • +
+

Mean absolute error

+

The mean absolute error of a model with respect to a test set is the mean of the absolute values of the individual prediction errors on over all instances in the test set. Each prediction error is the difference between the true value and the predicted value for the instance.

+

Formula:

+
+
+MAE = {{{Σ^2}_{i=1}}|y_{i}-x_{i}| \over n} +
+ +
+

where:

+
    +
  • y_{i} = prediction
  • +
  • x_{i} = true value
  • +
  • n = number of observations
  • +
+

Statistical tests and techniques

+

Kolmogorov-Smirnov Two Sample test

+

When there are two datasets then K-S two sample test can be used to test the agreement between their distributions. The null hypothesis states that there is no difference between the two distributions. Formula:

+
+
+D = Max|{F_a(X)-F_b(X)}| +
+ +
+

where:

+
    +
  • a = observations from first dataset.
  • +
  • b = observations from second dataset.
  • +
  • F_n(X) = observed cumulative frequency distribution of a random sample of n observations.
  • +
+

Chi-squared test

+

A chi-square test is a statistical test used to compare 2 datasets. The purpose of this test is to determine if a difference between data of 2 datasets is due to chance, or if it is due to a relationship between the variables you are studying. Formula:

+
+
+x^2 = Σ{(O_i - E_i)^2 \over E_i} +
+ +
+

where:

+
    +
  • x^2 = chi-square
  • +
  • O_i = 1st dataset values
  • +
  • E_i = 2nd dataset values
  • +
+

Z-score for independent proportions

+

The purpose of the z-test for independent proportions is to compare two independent datasets. Formula:

+
+
+Z = {p_1 - p_2 \over \sqrt{p' q' ({1\over n_1} + {1\over n_2})}} +
+ +
+

where:

+
    +
  • Z = Z-statistic which is compared to the standard normal deviate
  • +
  • p_1 , p_2 = two datasets proportions
  • +
  • p' = estimated true proportion under the null hypothesis
  • +
  • q' = (1-p')
  • +
  • n_1 , n_2 = number of observations in two datasets
  • +
+

Wasserstein distance

+

The Wasserstein distance is a metric to describe the distance between the distributions of 2 datasets. Formula:

+
+
+W = ({\int_0^1}{{|{F_A}^{-1}(u) - {F_B}^{-1}(u)|}^2 du} )^{0.5} +
+ +
+

where:

+
    +
  • W = Wasserstein distance
  • +
  • F_A , F_B = corresponding cumulative distribution functions of two datasets
  • +
  • {F_A}^{-1} , {F_B}^{-1} = respective quantile functions
  • +
+

Jensen–Shannon divergence

+

The Jensen–Shannon divergence is a method of measuring the similarity between two probability distributions. Formula:

+
+
+JS = 1/2 * KL(P || M) + 1/2 * KL(Q || M) +
+ +
+

where:

+
    +
  • JS = Jensen–Shannon divergence
  • +
  • KL = Kullback-Leibler divergence: – sum x in X P(x) * log(Q(x) / P(x))
  • +
  • P,Q = distributions of 2 datasets
  • +
  • M = {1 \over 2} * (P+Q)
  • +
+

Machine learning models

+

Light Gradient Boosting Machine

+

LightGBM is an open-source framework for gradient boosted machines. By default LightGBM will train a Gradient Boosted Decision Tree (GBDT), but it also supports random forests, Dropouts meet Multiple Additive Regression Trees (DART), and Gradient Based One-Side Sampling (Goss). The framework is fast and was designed for distributed training. It supports large-scale datasets and training on the GPU. LightGBM also provide highly optimised, scalable and fast implementations of gradient boosted machines (GBMs). The official documentation of LightGBM is accessible here.

+

Explainable AI models

+

Local Interpretable Model-agnostic Explanations

+

LIME (Local Interpretable Model-agnostic Explanations), an explainable AI technique, aids in illuminating a machine learning model and making each prediction's particular implications understandable. The technique is appropriate for local explanations since it describes the classifier for a particular single instance. LIME modifies the input data to produce a succession of false data that only partially retain the original features. The original implementation along with documentation of LIME technique could be found in this repo.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ml-monitoring/index.html b/ml-monitoring/index.html new file mode 100644 index 0000000..8fdebb7 --- /dev/null +++ b/ml-monitoring/index.html @@ -0,0 +1,734 @@ + + + + + + + + + + + + + + + + + + + + + + Understanding machine learning monitoring - Whitebox + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + + + + + +
+
+ + + + +

Understanding machine learning monitoring

+

Machine learning (ML) monitoring is a crucial process for ensuring the performance and reliability of ML models and systems. It involves tracking metrics, identifying issues, and improving overall performance. In this article, we will explore the key aspects of ML monitoring and its importance in today's data-driven world.

+

What is machine learning monitoring?

+

ML monitoring is the process of tracking the performance and behavior of ML models and systems. This includes monitoring metrics such as accuracy, precision, recall, and model performance over time. By monitoring these metrics, organizations can identify when a model is performing poorly or behaving unexpectedly and take action to correct it. Additionally, ML monitoring can be used to track the performance of different models and compare them to identify which model is performing best.

+

Detecting poor performance

+

One of the key aspects of ML monitoring is being able to detect when a model is performing poorly or behaving unexpectedly. This can be done by setting up alerts on certain metrics or by monitoring for unexpected changes in the model's behavior. For example, if a model's accuracy suddenly drops, an alert can be triggered to notify the team responsible for maintaining the model. This allows them to quickly investigate and address the issue, minimizing the impact on the organization's operations.

+

Monitoring data and concept drift

+

Another important aspect of ML monitoring is the ability to detect and address data and concept drifting. Data drifting refers to the gradual change in the distribution or characteristics of the input data over time. As the data changes, the model's performance may decrease, which is why it is important to detect data drifting and retrain the model with new data. Concept drifting, on the other hand, happens when the statistical properties of the target variable, which the model is trying to predict, change over time. This can happen due to various reasons such as changes in the underlying data distribution, overfitting, or degradation of the model's parameters. To address these issues, beside drift detection, organizations can use techniques such as monitoring of the performance of the model over time, retraining the model regularly etc.

+

Monitoring input data

+

Another important aspect of ML monitoring is being able to track the input data that is being fed into the model. This can be used to identify any issues with the data, such as missing values, and to ensure that the data is being processed correctly. This helps to ensure that the model is making accurate predictions and that the data is being used effectively.

+

Monitoring infrastructure and resources

+

Finally, it is important to monitor the infrastructure and resources that the ML models are running on. This includes monitoring things like CPU and memory usage, disk space, and network traffic. This helps to ensure that the models have the resources they need to perform well and to identify any potential bottlenecks that may be impacting performance. By monitoring the infrastructure, organizations can ensure that their models are running smoothly and can make adjustments as needed.

+

Conclusion

+

In conclusion, ML monitoring is an essential process that helps organizations ensure the performance and reliability of their ML models and systems. By tracking metrics, identifying issues, and monitoring input data and infrastructure, organizations can ensure that their models are delivering accurate and reliable results and that their systems are running smoothly. With the increasing reliance on data and ML, the importance of ML monitoring will only continue to grow.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pytest.ini b/pytest.ini deleted file mode 100644 index d447a8f..0000000 --- a/pytest.ini +++ /dev/null @@ -1,6 +0,0 @@ -[pytest] -pythonpath = . -log_cli=true -; log_cli_level = "INFO" -; addopts = --ignore=whitebox/tests/v1/**.py -markers = order \ No newline at end of file diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index b73353d..0000000 --- a/requirements.txt +++ /dev/null @@ -1,116 +0,0 @@ -anyio==3.6.2 -appdirs==1.4.4 -asyncpg==0.27.0 -attrs==22.2.0 -bcrypt==4.0.1 -black==23.1.0 -brotlipy==0.7.0 -certifi==2022.12.7 -cffi==1.15.1 -cfgv==3.3.1 -charset-normalizer==3.0.1 -click==8.1.3 -colorama==0.4.6 -contourpy==1.0.7 -coverage==7.1.0 -crontab==1.0.0 -cryptography==39.0.1 -cycler==0.11.0 -databases==0.7.0 -distlib==0.3.6 -docopt==0.6.2 -evidently==0.2.4 -exceptiongroup==1.1.0 -fastapi==0.90.1 -filelock==3.9.0 -fonttools==4.38.0 -ghp-import==2.1.0 -h11==0.14.0 -httpcore==0.16.3 -httpx==0.23.3 -identify==2.5.17 -idna==3.4 -imageio==2.25.0 -iniconfig==2.0.0 -Jinja2==3.1.2 -joblib==1.2.0 -kiwisolver==1.4.4 -lightgbm==3.3.5 -lime==0.2.0.1 -Markdown==3.3.7 -MarkupSafe==2.1.2 -matplotlib==3.6.3 -mergedeep==1.3.4 -mkdocs==1.4.2 -mkdocs-material==9.0.12 -mkdocs-material-extensions==1.1.1 -mypy-extensions==1.0.0 -networkx==3.0 -nltk==3.8.1 -nodeenv==1.7.0 -numpy==1.24.2 -packaging==23.0 -pandas==1.5.3 -pathspec==0.11.0 -patsy==0.5.3 -Pillow==9.4.0 -pip==23.0 -platformdirs==3.0.0 -plotly==5.13.0 -pluggy==1.0.0 -pooch==1.6.0 -pre-commit==3.0.4 -psycopg2-binary==2.9.5 -pycparser==2.21 -pydantic==1.10.4 -Pygments==2.14.0 -pymdown-extensions==9.9.2 -pyOpenSSL==23.0.0 -pyparsing==3.0.9 -PySocks==1.7.1 -pytest==7.2.1 -pytest-order==1.0.1 -pytest-watch==4.2.0 -python-dateutil==2.8.2 -python-dotenv==0.21.1 -pytz==2022.7.1 -PyWavelets==1.4.1 -PyYAML==5.4.1 -pyyaml_env_tag==0.1 -regex==2022.10.31 -requests==2.28.2 -requests-mock==1.10.0 -rfc3986==1.5.0 -scikit-image==0.19.3 -scikit-learn==1.2.1 -scipy==1.10.0 -setuptools==67.1.0 -six==1.16.0 -sniffio==1.3.0 -SQLAlchemy==1.4.46 -stack-data==0.5.1 -starlette==0.23.1 -statsmodels==0.13.5 -streamlit==1.18.1 -tenacity==8.2.1 -threadpoolctl==3.1.0 -tifffile==2023.2.3 -tomli==2.0.1 -tqdm==4.64.1 -traitlets==5.4.0 -typed-ast==1.5.4 -typer==0.6.1 -types-python-dateutil==2.8.19 -typing_extensions==4.4.0 -unicodedata2==14.0.0 -urllib3==1.26.14 -uvicorn==0.20.0 -virtualenv==20.19.0 -watchdog==2.2.1 -wcwidth==0.2.5 -wheel==0.38.4 -wrapt==1.14.1 -xgboost==1.6.2 -yarl==1.8.1 -zipp==3.10.0 - diff --git a/scripts/decrypt_api_key.py b/scripts/decrypt_api_key.py deleted file mode 100644 index 282120f..0000000 --- a/scripts/decrypt_api_key.py +++ /dev/null @@ -1,14 +0,0 @@ -import os -import sys - -sys.path.append(os.getcwd()) - -from whitebox.utils.passwords import decrypt_api_key -from whitebox.core.settings import get_settings - -value = sys.argv[1] -settings = get_settings() - -if __name__ == "__main__": - api_key = decrypt_api_key(value, settings.SECRET_KEY.encode()) - print(api_key) diff --git a/sdk-docs/index.html b/sdk-docs/index.html new file mode 100644 index 0000000..3f59fd1 --- /dev/null +++ b/sdk-docs/index.html @@ -0,0 +1,975 @@ + + + + + + + + + + + + + + + + + + + + SDK Documentation - Whitebox + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

SDK Documentation

+

This is the documentation for Whitebox's SDK. For an interactive experience, you can expirement with the SDK's Jupyter notebooks.

+

Models

+

create_model(name, type, prediction, labels=None, description="")

+

Creates a model in the database. This model works as placeholder for all the actual model's metadata.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterTypeDescription
namestrThe name of the model.
typestrThe model's type. Possible values: binary, multi_class, regression.
predictionstrThe prediction of the model.
labelsDict[str, int]The model's labels. Defaults to None.
descriptionstrThe model's description. Defaults to an empty string "".
+
+

Info

+

Labels are not applicable ONLY in regression models.

+
+

get_model(model_id)

+

Fetches the model with the specified ID from the database.

+ + + + + + + + + + + + + + + +
ParameterTypeDescription
model_idstrThe ID of the model.
+

delete_model(model_id)

+

Deletes the model with the specified ID from the database.

+ + + + + + + + + + + + + + + +
ParameterTypeDescription
model_idstrThe ID of the model.
+

Training Datasets

+

log_training_dataset(model_id, non_processed, processed)

+

Inserts a set of dataset rows into the database. When the dataset rows are successfully saved, the pipeline for training the model is triggered. Then, the trained model is saved in the /models/your_model's_id folder of whitebox's root directory.

+ + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterTypeDescription
model_idstrThe ID of the model.
non_processedpd.DataFrameThe non processed training dataset.
processedpd.DataFrameThe processed training dataset.
+
+

Info

+

The non processed and processed dataframes must have the same length.

+
+

Inferences

+

log_inferences(model_id, non_processed, processed, timestamps, actuals=None)

+

Inserts a set of inference rows into the database.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterTypeDescription
model_idstrThe ID of the model.
non_processedpd.DataFrameThe non processed inferences.
processedpd.DataFrameThe processed inferences.
timestampspd.SeriesThe timestamps for each inference row in the inference dataframes.
actualspd.SeriesThe actuals for each inference row in the inference dataframes. Defaults to None.
+
+

Info

+

The non processed and processed dataframes along with the timestamps and actuals series must ALL have the same length.

+
+

get_xai_row(inference_row_id)

+

Produces an explainability report for a specific inference row.

+ + + + + + + + + + + + + + + +
ParameterTypeDescription
inference_row_idstrThe ID of the inference row.
+

Monitors

+

create_model_monitor(model_id, name, status, metric, severity, email, feature=None, lower_threshold=None)

+

Creates a monitor for a specific metric.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterTypeDescription
model_idstrThe ID of the model.
namestrThe name of the monitor.
statusMonitorStatusThe status of the monitor. Possible values for MonitorStatus: active, inactive.
metricMonitorMetricsThe metric that will be monitored. Possible values for MonitorMetrics: accuracy, precision, recall, f1, r_square, mean_squared_error, mean_absolute_error, data_drift, concept_drift.
severityAlertSeverityThe severity of the alert the monitor produces. Possible values for AlertSeverity: low, mid, high.
emailstrThe email to which the alert will be sent.
featurestrThe feature to be monitored. Defaults to None.
lower_thresholdfloatThe threshold below which an alert will be produced. Defaults to None.
+
+

Note

+

Some metrics like the data drift don't use a threshold so the feature that will be monitored should be inserted. In any case, both feature and lower_threshold can't be None at the same time.

+
+

Metrics

+

get_drifting_metrics(model_id)

+

Fetches a model's drifting metric reports.

+ + + + + + + + + + + + + + + +
ParameterTypeDescription
model_idstrThe ID of the model.
+

get_descriptive_statistics(model_id)

+

Fetches a model's descriptive statistics reports.

+ + + + + + + + + + + + + + + +
ParameterTypeDescription
model_idstrThe ID of the model.
+

get_performance_metrics(model_id)

+

Fetches a model's performance metric reports.

+ + + + + + + + + + + + + + + +
ParameterTypeDescription
model_idstrThe ID of the model.
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/search/search_index.json b/search/search_index.json new file mode 100644 index 0000000..5c0f7b6 --- /dev/null +++ b/search/search_index.json @@ -0,0 +1 @@ +{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Whitebox","text":"

Whitebox is an open source E2E ML monitoring platform with edge capabilities that plays nicely with kubernetes

Documentation: https://whitebox-ai.github.io/whitebox/

Source Code: https://github.com/whitebox-ai/whitebox

Roadmap: https://github.com/whitebox-ai/whitebox/milestones

Issue tracking https://github.com/orgs/whitebox-ai/projects/1/views/3

Discord: https://discord.gg/bkAcsx4V

Whitebox is a dynamic open source E2E ML monitoring platform with edge capabilities that plays nicely with kubernetes.

The current key features are:

  • Descriptive statistics
  • Classification models evaluation metrics
  • Data / Concept drift monitoring
  • Explainable AI
  • Alerts

Design guidelines:

  • Easy: Very easy to set up and get started with.
  • Intuitive: Designed to be intuitive and easy to use.
  • Pythonic SDK: Pythonic SDK for building your own monitoring infrastructure.
  • Robust: Get production-ready MLOps system.
  • Kubernetes: Get production-ready code. With automatic interactive documentation.
"},{"location":"features/","title":"Features","text":""},{"location":"features/#design-decisions","title":"Design decisions","text":"
  • Easy: Very easy to set up and get started with.
  • Intuitive: Designed to be intuitive and easy to use.
  • Pythonic SDK: Pythonic SDK for building your own monitoring infrastructure.
  • Robust: Get production-ready MLOps system.
  • Kubernetes: Get production-ready code. With automatic interactive documentation.
"},{"location":"features/#descriptive-statistics","title":"Descriptive Statistics","text":"

Whitebox provides a nice list of descriptive statistics of input dataset, making the overview of data easy.

"},{"location":"features/#models-metrics","title":"Models Metrics","text":""},{"location":"features/#classification-models","title":"Classification Models","text":"

Whitebox includes comprehensive metrics tracking for classification models. This allows users to easily evaluate the performance of their classification models and identify areas for improvement. Additionally, users can set custom thresholds for each metric to receive alerts when performance deviates from expected results.

"},{"location":"features/#regression-models","title":"Regression Models","text":"

Whitebox includes comprehensive metrics tracking for regression models. This allows users to easily evaluate the performance of their regression models and identify areas for improvement. Additionally, users can set custom thresholds for each metric to receive alerts when performance deviates from expected results.

"},{"location":"features/#data-concept-drift-monitoring","title":"Data / Concept Drift Monitoring","text":"

Whitebox includes monitoring for data and concept drift. This feature tracks changes in the distribution of the data used to train models and alerts users when significant changes occur. Additionally, it detects changes in the performance of deployed models and alerts users when significant drift is detected. This allows users to identify and address data and model drift early, reducing the risk of poor model performance.

"},{"location":"features/#explainable-ai","title":"Explainable AI","text":"

Whitebox includes model explaination also. The explainability performed through the explainability report which allows user to know anytime which feature had the most impact on model's prediction.

"},{"location":"features/#alerts","title":"Alerts","text":"

Whitebox includes an alerting system that allows users to set custom thresholds for metrics and receive notifications when performance deviates from expected results. These alerts can be delivered via email, SMS, or webhook, and can be customized to fit the needs of any organization. This allows users to quickly respond to changes in model performance and take action to improve results.

"},{"location":"metric-definitions/","title":"Glossary / Metric definitions","text":""},{"location":"metric-definitions/#descriptive-statistics","title":"Descriptive statistics","text":""},{"location":"metric-definitions/#missing-values","title":"Missing values","text":"

Missing values metric calculates the summary of the number of missing values per feature. Missing values include NaN in numeric arrays, NaN or None in object arrays and NaT in datetimelike.

"},{"location":"metric-definitions/#non-missing-values","title":"Non-Missing values","text":"

Non-Missing values metric calculates the summary of the number of non-missing values per feature. Non-Missing values are all values beside NaN for numeric arrays, NaN or None for object arrays and NaT for datetimelike.

"},{"location":"metric-definitions/#mean-or-average-value","title":"Mean or Average value","text":"

Returns the average value per feature excluding NaN and null values.

"},{"location":"metric-definitions/#minimum-value","title":"Minimum value","text":"

Returns the minimum value per feature.

"},{"location":"metric-definitions/#maximum-value","title":"Maximum value","text":"

Returns the maximum value per feature.

"},{"location":"metric-definitions/#summary","title":"Summary","text":"

Returns the summary of the values per feature. Excludes NaN and null values during calculations.

"},{"location":"metric-definitions/#standard-deviation","title":"Standard Deviation","text":"

Returns the sample standard deviation per feature normalized by N-1 excluding NaN and null values during calculations. Formula:

\u03c3 = \\sqrt{\u03a3(x_i-\u03bc)^2 \\over \u039d-1}"},{"location":"metric-definitions/#variance","title":"Variance","text":"

Returns the unbiased variance per feature normalized by N-1 excluding NaN and null values during calculations. Formula:

\u03c3^2 = {\u03a3(x_i-\u03bc)^2 \\over \u039d-1} \u03c3^2 = {\u03a3(x_i-\u03bc)^2 \\over \u039d-1}"},{"location":"metric-definitions/#classification-evaluation-metrics","title":"Classification evaluation metrics","text":""},{"location":"metric-definitions/#confusion-matrix","title":"Confusion Matrix","text":"

Returns the number of TP, TN, FP and FN. In case of a multi-class classification returns the number of TP, TN, FP and FN per class.

A typical example for binary classification could be seen below in which:

  • 20 observations were correctly classified as positive.
  • 10 observations were incorrectly classified as negative while they were actually positive.
  • 5 observations were incorrectly classified as positive while they were actually negative.
  • 75 observations were correctly classified as negative.
Predicted Positive Predicted Negative Actual Positive 20 (TP) 10 (FN) Actual Negative 5 (FP) 75 (TN)

A typical example for multi-class classification could be seen below in which:

  • 15 observations were correctly classified as Class A.
  • 5 observations were incorrectly classified as Class B while they were actually Class A.
  • 2 observations were incorrectly classified as Class C while they were actually Class A.
  • 4 observations were incorrectly classified as Class A while they were actually Class B.
  • 20 observations were correctly classified as Class B.
  • 3 observations were incorrectly classified as Class C while they were actually Class B.
  • 2 observations were incorrectly classified as Class A while they were actually Class C.
  • 8 observations were incorrectly classified as Class B while they were actually Class C.
  • 25 observations were correctly classified as Class C.
Predicted Class A Predicted Class B Predicted Class C Actual Class A 15 (TP_A) 5 2 Actual Class B 4 20 (TP_B) 3 Actual Class C 2 8 25 (TP_C)"},{"location":"metric-definitions/#accuracy","title":"Accuracy","text":"

Returns the accuracy classification score. In multi-class classification, this function computes subset accuracy: the set of labels predicted for a sample must exactly match the corresponding set of labels in y_true. Formula:

accuracy = {(TP + TN) \\over (TP + TN + FP + FN)} accuracy = {(TP + TN) \\over (TP + TN + FP + FN)}"},{"location":"metric-definitions/#precision","title":"Precision","text":"

Returns the precision classification score. In multi-class classification, returns the below 3 scores:

  • micro: Calculate metrics globally by counting the total true positives, false negatives and false positives.
  • macro: Calculate metrics for each label, and find their unweighted mean. This does not take label imbalance into account.
  • weighted: Calculate metrics for each label, and find their average weighted by support (the number of true instances for each label). This alters \u2018macro\u2019 to account for label imbalance; it can result in an F-score that is not between precision and recall.

Formula:

precision = {TP \\over (TP + FP)} precision = {TP \\over (TP + FP)}"},{"location":"metric-definitions/#recall","title":"Recall","text":"

Returns the recall classification score. In multi-class classification, returns the below 3 scores:

  • micro: Calculate metrics globally by counting the total true positives, false negatives and false positives.
  • macro: Calculate metrics for each label, and find their unweighted mean. This does not take label imbalance into account.
  • weighted: Calculate metrics for each label, and find their average weighted by support (the number of true instances for each label). This alters \u2018macro\u2019 to account for label imbalance; it can result in an F-score that is not between precision and recall.

Formula:

recall = {TP \\over (TP + FN)} recall = {TP \\over (TP + FN)}"},{"location":"metric-definitions/#f1-score","title":"F1 score","text":"

Returns the f1 classification score. In multi-class classification, returns the below 3 scores:

  • micro: Calculate metrics globally by counting the total true positives, false negatives and false positives.
  • macro: Calculate metrics for each label, and find their unweighted mean. This does not take label imbalance into account.
  • weighted: Calculate metrics for each label, and find their average weighted by support (the number of true instances for each label). This alters \u2018macro\u2019 to account for label imbalance; it can result in an F-score that is not between precision and recall.

Formula:

F1 = 2 * {(precision * recall) \\over (precision + recall)} F1 = 2 * {(precision * recall) \\over (precision + recall)}"},{"location":"metric-definitions/#regression-evaluation-metrics","title":"Regression evaluation metrics","text":""},{"location":"metric-definitions/#r-squared","title":"R-Squared","text":"

In a regression model, R-Squared (also known as R2 or the coefficient of determination) is a statistical metric that quantifies how much of the variance in the dependent variable can be accounted for by the independent variable. R-squared, thus, displays how well the data match the regression model (the goodness of fit).

Formula:

R^2 = {SS_{regression} \\over SS_{total}} R^2 = {SS_{regression} \\over SS_{total}}

where:

  • SS_{regression}SS_{regression} = sum of squares due to regression (explained sum of squares)
  • SS_{total}SS_{total} = total sum of squares
"},{"location":"metric-definitions/#mean-squared-error","title":"Mean squared error","text":"

The degree of inaccuracy in statistical models is gauged by the mean squared error, or MSE. Between the observed and projected values, it evaluates the average squared difference. The MSE is equal to 0 when a model is error-free. As model error increases, its value increases.

Formula:

MSE = {\u03a3(y_{i}-y'_{i})^2 \\over n} MSE = {\u03a3(y_{i}-y'_{i})^2 \\over n}

where:

  • y_{i}y_{i} = i_{th}i_{th} observation
  • y'_{i}y'_{i} = corresponding predicted value
  • nn = number of observations
"},{"location":"metric-definitions/#mean-absolute-error","title":"Mean absolute error","text":"

The mean absolute error of a model with respect to a test set is the mean of the absolute values of the individual prediction errors on over all instances in the test set. Each prediction error is the difference between the true value and the predicted value for the instance.

Formula:

MAE = {{{\u03a3^2}_{i=1}}|y_{i}-x_{i}| \\over n} MAE = {{{\u03a3^2}_{i=1}}|y_{i}-x_{i}| \\over n}

where:

  • y_{i}y_{i} = prediction
  • x_{i}x_{i} = true value
  • nn = number of observations
"},{"location":"metric-definitions/#statistical-tests-and-techniques","title":"Statistical tests and techniques","text":""},{"location":"metric-definitions/#kolmogorov-smirnov-two-sample-test","title":"Kolmogorov-Smirnov Two Sample test","text":"

When there are two datasets then K-S two sample test can be used to test the agreement between their distributions. The null hypothesis states that there is no difference between the two distributions. Formula:

D = Max|{F_a(X)-F_b(X)}| D = Max|{F_a(X)-F_b(X)}|

where:

  • aa = observations from first dataset.
  • bb = observations from second dataset.
  • F_n(X)F_n(X) = observed cumulative frequency distribution of a random sample of n observations.
"},{"location":"metric-definitions/#chi-squared-test","title":"Chi-squared test","text":"

A chi-square test is a statistical test used to compare 2 datasets. The purpose of this test is to determine if a difference between data of 2 datasets is due to chance, or if it is due to a relationship between the variables you are studying. Formula:

x^2 = \u03a3{(O_i - E_i)^2 \\over E_i} x^2 = \u03a3{(O_i - E_i)^2 \\over E_i}

where:

  • x^2x^2 = chi-square
  • O_iO_i = 1st dataset values
  • E_iE_i = 2nd dataset values
"},{"location":"metric-definitions/#z-score-for-independent-proportions","title":"Z-score for independent proportions","text":"

The purpose of the z-test for independent proportions is to compare two independent datasets. Formula:

Z = {p_1 - p_2 \\over \\sqrt{p' q' ({1\\over n_1} + {1\\over n_2})}} Z = {p_1 - p_2 \\over \\sqrt{p' q' ({1\\over n_1} + {1\\over n_2})}}

where:

  • ZZ = Z-statistic which is compared to the standard normal deviate
  • p_1 , p_2p_1 , p_2 = two datasets proportions
  • p'p' = estimated true proportion under the null hypothesis
  • q'q' = (1-p')(1-p')
  • n_1 , n_2n_1 , n_2 = number of observations in two datasets
"},{"location":"metric-definitions/#wasserstein-distance","title":"Wasserstein distance","text":"

The Wasserstein distance is a metric to describe the distance between the distributions of 2 datasets. Formula:

W = ({\\int_0^1}{{|{F_A}^{-1}(u) - {F_B}^{-1}(u)|}^2 du} )^{0.5} W = ({\\int_0^1}{{|{F_A}^{-1}(u) - {F_B}^{-1}(u)|}^2 du} )^{0.5}

where:

  • WW = Wasserstein distance
  • F_A , F_BF_A , F_B = corresponding cumulative distribution functions of two datasets
  • {F_A}^{-1} , {F_B}^{-1}{F_A}^{-1} , {F_B}^{-1} = respective quantile functions
"},{"location":"metric-definitions/#jensenshannon-divergence","title":"Jensen\u2013Shannon divergence","text":"

The Jensen\u2013Shannon divergence is a method of measuring the similarity between two probability distributions. Formula:

JS = 1/2 * KL(P || M) + 1/2 * KL(Q || M) JS = 1/2 * KL(P || M) + 1/2 * KL(Q || M)

where:

  • JSJS = Jensen\u2013Shannon divergence
  • KLKL = Kullback-Leibler divergence: \u2013 sum x\u2013 sum x in XX P(x)P(x) * log(Q(x) / P(x))log(Q(x) / P(x))
  • P,QP,Q = distributions of 2 datasets
  • MM = {1 \\over 2} * (P+Q){1 \\over 2} * (P+Q)
"},{"location":"metric-definitions/#machine-learning-models","title":"Machine learning models","text":""},{"location":"metric-definitions/#light-gradient-boosting-machine","title":"Light Gradient Boosting Machine","text":"

LightGBM is an open-source framework for gradient boosted machines. By default LightGBM will train a Gradient Boosted Decision Tree (GBDT), but it also supports random forests, Dropouts meet Multiple Additive Regression Trees (DART), and Gradient Based One-Side Sampling (Goss). The framework is fast and was designed for distributed training. It supports large-scale datasets and training on the GPU. LightGBM also provide highly optimised, scalable and fast implementations of gradient boosted machines (GBMs). The official documentation of LightGBM is accessible here.

"},{"location":"metric-definitions/#explainable-ai-models","title":"Explainable AI models","text":""},{"location":"metric-definitions/#local-interpretable-model-agnostic-explanations","title":"Local Interpretable Model-agnostic Explanations","text":"

LIME (Local Interpretable Model-agnostic Explanations), an explainable AI technique, aids in illuminating a machine learning model and making each prediction's particular implications understandable. The technique is appropriate for local explanations since it describes the classifier for a particular single instance. LIME modifies the input data to produce a succession of false data that only partially retain the original features. The original implementation along with documentation of LIME technique could be found in this repo.

"},{"location":"ml-monitoring/","title":"Understanding machine learning monitoring","text":"

Machine learning (ML) monitoring is a crucial process for ensuring the performance and reliability of ML models and systems. It involves tracking metrics, identifying issues, and improving overall performance. In this article, we will explore the key aspects of ML monitoring and its importance in today's data-driven world.

"},{"location":"ml-monitoring/#what-is-machine-learning-monitoring","title":"What is machine learning monitoring?","text":"

ML monitoring is the process of tracking the performance and behavior of ML models and systems. This includes monitoring metrics such as accuracy, precision, recall, and model performance over time. By monitoring these metrics, organizations can identify when a model is performing poorly or behaving unexpectedly and take action to correct it. Additionally, ML monitoring can be used to track the performance of different models and compare them to identify which model is performing best.

"},{"location":"ml-monitoring/#detecting-poor-performance","title":"Detecting poor performance","text":"

One of the key aspects of ML monitoring is being able to detect when a model is performing poorly or behaving unexpectedly. This can be done by setting up alerts on certain metrics or by monitoring for unexpected changes in the model's behavior. For example, if a model's accuracy suddenly drops, an alert can be triggered to notify the team responsible for maintaining the model. This allows them to quickly investigate and address the issue, minimizing the impact on the organization's operations.

"},{"location":"ml-monitoring/#monitoring-data-and-concept-drift","title":"Monitoring data and concept drift","text":"

Another important aspect of ML monitoring is the ability to detect and address data and concept drifting. Data drifting refers to the gradual change in the distribution or characteristics of the input data over time. As the data changes, the model's performance may decrease, which is why it is important to detect data drifting and retrain the model with new data. Concept drifting, on the other hand, happens when the statistical properties of the target variable, which the model is trying to predict, change over time. This can happen due to various reasons such as changes in the underlying data distribution, overfitting, or degradation of the model's parameters. To address these issues, beside drift detection, organizations can use techniques such as monitoring of the performance of the model over time, retraining the model regularly etc.

"},{"location":"ml-monitoring/#monitoring-input-data","title":"Monitoring input data","text":"

Another important aspect of ML monitoring is being able to track the input data that is being fed into the model. This can be used to identify any issues with the data, such as missing values, and to ensure that the data is being processed correctly. This helps to ensure that the model is making accurate predictions and that the data is being used effectively.

"},{"location":"ml-monitoring/#monitoring-infrastructure-and-resources","title":"Monitoring infrastructure and resources","text":"

Finally, it is important to monitor the infrastructure and resources that the ML models are running on. This includes monitoring things like CPU and memory usage, disk space, and network traffic. This helps to ensure that the models have the resources they need to perform well and to identify any potential bottlenecks that may be impacting performance. By monitoring the infrastructure, organizations can ensure that their models are running smoothly and can make adjustments as needed.

"},{"location":"ml-monitoring/#conclusion","title":"Conclusion","text":"

In conclusion, ML monitoring is an essential process that helps organizations ensure the performance and reliability of their ML models and systems. By tracking metrics, identifying issues, and monitoring input data and infrastructure, organizations can ensure that their models are delivering accurate and reliable results and that their systems are running smoothly. With the increasing reliance on data and ML, the importance of ML monitoring will only continue to grow.

"},{"location":"sdk-docs/","title":"SDK Documentation","text":"

This is the documentation for Whitebox's SDK. For an interactive experience, you can expirement with the SDK's Jupyter notebooks.

"},{"location":"sdk-docs/#models","title":"Models","text":"

create_model(name, type, prediction, labels=None, description=\"\")

Creates a model in the database. This model works as placeholder for all the actual model's metadata.

Parameter Type Description name str The name of the model. type str The model's type. Possible values: binary, multi_class, regression. prediction str The prediction of the model. labels Dict[str, int] The model's labels. Defaults to None. description str The model's description. Defaults to an empty string \"\".

Info

Labels are not applicable ONLY in regression models.

get_model(model_id)

Fetches the model with the specified ID from the database.

Parameter Type Description model_id str The ID of the model.

delete_model(model_id)

Deletes the model with the specified ID from the database.

Parameter Type Description model_id str The ID of the model."},{"location":"sdk-docs/#training-datasets","title":"Training Datasets","text":"

log_training_dataset(model_id, non_processed, processed)

Inserts a set of dataset rows into the database. When the dataset rows are successfully saved, the pipeline for training the model is triggered. Then, the trained model is saved in the /models/your_model's_id folder of whitebox's root directory.

Parameter Type Description model_id str The ID of the model. non_processed pd.DataFrame The non processed training dataset. processed pd.DataFrame The processed training dataset.

Info

The non processed and processed dataframes must have the same length.

"},{"location":"sdk-docs/#inferences","title":"Inferences","text":"

log_inferences(model_id, non_processed, processed, timestamps, actuals=None)

Inserts a set of inference rows into the database.

Parameter Type Description model_id str The ID of the model. non_processed pd.DataFrame The non processed inferences. processed pd.DataFrame The processed inferences. timestamps pd.Series The timestamps for each inference row in the inference dataframes. actuals pd.Series The actuals for each inference row in the inference dataframes. Defaults to None.

Info

The non processed and processed dataframes along with the timestamps and actuals series must ALL have the same length.

get_xai_row(inference_row_id)

Produces an explainability report for a specific inference row.

Parameter Type Description inference_row_id str The ID of the inference row."},{"location":"sdk-docs/#monitors","title":"Monitors","text":"

create_model_monitor(model_id, name, status, metric, severity, email, feature=None, lower_threshold=None)

Creates a monitor for a specific metric.

Parameter Type Description model_id str The ID of the model. name str The name of the monitor. status MonitorStatus The status of the monitor. Possible values for MonitorStatus: active, inactive. metric MonitorMetrics The metric that will be monitored. Possible values for MonitorMetrics: accuracy, precision, recall, f1, r_square, mean_squared_error, mean_absolute_error, data_drift, concept_drift. severity AlertSeverity The severity of the alert the monitor produces. Possible values for AlertSeverity: low, mid, high. email str The email to which the alert will be sent. feature str The feature to be monitored. Defaults to None. lower_threshold float The threshold below which an alert will be produced. Defaults to None.

Note

Some metrics like the data drift don't use a threshold so the feature that will be monitored should be inserted. In any case, both feature and lower_threshold can't be None at the same time.

"},{"location":"sdk-docs/#metrics","title":"Metrics","text":"

get_drifting_metrics(model_id)

Fetches a model's drifting metric reports.

Parameter Type Description model_id str The ID of the model.

get_descriptive_statistics(model_id)

Fetches a model's descriptive statistics reports.

Parameter Type Description model_id str The ID of the model.

get_performance_metrics(model_id)

Fetches a model's performance metric reports.

Parameter Type Description model_id str The ID of the model."},{"location":"tutorial/installation/","title":"Installation","text":""},{"location":"tutorial/installation/#docker","title":"Docker","text":"

Install whitebox server and all of its dependencies using docker-compose

Copy the following code in a file named docker-compose.yml:

version: \"3.10\"\nname: Whitebox\nservices:\npostgres:\nimage: postgres:15\nrestart: unless-stopped\nenvironment:\n- POSTGRES_USER=postgres\n- POSTGRES_PASSWORD=postgres\n- POSTGRES_MULTIPLE_DATABASES=test # postgres db is created by default\nlogging:\noptions:\nmax-size: 10m\nmax-file: \"3\"\nports:\n- \"5432:5432\"\nvolumes:\n- wb_data:/var/lib/postgresql/data\nnetworks:\n- whitebox\nwhitebox:\nimage: sqdhub/whitebox:main\nrestart: unless-stopped\nenvironment:\n- APP_NAME=Whitebox | Docker\n- DATABASE_URL=postgresql://postgres:postgres@postgres:5432/postgres\n- SECRET_KEY=<add_your_own> # Optional, if not set the API key won't be encrypted\nports:\n- \"8000:8000\"\ndepends_on:\n- postgres\nnetworks:\n- whitebox\nvolumes:\nwb_data:\nnetworks:\nwhitebox:\nname: whitebox\n

With your terminal navigate to docker-compose.yml's location and then run the following command:

$  docker-compose up\n
"},{"location":"tutorial/installation/#kubernetes","title":"Kubernetes","text":"

You can also install Whitebox server and all of its dependencies in your k8s cluster using helm:

helm repo add squaredev https://chartmuseum.squaredev.io/\nhelm repo update\nhelm install whitebox squaredev/whitebox\n
"},{"location":"tutorial/metrics/","title":"Metrics Calculation","text":"

Info

The metrics are automatically calculated in a set interval for all models in the database.

Depending on the data you have provided, the metrics calculation process will try to as many metrics possible for the specific model.

"},{"location":"tutorial/metrics/#metric-requirements","title":"Metric Requirements","text":"

All metrics require that inferences are provided for the specific model. If not, the whole process is skipped. Each metric though has different requirements that need to be fulfilled in order to be calculated. The requirements are listed in the following sections.

"},{"location":"tutorial/metrics/#descriptive-statistics","title":"Descriptive Statistics","text":"

The descriptive statistics are calculated per feature on any given dataset.

Metric Type of data missing_count numerical & categorical non_missing_count numerical & categorical mean numerical minimum numerical maximum numerical sum numerical standard_deviation numerical variance numerical"},{"location":"tutorial/metrics/#drifting-metrics","title":"Drifting Metrics","text":"

The target of drift metrics is to calculate the data drift between 2 datasets. Currently supported drift types are:

  • Data drift
  • Concept drift

Requirements:

  • Inferences
  • Training Dataset

Note

If actuals aren't provided for all inferences, then ONLY the inferences that have actuals will be used for the calculation of the drifting metrics.

"},{"location":"tutorial/metrics/#data-drift","title":"Data drift","text":"

An analysis happens comparing the current data to the reference data estimating the distributions of each feature in the two datasets. The schema of both datasets should be identical.

Returns a drift summary of the following form:

{\n\"timestamp\": \"the timestamp of the report\",\n\"drift_summary\": {\n\"number_of_columns\": \"total number of dataset columns\",\n\"number_of_drifted_columns\": \"total number of drifted columns\",\n\"share_of_drifted_columns\": \"number_of_drifted_columns/number_of_columns\",\n\"dataset_drift\": \"Boolean based on the criteria below\",\n\"drift_by_columns\": {\n\"column1\": {\n\"column_name\": \"column1\",\n\"column_type\": \"the type of column (e.g. num)\",\n\"stattest_name\": \"the statistical test tha was used\",\n\"drift_score\": \"the drifting score based on the test\",\n\"drift_detected\": \"Boolean based on the criteria below\",\n\"threshold\": \"a float number based on the criteria below\"\n},\n\"column2\": {\"...\"}\n}\n}\n}\n

Logic to choose the appropriate statistical test is based on:

  • feature type: categorical or numerical
  • the number of observations in the reference dataset
  • the number of unique values in the feature (n_unique)

For small data with <= 1000 observations in the reference dataset:

  • For numerical features (n_unique > 5): two-sample Kolmogorov-Smirnov test.
  • For categorical features or numerical features with n_unique <= 5: chi-squared test.
  • For binary categorical features (n_unique <= 2), we use the proportion difference test for independent samples based on Z-score.

All tests use a 0.95 confidence level by default.

For larger data with > 1000 observations in the reference dataset:

  • For numerical features (n_unique > 5): Wasserstein Distance.
  • For categorical features or numerical with n_unique <= 5): Jensen\u2013Shannon divergence.

All tests use a threshold = 0.1 by default.

"},{"location":"tutorial/metrics/#concept-drift","title":"Concept drift","text":"

An analysis happens comparing the current target feature to the reference target feature.

Returns a concept drift summary of the following form:

{\n\"timestamp\": \"the timestamp of the report\",\n\"concept_drift_summary\": {\n\"column_name\": \"column1\",\n\"column_type\": \"the type of column (e.g. num)\",\n\"stattest_name\": \"the statistical test tha was used\",\n\"threshold\": \"threshold used based on criteria below\",\n\"drift_score\": \"the drifting score based on the test\",\n\"drift_detected\": \"Boolean based on the criteria below,\"\n}\n}\n

Logic to choose the appropriate statistical test is based on:

  • the number of observations in the reference dataset
  • the number of unique values in the target (n_unique)

For small data with <= 1000 observations in the reference dataset:

  • For categorical target with n_unique > 2: chi-squared test.
  • For binary categorical target (n_unique <= 2), we use the proportion difference test for independent samples based on Z-score.

All tests use a 0.95 confidence level by default.

For larger data with > 1000 observations in the reference dataset we use Jensen\u2013Shannon divergence with a threshold = 0.1 .

"},{"location":"tutorial/metrics/#performance-evaluation-metrics","title":"Performance Evaluation Metrics","text":"

Requirements:

  • Inferences
  • Actuals for the inferences

The target of evaluation metrics is to evaluate the quality of an machine learning model. Currently supported models are:

  • Binary classification
  • Multi-class classification
  • Regression
Metric Supported model confusion matrix binary classification & multi-class classification accuracy binary classification & multi-class classification precision binary classification & multi-class classification recall binary classification & multi-class classification f1 score binary classification & multi-class classification r_square regression mean_squared_error regression mean_absolute_error regression"},{"location":"tutorial/metrics/#explainability","title":"Explainability","text":"

Requirements:

  • Inferences

The target of the explainability feature is to provide a contribution score of each feature to each individual prediction, in a try to explain how the model concluded in the specific prediction. To achieve this we define 3 Levels of confidence in the explainability feature, based on how accessible or not is the client's input:

  • Level-0: In this level a replacement model is trained in the same training data as client's model, and used for the explainability feature.
  • Level-1 (pending): In this level a surrogate model is trained in a way of trying to achieve the same predictions as client's model, and used for the explainability feature.
  • Level-2 (pending): Client's model is used for the explainability feature.
"},{"location":"tutorial/metrics/#level-0-confidence","title":"Level-0 confidence","text":"

At this level a replacement model is trained in the same training data as client's model, and used for the explainability feature. Below there is a table of used models per machine learning task.

Model Task LightGBM binary classification & multi-class classification & regression

The fine tuning of models, through a hyper-parameters exploration is a pending task for now.

The trained model along with the inference data are used as input in LIME library, and the below report is provided - presenting the contribution of each feature in a specific prediction (the report includes all the feature contribution score to an descending order based on the absolute score value):

{\n\"feature1\": \"contribution score\",\n\"feature2\": \"contribution score\",\n\"feature3\": \"contribution score\"\n}\n
"},{"location":"tutorial/metrics/#level-1-confidence","title":"Level-1 confidence","text":"

Coming soon

"},{"location":"tutorial/metrics/#level-2-confidence","title":"Level-2 confidence","text":"

Coming soon

"},{"location":"tutorial/monitors_alerts/","title":"Monitors and Alerts","text":""},{"location":"tutorial/monitors_alerts/#monitors","title":"Monitors","text":"

You can create a monitor in whitebox so that alert are created automaticaly when some value is out of bounds. Here is an example:

from whitebox import Whitebox, MonitorStatus, MonitorMetrics, AlertSeverity\nwb = Whitebox(host=\"127.0.0.1:8000\", api_key=\"some_api_key\")\nmodel_monitor = wb.create_model_monitor(\nmodel_id=\"mock_model_id\",\nname=\"test\",\nstatus=MonitorStatus.active,\nmetric=MonitorMetrics.accuracy,\nseverity=AlertSeverity.high,\nemail=\"jackie.chan@somemail.io\",\nlower_threshold=0.7\n)\n
"},{"location":"tutorial/monitors_alerts/#alerts","title":"Alerts","text":"

Once the metrics reports have been produced, the monitoring alert pipeline is triggered. This means that if you have created any model monitors for a specific metric, alerts will be created if certain criteria are met, based on the thresholds and the monitor types you have specified.

"},{"location":"tutorial/sdk/","title":"Using Whitebox SDK","text":""},{"location":"tutorial/sdk/#installation","title":"Installation","text":"

Installing Whitebox is a pretty easy job. Just install it like any other python package.

Install the SDK with pip:

$  pip install whitebox-sdk\n

All the required packages will be automatically installed!

Now you're good to go!

"},{"location":"tutorial/sdk/#initial-setup","title":"Initial Setup","text":"

In order to run Whitebox, you will need the application's API key. This key will be produced for you during the initial run of the Uvicorn live server. Assuming you run the server with docker compose (you can find more in the install page of the tutorial), you will see the following output:

$ docker compose up\n\n...\n<span style=\"color: green;\">INFO</span>: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)\n<span style=\"color: green;\">INFO</span>: Started reloader process [4450] using StatReload\n<span style=\"color: green;\">INFO</span>: Started server process [4452]\n<span style=\"color: green;\">INFO</span>: Waiting for application startup.\n<span style=\"color: green;\">INFO</span>: Created username: admin, API key: some_api_key\n<span style=\"color: green;\">INFO</span>: Application startup complete.\n...\n

Info

Keep this API key somewhere safe!

If you lose it, you will need to delete the admin user in your database and re-run the live serve to produce a new key!

After you get the API key, all you have to do is create an instance of the Whitebox class adding your host and API key as parameters:

from whitebox import Whitebox\nwb = Whitebox(host=\"http://127.0.0.1:8000\", api_key=\"some_api_key\")\n

Now you're ready to start using Whitebox!

"},{"location":"tutorial/sdk/#models","title":"Models","text":""},{"location":"tutorial/sdk/#creating-a-model","title":"Creating a Model","text":"

In order to start adding training datasets and inferences, you first need to create a model.

Let's create a sample model:

wb.create_model(\nname=\"Model 1\",\ntype=\"binary\",\nlabels={\n'additionalProp1': 0,\n'additionalProp2': 1\n},\nprediction=\"target\"\n)\n

For more details about the schema accepted property types visit the Models section in the SDK documentation.

"},{"location":"tutorial/sdk/#fetching-a-model","title":"Fetching a Model","text":"

Getting a model from the database is as easy as it sounds. You'll just need the model_id:

wb.get_model(\"some_model_id\")\n
"},{"location":"tutorial/sdk/#deleting-a-model","title":"Deleting a model","text":"

Deleting a model is as easy as fetching a model. Just use the model_id:

wb.delete_model(\"some_model_id\")\n

Warning

You will have to be extra careful when deleting a model because all datasets, inferences, monitors and literally everything will be deleted from the database along with the model itself!

"},{"location":"tutorial/sdk/#loading-training-datasets","title":"Loading Training Datasets","text":"

Once you have created a model you can start loading your data. Let's start with the training dataset!

In our example we will create a pd.DataFrame from a .csv file. Of course you can use any method you like to create your pd.DataFrame as long as your non-processed and processed datasets have the same amount of rows (a.k.a. the same length) and there are more than one rows!

import pandas as pd\nnon_processed_df = pd.read_csv(\"path/to/file/non_processed_data.csv\")\nprocessed_df = pd.read_csv(\"path/to/file/processed_data.csv\")\nwb.log_training_dataset(\nmodel_id=\"some_model_id\",\nnon_processed=non_processed_df,\nprocessed=processed_df\n)\n

Note

When your training dataset is saved in the database, the model training process will begin excecuting, based on this dataset and the model it's associated with. That's why you need to load all the rows of your training dataset in the same batch.

"},{"location":"tutorial/sdk/#loading-inferences","title":"Loading Inferences","text":"

To load your inferences you have to follow the exact same procedure as with the training datasets. The only difference is that you need to provide a pd.Series with the timestamps and (optionally) a pd.Series with the actuals, whose indices should match the ones in the non-processed and processed pd.DataFrames.

In our example let's assume that both the non-processed and processed pd.DataFrames have 10 rows each:

import pandas as pd\nnon_processed_df = pd.read_csv(\"path/to/file/non_processed_data.csv\")\nprocessed_df = pd.read_csv(\"path/to/file/processed_data.csv\")\n# Timestamps and actuals should have a length of 10\ntimestamps = pd.Series([\"2022-12-22T12:13:27.879738\"] * 10)\nactuals = pd.Series([0, 1, 1, 1, 0, 0, 1, 1, 0, 0])\nwb.log_inferences(\nmodel_id=\"some_model_id\",\nnon_processed=non_processed_df,\nprocessed=processed_df,\ntimestamps=timestamps,\nactuals=actuals\n)\n

Warning

Make sure you add the actuals if you already know them, because as of now, there's no ability to add them at a later time by updating the inference rows.

"}]} \ No newline at end of file diff --git a/setup.py b/setup.py deleted file mode 100644 index cf39713..0000000 --- a/setup.py +++ /dev/null @@ -1,27 +0,0 @@ -from setuptools import setup, find_packages -from pathlib import Path - - -VERSION = "0.0.20" - -DESCRIPTION = "Whitebox is an open source E2E ML monitoring platform with edge capabilities that plays nicely with kubernetes" -LONG_DESCRIPTION = (Path(__file__).parent / "README.md").read_text() - -# Setting up -setup( - # the name must match the folder name 'verysimplemodule' - name="whitebox-sdk", - version=VERSION, - author="Squaredev", - author_email="hello@squaredev.io", - description=DESCRIPTION, - long_description=LONG_DESCRIPTION, # add README.md - long_description_content_type="text/markdown", - packages=find_packages(), - install_requires=[], # add any additional packages that - # needs to be installed along with your package. Eg: 'caer' - keywords=["python", "model monitoring", "whitebox", "mlops"], - classifiers=[ - "Programming Language :: Python :: 3", - ], -) diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 0000000..4f747da --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,48 @@ + + + + None + 2023-02-23 + daily + + + None + 2023-02-23 + daily + + + None + 2023-02-23 + daily + + + None + 2023-02-23 + daily + + + None + 2023-02-23 + daily + + + None + 2023-02-23 + daily + + + None + 2023-02-23 + daily + + + None + 2023-02-23 + daily + + + None + 2023-02-23 + daily + + \ No newline at end of file diff --git a/sitemap.xml.gz b/sitemap.xml.gz new file mode 100644 index 0000000..c7ed163 Binary files /dev/null and b/sitemap.xml.gz differ diff --git a/tutorial/installation/index.html b/tutorial/installation/index.html new file mode 100644 index 0000000..19169d5 --- /dev/null +++ b/tutorial/installation/index.html @@ -0,0 +1,724 @@ + + + + + + + + + + + + + + + + + + + + + + Installation - Whitebox + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

Installation

+

Docker

+

Install whitebox server and all of its dependencies using docker-compose

+

Copy the following code in a file named docker-compose.yml:

+
version: "3.10"
+name: Whitebox
+services:
+  postgres:
+    image: postgres:15
+    restart: unless-stopped
+    environment:
+      - POSTGRES_USER=postgres
+      - POSTGRES_PASSWORD=postgres
+      - POSTGRES_MULTIPLE_DATABASES=test # postgres db is created by default
+    logging:
+      options:
+        max-size: 10m
+        max-file: "3"
+    ports:
+      - "5432:5432"
+    volumes:
+      - wb_data:/var/lib/postgresql/data
+    networks:
+      - whitebox
+
+  whitebox:
+    image: sqdhub/whitebox:main
+    restart: unless-stopped
+    environment:
+      - APP_NAME=Whitebox | Docker
+      - DATABASE_URL=postgresql://postgres:postgres@postgres:5432/postgres
+      - SECRET_KEY=<add_your_own> # Optional, if not set the API key won't be encrypted
+    ports:
+      - "8000:8000"
+    depends_on:
+      - postgres
+    networks:
+      - whitebox
+
+volumes:
+  wb_data:
+
+networks:
+  whitebox:
+    name: whitebox
+
+

With your terminal navigate to docker-compose.yml's location and then run the following command:

+
+ +
$  docker-compose up
+
+ +
+ +

Kubernetes

+

You can also install Whitebox server and all of its dependencies in your k8s cluster using helm:

+
helm repo add squaredev https://chartmuseum.squaredev.io/
+helm repo update
+helm install whitebox squaredev/whitebox
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorial/metrics/index.html b/tutorial/metrics/index.html new file mode 100644 index 0000000..cbeb8ce --- /dev/null +++ b/tutorial/metrics/index.html @@ -0,0 +1,1032 @@ + + + + + + + + + + + + + + + + + + + + + + Metrics Calculation - Whitebox + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

Metrics Calculation

+
+

Info

+

The metrics are automatically calculated in a set interval for all models in the database.

+

Depending on the data you have provided, the metrics calculation process will try to as many metrics possible for the specific model.

+
+

Metric Requirements

+

All metrics require that inferences are provided for the specific model. If not, the whole process is skipped. +Each metric though has different requirements that need to be fulfilled in order to be calculated. +The requirements are listed in the following sections.

+

Descriptive Statistics

+

The descriptive statistics are calculated per feature on any given dataset.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MetricType of data
missing_countnumerical & categorical
non_missing_countnumerical & categorical
meannumerical
minimumnumerical
maximumnumerical
sumnumerical
standard_deviationnumerical
variancenumerical
+

Drifting Metrics

+

The target of drift metrics is to calculate the data drift between 2 datasets. Currently supported drift types are:

+
    +
  • Data drift
  • +
  • Concept drift
  • +
+

Requirements:

+
    +
  • Inferences
  • +
  • Training Dataset
  • +
+
+

Note

+

If actuals aren't provided for all inferences, then ONLY the inferences that have actuals will be used for the calculation of the drifting metrics.

+
+

Data drift

+

An analysis happens comparing the current data to the reference data estimating the distributions of each feature in the two datasets. The schema of both datasets should be identical.

+

Returns a drift summary of the following form:

+
{
+  "timestamp": "the timestamp of the report",
+  "drift_summary": {
+    "number_of_columns": "total number of dataset columns",
+    "number_of_drifted_columns": "total number of drifted columns",
+    "share_of_drifted_columns": "number_of_drifted_columns/number_of_columns",
+    "dataset_drift": "Boolean based on the criteria below",
+    "drift_by_columns": {
+      "column1": {
+        "column_name": "column1",
+        "column_type": "the type of column (e.g. num)",
+        "stattest_name": "the statistical test tha was used",
+        "drift_score": "the drifting score based on the test",
+        "drift_detected": "Boolean based on the criteria below",
+        "threshold": "a float number based on the criteria below"
+      },
+      "column2": {"..."}
+    }
+  }
+}
+
+

Logic to choose the appropriate statistical test is based on:

+
    +
  • feature type: categorical or numerical
  • +
  • the number of observations in the reference dataset
  • +
  • the number of unique values in the feature (n_unique)
  • +
+

For small data with <= 1000 observations in the reference dataset:

+
    +
  • For numerical features (n_unique > 5): two-sample Kolmogorov-Smirnov test.
  • +
  • For categorical features or numerical features with n_unique <= 5: chi-squared test.
  • +
  • For binary categorical features (n_unique <= 2), we use the proportion difference test for independent samples based on Z-score.
  • +
+

All tests use a 0.95 confidence level by default.

+

For larger data with > 1000 observations in the reference dataset:

+
    +
  • For numerical features (n_unique > 5): Wasserstein Distance.
  • +
  • For categorical features or numerical with n_unique <= 5): Jensen–Shannon divergence.
  • +
+

All tests use a threshold = 0.1 by default.

+

Concept drift

+

An analysis happens comparing the current target feature to the reference target feature.

+

Returns a concept drift summary of the following form:

+
{
+  "timestamp": "the timestamp of the report",
+  "concept_drift_summary": {
+    "column_name": "column1",
+    "column_type": "the type of column (e.g. num)",
+    "stattest_name": "the statistical test tha was used",
+    "threshold": "threshold used based on criteria below",
+    "drift_score": "the drifting score based on the test",
+    "drift_detected": "Boolean based on the criteria below,"
+  }
+}
+
+

Logic to choose the appropriate statistical test is based on:

+
    +
  • the number of observations in the reference dataset
  • +
  • the number of unique values in the target (n_unique)
  • +
+

For small data with <= 1000 observations in the reference dataset:

+
    +
  • For categorical target with n_unique > 2: chi-squared test.
  • +
  • For binary categorical target (n_unique <= 2), we use the proportion difference test for independent samples based on Z-score.
  • +
+

All tests use a 0.95 confidence level by default.

+

For larger data with > 1000 observations in the reference dataset we use Jensen–Shannon divergence with a threshold = 0.1 .

+

Performance Evaluation Metrics

+

Requirements:

+
    +
  • Inferences
  • +
  • Actuals for the inferences
  • +
+

The target of evaluation metrics is to evaluate the quality of an machine learning model. Currently supported models are:

+
    +
  • Binary classification
  • +
  • Multi-class classification
  • +
  • Regression
  • +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MetricSupported model
confusion matrixbinary classification & multi-class classification
accuracybinary classification & multi-class classification
precisionbinary classification & multi-class classification
recallbinary classification & multi-class classification
f1 scorebinary classification & multi-class classification
r_squareregression
mean_squared_errorregression
mean_absolute_errorregression
+

Explainability

+

Requirements:

+
    +
  • Inferences
  • +
+

The target of the explainability feature is to provide a contribution score of each feature to each individual prediction, in a try to explain how the model concluded in the specific prediction. To achieve this we define 3 Levels of confidence in the explainability feature, based on how accessible or not is the client's input:

+
    +
  • Level-0: In this level a replacement model is trained in the same training data as client's model, and used for the explainability feature.
  • +
  • Level-1 (pending): In this level a surrogate model is trained in a way of trying to achieve the same predictions as client's model, and used for the explainability feature.
  • +
  • Level-2 (pending): Client's model is used for the explainability feature.
  • +
+

Level-0 confidence

+

At this level a replacement model is trained in the same training data as client's model, and used for the explainability feature. Below there is a table of used models per machine learning task.

+ + + + + + + + + + + + + +
ModelTask
LightGBMbinary classification & multi-class classification & regression
+

The fine tuning of models, through a hyper-parameters exploration is a pending task for now.

+

The trained model along with the inference data are used as input in LIME library, and the below report is provided - presenting the contribution of each feature in a specific prediction (the report includes all the feature contribution score to an descending order based on the absolute score value):

+
{
+  "feature1": "contribution score",
+  "feature2": "contribution score",
+  "feature3": "contribution score"
+}
+
+

Level-1 confidence

+

Coming soon

+

Level-2 confidence

+

Coming soon

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorial/monitors_alerts/index.html b/tutorial/monitors_alerts/index.html new file mode 100644 index 0000000..39cb438 --- /dev/null +++ b/tutorial/monitors_alerts/index.html @@ -0,0 +1,683 @@ + + + + + + + + + + + + + + + + + + + + + + Monitors and Alerts - Whitebox + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

Monitors and Alerts

+

Monitors

+

You can create a monitor in whitebox so that alert are created automaticaly when some value is out of bounds. Here is an example:

+
from whitebox import Whitebox, MonitorStatus, MonitorMetrics, AlertSeverity
+
+wb = Whitebox(host="127.0.0.1:8000", api_key="some_api_key")
+
+model_monitor = wb.create_model_monitor(
+    model_id="mock_model_id",
+    name="test",
+    status=MonitorStatus.active,
+    metric=MonitorMetrics.accuracy,
+    severity=AlertSeverity.high,
+    email="jackie.chan@somemail.io",
+    lower_threshold=0.7
+)
+
+

Alerts

+

Once the metrics reports have been produced, the monitoring alert pipeline is triggered. This means that if you have created any model monitors for a specific metric, alerts will be created if certain criteria are met, based on the thresholds and the monitor types you have specified.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorial/sdk/index.html b/tutorial/sdk/index.html new file mode 100644 index 0000000..70a64d9 --- /dev/null +++ b/tutorial/sdk/index.html @@ -0,0 +1,871 @@ + + + + + + + + + + + + + + + + + + + + + + Using Whitebox SDK - Whitebox + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

Using Whitebox SDK

+

Installation

+

Installing Whitebox is a pretty easy job. Just install it like any other python package.

+

Install the SDK with pip:

+
+ +
$  pip install whitebox-sdk
+
+ +
+ +

All the required packages will be automatically installed!

+

Now you're good to go!

+

Initial Setup

+

In order to run Whitebox, you will need the application's API key. +This key will be produced for you during the initial run of the Uvicorn live server. +Assuming you run the server with docker compose (you can find more in the install page of the tutorial), you will see the following output:

+
+ +
$ docker compose up
+
+...
+<span style="color: green;">INFO</span>: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
+<span style="color: green;">INFO</span>: Started reloader process [4450] using StatReload
+<span style="color: green;">INFO</span>: Started server process [4452]
+<span style="color: green;">INFO</span>: Waiting for application startup.
+<span style="color: green;">INFO</span>: Created username: admin, API key: some_api_key
+<span style="color: green;">INFO</span>: Application startup complete.
+...
+
+ +
+ +
+

Info

+

Keep this API key somewhere safe!

+

If you lose it, you will need to delete the admin user in your database and re-run the live serve to produce a new key!

+
+

After you get the API key, all you have to do is create an instance of the Whitebox class adding your host and API key as parameters:

+
from whitebox import Whitebox
+
+wb = Whitebox(host="http://127.0.0.1:8000", api_key="some_api_key")
+
+

Now you're ready to start using Whitebox!

+

Models

+

Creating a Model

+

In order to start adding training datasets and inferences, you first need to create a model.

+

Let's create a sample model:

+
wb.create_model(
+    name="Model 1",
+    type="binary",
+    labels={
+        'additionalProp1': 0,
+        'additionalProp2': 1
+    },
+    prediction="target"
+)
+
+

For more details about the schema accepted property types visit the Models section in the SDK documentation.

+

Fetching a Model

+

Getting a model from the database is as easy as it sounds. You'll just need the model_id:

+
wb.get_model("some_model_id")
+
+

Deleting a model

+

Deleting a model is as easy as fetching a model. Just use the model_id:

+
wb.delete_model("some_model_id")
+
+
+

Warning

+

You will have to be extra careful when deleting a model because all datasets, inferences, monitors and literally everything will be deleted from the database along with the model itself!

+
+

Loading Training Datasets

+

Once you have created a model you can start loading your data. Let's start with the training dataset!

+

In our example we will create a pd.DataFrame from a .csv file. Of course you can use any method you like to create your pd.DataFrame as long as your non-processed and processed datasets have the same amount of rows (a.k.a. the same length) and there are more than one rows!

+
import pandas as pd
+non_processed_df = pd.read_csv("path/to/file/non_processed_data.csv")
+processed_df = pd.read_csv("path/to/file/processed_data.csv")
+
+wb.log_training_dataset(
+    model_id="some_model_id",
+    non_processed=non_processed_df,
+    processed=processed_df
+)
+
+
+

Note

+

When your training dataset is saved in the database, the model training process will begin excecuting, based on this dataset and the model it's associated with. That's why you need to load all the rows of your training dataset in the same batch.

+
+

Loading Inferences

+

To load your inferences you have to follow the exact same procedure as with the training datasets. The only difference is that you need to provide a pd.Series with the timestamps and (optionally) a pd.Series with the actuals, whose indices should match the ones in the non-processed and processed pd.DataFrames.

+

In our example let's assume that both the non-processed and processed pd.DataFrames have 10 rows each:

+
import pandas as pd
+non_processed_df = pd.read_csv("path/to/file/non_processed_data.csv")
+processed_df = pd.read_csv("path/to/file/processed_data.csv")
+
+# Timestamps and actuals should have a length of 10
+timestamps = pd.Series(["2022-12-22T12:13:27.879738"] * 10)
+actuals = pd.Series([0, 1, 1, 1, 0, 0, 1, 1, 0, 0])
+
+wb.log_inferences(
+    model_id="some_model_id",
+    non_processed=non_processed_df,
+    processed=processed_df,
+    timestamps=timestamps,
+    actuals=actuals
+)
+
+
+

Warning

+

Make sure you add the actuals if you already know them, because as of now, there's no ability to add them at a later time by updating the inference rows.

+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/whitebox/.streamlit/config.toml b/whitebox/.streamlit/config.toml deleted file mode 100644 index 9fbc757..0000000 --- a/whitebox/.streamlit/config.toml +++ /dev/null @@ -1,6 +0,0 @@ -[theme] -base="dark" -primaryColor="#21babe" -backgroundColor="#1e2025" -secondaryBackgroundColor="#252a33" - diff --git a/whitebox/__init__.py b/whitebox/__init__.py deleted file mode 100644 index b4a6bd7..0000000 --- a/whitebox/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from whitebox.sdk import * diff --git a/whitebox/analytics/data/testing/classification_test_data.csv b/whitebox/analytics/data/testing/classification_test_data.csv deleted file mode 100644 index 84d7b17..0000000 --- a/whitebox/analytics/data/testing/classification_test_data.csv +++ /dev/null @@ -1,11 +0,0 @@ -y_testing_binary,y_prediction_binary,y_testing_multi,y_prediction_multi -0,0,0,1 -0,0,2,2 -0,1,0,0 -1,1,1,1 -0,0,2,0 -1,0,1,1 -1,0,1,0 -1,1,2,2 -0,1,0,1 -1,1,1,1 diff --git a/whitebox/analytics/data/testing/metrics_test_data.csv b/whitebox/analytics/data/testing/metrics_test_data.csv deleted file mode 100644 index c65b7ea..0000000 --- a/whitebox/analytics/data/testing/metrics_test_data.csv +++ /dev/null @@ -1,11 +0,0 @@ -num1,num2,num3,cat1,cat2 -15.0,,0,Cat,True -40.0,0.25,2,Dog,False -200.0,1.456,0,Cat,True -,45.896,1,Dog,False -60.0,2.67,2,, -48.0,9.748,1,Dog,False -1000.0,,1,Cat,True -43.0,1.67,2,Dog,False -1.0,0.00054,0,Cat,True -0.0,12.1,1,Dog, diff --git a/whitebox/analytics/data/testing/regression_test_data.csv b/whitebox/analytics/data/testing/regression_test_data.csv deleted file mode 100644 index d49994d..0000000 --- a/whitebox/analytics/data/testing/regression_test_data.csv +++ /dev/null @@ -1,11 +0,0 @@ -y_test,y_prediction -0.11,0.12 -0.56,0.55 -0.43,0.43 -0.77,0.51 -0.23,0.2 -0.54,0.54 -0.48,0.47 -0.13,0.13 -0.01,0.0 -0.86,0.9 diff --git a/whitebox/analytics/data/testing/udemy_fin_adj.csv b/whitebox/analytics/data/testing/udemy_fin_adj.csv deleted file mode 100644 index b01f2b3..0000000 --- a/whitebox/analytics/data/testing/udemy_fin_adj.csv +++ /dev/null @@ -1,12206 +0,0 @@ -is_paid,num_subscribers,avg_rating,avg_rating_recent,rating,num_reviews,num_published_lectures,discount_price__amount,discount_price__currency -True,295509,4.66019,4.67874,4.67874,78006,84,455.0,Dollar -True,209070,4.58956,4.60015,4.60015,54581,78,455.0,Dollar -True,155282,4.59491,4.59326,4.59326,52653,292,455.0,Euro -True,245860,4.54407,4.53772,4.53772,46447,338,455.0,Dollar -False,374836,4.4708,4.47173,4.47173,41630,83,455.0,Pound -False,124180,4.56228,4.57676,4.57676,38093,275,455.0,Pound -True,96207,4.32383,4.29118,4.29118,30470,23,455.0,Euro -False,127680,4.54034,4.53346,4.53346,28665,275,455.0,Euro -False,112572,4.50386,4.5008,4.5008,27408,144,455.0,Euro -True,115269,4.50067,4.49575,4.49575,23906,413,455.0,Dollar -False,86715,4.61951,4.63301,4.63301,23580,117,455.0,Pound -False,82015,4.49968,4.49034,4.49034,23326,67,455.0,Pound -True,68148,4.5687,4.59302,4.59302,22595,43,455.0,Dollar -True,76812,4.53878,4.54203,4.54203,21537,41,455.0,Dollar -False,78968,4.57035,4.57067,4.57067,21436,286,455.0,Pound -False,182002,4.49571,4.49507,4.49507,21421,225,455.0,Dollar -True,114945,4.51251,4.52998,4.52998,21394,101,455.0,Euro -False,88468,4.49804,4.48929,4.48929,19970,160,455.0,Pound -True,72442,4.59922,4.59604,4.59604,19328,103,455.0,Dollar -False,239309,4.47381,4.54005,4.54005,18322,47,455.0,Euro -False,83072,4.51891,4.52806,4.52806,17617,111,455.0,Euro -True,67329,4.56473,4.5554,4.5554,17016,57,455.0,Pound -True,140676,4.4758,4.46916,4.46916,17013,61,500.0,Pound -False,50037,4.42501,4.41557,4.41557,15956,23,455.0,Euro -True,48055,4.43303,4.42199,4.42199,14255,44,455.0,Dollar -True,74011,4.62899,4.63196,4.63196,14006,88,455.0,Euro -False,102727,4.55248,4.56591,4.56591,12478,78,455.0,Dollar -False,49877,4.40093,4.40429,4.40429,11977,88,455.0,Euro -True,59141,4.34305,4.33968,4.33968,11660,39,455.0,Dollar -False,38698,4.57554,4.58325,4.58325,11529,31,455.0,Euro -True,85042,4.42296,4.42503,4.42503,11007,49,455.0,Pound -True,63084,4.63452,4.64145,4.64145,10979,74,455.0,Pound -False,39873,4.46625,4.49998,4.49998,10725,124,455.0,Dollar -False,33319,4.38382,4.39496,4.39496,10470,29,455.0,Euro -False,158654,4.46745,4.44446,4.44446,10288,206,540.0,Pound -True,29061,4.56978,4.56584,4.56584,10102,284,455.0,Euro -True,28937,4.36402,4.39681,4.39681,10059,23,455.0,Pound -True,72406,4.4679,4.45238,4.45238,9631,44,455.0,Dollar -False,39816,4.41,4.41373,4.41373,9195,86,455.0,Pound -True,62384,4.35213,4.33177,4.33177,9196,600,546.0,Euro -False,79955,4.50237,4.50644,4.50644,9107,16,533.0,Dollar -True,47394,4.58716,4.59197,4.59197,9081,97,455.0,Pound -False,32818,4.41307,4.46243,4.46243,8925,15,455.0,Euro -False,16511,4.51703,4.55482,4.55482,8915,19,455.0,Dollar -False,64080,4.45989,4.43577,4.43577,8591,152,481.0,Dollar -False,21305,4.38921,4.38864,4.38864,8122,38,455.0,Dollar -False,44484,4.53584,4.53498,4.53498,7815,186,455.0,Pound -True,39537,4.44398,4.43587,4.43587,7693,305,455.0,Euro -True,29095,4.42667,4.42281,4.42281,7641,87,488.0,Euro -False,33408,4.44969,4.48307,4.48307,7448,35,455.0,Euro -False,36326,4.3702,4.36866,4.36866,7362,88,455.0,Pound -False,22106,4.42781,4.40904,4.40904,7246,38,455.0,Euro -False,25057,4.56653,4.55885,4.55885,7186,222,455.0,Pound -False,22558,4.54002,4.54419,4.54419,6797,68,455.0,Dollar -False,28717,4.44174,4.4567,4.4567,6623,68,455.0,Euro -False,26929,4.50915,4.48945,4.48945,6471,81,455.0,Euro -True,12728,4.34038,4.34485,4.34485,6401,6,455.0,Pound -True,16778,4.32706,4.25714,4.25714,6325,42,455.0,Pound -False,37953,4.56706,4.57075,4.57075,6195,54,455.0,Dollar -False,17598,4.35379,4.35778,4.35778,6134,18,455.0,Euro -True,25039,4.62258,4.62968,4.62968,6088,48,455.0,Pound -False,15059,4.36463,4.34164,4.34164,6075,31,455.0,Pound -False,36650,4.54274,4.55138,4.55138,5893,43,455.0,Euro -True,26292,4.44952,4.39535,4.39535,5761,30,455.0,Pound -True,25820,4.50586,4.46247,4.46247,5763,637,455.0,Pound -False,25649,4.49939,4.50756,4.50756,5642,208,455.0,Dollar -False,15826,4.42925,4.44982,4.44982,5650,16,455.0,Euro -False,42583,4.55896,4.52606,4.52606,5506,127,455.0,Pound -False,11077,4.38087,4.37153,4.37153,5466,32,455.0,Euro -False,21249,4.45997,4.45327,4.45327,5474,65,455.0,Euro -False,11820,4.40315,4.47804,4.47804,5435,39,455.0,Pound -True,19352,4.38696,4.42045,4.42045,5350,43,455.0,Dollar -True,13396,4.19608,4.14233,4.14233,5177,21,474.0,Euro -False,23854,3.97959,3.98862,3.98862,5148,88,455.0,Pound -True,87181,4.54567,4.58665,4.58665,5018,122,455.0,Pound -False,40950,4.46622,4.4613,4.4613,4960,67,462.0,Euro -True,16937,4.50258,4.49369,4.49369,4903,53,455.0,Euro -False,35638,4.4038,4.48216,4.48216,4857,96,481.0,Euro -False,22310,4.52025,4.58217,4.58217,4849,81,455.0,Dollar -False,18460,4.29765,4.28578,4.28578,4837,65,481.0,Dollar -False,25454,4.39505,4.35907,4.35907,4811,90,455.0,Euro -True,21995,4.31962,4.36721,4.36721,4798,58,455.0,Dollar -False,14661,4.36619,4.3703,4.3703,4763,47,455.0,Pound -True,15327,4.37005,4.36076,4.36076,4733,31,455.0,Euro -True,26377,4.35714,4.3461,4.3461,4619,26,2880.0,Euro -True,17036,4.56581,4.58252,4.58252,4616,99,494.0,Euro -True,14692,4.43296,4.42271,4.42271,4554,49,455.0,Dollar -False,17167,4.37106,4.39583,4.39583,4508,83,455.0,Dollar -True,15562,4.52524,4.52462,4.52462,4466,125,1600.0,Pound -True,13693,4.57537,4.56385,4.56385,4412,29,481.0,Pound -False,16519,4.51699,4.52558,4.52558,4345,91,455.0,Euro -True,18774,4.43962,4.43032,4.43032,4303,66,455.0,Euro -False,25911,4.48485,4.48328,4.48328,4297,257,455.0,Euro -True,13088,4.39762,4.38683,4.38683,4290,57,455.0,Dollar -False,26338,4.5025,4.48832,4.48832,4240,75,488.0,Euro -True,17983,4.46687,4.45915,4.45915,4166,45,455.0,Pound -False,9995,4.38218,4.36972,4.36972,4132,18,455.0,Pound -False,22578,4.55337,4.56349,4.56349,4073,85,455.0,Dollar -True,27968,4.33932,4.32888,4.32888,3914,71,494.0,Pound -True,17839,4.39702,4.42994,4.42994,3869,31,455.0,Dollar -False,10964,4.52812,4.48615,4.48615,3868,24,455.0,Dollar -False,6978,4.32603,4.3116,4.3116,3855,11,455.0,Euro -False,9245,4.32892,4.33758,4.33758,3846,11,455.0,Dollar -False,12904,4.43758,4.4171,4.4171,3845,76,455.0,Pound -True,13754,4.48388,4.47766,4.47766,3824,81,455.0,Dollar -False,15445,4.49911,4.37074,4.37074,3754,398,455.0,Dollar -False,17226,4.52144,4.48169,4.48169,3742,35,455.0,Dollar -True,12864,4.54621,4.57774,4.57774,3672,37,455.0,Dollar -False,16218,4.39599,4.38889,4.38889,3665,87,455.0,Pound -False,20258,4.39798,4.3452,4.3452,3668,40,462.0,Dollar -False,12506,4.36449,4.35506,4.35506,3657,57,455.0,Pound -False,16016,4.53636,4.49352,4.49352,3642,114,455.0,Pound -False,23044,4.44862,4.44526,4.44526,3626,37,455.0,Dollar -False,21310,4.506,4.50923,4.50923,3587,56,455.0,Dollar -False,28811,4.65399,4.66003,4.66003,3586,45,455.0,Euro -False,6153,4.4007,4.41012,4.41012,3589,23,455.0,Dollar -False,77373,4.60651,4.61955,4.61955,3576,62,455.0,Dollar -True,13819,4.41452,4.39808,4.39808,3563,35,455.0,Dollar -False,16756,4.32136,4.26479,4.26479,3557,30,455.0,Pound -True,15174,4.41604,4.40143,4.40143,3543,58,800.0,Dollar -False,11405,4.58471,4.60612,4.60612,3517,55,455.0,Dollar -False,11653,4.40152,4.39118,4.39118,3430,22,455.0,Pound -False,7453,4.36531,4.33452,4.33452,3422,24,455.0,Dollar -False,14644,4.37332,4.31283,4.31283,3401,22,455.0,Euro -True,28894,4.31591,4.28561,4.28561,3394,18,455.0,Dollar -True,9475,4.40617,4.4235,4.4235,3372,51,455.0,Euro -False,14308,4.66115,4.67377,4.67377,3356,122,455.0,Euro -True,83126,4.12876,4.15775,4.15775,3348,66,481.0,Dollar -False,18802,4.64847,4.65102,4.65102,3344,369,455.0,Euro -False,15542,4.45327,4.39867,4.39867,3339,71,455.0,Euro -True,13530,4.28972,4.28834,4.28834,3328,165,488.0,Dollar -True,24847,4.52647,4.52638,4.52638,3305,56,455.0,Euro -False,13712,4.29722,4.26506,4.26506,3290,36,455.0,Euro -True,9876,4.33333,4.3898,4.3898,3270,26,455.0,Euro -True,8111,4.29382,4.34367,4.34367,3262,25,455.0,Pound -False,10924,4.40312,4.45424,4.45424,3242,35,455.0,Dollar -True,16406,4.46085,4.21029,4.21029,3217,120,455.0,Euro -False,14958,4.4156,4.35902,4.35902,3200,247,481.0,Pound -False,19166,4.45363,4.45428,4.45428,3177,135,455.0,Euro -True,12244,4.40347,4.40381,4.40381,3159,46,455.0,Pound -True,28744,4.4,4.39662,4.39662,3116,5,455.0,Dollar -True,23932,4.08065,4.11044,4.11044,3108,11,455.0,Euro -True,7916,4.31579,4.30947,4.30947,3102,11,455.0,Euro -False,8188,4.36296,4.3628,4.3628,3092,44,455.0,Pound -True,7633,4.37472,4.36324,4.36324,3072,48,455.0,Pound -False,13004,4.42586,4.45435,4.45435,3058,77,455.0,Euro -False,9522,4.42308,4.43797,4.43797,3048,51,455.0,Pound -False,8861,4.56059,4.5649,4.5649,3024,34,455.0,Euro -False,8109,4.42071,4.42156,4.42156,2985,12,455.0,Pound -False,7182,4.4698,4.435,4.435,2949,19,455.0,Euro -True,20336,4.40909,4.40392,4.40392,2935,17,494.0,Euro -True,7346,4.52863,4.51829,4.51829,2940,32,455.0,Euro -True,8502,4.25524,4.247,4.247,2909,61,455.0,Dollar -False,20072,4.53756,4.57387,4.57387,2895,43,455.0,Euro -True,19740,4.48284,4.50605,4.50605,2885,56,455.0,Euro -True,7297,4.36401,4.3746,4.3746,2884,27,455.0,Dollar -True,8832,4.24978,4.28929,4.28929,2810,34,455.0,Pound -True,29714,4.33481,4.35075,4.35075,2819,17,455.0,Pound -False,16888,4.41029,4.42242,4.42242,2792,76,455.0,Euro -True,12236,4.59567,4.60274,4.60274,2764,85,455.0,Pound -True,6948,4.39507,4.40222,4.40222,2745,20,455.0,Pound -True,21961,4.56076,4.53399,4.53399,2713,76,455.0,Euro -False,14527,4.10714,4.12178,4.12178,2686,33,455.0,Pound -True,11251,4.51047,4.48389,4.48389,2666,122,455.0,Pound -True,12207,4.51731,4.5961,4.5961,2654,69,455.0,Pound -False,17134,4.50799,4.47349,4.47349,2592,68,455.0,Dollar -False,14265,4.37042,4.32472,4.32472,2578,32,546.0,Dollar -False,14164,4.39474,4.45575,4.45575,2560,58,455.0,Pound -True,10650,4.49112,4.51402,4.51402,2551,46,2080.0,Pound -True,61795,4.61796,4.62425,4.62425,2547,213,455.0,Euro -False,13284,4.67992,4.69332,4.69332,2541,64,462.0,Euro -False,18909,4.42627,4.38812,4.38812,2523,64,520.0,Dollar -True,17758,4.50639,4.46792,4.46792,2529,244,455.0,Euro -False,13359,4.45633,4.48772,4.48772,2513,29,455.0,Dollar -False,26516,4.5875,4.61348,4.61348,2506,17,520.0,Dollar -False,8934,4.40419,4.40936,4.40936,2481,31,455.0,Dollar -False,25650,4.65579,4.67184,4.67184,2475,67,455.0,Pound -False,14976,4.45714,4.48847,4.48847,2465,37,455.0,Euro -True,16397,4.40761,4.40644,4.40644,2460,28,455.0,Dollar -True,10481,4.52916,4.51162,4.51162,2458,66,455.0,Dollar -True,4910,4.24664,4.21767,4.21767,2448,6,455.0,Pound -False,15664,4.54528,4.5405,4.5405,2438,14,474.0,Pound -True,20213,4.44318,4.42275,4.42275,2435,54,455.0,Dollar -True,6806,4.36279,4.39561,4.39561,2432,28,455.0,Euro -False,31777,4.58911,4.5638,4.5638,2420,38,468.0,Dollar -False,56552,4.36765,4.36726,4.36726,2421,91,455.0,Dollar -True,58044,4.43056,4.48663,4.48663,2403,11,455.0,Pound -False,50047,4.07692,4.17734,4.17734,2381,13,455.0,Dollar -False,7130,4.46614,4.4505,4.4505,2360,33,455.0,Dollar -True,4122,4.34501,4.32188,4.32188,2355,41,455.0,Dollar -True,26148,4.37712,4.32759,4.32759,2340,600,488.0,Pound -True,12535,4.25392,4.15825,4.15825,2324,252,455.0,Dollar -False,4488,4.40909,4.36141,4.36141,2322,26,455.0,Euro -False,68110,4.40132,4.41161,4.41161,2319,78,455.0,Euro -False,93749,4.17778,3.99013,3.99013,2309,41,455.0,Pound -False,7355,4.12662,4.15631,4.15631,2299,21,455.0,Euro -True,7816,4.4663,4.46339,4.46339,2283,17,455.0,Dollar -False,14725,4.52475,4.53076,4.53076,2277,123,455.0,Dollar -True,14938,4.22952,4.22789,4.22789,2264,17,455.0,Pound -False,5245,4.55323,4.534,4.534,2254,15,455.0,Euro -False,19030,4.22131,4.2177,4.2177,2233,50,455.0,Euro -False,11736,4.56774,4.55794,4.55794,2243,125,455.0,Dollar -False,10905,4.46429,4.50543,4.50543,2211,48,455.0,Pound -True,6173,4.34411,4.34685,4.34685,2216,9,455.0,Dollar -False,14849,4.52747,4.57436,4.57436,2201,93,455.0,Dollar -False,12236,4.35673,4.33008,4.33008,2201,32,455.0,Dollar -False,22613,4.66129,4.64454,4.64454,2187,79,455.0,Dollar -True,7119,4.56776,4.54714,4.54714,2183,43,520.0,Euro -False,11048,4.375,4.39441,4.39441,2179,31,481.0,Dollar -True,6184,4.5246,4.52986,4.52986,2186,19,455.0,Pound -False,10254,4.62903,4.6158,4.6158,2176,61,455.0,Dollar -True,15966,4.19737,4.15017,4.15017,2171,17,455.0,Dollar -True,67181,4.43866,4.47592,4.47592,2149,66,455.0,Dollar -False,44208,4.54703,4.52294,4.52294,2149,66,500.0,Pound -False,9774,4.38747,4.3368,4.3368,2148,43,455.0,Dollar -True,20308,4.59059,4.58394,4.58394,2126,60,507.0,Euro -True,12917,4.54819,4.58137,4.58137,2118,125,455.0,Dollar -True,5835,4.33201,4.29234,4.29234,2120,37,700.0,Pound -True,11762,4.68267,4.60343,4.60343,2113,87,455.0,Euro -True,7068,4.34083,4.25702,4.25702,2114,49,474.0,Pound -False,14029,4.5507,4.55431,4.55431,2104,52,455.0,Pound -False,8284,4.43737,4.43639,4.43639,2105,42,455.0,Euro -True,3834,4.43497,4.39363,4.39363,2101,9,455.0,Pound -True,11122,4.34524,4.29816,4.29816,2086,67,455.0,Dollar -True,6671,4.30429,4.30587,4.30587,2087,51,514.0,Dollar -False,8568,4.52767,4.53305,4.53305,2081,75,455.0,Dollar -True,8339,4.40152,4.3541,4.3541,2068,66,455.0,Euro -True,11307,4.51852,4.52647,4.52647,2062,126,455.0,Euro -True,5441,4.3527,4.3197,4.3197,2059,36,455.0,Pound -True,7026,4.18242,4.1871,4.1871,2039,34,481.0,Euro -False,8060,4.59507,4.60537,4.60537,2030,63,455.0,Euro -False,40312,4.4878,4.46166,4.46166,2028,142,455.0,Dollar -False,7807,4.19909,4.15144,4.15144,2045,11,455.0,Dollar -True,11477,4.41181,4.42593,4.42593,2028,16,455.0,Pound -True,29496,4.44518,4.48429,4.48429,2020,493,552.0,Pound -False,6062,4.21774,4.16388,4.16388,2007,19,468.0,Euro -False,5416,4.26867,4.25879,4.25879,2020,5,455.0,Pound -True,5706,4.30268,4.28764,4.28764,2000,38,455.0,Pound -False,27968,4.56731,4.5452,4.5452,1988,65,455.0,Dollar -True,48057,4.36978,4.31345,4.31345,1988,601,514.0,Dollar -True,8633,4.304,4.33751,4.33751,1983,31,455.0,Euro -True,8002,4.47644,4.41913,4.41913,1975,31,455.0,Dollar -False,20515,4.47848,4.4584,4.4584,1963,91,481.0,Pound -False,12507,4.37143,4.43308,4.43308,1948,155,455.0,Dollar -True,5767,4.40571,4.42854,4.42854,1948,32,640.0,Euro -False,9695,4.47945,4.5157,4.5157,1942,40,2080.0,Dollar -False,9448,4.36574,4.42242,4.42242,1925,58,462.0,Dollar -False,12030,4.16207,4.18738,4.18738,1924,60,462.0,Pound -False,27427,4.13793,4.03375,4.03375,1919,32,468.0,Euro -True,9750,4.65686,4.66574,4.66574,1908,54,455.0,Euro -False,7990,4.37,4.31627,4.31627,1908,16,455.0,Pound -True,27263,4.43296,4.47479,4.47479,1905,83,455.0,Dollar -False,5204,4.35952,4.37558,4.37558,1909,13,455.0,Euro -True,15456,4.13137,4.11688,4.11688,1876,65,520.0,Pound -True,5228,4.62603,4.65299,4.65299,1866,51,455.0,Dollar -False,9413,4.5026,4.5043,4.5043,1867,49,455.0,Dollar -True,26593,4.5,4.44865,4.44865,1860,25,455.0,Dollar -True,4192,4.33175,4.30299,4.30299,1858,12,455.0,Dollar -True,6789,4.35411,4.35284,4.35284,1850,24,474.0,Euro -True,8803,4.47926,4.52507,4.52507,1843,65,455.0,Dollar -False,12212,4.5,4.49244,4.49244,1841,36,455.0,Euro -False,5976,4.38921,4.37733,4.37733,1837,31,455.0,Dollar -False,8342,4.52301,4.5402,4.5402,1831,49,455.0,Pound -False,12840,4.5297,4.54014,4.54014,1808,77,455.0,Dollar -False,12494,4.60577,4.59075,4.59075,1796,154,468.0,Dollar -True,6425,4.65596,4.62686,4.62686,1793,75,455.0,Dollar -True,10232,4.56552,4.55917,4.55917,1790,47,455.0,Euro -False,5537,4.27941,4.25551,4.25551,1787,86,500.0,Euro -True,9179,4.42051,4.39435,4.39435,1780,30,455.0,Euro -False,56790,4.40441,4.43194,4.43194,1778,91,455.0,Euro -False,19340,4.56488,4.55354,4.55354,1775,68,455.0,Dollar -False,11396,4.64043,4.69311,4.69311,1769,28,455.0,Euro -True,10933,4.38215,4.38941,4.38941,1759,46,455.0,Pound -False,14169,4.28358,4.16461,4.16461,1761,16,455.0,Pound -False,9777,4.55374,4.64015,4.64015,1750,22,455.0,Dollar -False,9096,4.60345,4.59743,4.59743,1742,66,455.0,Euro -False,6227,4.3762,4.32069,4.32069,1746,20,455.0,Euro -False,7068,4.50654,4.50609,4.50609,1725,217,455.0,Dollar -False,4876,4.38746,4.39145,4.39145,1712,33,462.0,Dollar -True,22015,4.52752,4.5148,4.5148,1691,202,455.0,Pound -True,11209,4.14706,4.23505,4.23505,1681,36,468.0,Euro -True,5608,4.25477,4.27659,4.27659,1682,39,455.0,Euro -False,6280,4.40076,4.38991,4.38991,1682,79,481.0,Euro -False,47129,4.3004,4.27268,4.27268,1673,75,455.0,Dollar -False,6752,4.63946,4.65823,4.65823,1667,42,455.0,Pound -True,5890,4.39669,4.39126,4.39126,1673,22,455.0,Pound -True,8268,3.65,3.7593,3.7593,1665,22,455.0,Dollar -False,19443,4.29282,4.2064,4.2064,1666,41,455.0,Dollar -False,5249,4.33283,4.31213,4.31213,1650,14,455.0,Pound -True,4007,4.46516,4.44485,4.44485,1647,24,455.0,Dollar -True,4312,4.40867,4.40901,4.40901,1641,30,455.0,Pound -True,4887,4.48117,4.51484,4.51484,1625,12,455.0,Pound -False,4879,4.42321,4.41869,4.41869,1614,38,455.0,Dollar -True,9048,4.17164,4.11564,4.11564,1601,253,455.0,Euro -False,5611,4.30415,4.28206,4.28206,1598,48,455.0,Euro -False,4450,4.47154,4.47955,4.47955,1596,18,455.0,Dollar -True,6600,4.34549,4.32339,4.32339,1584,39,455.0,Euro -True,6012,4.41513,4.48859,4.48859,1584,29,455.0,Euro -False,44319,4.36842,4.30758,4.30758,1575,49,455.0,Pound -True,6874,4.37028,4.27029,4.27029,1572,76,455.0,Pound -False,31851,4.1129,4.11026,4.11026,1571,57,455.0,Dollar -True,7003,4.30594,4.25381,4.25381,1574,48,494.0,Dollar -False,7247,4.59266,4.61637,4.61637,1571,69,455.0,Euro -False,9068,4.57895,4.61348,4.61348,1565,59,455.0,Euro -False,15619,3.83333,3.89829,3.89829,1551,55,488.0,Pound -False,10313,4.32609,4.34367,4.34367,1586,36,455.0,Dollar -True,6688,4.2312,4.26229,4.26229,1551,61,455.0,Euro -True,4764,4.37974,4.42545,4.42545,1558,30,455.0,Euro -True,5322,4.47549,4.50473,4.50473,1542,27,468.0,Pound -True,6001,4.37267,4.3289,4.3289,1532,28,455.0,Euro -True,10355,4.39267,4.42937,4.42937,1528,26,455.0,Dollar -True,3149,4.3864,4.3888,4.3888,1504,31,455.0,Dollar -True,11241,4.51075,4.51583,4.51583,1499,105,455.0,Euro -True,5530,4.56867,4.48523,4.48523,1488,61,455.0,Pound -True,7338,4.41453,4.36395,4.36395,1494,68,455.0,Pound -False,11418,4.55306,4.55019,4.55019,1470,69,455.0,Euro -True,5048,4.16535,4.17297,4.17297,1450,26,474.0,Pound -True,10347,4.275,4.3345,4.3345,1435,53,455.0,Pound -True,4612,4.46429,4.50821,4.50821,1433,39,2880.0,Euro -True,26248,4.51429,4.47745,4.47745,1432,45,455.0,Pound -False,4361,4.32383,4.3295,4.3295,1423,21,455.0,Dollar -False,4373,4.40741,4.40509,4.40509,1413,26,455.0,Euro -False,12376,4.60274,4.60076,4.60076,1410,28,455.0,Pound -True,7883,4.31485,4.33547,4.33547,1415,28,455.0,Pound -False,5229,4.53982,4.55536,4.55536,1403,54,455.0,Pound -False,3070,4.34298,4.35091,4.35091,1405,29,455.0,Dollar -True,6467,4.63298,4.62812,4.62812,1397,73,455.0,Dollar -False,7537,4.46939,4.50218,4.50218,1397,38,455.0,Euro -True,13356,4.68919,4.64662,4.64662,1395,28,455.0,Pound -True,10033,4.46296,4.46598,4.46598,1389,74,468.0,Dollar -False,2726,4.53774,4.51579,4.51579,1389,32,455.0,Euro -True,13619,4.44545,4.46396,4.46396,1375,57,468.0,Pound -False,2876,4.44643,4.49323,4.49323,1363,10,455.0,Pound -False,5230,4.29858,4.26887,4.26887,1365,21,455.0,Dollar -True,31855,4.41959,4.37283,4.37283,1372,141,455.0,Dollar -True,4936,4.27007,4.23504,4.23504,1350,23,455.0,Euro -True,3660,4.32009,4.31575,4.31575,1347,25,455.0,Dollar -True,8251,4.30097,4.33891,4.33891,1337,67,455.0,Pound -False,22026,4.47917,4.39268,4.39268,1335,109,455.0,Pound -False,18065,4.53947,4.53757,4.53757,1335,55,455.0,Dollar -False,38082,3.9,3.90205,3.90205,1332,45,455.0,Euro -True,16789,4.37687,4.31962,4.31962,1330,59,455.0,Euro -False,15095,4.4951,4.39127,4.39127,1330,70,455.0,Dollar -True,7138,4.55333,4.58557,4.58557,1321,267,3200.0,Pound -True,6902,4.51899,4.32987,4.32987,1313,30,455.0,Dollar -True,15887,4.4543,4.4261,4.4261,1309,47,455.0,Pound -True,13070,4.55303,4.59784,4.59784,1297,64,455.0,Euro -True,3910,4.52532,4.50687,4.50687,1293,19,455.0,Dollar -False,5997,4.02941,4.02658,4.02658,1291,52,960.0,Dollar -True,4137,4.43587,4.4519,4.4519,1297,38,481.0,Dollar -True,7139,4.47414,4.50137,4.50137,1284,45,455.0,Euro -False,4088,4.43407,4.43525,4.43525,1284,28,462.0,Dollar -True,3995,4.44158,4.35828,4.35828,1281,35,455.0,Pound -False,6725,4.67391,4.6396,4.6396,1280,34,455.0,Pound -True,10180,4.47575,4.40275,4.40275,1284,44,455.0,Dollar -False,6117,4.48923,4.48896,4.48896,1280,102,455.0,Pound -False,16968,4.35194,4.33755,4.33755,1278,17,455.0,Pound -True,6457,4.26809,4.22093,4.22093,1276,137,455.0,Euro -True,3468,4.31769,4.30274,4.30274,1274,27,455.0,Dollar -False,16753,4.52439,4.44888,4.44888,1267,102,455.0,Euro -False,3150,4.34494,4.31517,4.31517,1264,12,455.0,Dollar -False,4365,4.46931,4.49064,4.49064,1257,44,455.0,Dollar -False,6124,4.37166,4.39165,4.39165,1256,28,455.0,Euro -False,4542,4.45052,4.42193,4.42193,1257,21,468.0,Dollar -True,17026,4.28571,4.28067,4.28067,1249,22,455.0,Dollar -False,5839,4.42042,4.46669,4.46669,1249,68,455.0,Euro -True,8590,4.39655,4.40892,4.40892,1241,45,455.0,Pound -False,5866,4.15909,4.22549,4.22549,1240,37,468.0,Euro -False,5262,4.609,4.59837,4.59837,1237,63,455.0,Pound -False,6031,4.71053,4.69163,4.69163,1234,17,455.0,Dollar -False,3889,4.3517,4.30781,4.30781,1234,12,455.0,Pound -False,20439,4.12963,4.05844,4.05844,1230,38,455.0,Euro -False,45936,4.15,4.42252,4.42252,1229,13,455.0,Dollar -True,5783,4.48571,4.46986,4.46986,1231,92,455.0,Dollar -False,4120,4.42135,4.48969,4.48969,1227,80,488.0,Pound -False,3649,4.38889,4.42813,4.42813,1226,29,455.0,Dollar -False,4645,4.53358,4.4608,4.4608,1226,57,455.0,Pound -False,9979,4.67647,4.65647,4.65647,1204,56,455.0,Euro -False,2157,4.41164,4.36411,4.36411,1207,30,455.0,Euro -True,5139,4.30983,4.21449,4.21449,1202,37,455.0,Dollar -True,4731,4.32979,4.27536,4.27536,1208,11,455.0,Pound -True,86130,4.27778,4.16463,4.16463,1197,46,455.0,Euro -True,5187,4.40931,4.35819,4.35819,1203,45,455.0,Pound -True,28018,4.19792,4.19479,4.19479,1192,28,462.0,Dollar -True,5662,4.3556,4.36929,4.36929,1192,21,455.0,Dollar -False,10673,4.34375,4.33252,4.33252,1185,561,481.0,Euro -False,7992,4.45886,4.38453,4.38453,1184,77,455.0,Pound -False,5286,4.75,4.78457,4.78457,1171,136,455.0,Pound -True,6012,4.43902,4.48674,4.48674,1174,30,468.0,Euro -True,85960,4.16239,4.21257,4.21257,1168,26,455.0,Euro -False,25930,4.19444,4.21009,4.21009,1168,26,455.0,Dollar -False,4379,4.41857,4.46345,4.46345,1173,38,507.0,Pound -True,5691,4.45677,4.45293,4.45293,1166,328,507.0,Euro -True,19859,4.44361,4.47714,4.47714,1159,68,455.0,Pound -True,4517,4.38889,4.40681,4.40681,1153,35,455.0,Dollar -False,16302,4.29494,4.22467,4.22467,1156,20,455.0,Euro -False,10064,4.7619,4.75447,4.75447,1148,70,455.0,Dollar -True,59838,4.30769,4.30846,4.30846,1139,14,455.0,Euro -False,3582,4.26286,4.27352,4.27352,1142,40,455.0,Dollar -False,4100,4.18807,4.20656,4.20656,1136,32,455.0,Euro -False,5921,4.60831,4.61972,4.61972,1144,505,455.0,Dollar -True,5375,4.48058,4.43481,4.43481,1133,98,455.0,Pound -True,8581,4.63032,4.65956,4.65956,1134,124,455.0,Pound -False,26990,4.35,4.25083,4.25083,1128,10,455.0,Dollar -True,5144,4.47,4.55504,4.55504,1130,10,455.0,Dollar -False,4773,3.94118,3.97821,3.97821,1127,12,455.0,Pound -False,41120,2.55,2.2146,2.2146,1123,6,455.0,Pound -False,7623,4.37762,4.2865,4.2865,1119,72,455.0,Pound -False,24993,4.10714,3.86609,3.86609,1119,25,455.0,Euro -False,24952,4.6125,4.64247,4.64247,1118,72,455.0,Dollar -True,3563,4.37329,4.3425,4.3425,1120,21,462.0,Euro -False,5773,4.07812,4.06542,4.06542,1116,23,455.0,Dollar -True,3676,4.05787,4.0642,4.0642,1110,59,455.0,Pound -False,5722,4.35484,4.38917,4.38917,1103,18,455.0,Euro -True,9044,4.50607,4.51553,4.51553,1104,33,455.0,Pound -False,2855,4.37129,4.32841,4.32841,1100,33,455.0,Dollar -True,9842,4.41071,4.3143,4.3143,1088,74,481.0,Euro -False,7327,4.19397,4.15123,4.15123,1091,21,455.0,Euro -True,35258,3.93939,3.86514,3.86514,1086,45,462.0,Dollar -False,2943,4.41379,4.3478,4.3478,1085,14,468.0,Euro -False,8181,4.4625,4.42693,4.42693,1085,91,455.0,Euro -True,3990,4.34091,4.3381,4.3381,1067,45,455.0,Euro -False,1957,4.11719,4.14928,4.14928,1065,9,481.0,Dollar -False,8242,4.5,4.49257,4.49257,1063,64,455.0,Pound -True,9236,3.95217,3.96166,3.96166,1065,17,468.0,Dollar -True,3883,4.44586,4.48285,4.48285,1062,22,455.0,Euro -False,7797,4.40848,4.36982,4.36982,1062,431,455.0,Pound -True,3747,4.21898,4.21356,4.21356,1059,22,455.0,Pound -True,4015,4.53681,4.0684,4.0684,1061,39,455.0,Dollar -False,3925,4.21354,4.23477,4.23477,1058,19,455.0,Dollar -True,3522,4.3961,4.4083,4.4083,1058,15,455.0,Dollar -False,4639,4.38889,4.41265,4.41265,1052,190,455.0,Euro -True,2772,4.45833,4.46266,4.46266,1049,35,455.0,Dollar -True,17807,4.68819,4.69866,4.69866,1049,104,455.0,Dollar -False,26889,4.35326,4.36821,4.36821,1045,149,462.0,Euro -False,6067,4.59179,4.59935,4.59935,1044,229,455.0,Pound -False,3159,4.4529,4.41958,4.41958,1033,68,2080.0,Pound -False,5944,4.68976,4.69036,4.69036,1033,80,455.0,Euro -False,2918,4.34453,4.33603,4.33603,1025,11,455.0,Pound -True,6475,4.51795,4.54362,4.54362,1018,56,455.0,Pound -False,6926,4.48361,4.48133,4.48133,1016,29,455.0,Pound -False,2585,4.33634,4.35362,4.35362,1015,10,455.0,Euro -False,5593,4.70732,4.68889,4.68889,1011,12,455.0,Dollar -True,6351,4.3323,4.2269,4.2269,1008,67,2720.0,Euro -False,51784,4.46541,4.49248,4.49248,1003,50,455.0,Pound -False,10092,4.41722,4.37018,4.37018,1004,52,455.0,Pound -False,4074,4.27326,4.15641,4.15641,1002,29,1920.0,Euro -False,3476,4.3125,4.30738,4.30738,999,35,455.0,Euro -True,6628,4.1359,4.04657,4.04657,992,225,455.0,Dollar -False,5963,4.57391,4.59673,4.59673,991,25,455.0,Euro -False,2974,4.20336,4.16547,4.16547,991,59,455.0,Dollar -False,2612,4.40984,4.38555,4.38555,988,34,455.0,Pound -False,4710,4.23897,4.18335,4.18335,986,32,455.0,Dollar -True,3256,4.2963,4.30229,4.30229,980,54,455.0,Dollar -False,8334,4.32197,4.30514,4.30514,980,6,455.0,Euro -True,3349,4.46429,4.43672,4.43672,983,49,455.0,Euro -False,3291,4.3863,4.35076,4.35076,976,40,455.0,Pound -True,34276,4.16667,3.73616,3.73616,970,38,455.0,Euro -False,6981,4.75581,4.75591,4.75591,968,107,455.0,Euro -False,4451,4.56286,4.58764,4.58764,970,92,455.0,Dollar -True,5278,4.4,4.34778,4.34778,967,50,455.0,Pound -True,7861,4.54934,4.5585,4.5585,967,103,455.0,Euro -True,6738,4.68831,4.67079,4.67079,965,38,455.0,Euro -True,61905,4.39799,4.43079,4.43079,962,699,455.0,Pound -True,3472,4.37162,4.34758,4.34758,962,97,3200.0,Pound -False,12835,4.19,4.13651,4.13651,954,13,455.0,Dollar -False,3232,4.16828,4.07803,4.07803,951,11,455.0,Euro -False,2288,4.51154,4.55046,4.55046,948,10,455.0,Pound -False,3009,4.25836,4.18269,4.18269,952,29,455.0,Dollar -True,6011,4.30357,4.33232,4.33232,940,42,455.0,Dollar -False,3238,4.49841,4.54131,4.54131,947,184,455.0,Euro -False,5551,4.41629,4.40056,4.40056,940,18,494.0,Dollar -False,6519,4.57353,4.61758,4.61758,935,51,455.0,Dollar -True,7218,4.09828,4.05204,4.05204,933,59,455.0,Euro -False,3395,4.18478,4.18167,4.18167,924,25,455.0,Pound -False,6922,4.57364,4.527,4.527,924,14,455.0,Pound -True,5107,4.23438,4.27346,4.27346,924,50,455.0,Euro -True,16708,3.72321,3.73248,3.73248,918,5,455.0,Euro -True,6931,4.35833,4.40204,4.40204,917,80,494.0,Dollar -True,3450,4.35581,4.31435,4.31435,917,49,468.0,Euro -True,2346,4.30992,4.2006,4.2006,917,12,455.0,Dollar -False,5351,4.72989,4.73138,4.73138,914,72,455.0,Dollar -False,5287,4.51887,4.50498,4.50498,914,27,455.0,Pound -False,5424,4.53049,4.57446,4.57446,914,20,468.0,Pound -True,1928,4.265,4.26332,4.26332,910,26,455.0,Pound -True,6661,4.5828,4.62598,4.62598,913,98,455.0,Dollar -False,7766,4.32787,4.29638,4.29638,911,77,455.0,Dollar -True,4507,4.14085,3.97723,3.97723,906,30,455.0,Dollar -True,10623,4.43333,4.38137,4.38137,903,93,455.0,Pound -False,20798,4.61538,4.60675,4.60675,900,22,455.0,Pound -False,4157,4.53846,4.56794,4.56794,899,41,455.0,Pound -True,2635,4.35,4.42798,4.42798,899,10,455.0,Dollar -False,3109,4.37073,4.3754,4.3754,892,38,455.0,Pound -True,5122,4.5,4.50291,4.50291,886,58,468.0,Dollar -False,5261,4.49123,4.433,4.433,884,109,455.0,Dollar -True,5785,4.48134,4.46038,4.46038,883,17,455.0,Dollar -True,3232,4.24862,4.25636,4.25636,881,76,455.0,Pound -False,16065,4.39552,4.44338,4.44338,880,56,455.0,Euro -True,3648,4.445,4.43051,4.43051,881,89,455.0,Dollar -False,4503,4.4281,4.48833,4.48833,876,74,462.0,Dollar -False,5379,4.16667,4.17267,4.17267,875,41,455.0,Euro -True,3623,4.22043,4.23913,4.23913,876,119,455.0,Pound -True,4600,4.4881,4.49556,4.49556,874,76,455.0,Pound -True,3052,4.38235,4.17992,4.17992,868,47,455.0,Pound -True,26916,4.53448,4.51737,4.51737,872,111,455.0,Pound -False,5036,4.21583,4.10338,4.10338,867,99,455.0,Euro -False,5057,4.59072,4.60165,4.60165,869,71,455.0,Euro -False,4046,4.2757,4.20566,4.20566,867,66,520.0,Euro -False,3048,4.29435,4.30831,4.30831,879,92,455.0,Pound -True,3347,4.19159,4.22868,4.22868,864,56,455.0,Euro -True,23483,4.27041,4.18543,4.18543,863,668,455.0,Euro -False,4850,4.23077,4.19255,4.19255,863,81,455.0,Pound -True,2478,4.37129,4.35852,4.35852,866,30,455.0,Pound -False,19348,4.11765,4.23437,4.23437,859,32,455.0,Dollar -False,4753,4.09195,4.13621,4.13621,858,58,481.0,Pound -False,39262,4.41667,4.4521,4.4521,857,601,514.0,Pound -True,33544,4.36932,4.36007,4.36007,855,42,455.0,Dollar -True,3806,4.69697,4.70108,4.70108,853,91,455.0,Dollar -False,3003,4.52542,4.54075,4.54075,850,49,455.0,Pound -True,10484,4.40816,4.37978,4.37978,851,49,455.0,Dollar -False,2910,4.41991,4.39563,4.39563,848,280,481.0,Dollar -True,2372,4.47895,4.40617,4.40617,842,5,455.0,Euro -True,2486,4.34186,4.31989,4.31989,841,38,455.0,Pound -True,2085,4.29282,4.26045,4.26045,840,12,455.0,Pound -True,13548,4.06522,4.17483,4.17483,840,22,455.0,Pound -False,3194,4.24894,4.33118,4.33118,838,25,455.0,Pound -False,16706,4.42797,4.54596,4.54596,837,53,468.0,Dollar -True,5684,4.52163,4.54807,4.54807,837,22,474.0,Dollar -False,3020,4.49461,4.47254,4.47254,838,45,455.0,Pound -True,5622,4.55163,4.54625,4.54625,839,125,455.0,Dollar -False,12786,4.25,4.28674,4.28674,836,26,455.0,Pound -False,2119,4.45556,4.43111,4.43111,836,33,455.0,Euro -False,4559,4.4845,4.5134,4.5134,835,19,455.0,Pound -False,4562,4.50725,4.52297,4.52297,833,10,455.0,Euro -True,8098,4.4486,4.39146,4.39146,831,40,455.0,Dollar -False,19310,4.61429,4.64852,4.64852,829,22,455.0,Euro -False,1160,4.54605,4.54068,4.54068,828,8,1680.0,Pound -True,3443,4.51869,4.54344,4.54344,826,38,474.0,Pound -True,2893,4.32432,4.27457,4.27457,825,40,468.0,Pound -False,3546,4.43773,4.41881,4.41881,832,27,455.0,Pound -True,6417,4.41727,4.42063,4.42063,824,31,455.0,Euro -False,5016,3.95,4.03862,4.03862,823,26,455.0,Euro -False,44043,4.7,4.67229,4.67229,823,72,611.0,Pound -False,3192,4.47403,4.4511,4.4511,820,29,455.0,Pound -False,3372,4.43116,4.36355,4.36355,823,17,468.0,Pound -True,2843,4.54915,4.56061,4.56061,818,55,455.0,Dollar -False,4096,4.41954,4.41884,4.41884,818,95,455.0,Dollar -False,46876,3.88406,3.82216,3.82216,818,11,455.0,Pound -False,5922,4.5641,4.51879,4.51879,816,64,462.0,Dollar -False,4967,4.41883,4.41558,4.41558,817,45,455.0,Dollar -True,2318,4.50671,4.52518,4.52518,819,12,2400.0,Pound -False,12483,3.6,3.59583,3.59583,815,27,455.0,Dollar -False,6109,3.8,3.82805,3.82805,812,32,455.0,Pound -True,4144,4.52941,4.54086,4.54086,811,45,455.0,Euro -False,5021,4.44415,4.43862,4.43862,807,47,2720.0,Pound -True,4594,4.37895,4.41132,4.41132,809,29,455.0,Dollar -False,3535,4.46181,4.55157,4.55157,802,20,455.0,Pound -False,33256,4.375,4.36652,4.36652,800,29,455.0,Dollar -False,8094,4.23276,4.2052,4.2052,800,28,494.0,Dollar -False,5129,4.50502,4.53022,4.53022,803,97,455.0,Euro -True,3605,4.39862,4.41665,4.41665,798,29,455.0,Dollar -True,4971,4.13816,4.17723,4.17723,797,34,455.0,Euro -True,4700,4.30244,4.28474,4.28474,799,41,455.0,Euro -False,12914,4.5,4.41067,4.41067,796,89,455.0,Pound -False,7272,4.53846,4.52135,4.52135,796,28,455.0,Euro -False,4770,4.24062,4.28336,4.28336,794,11,455.0,Pound -False,2717,4.48023,4.30428,4.30428,791,112,455.0,Dollar -False,4866,4.08824,4.08691,4.08691,791,24,455.0,Euro -False,6759,4.46703,4.49597,4.49597,789,52,455.0,Pound -False,54597,3.85417,3.81926,3.81926,792,81,455.0,Pound -True,3479,4.295,4.24426,4.24426,793,126,455.0,Pound -False,2614,4.0,4.08174,4.08174,789,18,800.0,Dollar -True,9376,4.74882,4.76682,4.76682,789,62,455.0,Euro -True,4385,4.45714,4.47008,4.47008,786,129,455.0,Euro -False,5673,4.79762,4.78611,4.78611,788,43,455.0,Dollar -False,4854,4.42562,4.41296,4.41296,786,22,455.0,Euro -False,89171,4.50943,4.42418,4.42418,785,51,455.0,Pound -True,32942,4.57803,4.58957,4.58957,788,133,455.0,Euro -False,6208,4.33465,4.28676,4.28676,782,0,488.0,Pound -False,5952,4.5,4.47606,4.47606,781,14,455.0,Dollar -True,2669,4.30488,4.28611,4.28611,782,25,455.0,Dollar -False,2117,4.13684,4.14724,4.14724,773,14,455.0,Euro -False,3804,4.16279,4.13751,4.13751,771,32,455.0,Euro -True,5302,4.58491,4.5943,4.5943,771,18,481.0,Dollar -False,4562,4.75,4.76573,4.76573,770,49,455.0,Dollar -True,44751,4.44326,4.42522,4.42522,770,41,455.0,Dollar -False,5998,4.57831,4.57363,4.57363,770,373,455.0,Euro -True,6210,4.25833,4.21159,4.21159,766,74,462.0,Pound -False,2115,4.35417,4.35953,4.35953,769,57,455.0,Pound -False,10761,4.32609,4.32313,4.32313,764,50,455.0,Euro -False,3821,4.16935,4.17436,4.17436,761,47,455.0,Euro -True,3353,4.32069,4.37,4.37,763,25,455.0,Euro -True,19385,4.46522,4.53642,4.53642,760,75,455.0,Euro -False,7887,4.7193,4.71539,4.71539,760,27,455.0,Pound -False,3464,4.15217,4.09608,4.09608,757,23,720.0,Dollar -True,9671,4.0,3.92659,3.92659,756,11,455.0,Euro -False,2299,4.38889,4.39341,4.39341,758,28,455.0,Euro -True,2119,4.41809,4.44064,4.44064,754,30,455.0,Euro -True,4928,4.35461,4.209,4.209,752,129,455.0,Pound -False,6875,4.2907,4.33272,4.33272,750,29,468.0,Dollar -True,2934,4.58791,4.66277,4.66277,751,48,455.0,Pound -False,3155,4.22464,4.18138,4.18138,752,17,455.0,Euro -False,3254,4.8125,4.81559,4.81559,749,27,455.0,Dollar -False,1945,4.32468,4.27958,4.27958,750,14,455.0,Dollar -False,3934,4.36986,4.35056,4.35056,751,42,455.0,Euro -True,4605,4.43925,4.42382,4.42382,748,143,455.0,Dollar -True,3541,4.48276,4.46919,4.46919,747,26,468.0,Dollar -True,2496,4.37329,4.39887,4.39887,746,30,455.0,Dollar -True,3175,4.45745,4.45349,4.45349,747,26,455.0,Dollar -True,2452,4.125,4.03968,4.03968,744,12,455.0,Dollar -False,7114,4.27434,4.27076,4.27076,744,17,455.0,Euro -True,19302,4.71429,4.75876,4.75876,740,21,455.0,Pound -False,4304,4.52979,4.52084,4.52084,739,27,455.0,Pound -False,3211,4.19444,4.14391,4.14391,735,36,455.0,Dollar -True,1961,4.46346,4.46799,4.46799,738,232,455.0,Dollar -True,4681,4.29365,4.30212,4.30212,737,46,468.0,Dollar -False,3060,4.30208,4.34536,4.34536,734,8,455.0,Pound -False,9289,4.4,4.39081,4.39081,733,26,494.0,Pound -True,4438,4.43269,4.43413,4.43413,728,38,455.0,Pound -False,6791,4.63953,4.72294,4.72294,724,62,2400.0,Pound -True,5201,4.52174,4.50793,4.50793,724,51,455.0,Dollar -True,16868,4.0,3.98262,3.98262,722,59,455.0,Pound -False,2870,4.24272,4.22833,4.22833,722,19,455.0,Euro -True,2064,4.37785,4.35354,4.35354,726,61,455.0,Dollar -False,4683,4.58333,4.58556,4.58556,722,84,455.0,Dollar -False,5045,4.38158,4.38788,4.38788,720,124,462.0,Pound -False,34971,3.41176,3.42313,3.42313,720,23,455.0,Euro -False,5166,4.325,4.36966,4.36966,721,160,455.0,Pound -False,3635,4.37692,4.36329,4.36329,716,54,455.0,Dollar -False,2592,4.43134,4.49099,4.49099,713,73,455.0,Euro -True,4255,4.03125,4.01147,4.01147,712,93,455.0,Dollar -True,5405,4.41544,4.22471,4.22471,712,109,455.0,Dollar -False,4896,4.33168,4.20715,4.20715,709,83,455.0,Euro -False,13165,4.31579,4.39228,4.39228,708,157,455.0,Dollar -True,2297,4.58075,4.5977,4.5977,707,24,455.0,Euro -False,2032,4.45,4.4991,4.4991,705,8,455.0,Pound -False,6476,4.6069,4.6443,4.6443,707,45,455.0,Euro -True,2152,4.14706,4.22167,4.22167,705,10,455.0,Euro -False,19413,4.2807,4.15555,4.15555,706,600,455.0,Pound -True,2925,4.10714,4.06886,4.06886,703,11,455.0,Euro -True,2588,4.22414,4.29566,4.29566,705,17,455.0,Pound -False,2810,4.31379,4.30476,4.30476,700,28,481.0,Pound -True,7783,4.27273,4.32089,4.32089,696,135,488.0,Dollar -True,4408,4.18548,4.12975,4.12975,696,74,455.0,Euro -True,3704,4.1338,4.09176,4.09176,695,65,488.0,Euro -False,2680,4.48333,4.45706,4.45706,694,358,3200.0,Euro -True,2423,4.46774,4.46326,4.46326,689,19,455.0,Dollar -True,5058,4.13462,4.08026,4.08026,684,25,455.0,Dollar -True,3968,4.25926,4.2838,4.2838,682,17,455.0,Pound -True,5260,4.24667,4.20066,4.20066,682,0,455.0,Pound -False,11665,4.45833,4.46643,4.46643,680,119,488.0,Dollar -True,3644,4.43571,4.35726,4.35726,679,52,455.0,Dollar -False,2744,4.3,4.12553,4.12553,677,27,455.0,Pound -True,6700,4.54878,4.56617,4.56617,677,49,455.0,Pound -False,2268,4.21642,4.22936,4.22936,674,8,468.0,Dollar -True,6594,4.3871,4.46775,4.46775,673,53,455.0,Pound -True,2647,4.4965,4.45241,4.45241,670,23,455.0,Dollar -True,15113,4.47183,4.48666,4.48666,668,83,455.0,Euro -False,5404,4.26587,4.14793,4.14793,668,72,474.0,Dollar -True,3568,4.56452,4.5598,4.5598,668,136,455.0,Dollar -True,4811,4.39716,4.38709,4.38709,666,291,455.0,Dollar -True,8730,4.8,4.81067,4.81067,663,47,455.0,Pound -True,3294,4.30769,4.25609,4.25609,662,42,455.0,Pound -False,2438,4.24118,4.22612,4.22612,659,28,455.0,Euro -False,2879,4.41228,4.43649,4.43649,658,35,455.0,Euro -False,2949,4.03704,4.07889,4.07889,657,55,455.0,Dollar -True,1381,4.43945,4.44868,4.44868,656,35,455.0,Pound -True,2531,4.38953,4.37202,4.37202,661,39,455.0,Dollar -True,5732,4.70312,4.73958,4.73958,655,46,455.0,Dollar -True,3075,4.1,3.82051,3.82051,655,64,455.0,Pound -False,9964,4.5566,4.54563,4.54563,655,63,455.0,Dollar -False,5375,4.35345,4.37623,4.37623,654,131,462.0,Dollar -True,5149,4.42,4.35676,4.35676,653,36,455.0,Dollar -False,7492,3.42857,3.45216,3.45216,651,10,455.0,Pound -True,3534,4.5,4.53924,4.53924,655,58,455.0,Pound -False,3544,3.75,3.79304,3.79304,650,52,468.0,Euro -False,4224,4.28804,4.30258,4.30258,650,0,455.0,Dollar -True,5486,4.18852,4.19623,4.19623,653,26,455.0,Pound -True,2528,4.54615,4.58919,4.58919,647,44,468.0,Pound -False,2638,4.43464,4.4071,4.4071,646,88,455.0,Euro -False,7332,4.50637,4.43351,4.43351,643,132,455.0,Euro -True,30876,4.47564,4.51053,4.51053,642,142,455.0,Dollar -False,4355,4.1,4.09427,4.09427,641,42,1280.0,Euro -True,6450,4.45181,4.38882,4.38882,640,0,462.0,Euro -False,27891,4.5,4.48239,4.48239,638,32,455.0,Pound -True,8094,4.30488,4.30697,4.30697,634,52,494.0,Euro -True,5681,4.60714,4.62262,4.62262,633,34,455.0,Pound -True,3018,4.575,4.54163,4.54163,632,19,455.0,Pound -False,24185,4.42466,4.49823,4.49823,634,25,455.0,Dollar -True,8208,4.07812,4.02383,4.02383,632,38,481.0,Pound -True,5668,4.55797,4.58431,4.58431,631,80,468.0,Dollar -False,6164,4.72917,4.68331,4.68331,631,39,455.0,Euro -True,2030,4.02137,4.04615,4.04615,629,43,455.0,Euro -False,8353,4.38636,4.32028,4.32028,630,14,455.0,Euro -True,3440,4.47895,4.14253,4.14253,628,35,455.0,Euro -False,4384,4.63861,4.63972,4.63972,627,174,455.0,Dollar -False,2549,4.55882,4.57647,4.57647,629,93,455.0,Dollar -False,2430,4.09091,4.06788,4.06788,628,54,455.0,Pound -True,5760,4.36667,4.50626,4.50626,624,24,455.0,Dollar -False,55212,4.30822,4.41707,4.41707,624,21,455.0,Pound -True,1603,4.15667,4.15874,4.15874,623,12,455.0,Euro -False,3647,4.31818,4.3354,4.3354,622,36,455.0,Pound -False,9691,4.53571,4.43196,4.43196,622,57,468.0,Pound -True,4624,4.34211,4.35906,4.35906,624,41,2720.0,Dollar -True,3619,4.43289,4.43663,4.43663,624,55,455.0,Euro -True,7764,4.25,4.14673,4.14673,620,7,455.0,Pound -False,6140,4.53636,4.55505,4.55505,624,36,455.0,Pound -False,7557,4.22973,4.29601,4.29601,618,24,455.0,Euro -True,11874,4.59091,4.62871,4.62871,612,68,455.0,Dollar -True,1885,4.20635,4.20746,4.20746,612,43,455.0,Euro -True,25556,4.27,4.26281,4.26281,611,17,500.0,Pound -True,4111,4.45,4.20557,4.20557,612,61,455.0,Dollar -True,7394,4.26786,4.27794,4.27794,610,22,455.0,Dollar -False,9622,4.4,4.21857,4.21857,609,17,455.0,Euro -True,7913,3.6,3.59647,3.59647,609,46,488.0,Euro -False,9628,4.05,4.19955,4.19955,608,16,455.0,Dollar -False,4844,4.53409,4.50877,4.50877,608,40,455.0,Euro -True,2450,4.34667,4.34041,4.34041,608,9,455.0,Pound -True,2901,4.19231,4.17272,4.17272,606,32,533.0,Dollar -True,3702,4.53125,4.59941,4.59941,606,24,455.0,Euro -True,5234,3.9,3.91251,3.91251,605,6,455.0,Dollar -True,23020,4.25,4.01805,4.01805,604,54,455.0,Euro -False,1802,4.55,4.50521,4.50521,602,18,455.0,Pound -False,6491,4.37273,4.492,4.492,602,40,455.0,Pound -False,58258,4.19672,3.9853,3.9853,600,103,455.0,Dollar -True,1858,4.17949,4.22954,4.22954,600,24,488.0,Euro -True,3480,4.41667,4.4371,4.4371,598,62,455.0,Pound -True,2404,4.25806,4.28193,4.28193,599,23,455.0,Dollar -True,2861,4.39326,4.3561,4.3561,598,38,455.0,Dollar -True,5168,4.07843,4.00247,4.00247,595,24,455.0,Dollar -True,13406,4.38502,4.40603,4.40603,599,45,455.0,Pound -True,5424,4.55556,4.54396,4.54396,592,57,455.0,Pound -True,43876,4.45724,4.51779,4.51779,594,30,520.0,Dollar -True,2650,4.35577,4.38837,4.38837,595,22,455.0,Euro -False,4386,4.15,4.13272,4.13272,589,27,455.0,Euro -True,6197,4.37383,4.30544,4.30544,589,187,455.0,Euro -False,4843,4.61392,4.69149,4.69149,586,15,455.0,Dollar -True,3259,4.33889,4.40924,4.40924,584,32,455.0,Euro -False,13127,4.45,4.47888,4.47888,582,21,455.0,Pound -False,3187,4.35204,4.33551,4.33551,585,36,455.0,Dollar -True,3396,4.34672,4.33969,4.33969,583,13,455.0,Pound -False,2563,4.42857,4.16878,4.16878,576,100,468.0,Euro -False,30571,3.71309,3.72323,3.72323,575,6,455.0,Pound -False,2742,4.33537,4.37636,4.37636,575,46,455.0,Dollar -False,1540,4.33693,4.28052,4.28052,579,7,455.0,Euro -True,25937,4.14754,4.12243,4.12243,574,59,455.0,Euro -True,2334,4.57692,4.62322,4.62322,569,17,455.0,Pound -True,32551,4.51887,4.49889,4.49889,569,600,455.0,Pound -True,2588,4.63043,4.61404,4.61404,568,42,455.0,Dollar -False,2593,4.325,4.38097,4.38097,566,26,455.0,Euro -False,4898,4.45055,4.46994,4.46994,564,69,455.0,Pound -False,2600,4.62879,4.60111,4.60111,562,228,3200.0,Dollar -False,2054,4.32394,4.22503,4.22503,562,55,455.0,Dollar -False,2673,4.29114,4.31611,4.31611,562,25,455.0,Euro -True,5840,4.35,4.2626,4.2626,563,38,455.0,Pound -True,4147,4.39516,4.31514,4.31514,561,13,455.0,Dollar -True,2351,4.34409,4.3089,4.3089,558,81,468.0,Pound -True,15279,4.39474,4.41667,4.41667,557,19,455.0,Pound -True,1793,4.25481,4.21712,4.21712,559,26,455.0,Euro -False,2723,4.52367,4.55099,4.55099,560,65,455.0,Euro -True,2247,4.25633,4.24669,4.24669,556,6,514.0,Dollar -True,8854,4.09091,4.078,4.078,554,34,455.0,Pound -False,3724,4.34078,4.39728,4.39728,556,47,455.0,Dollar -True,2152,4.47059,4.46238,4.46238,558,43,455.0,Dollar -False,2205,4.39474,4.40272,4.40272,553,25,455.0,Euro -False,2869,4.50893,4.55198,4.55198,555,31,455.0,Euro -True,3507,4.39677,4.35225,4.35225,555,30,455.0,Dollar -True,6290,3.95,4.0885,4.0885,551,12,455.0,Euro -True,3522,4.42361,4.4475,4.4475,550,469,481.0,Pound -False,5617,4.18056,4.16457,4.16457,549,51,455.0,Dollar -True,2062,4.6,4.57876,4.57876,549,32,455.0,Pound -False,4016,4.38542,4.2519,4.2519,550,27,455.0,Pound -True,4975,4.55629,4.53074,4.53074,549,37,455.0,Euro -True,2345,4.08696,4.09503,4.09503,547,88,455.0,Dollar -True,3732,4.63223,4.47484,4.47484,547,43,455.0,Pound -True,35440,3.1,3.35419,3.35419,545,8,455.0,Dollar -False,1923,4.48837,4.47196,4.47196,547,42,455.0,Pound -True,1774,4.25269,4.26677,4.26677,543,13,455.0,Euro -False,4925,4.40909,4.39204,4.39204,541,67,455.0,Euro -False,4406,4.5,4.5416,4.5416,540,74,455.0,Dollar -False,35553,4.44643,4.43379,4.43379,539,38,468.0,Euro -True,5375,4.39394,4.2729,4.2729,539,48,455.0,Euro -True,2155,4.4879,4.46806,4.46806,541,27,455.0,Pound -False,4225,4.175,4.07729,4.07729,538,98,455.0,Pound -True,4058,4.64286,4.65202,4.65202,537,50,455.0,Euro -False,3207,4.45,4.45022,4.45022,537,29,2880.0,Pound -False,4128,4.38043,4.40562,4.40562,536,27,455.0,Dollar -True,1717,4.40654,4.41823,4.41823,536,28,455.0,Pound -False,1460,4.1875,4.05199,4.05199,536,25,488.0,Dollar -False,1443,4.33146,4.275,4.275,534,17,455.0,Dollar -True,2539,4.58088,4.58598,4.58598,533,21,455.0,Dollar -True,23644,4.55163,4.64651,4.64651,534,41,468.0,Euro -False,4982,4.23077,4.26065,4.26065,532,64,455.0,Euro -True,2935,4.51587,4.50448,4.50448,532,83,455.0,Dollar -False,2532,4.44444,4.40532,4.40532,532,19,455.0,Pound -True,10527,4.44444,4.44455,4.44455,531,15,455.0,Pound -True,1853,4.26761,4.27569,4.27569,530,27,1920.0,Pound -False,5731,4.18,4.17322,4.17322,528,0,455.0,Euro -True,8435,4.65,4.61704,4.61704,526,8,455.0,Euro -True,26323,4.16667,4.02339,4.02339,526,31,455.0,Euro -True,7949,4.47059,4.50802,4.50802,525,51,520.0,Pound -True,2925,4.17708,4.16058,4.16058,526,60,455.0,Pound -True,3456,4.79032,4.82538,4.82538,526,37,455.0,Dollar -False,1593,4.26074,4.17434,4.17434,521,25,455.0,Dollar -False,2876,4.37952,4.34069,4.34069,520,266,481.0,Pound -True,5306,4.44706,4.51216,4.51216,520,45,455.0,Euro -False,4493,4.24615,4.06975,4.06975,517,33,455.0,Euro -True,2578,4.3114,4.31016,4.31016,518,28,455.0,Pound -True,2159,4.58696,4.55469,4.55469,519,82,455.0,Pound -False,1595,4.46348,4.48575,4.48575,519,37,455.0,Dollar -True,3931,3.8,3.79718,3.79718,514,42,455.0,Pound -True,1687,4.44643,4.50745,4.50745,517,26,468.0,Pound -False,3254,4.03846,4.05669,4.05669,513,13,455.0,Euro -True,4591,3.85294,3.78761,3.78761,512,6,455.0,Pound -False,3027,4.48837,4.54888,4.54888,511,21,455.0,Euro -False,1452,4.38235,4.2951,4.2951,512,12,455.0,Dollar -False,4110,4.33771,4.30219,4.30219,511,123,455.0,Pound -True,2205,4.12069,4.10338,4.10338,508,65,455.0,Dollar -True,8004,4.24554,4.28314,4.28314,508,199,455.0,Euro -False,3128,3.35,3.25941,3.25941,509,241,455.0,Dollar -False,7804,4.71078,4.67313,4.67313,509,32,455.0,Pound -True,3755,4.23077,4.23526,4.23526,504,25,455.0,Pound -True,2370,4.44,4.41135,4.41135,504,82,481.0,Euro -True,2010,4.05882,4.07062,4.07062,502,11,455.0,Euro -False,1903,4.24609,4.1978,4.1978,502,113,455.0,Euro -True,2076,4.15152,4.16651,4.16651,501,28,455.0,Euro -True,2898,3.85833,3.90374,3.90374,499,204,468.0,Euro -True,3260,4.5,4.45216,4.45216,499,14,468.0,Euro -False,1864,3.5,3.53852,3.53852,498,63,455.0,Pound -False,13023,4.33333,4.29464,4.29464,497,84,455.0,Pound -True,2019,4.04348,3.98176,3.98176,497,51,455.0,Dollar -False,3561,4.44304,4.46453,4.46453,496,81,455.0,Dollar -True,2636,4.69737,4.72393,4.72393,495,16,455.0,Pound -False,3375,4.67333,4.27674,4.27674,495,75,455.0,Pound -False,2719,3.95,3.89776,3.89776,495,12,455.0,Dollar -False,15362,4.55556,4.53003,4.53003,495,20,468.0,Euro -False,2281,4.23889,4.24188,4.24188,494,16,455.0,Dollar -True,1399,4.11864,4.13369,4.13369,496,23,455.0,Pound -True,3718,4.7907,4.78346,4.78346,492,164,455.0,Dollar -True,27585,3.65,3.5005,3.5005,492,30,455.0,Pound -False,7451,4.42857,4.44269,4.44269,492,26,455.0,Pound -True,1780,4.32051,4.34948,4.34948,491,41,455.0,Dollar -False,1636,4.39744,4.41331,4.41331,491,11,455.0,Pound -True,2076,4.42405,4.42992,4.42992,491,27,455.0,Pound -True,2626,4.40854,4.30026,4.30026,490,12,455.0,Euro -False,14985,4.28125,4.22798,4.22798,488,28,455.0,Pound -True,39915,3.62338,3.61641,3.61641,488,11,455.0,Euro -True,5288,4.23913,4.35565,4.35565,487,33,455.0,Pound -True,3946,4.59211,4.6251,4.6251,487,27,455.0,Pound -True,895,4.34615,4.45877,4.45877,488,16,455.0,Pound -True,7065,4.48529,4.48143,4.48143,485,60,455.0,Euro -False,10063,3.95,4.05329,4.05329,483,54,455.0,Dollar -False,5414,4.63,4.6131,4.6131,483,53,455.0,Dollar -False,2515,4.28378,4.25644,4.25644,480,30,455.0,Pound -False,2262,4.22148,4.08387,4.08387,480,372,455.0,Pound -True,4187,4.48101,4.47837,4.47837,481,142,455.0,Euro -False,8490,4.61034,4.66495,4.66495,479,77,455.0,Dollar -True,18519,4.0,4.00629,4.00629,477,71,455.0,Euro -True,2196,4.09524,4.10985,4.10985,477,13,455.0,Dollar -False,4165,4.29091,4.29079,4.29079,477,115,455.0,Euro -True,53614,4.20283,4.28764,4.28764,479,105,455.0,Pound -False,3135,4.67308,4.69812,4.69812,475,37,455.0,Pound -True,2896,4.05,4.02812,4.02812,475,48,455.0,Dollar -True,1433,4.33333,4.34037,4.34037,475,174,474.0,Dollar -False,3550,4.08824,4.09903,4.09903,473,86,455.0,Dollar -True,1907,4.49242,4.48898,4.48898,474,57,455.0,Pound -True,58014,4.11058,4.07941,4.07941,476,215,455.0,Pound -True,2468,4.55245,4.54049,4.54049,477,194,455.0,Dollar -True,1492,4.35448,4.30787,4.30787,473,21,455.0,Pound -False,9288,4.38462,4.2006,4.2006,473,46,455.0,Euro -False,2525,4.47297,4.27961,4.27961,472,17,468.0,Dollar -True,5634,3.84375,3.79878,3.79878,470,17,455.0,Dollar -False,3802,4.77273,4.76648,4.76648,471,41,455.0,Pound -True,8380,3.95,3.95327,3.95327,470,23,455.0,Pound -True,3569,4.27586,4.2829,4.2829,470,38,455.0,Dollar -True,2017,4.43548,4.48753,4.48753,468,23,455.0,Dollar -False,12738,4.375,4.40466,4.40466,466,45,455.0,Dollar -True,8654,4.43478,4.38905,4.38905,465,124,455.0,Dollar -True,1697,4.32292,4.31517,4.31517,465,48,455.0,Dollar -True,5558,4.65,4.5503,4.5503,465,30,455.0,Dollar -True,1536,4.28214,4.31712,4.31712,469,41,455.0,Dollar -False,28203,3.76923,3.89389,3.89389,461,9,455.0,Euro -True,24082,4.1,3.98136,3.98136,459,115,455.0,Euro -False,9833,4.2165,4.17518,4.17518,459,17,455.0,Euro -False,2703,4.60938,4.63202,4.63202,460,33,455.0,Pound -True,1934,4.34706,4.33452,4.33452,458,45,455.0,Pound -True,3814,3.86364,3.6712,3.6712,458,55,455.0,Dollar -True,17433,4.28646,4.38079,4.38079,458,122,2080.0,Dollar -False,3540,4.3,4.38606,4.38606,459,19,468.0,Pound -False,19558,4.20513,4.20228,4.20228,457,8,455.0,Euro -False,4104,4.25,4.15518,4.15518,455,48,455.0,Euro -False,2392,4.39286,4.43096,4.43096,453,32,455.0,Dollar -False,17331,4.37395,4.38743,4.38743,457,17,455.0,Dollar -True,2544,4.24306,4.16229,4.16229,456,12,455.0,Euro -False,3574,4.47826,4.48984,4.48984,452,45,455.0,Dollar -False,3803,4.72581,4.65601,4.65601,452,22,455.0,Euro -True,12708,4.34426,4.35346,4.35346,451,27,455.0,Dollar -False,1907,4.62963,4.6729,4.6729,450,31,455.0,Dollar -True,3138,3.66667,3.61329,3.61329,451,62,455.0,Pound -False,3816,4.69811,4.69182,4.69182,449,55,455.0,Dollar -False,6430,4.45,4.43595,4.43595,449,22,455.0,Dollar -True,2892,4.7875,4.77915,4.77915,449,13,455.0,Euro -False,13279,4.32609,4.22206,4.22206,449,22,500.0,Dollar -False,11054,4.25,4.25951,4.25951,448,13,455.0,Dollar -False,3283,4.61364,4.60347,4.60347,449,18,455.0,Dollar -False,3761,4.23913,4.18354,4.18354,448,0,520.0,Pound -False,2575,4.27273,4.29918,4.29918,447,50,488.0,Euro -False,32740,4.18627,4.21766,4.21766,447,42,455.0,Pound -False,2082,4.25,4.60477,4.60477,447,29,2880.0,Euro -True,3032,4.53521,4.53315,4.53315,446,16,455.0,Dollar -False,11110,4.73234,4.76521,4.76521,444,11,1280.0,Dollar -True,20395,4.53652,4.55633,4.55633,444,29,455.0,Euro -True,2345,4.43056,4.37896,4.37896,445,329,455.0,Pound -True,1617,4.43719,4.45437,4.45437,445,29,455.0,Dollar -True,59621,4.34615,4.43867,4.43867,443,55,455.0,Pound -True,2647,4.60294,4.6988,4.6988,443,19,455.0,Dollar -False,3405,4.4375,4.39151,4.39151,442,50,455.0,Dollar -True,1754,4.78692,4.5461,4.5461,441,20,481.0,Pound -True,4187,4.44915,4.59287,4.59287,440,47,455.0,Pound -False,1787,4.25,4.44903,4.44903,440,12,455.0,Dollar -True,1667,3.85,3.74943,3.74943,438,21,455.0,Dollar -True,41759,4.07353,4.0994,4.0994,438,26,455.0,Euro -True,2227,4.58382,4.61876,4.61876,437,46,455.0,Euro -False,2967,4.9,4.91336,4.91336,437,37,455.0,Dollar -True,2278,4.55263,4.54733,4.54733,436,66,800.0,Dollar -False,2231,4.63462,4.64552,4.64552,435,9,455.0,Pound -False,5731,4.26562,4.08957,4.08957,435,11,455.0,Pound -False,2577,3.97917,3.95508,3.95508,435,28,455.0,Pound -True,3935,4.54615,4.60067,4.60067,434,43,455.0,Dollar -True,2596,4.51471,4.42909,4.42909,433,42,468.0,Dollar -False,1272,4.60656,4.614,4.614,433,40,455.0,Dollar -True,2106,4.40141,4.36719,4.36719,432,20,455.0,Euro -False,2098,4.4322,4.42318,4.42318,431,42,455.0,Euro -False,2592,4.65819,4.64621,4.64621,432,103,455.0,Pound -False,1223,4.20732,4.20014,4.20014,430,31,455.0,Pound -True,44864,4.1974,4.22526,4.22526,429,64,455.0,Dollar -True,6313,3.3,3.34817,3.34817,428,50,455.0,Euro -False,4478,4.15741,4.12445,4.12445,428,91,455.0,Pound -True,1456,4.35938,4.37066,4.37066,426,21,455.0,Euro -False,3234,4.6,4.70924,4.70924,426,29,455.0,Euro -False,4759,4.69643,4.67374,4.67374,425,59,455.0,Pound -True,3463,4.27344,4.17355,4.17355,425,172,481.0,Euro -False,1361,4.30909,4.30633,4.30633,425,11,455.0,Euro -True,1627,4.19333,4.05202,4.05202,423,22,455.0,Euro -True,997,4.54167,4.55401,4.55401,422,17,455.0,Euro -False,9614,4.36111,4.3651,4.3651,421,54,455.0,Euro -True,1974,4.31333,4.3205,4.3205,420,23,455.0,Dollar -True,3775,4.25,4.32406,4.32406,419,30,455.0,Euro -True,1008,3.76623,3.79444,3.79444,419,10,455.0,Dollar -True,5016,4.53175,4.60876,4.60876,418,23,455.0,Euro -True,3007,4.3,4.1831,4.1831,416,36,455.0,Pound -False,11593,4.19444,4.06109,4.06109,416,43,494.0,Pound -False,998,4.24576,4.22472,4.22472,416,41,455.0,Dollar -True,8490,4.08952,4.0952,4.0952,422,11,455.0,Pound -False,3429,3.88,3.90075,3.90075,415,19,455.0,Dollar -True,12261,4.35849,4.2514,4.2514,417,41,455.0,Pound -False,3944,4.2,4.32014,4.32014,414,31,455.0,Pound -True,3839,4.3913,4.37118,4.37118,414,19,455.0,Pound -True,1133,4.52459,4.52529,4.52529,412,26,455.0,Euro -False,2663,4.34343,4.24747,4.24747,414,15,455.0,Pound -True,30434,3.25,3.35482,3.35482,411,31,455.0,Euro -True,33618,4.39474,4.41654,4.41654,411,32,455.0,Dollar -False,1958,4.22131,4.2032,4.2032,410,78,481.0,Pound -False,1801,4.35057,4.26495,4.26495,410,17,455.0,Dollar -False,42661,4.2,4.22375,4.22375,410,103,455.0,Dollar -True,6668,4.54,4.52777,4.52777,409,40,468.0,Dollar -True,1914,4.1,4.0793,4.0793,408,27,494.0,Dollar -False,2530,4.34091,4.36944,4.36944,408,20,455.0,Dollar -False,1320,4.14458,4.06565,4.06565,407,37,488.0,Pound -False,1426,4.46667,4.48005,4.48005,406,11,455.0,Pound -False,4075,4.25397,4.32229,4.32229,410,32,455.0,Pound -True,2843,4.5,4.44749,4.44749,405,28,455.0,Pound -False,1304,4.42941,4.45591,4.45591,405,29,455.0,Euro -False,1795,3.91667,3.87275,3.87275,404,12,520.0,Dollar -True,2223,4.59091,4.55683,4.55683,403,118,455.0,Euro -True,1457,4.41209,4.40621,4.40621,404,62,455.0,Pound -False,2546,4.5,4.51027,4.51027,402,61,468.0,Dollar -False,14801,3.89583,4.03796,4.03796,401,54,455.0,Dollar -False,20836,3.35,3.15472,3.15472,401,525,455.0,Pound -False,2230,4.30645,4.25481,4.25481,401,29,455.0,Pound -True,1519,4.45294,4.49008,4.49008,402,20,455.0,Dollar -True,4732,4.32812,4.34332,4.34332,399,38,2000.0,Euro -False,1950,4.23214,4.25426,4.25426,400,18,455.0,Euro -False,1250,3.95946,3.97658,3.97658,400,52,455.0,Pound -True,1909,4.36842,4.43601,4.43601,398,98,455.0,Euro -False,5040,4.55682,4.56198,4.56198,397,25,462.0,Euro -False,1863,4.31707,4.38007,4.38007,398,39,468.0,Euro -True,4105,4.45,4.40853,4.40853,396,48,455.0,Dollar -True,4127,4.08333,4.03713,4.03713,396,37,468.0,Pound -True,1655,4.33333,4.43502,4.43502,397,25,455.0,Pound -True,1391,4.32203,4.32624,4.32624,396,64,455.0,Dollar -False,1365,4.38462,4.34185,4.34185,396,16,455.0,Euro -False,2092,4.24265,4.22318,4.22318,396,21,455.0,Pound -False,2409,4.33333,4.38013,4.38013,395,103,455.0,Euro -True,6614,4.57143,4.53173,4.53173,395,37,455.0,Dollar -False,1127,4.25556,4.20065,4.20065,395,144,2240.0,Euro -True,955,4.42308,4.41547,4.41547,394,46,455.0,Pound -True,1815,4.43367,4.51653,4.51653,394,8,455.0,Dollar -False,58882,4.11538,4.08009,4.08009,394,73,455.0,Pound -False,1459,4.2619,4.13101,4.13101,392,68,3040.0,Dollar -False,6992,4.39286,4.42279,4.42279,392,43,455.0,Dollar -False,19048,4.05,4.51807,4.51807,391,11,455.0,Euro -True,14968,4.43214,4.41378,4.41378,392,24,455.0,Pound -False,1489,4.66438,4.66529,4.66529,390,19,455.0,Dollar -True,4295,3.70833,3.62967,3.62967,390,17,455.0,Pound -True,3643,4.23256,4.29116,4.29116,389,63,455.0,Euro -True,6899,4.38889,4.42705,4.42705,389,40,462.0,Pound -True,1774,4.51316,4.50866,4.50866,389,10,1600.0,Dollar -False,1205,4.18797,4.16348,4.16348,392,185,455.0,Euro -True,1407,4.44091,4.47606,4.47606,389,284,455.0,Pound -False,10636,4.33871,4.35886,4.35886,387,19,455.0,Pound -False,6885,4.15,4.17407,4.17407,386,9,455.0,Euro -False,12400,4.40625,4.25002,4.25002,386,51,455.0,Euro -True,1732,4.59146,4.58878,4.58878,388,90,455.0,Euro -True,51005,4.19863,4.1594,4.1594,386,26,520.0,Dollar -False,2763,4.9375,4.81904,4.81904,385,42,455.0,Euro -False,3192,4.63889,4.53065,4.53065,383,43,455.0,Pound -False,5232,4.4,4.44809,4.44809,383,16,455.0,Pound -False,4985,4.29268,4.3219,4.3219,383,46,455.0,Euro -False,3412,4.33636,4.32986,4.32986,383,59,455.0,Pound -True,2997,4.27679,4.26981,4.26981,383,46,455.0,Euro -True,29166,3.8,3.89184,3.89184,382,47,455.0,Dollar -False,3083,4.46429,4.42404,4.42404,382,14,455.0,Dollar -True,3115,4.28125,4.25139,4.25139,382,38,455.0,Pound -True,1332,4.32895,4.42597,4.42597,381,9,455.0,Pound -True,6635,4.75,4.47942,4.47942,381,9,455.0,Dollar -True,30274,4.29936,4.27845,4.27845,381,42,455.0,Dollar -False,11918,4.35,4.46211,4.46211,379,18,455.0,Euro -False,3239,4.29545,4.29959,4.29959,379,29,455.0,Pound -True,2388,4.48476,4.44827,4.44827,377,31,455.0,Dollar -True,1678,4.51562,4.5273,4.5273,376,44,455.0,Euro -False,2464,4.27778,4.36374,4.36374,376,26,455.0,Euro -False,18113,3.79412,3.63783,3.63783,375,225,455.0,Pound -False,25828,4.20345,4.22025,4.22025,375,19,455.0,Euro -True,4112,4.11765,4.11548,4.11548,375,123,455.0,Pound -True,2656,4.44231,4.45745,4.45745,376,21,468.0,Dollar -True,22391,3.875,3.60572,3.60572,373,29,455.0,Dollar -True,1579,4.22222,4.13555,4.13555,372,6,455.0,Euro -True,3547,4.4127,4.4339,4.4339,371,65,455.0,Pound -True,4466,4.46465,4.39488,4.39488,373,63,455.0,Pound -False,4323,4.0,3.84844,3.84844,370,46,455.0,Pound -True,2282,4.7,4.64234,4.64234,370,33,455.0,Euro -True,7906,4.24706,4.26403,4.26403,369,17,455.0,Pound -True,4588,4.39286,4.47504,4.47504,368,17,455.0,Pound -True,11597,4.6,4.5784,4.5784,368,19,455.0,Euro -True,10921,4.58025,4.55643,4.55643,368,35,455.0,Pound -False,13982,4.29012,4.23615,4.23615,368,20,455.0,Pound -False,1575,4.45,4.43016,4.43016,367,46,455.0,Euro -True,3103,4.51538,4.55001,4.55001,369,35,455.0,Dollar -False,1892,4.38816,4.46699,4.46699,369,21,455.0,Dollar -False,2210,4.25,4.29973,4.29973,366,21,455.0,Pound -False,6216,3.29167,3.33074,3.33074,366,7,455.0,Pound -False,2393,4.52128,4.5179,4.5179,365,15,455.0,Euro -False,1535,4.41975,4.1631,4.1631,365,33,455.0,Euro -True,3172,4.37288,4.33715,4.33715,365,142,800.0,Pound -False,1702,3.65,3.58937,3.58937,364,30,455.0,Euro -True,3000,4.1,4.05561,4.05561,364,18,455.0,Euro -True,1358,4.44706,4.43197,4.43197,363,42,455.0,Euro -False,1809,3.96667,3.90748,3.90748,362,31,455.0,Dollar -False,1484,4.45,4.52674,4.52674,361,8,455.0,Euro -False,8725,4.50847,4.48173,4.48173,362,20,455.0,Dollar -False,1745,4.28409,4.23109,4.23109,361,33,455.0,Dollar -True,1054,4.38462,4.38047,4.38047,365,42,2160.0,Pound -False,31442,2.78947,2.68061,2.68061,360,30,455.0,Euro -True,2600,4.76271,4.79969,4.79969,361,25,455.0,Dollar -True,1256,4.54365,4.59442,4.59442,367,41,455.0,Euro -False,29760,4.06818,4.01182,4.01182,359,8,455.0,Pound -True,1987,4.35417,4.33343,4.33343,359,13,455.0,Dollar -True,1385,4.3,4.31094,4.31094,359,84,455.0,Pound -False,31637,3.2,3.27268,3.27268,358,45,455.0,Pound -True,1158,4.2,4.19335,4.19335,358,14,455.0,Dollar -True,6128,4.33333,4.34487,4.34487,357,27,455.0,Pound -True,1522,4.46233,4.35891,4.35891,356,60,2400.0,Euro -True,3376,4.22826,4.07415,4.07415,356,128,455.0,Pound -False,1940,4.54082,4.51155,4.51155,356,51,455.0,Pound -False,4029,4.58125,4.64903,4.64903,356,16,455.0,Euro -False,2092,4.56311,4.55726,4.55726,357,28,455.0,Dollar -True,1319,4.24725,4.25696,4.25696,356,25,455.0,Euro -False,2358,4.35714,4.40503,4.40503,355,37,455.0,Dollar -False,12161,4.03704,3.54739,3.54739,356,0,474.0,Pound -False,1276,4.5,4.54482,4.54482,355,47,455.0,Dollar -False,1825,4.8,4.76672,4.76672,354,28,455.0,Dollar -True,3101,4.26389,4.14264,4.14264,354,77,455.0,Euro -False,1247,4.39151,4.42429,4.42429,353,26,455.0,Dollar -False,7006,4.51389,4.48722,4.48722,354,17,455.0,Dollar -False,3062,3.625,3.71708,3.71708,353,127,474.0,Pound -False,2931,4.60526,4.59393,4.59393,352,15,455.0,Dollar -False,1484,4.61236,4.6353,4.6353,353,48,455.0,Pound -True,2881,4.3855,4.30499,4.30499,352,39,455.0,Dollar -True,4773,4.48077,4.37326,4.37326,351,62,455.0,Pound -True,2356,4.6,4.58209,4.58209,350,21,455.0,Euro -False,960,4.21429,4.25376,4.25376,351,23,455.0,Dollar -False,2476,4.6,4.60578,4.60578,348,14,455.0,Dollar -False,1619,4.4023,4.45306,4.45306,348,22,455.0,Dollar -False,2007,4.31818,4.30701,4.30701,348,46,455.0,Euro -False,1516,4.33173,4.38034,4.38034,350,21,455.0,Euro -True,2716,3.88333,3.71566,3.71566,349,36,474.0,Pound -False,1134,4.19928,4.12469,4.12469,348,11,455.0,Euro -True,1785,4.40244,4.37779,4.37779,347,18,455.0,Pound -True,7439,4.64754,4.68574,4.68574,346,102,455.0,Dollar -False,3839,4.27679,4.18078,4.18078,349,27,455.0,Pound -True,3121,4.21795,4.21324,4.21324,346,463,455.0,Euro -True,3146,4.01064,3.87699,3.87699,345,86,455.0,Dollar -True,4180,4.35,4.3812,4.3812,346,66,455.0,Pound -False,1412,4.38889,4.37753,4.37753,347,57,474.0,Dollar -True,1323,4.15517,4.08729,4.08729,345,40,455.0,Euro -True,1163,4.3,4.28495,4.28495,345,47,455.0,Dollar -True,2579,4.70833,4.75609,4.75609,345,24,455.0,Pound -True,15762,4.7,4.76825,4.76825,344,20,455.0,Pound -True,1013,4.17273,4.15916,4.15916,344,25,455.0,Euro -False,1433,4.34211,4.30569,4.30569,345,32,455.0,Dollar -True,2414,4.51,4.63572,4.63572,343,32,455.0,Pound -False,3575,4.02128,4.04295,4.04295,341,129,474.0,Dollar -True,3581,4.5625,4.55386,4.55386,341,34,455.0,Euro -False,3465,4.6,4.60515,4.60515,341,54,455.0,Dollar -False,2528,4.30488,4.14351,4.14351,341,548,455.0,Euro -False,3096,4.2027,4.17793,4.17793,342,0,455.0,Dollar -True,2380,4.21154,4.18067,4.18067,340,38,455.0,Euro -True,2619,4.48148,4.49195,4.49195,341,16,3200.0,Pound -False,1993,4.16964,4.07305,4.07305,341,34,468.0,Dollar -False,1666,4.48507,4.26381,4.26381,341,60,455.0,Dollar -False,2801,4.43103,4.41924,4.41924,339,41,455.0,Dollar -True,2261,4.42857,4.43223,4.43223,338,68,455.0,Euro -True,23349,2.26087,1.98877,1.98877,338,5,455.0,Dollar -True,1980,4.75,4.74716,4.74716,336,15,455.0,Pound -False,6011,4.35,4.30855,4.30855,336,95,455.0,Euro -True,835,3.775,3.8701,3.8701,334,7,455.0,Dollar -False,1658,3.85714,3.97234,3.97234,333,44,455.0,Dollar -False,1101,4.55263,4.54867,4.54867,333,67,455.0,Euro -False,3181,4.18657,4.12741,4.12741,331,54,455.0,Euro -True,3661,4.2,4.19189,4.19189,331,23,455.0,Pound -True,1856,4.25,4.24318,4.24318,328,8,455.0,Dollar -True,4328,4.71698,4.70438,4.70438,328,23,455.0,Dollar -True,15942,4.19483,4.2002,4.2002,328,96,455.0,Euro -True,1254,4.15,4.29909,4.29909,328,8,455.0,Dollar -False,2410,4.60811,4.61965,4.61965,328,29,455.0,Euro -True,1218,4.01613,3.98738,3.98738,327,49,455.0,Pound -False,10616,3.9,3.88013,3.88013,326,91,500.0,Dollar -False,1465,4.07143,4.08644,4.08644,326,27,455.0,Pound -True,36186,4.35,4.12612,4.12612,327,80,455.0,Euro -True,7104,4.18182,4.18911,4.18911,324,77,455.0,Pound -True,6615,4.39474,4.3533,4.3533,324,12,455.0,Euro -True,11531,4.5,4.46424,4.46424,323,34,455.0,Euro -False,8010,3.9,4.04754,4.04754,322,17,455.0,Pound -True,6412,4.3,3.84392,3.84392,322,13,468.0,Pound -False,2109,4.575,4.62115,4.62115,322,64,455.0,Euro -False,4067,4.46429,4.49993,4.49993,323,71,468.0,Dollar -False,2255,4.78571,4.78458,4.78458,321,57,455.0,Euro -True,965,4.59868,4.61116,4.61116,323,97,3200.0,Pound -True,28064,4.1,4.16697,4.16697,320,39,455.0,Dollar -True,1423,4.42105,4.44249,4.44249,320,15,455.0,Pound -True,3322,4.15,4.11412,4.11412,320,37,455.0,Pound -True,3305,4.47826,4.32193,4.32193,320,61,474.0,Pound -True,20013,4.62635,4.64081,4.64081,319,40,507.0,Dollar -True,1476,4.09028,4.06397,4.06397,318,13,455.0,Pound -True,2507,4.39,4.27295,4.27295,319,20,455.0,Dollar -True,8305,4.2,4.10683,4.10683,317,30,455.0,Pound -True,3464,4.4,4.30985,4.30985,317,35,455.0,Pound -False,5799,4.47917,4.4574,4.4574,316,26,455.0,Euro -False,3500,3.95,3.87504,3.87504,316,23,455.0,Pound -True,1478,4.22414,4.18581,4.18581,315,39,462.0,Dollar -False,2071,3.45,3.42587,3.42587,315,38,455.0,Euro -True,3147,4.76667,4.76513,4.76513,315,33,455.0,Pound -False,12515,4.2,4.27681,4.27681,315,76,455.0,Pound -False,11515,4.55769,4.63012,4.63012,314,48,455.0,Euro -True,1521,4.08333,4.09845,4.09845,315,40,455.0,Pound -False,940,4.36364,4.40107,4.40107,314,21,455.0,Pound -False,4608,4.14286,4.14321,4.14321,314,432,455.0,Dollar -True,4596,3.9,3.85231,3.85231,313,11,455.0,Dollar -False,2521,4.35,4.12744,4.12744,313,9,455.0,Pound -True,1987,4.14286,3.96028,3.96028,315,27,1360.0,Dollar -False,2678,4.1,4.09688,4.09688,313,28,455.0,Dollar -False,2215,4.2,4.14682,4.14682,312,24,455.0,Euro -True,5697,3.95,3.94726,3.94726,312,29,455.0,Pound -True,29551,3.96955,3.92927,3.92927,314,26,455.0,Dollar -True,20189,4.40625,4.23133,4.23133,312,39,455.0,Pound -True,40099,4.42949,4.37455,4.37455,312,235,455.0,Euro -True,1082,4.59524,4.54901,4.54901,314,22,455.0,Pound -True,2062,4.5,4.48036,4.48036,311,43,468.0,Dollar -False,1445,4.3125,4.30069,4.30069,311,11,455.0,Dollar -True,1975,4.36471,4.31116,4.31116,313,31,455.0,Pound -False,4383,4.34615,4.35647,4.35647,309,12,455.0,Pound -True,6989,4.69231,4.78157,4.78157,310,40,455.0,Pound -False,22443,4.08824,4.02735,4.02735,311,69,455.0,Euro -False,1319,4.22368,4.05746,4.05746,307,27,455.0,Euro -False,920,4.77027,4.63718,4.63718,307,77,455.0,Dollar -True,6376,4.05,4.08714,4.08714,307,13,455.0,Euro -False,11792,4.20217,4.15464,4.15464,307,70,455.0,Dollar -False,1469,4.36957,4.44699,4.44699,307,37,455.0,Pound -True,1728,4.75962,4.75647,4.75647,306,117,455.0,Euro -False,3708,4.33607,4.04493,4.04493,307,30,455.0,Euro -True,2493,3.45,3.57196,3.57196,306,107,455.0,Pound -True,14356,4.43939,4.37142,4.37142,306,23,455.0,Pound -False,8288,4.2,4.08742,4.08742,304,110,455.0,Euro -False,1160,3.89474,3.90352,3.90352,304,10,455.0,Dollar -False,3093,4.56122,4.59678,4.59678,304,8,468.0,Dollar -False,9164,4.45238,4.42493,4.42493,303,46,455.0,Euro -True,5700,4.43478,4.45513,4.45513,302,12,455.0,Euro -False,1490,4.46154,4.48568,4.48568,304,40,3200.0,Pound -False,2483,4.425,4.40898,4.40898,302,7,455.0,Euro -True,2887,4.26136,4.20374,4.20374,303,28,455.0,Pound -False,2483,4.45,4.39581,4.39581,303,27,455.0,Euro -True,1631,4.38991,4.45097,4.45097,304,12,455.0,Dollar -False,29588,4.46429,4.46073,4.46073,300,47,455.0,Dollar -True,2735,4.17327,4.12307,4.12307,301,35,455.0,Euro -False,932,3.72414,3.66697,3.66697,300,32,455.0,Euro -True,1330,4.66667,4.61622,4.61622,299,26,455.0,Pound -False,7341,4.5,4.6351,4.6351,298,12,455.0,Euro -True,1643,4.18072,4.12384,4.12384,298,116,455.0,Euro -True,2041,4.1,4.22508,4.22508,298,48,455.0,Euro -True,2712,4.15476,4.16015,4.16015,298,15,455.0,Pound -True,13423,3.7,3.75663,3.75663,297,30,455.0,Dollar -False,1980,3.8,3.67743,3.67743,297,19,455.0,Dollar -False,29136,3.62363,3.65747,3.65747,297,19,455.0,Pound -True,646,4.25,4.28617,4.28617,295,10,455.0,Pound -True,3780,4.15,4.21833,4.21833,295,68,455.0,Dollar -True,15246,4.4697,4.48525,4.48525,294,139,520.0,Dollar -False,3022,4.15385,4.08259,4.08259,294,51,455.0,Euro -True,1317,4.57143,4.54613,4.54613,294,14,455.0,Euro -False,1564,4.42754,4.4347,4.4347,293,70,455.0,Dollar -False,22224,3.17568,3.23898,3.23898,292,35,455.0,Dollar -True,1054,4.40698,4.16391,4.16391,292,13,455.0,Pound -False,1187,4.49242,4.02813,4.02813,292,20,455.0,Dollar -True,9481,4.25,4.36111,4.36111,293,18,455.0,Euro -False,2298,4.54167,4.55266,4.55266,291,25,455.0,Dollar -False,1350,3.8,3.95231,3.95231,291,33,455.0,Dollar -False,9450,4.34615,4.47652,4.47652,291,119,455.0,Dollar -False,45166,4.27215,4.12326,4.12326,292,20,455.0,Dollar -True,5447,4.52273,4.42961,4.42961,289,81,455.0,Pound -True,1672,4.4,4.39139,4.39139,289,36,455.0,Euro -False,25536,4.3587,4.4901,4.4901,290,14,455.0,Euro -False,1387,4.38158,4.43038,4.43038,288,34,455.0,Pound -True,2937,4.57447,4.58163,4.58163,289,40,455.0,Pound -False,1435,4.25,4.2249,4.2249,288,53,455.0,Dollar -True,5020,3.9,3.84404,3.84404,288,104,455.0,Dollar -False,25748,3.68182,3.88456,3.88456,288,11,455.0,Dollar -True,5219,4.5,4.45878,4.45878,288,9,455.0,Euro -False,3160,4.0,3.78534,3.78534,288,8,455.0,Pound -True,1335,4.22973,4.2811,4.2811,288,26,455.0,Dollar -False,994,4.36,4.21112,4.21112,288,46,455.0,Euro -True,2370,4.39655,4.38505,4.38505,287,65,455.0,Euro -False,1168,4.22,4.06895,4.06895,288,31,455.0,Dollar -True,2350,4.70833,4.72008,4.72008,290,10,455.0,Dollar -False,2218,3.9,3.79903,3.79903,286,59,455.0,Dollar -False,3465,4.63095,4.67793,4.67793,286,56,455.0,Euro -True,1842,4.58065,4.55126,4.55126,285,59,455.0,Euro -True,1074,4.44531,4.29177,4.29177,285,86,455.0,Dollar -True,8894,4.05556,4.10999,4.10999,285,21,455.0,Pound -False,2703,3.94737,3.96409,3.96409,285,49,455.0,Pound -True,1970,4.875,4.90862,4.90862,285,56,455.0,Dollar -True,2557,3.95,3.95658,3.95658,284,41,455.0,Pound -False,7070,3.8,3.7313,3.7313,284,81,455.0,Dollar -True,2239,4.25,4.10795,4.10795,284,101,455.0,Pound -False,3409,3.9,3.63235,3.63235,283,26,455.0,Euro -True,2221,4.29545,4.26349,4.26349,283,50,455.0,Dollar -False,1856,4.27778,4.52376,4.52376,283,137,1280.0,Euro -True,1009,4.47619,4.48405,4.48405,283,19,455.0,Pound -True,1030,4.45455,4.42309,4.42309,283,22,455.0,Euro -False,3419,4.38235,4.23603,4.23603,282,161,455.0,Dollar -True,1952,4.51754,4.54988,4.54988,282,205,481.0,Euro -False,3223,4.67089,4.69142,4.69142,282,257,455.0,Euro -False,1778,4.05,3.97376,3.97376,281,34,455.0,Pound -True,1063,4.44156,4.33851,4.33851,281,37,455.0,Dollar -True,3036,4.55665,4.54841,4.54841,284,74,455.0,Dollar -False,1262,4.53846,4.55348,4.55348,281,12,455.0,Pound -True,1115,4.28689,4.23422,4.23422,279,16,455.0,Dollar -True,4899,4.36,3.95119,3.95119,279,31,455.0,Euro -False,5335,3.8,3.48679,3.48679,279,16,455.0,Euro -True,1466,4.44186,4.40367,4.40367,279,40,455.0,Euro -False,1680,4.28358,4.20563,4.20563,281,51,455.0,Pound -False,10418,4.13514,4.11856,4.11856,279,9,455.0,Pound -False,37024,4.11679,4.21365,4.21365,281,23,455.0,Euro -False,2855,4.42991,4.19669,4.19669,280,23,455.0,Euro -False,1970,4.25962,4.21828,4.21828,281,16,455.0,Pound -True,2577,3.7,3.69166,3.69166,278,33,455.0,Euro -True,1169,4.22222,4.27073,4.27073,276,30,455.0,Dollar -False,5084,4.05,4.01769,4.01769,276,36,455.0,Euro -False,2777,4.44253,4.38473,4.38473,277,129,455.0,Pound -True,1795,4.41176,4.40332,4.40332,276,46,455.0,Euro -True,1761,4.1,3.88983,3.88983,275,25,2880.0,Dollar -True,1145,4.38462,4.46482,4.46482,274,22,455.0,Dollar -True,2672,4.65,4.63664,4.63664,274,33,455.0,Pound -True,2622,4.38141,4.39367,4.39367,283,150,455.0,Dollar -True,1488,4.32558,4.29076,4.29076,276,28,455.0,Euro -True,2147,3.8,3.72658,3.72658,273,24,455.0,Euro -False,1937,4.0,4.23591,4.23591,272,24,455.0,Euro -True,14762,4.35,4.44048,4.44048,273,132,455.0,Pound -True,3452,4.52941,4.36781,4.36781,271,73,455.0,Pound -True,10486,3.55,3.62877,3.62877,271,89,455.0,Euro -True,16728,4.125,4.09736,4.09736,271,81,455.0,Pound -False,1132,4.15909,4.17067,4.17067,271,255,481.0,Euro -False,2005,4.09091,4.19048,4.19048,270,46,455.0,Dollar -True,1668,4.45455,4.40713,4.40713,269,229,462.0,Dollar -True,2322,3.8,3.89128,3.89128,269,35,455.0,Euro -False,9745,4.17611,4.05294,4.05294,269,556,455.0,Euro -True,1670,4.7,4.6687,4.6687,267,32,455.0,Pound -False,3486,4.6,4.64507,4.64507,267,58,455.0,Dollar -True,1367,4.23913,4.21714,4.21714,267,50,455.0,Dollar -False,27389,4.27344,4.19275,4.19275,266,50,455.0,Dollar -True,19693,4.4,4.35357,4.35357,266,27,455.0,Pound -True,2109,4.0,4.0363,4.0363,268,15,455.0,Pound -True,1666,4.46341,4.45759,4.45759,268,20,455.0,Pound -False,732,4.25641,4.23932,4.23932,265,18,455.0,Pound -True,895,4.45455,4.52367,4.52367,264,42,455.0,Euro -False,2322,4.05,4.10904,4.10904,264,25,455.0,Dollar -False,2748,3.65,3.57408,3.57408,263,171,455.0,Euro -False,1192,4.32979,4.14399,4.14399,263,20,455.0,Euro -True,1521,4.33333,4.32158,4.32158,263,46,455.0,Dollar -True,16776,4.20312,4.24844,4.24844,266,145,455.0,Euro -False,2102,3.93478,3.8685,3.8685,261,0,455.0,Dollar -False,2402,4.5625,4.50462,4.50462,261,75,455.0,Euro -False,1295,4.25,4.29788,4.29788,261,26,455.0,Dollar -True,3489,4.0,3.97261,3.97261,261,75,455.0,Dollar -True,10494,4.09091,4.13959,4.13959,261,14,455.0,Euro -True,40788,4.15,4.21952,4.21952,260,59,455.0,Dollar -True,2967,4.5,4.5158,4.5158,261,104,455.0,Pound -True,9065,4.4,4.32119,4.32119,260,43,455.0,Pound -True,1816,4.47872,4.51935,4.51935,259,395,494.0,Pound -True,1345,4.05,4.08093,4.08093,260,14,455.0,Euro -False,893,3.96,3.98638,3.98638,258,12,455.0,Dollar -False,7072,3.8,3.54053,3.54053,258,33,455.0,Dollar -True,2337,4.54167,4.52341,4.52341,257,26,455.0,Euro -False,5184,4.72917,4.71027,4.71027,258,134,455.0,Pound -False,2116,4.51562,4.53416,4.53416,257,17,455.0,Dollar -False,1320,4.26316,4.21003,4.21003,257,50,455.0,Pound -True,1075,4.41346,4.40233,4.40233,258,14,2400.0,Euro -True,9300,4.65,4.64769,4.64769,257,17,455.0,Euro -False,2882,4.60606,4.39517,4.39517,259,34,455.0,Pound -True,1041,4.6345,4.64549,4.64549,256,129,455.0,Pound -True,16689,4.22,4.17161,4.17161,256,21,455.0,Euro -False,2831,4.26667,4.28789,4.28789,256,10,455.0,Euro -True,1497,4.66667,4.66047,4.66047,255,23,455.0,Dollar -True,1901,4.20833,4.20032,4.20032,256,97,455.0,Pound -True,1136,4.79167,4.79264,4.79264,254,8,455.0,Dollar -False,1299,3.5,3.52021,3.52021,254,27,455.0,Dollar -False,3212,4.4,4.34873,4.34873,253,36,455.0,Pound -True,2432,4.46552,4.48217,4.48217,253,27,455.0,Pound -False,875,3.8,3.79781,3.79781,253,33,455.0,Euro -True,10145,3.55,3.61505,3.61505,252,45,455.0,Pound -True,1740,4.5,4.48539,4.48539,253,145,455.0,Dollar -True,1470,4.23333,4.25498,4.25498,252,28,455.0,Pound -True,897,4.16667,4.2274,4.2274,254,28,494.0,Euro -True,4820,4.0,3.90714,3.90714,251,70,455.0,Dollar -True,2244,4.21667,4.32837,4.32837,252,32,455.0,Dollar -True,981,4.63514,4.61485,4.61485,251,59,455.0,Pound -False,2230,4.54412,4.54196,4.54196,251,38,455.0,Dollar -False,1105,4.36207,4.27075,4.27075,251,0,1280.0,Euro -False,2984,4.5,4.45237,4.45237,251,32,455.0,Euro -True,4586,4.23529,4.24117,4.24117,251,24,455.0,Pound -False,11217,4.07143,4.03696,4.03696,251,16,455.0,Dollar -True,2270,4.5,4.47975,4.47975,251,40,455.0,Euro -False,4132,3.9,3.89066,3.89066,250,14,455.0,Euro -False,1412,4.3,4.23892,4.23892,250,48,455.0,Pound -False,26263,3.644,3.74543,3.74543,250,15,455.0,Pound -True,2923,4.52778,4.53067,4.53067,249,41,455.0,Euro -False,1126,4.76087,4.77118,4.77118,249,38,455.0,Euro -True,3177,4.78571,4.787,4.787,249,63,455.0,Dollar -False,4374,4.45,4.48032,4.48032,250,34,455.0,Dollar -True,3781,4.25,4.14337,4.14337,248,25,455.0,Euro -False,1942,4.35938,4.25127,4.25127,250,15,455.0,Pound -True,18606,4.35465,4.30428,4.30428,247,26,455.0,Dollar -False,10293,4.34615,4.30551,4.30551,246,133,481.0,Dollar -False,1311,4.15,4.16464,4.16464,247,9,468.0,Euro -True,7056,3.9375,4.12796,4.12796,246,446,455.0,Pound -False,947,4.55172,4.52117,4.52117,246,34,455.0,Euro -False,1573,4.7377,4.71615,4.71615,246,94,455.0,Dollar -False,6866,4.75,4.73292,4.73292,245,13,455.0,Dollar -True,1871,4.25,4.30283,4.30283,246,14,455.0,Euro -True,658,4.2375,4.1976,4.1976,245,17,455.0,Euro -False,4128,4.38462,4.25198,4.25198,244,31,455.0,Pound -True,2428,4.19512,4.19748,4.19748,244,46,474.0,Pound -True,1242,4.35294,4.27609,4.27609,243,70,455.0,Euro -True,2222,3.9375,4.16414,4.16414,243,27,455.0,Pound -False,1593,3.76667,3.77874,3.77874,243,33,455.0,Euro -True,1060,3.98148,3.97761,3.97761,242,8,455.0,Pound -True,8305,3.875,4.20048,4.20048,242,16,455.0,Dollar -False,1646,4.31915,3.98703,3.98703,242,0,455.0,Dollar -True,1063,3.8,3.80727,3.80727,241,20,474.0,Pound -False,985,4.42063,4.07122,4.07122,241,64,455.0,Dollar -True,1468,4.11667,4.07144,4.07144,241,97,455.0,Euro -False,5466,4.4,4.42571,4.42571,241,24,455.0,Pound -False,16217,4.4125,4.11856,4.11856,241,41,455.0,Pound -True,1737,4.2,4.19343,4.19343,240,81,455.0,Pound -True,2419,4.5339,4.461,4.461,240,134,455.0,Pound -False,812,4.1,4.16576,4.16576,240,8,455.0,Pound -False,2544,4.25,4.27267,4.27267,242,33,455.0,Dollar -True,4252,4.27358,4.1232,4.1232,241,22,455.0,Euro -True,1214,4.58824,4.60066,4.60066,240,22,455.0,Pound -False,4769,4.76316,4.77895,4.77895,239,28,455.0,Euro -True,5588,4.0,3.89181,3.89181,239,11,455.0,Dollar -True,1073,4.34783,4.34868,4.34868,242,106,3200.0,Dollar -False,8492,4.65,4.65272,4.65272,239,14,455.0,Dollar -False,1243,4.75,4.74887,4.74887,239,18,455.0,Dollar -False,1318,4.72626,4.74305,4.74305,241,171,455.0,Euro -True,1595,4.45,4.59382,4.59382,238,14,455.0,Euro -False,2000,3.6,3.54372,3.54372,238,11,455.0,Euro -False,1795,4.47727,4.45798,4.45798,238,355,481.0,Pound -True,7655,4.55,4.58394,4.58394,238,27,455.0,Pound -False,1267,4.2605,4.32341,4.32341,240,60,474.0,Pound -False,1849,4.39286,4.31957,4.31957,240,51,455.0,Pound -True,1102,4.11111,4.13016,4.13016,238,102,455.0,Euro -True,6506,4.5,4.40536,4.40536,238,25,455.0,Dollar -True,2956,4.41176,4.52427,4.52427,237,0,514.0,Euro -False,1911,3.91667,3.96417,3.96417,237,43,455.0,Euro -True,21684,4.21053,4.24689,4.24689,237,17,455.0,Pound -False,6250,2.95,3.21691,3.21691,237,25,455.0,Euro -True,715,4.6791,4.42499,4.42499,236,61,455.0,Euro -True,9837,4.1,4.1684,4.1684,236,23,455.0,Dollar -True,941,4.59091,4.57916,4.57916,236,9,468.0,Pound -True,13390,3.05,3.09498,3.09498,236,15,455.0,Pound -False,588,4.30952,4.38882,4.38882,235,18,2400.0,Euro -True,7134,4.47872,4.50699,4.50699,235,97,455.0,Dollar -False,907,4.65753,4.67683,4.67683,235,45,1600.0,Euro -False,769,4.0,4.04644,4.04644,234,27,455.0,Euro -False,894,4.2844,4.21229,4.21229,234,29,455.0,Euro -True,1147,4.36486,4.2976,4.2976,234,33,488.0,Pound -True,12045,4.2,4.2531,4.2531,234,11,455.0,Dollar -True,1852,4.16667,3.96854,3.96854,233,75,455.0,Dollar -True,31509,4.10086,4.11295,4.11295,242,42,455.0,Dollar -False,1845,4.04255,3.95194,3.95194,235,13,455.0,Dollar -True,936,4.125,4.11517,4.11517,234,16,455.0,Euro -False,35498,3.92308,4.05018,4.05018,232,7,455.0,Pound -True,911,4.02273,4.02554,4.02554,232,29,468.0,Pound -False,8911,4.3,4.26787,4.26787,232,9,455.0,Pound -True,572,4.29545,4.30897,4.30897,232,34,468.0,Dollar -False,972,4.5625,4.54344,4.54344,231,22,455.0,Euro -True,28653,4.05,4.31108,4.31108,230,14,455.0,Dollar -True,11433,4.17742,4.13599,4.13599,230,27,455.0,Dollar -True,1954,3.85,3.77645,3.77645,229,18,455.0,Dollar -True,880,4.39286,4.40228,4.40228,230,14,468.0,Euro -True,784,4.1383,4.25179,4.25179,229,18,488.0,Pound -True,1727,3.78947,3.73038,3.73038,229,32,455.0,Euro -False,22417,3.98571,4.12598,4.12598,228,42,455.0,Dollar -False,482,4.38608,4.36127,4.36127,229,9,2240.0,Pound -True,1511,4.05,4.04493,4.04493,228,16,455.0,Pound -False,2292,4.32653,4.37808,4.37808,229,33,468.0,Dollar -False,4440,4.17647,4.10515,4.10515,228,49,455.0,Dollar -True,1331,4.36,4.37383,4.37383,229,25,455.0,Euro -True,24857,1.9,1.68701,1.68701,227,5,455.0,Pound -True,3135,4.44186,4.47741,4.47741,227,27,455.0,Dollar -True,9383,3.55,3.64809,3.64809,227,20,455.0,Euro -False,3241,3.96154,4.01859,4.01859,227,88,455.0,Dollar -False,3874,4.65,4.6078,4.6078,226,21,455.0,Dollar -True,1434,4.25,4.27162,4.27162,226,22,468.0,Dollar -True,1832,3.85,4.07063,4.07063,226,13,455.0,Dollar -True,1353,4.3629,4.3329,4.3329,227,25,455.0,Dollar -False,1263,3.65385,3.48245,3.48245,226,12,455.0,Dollar -True,21191,4.0,3.8179,3.8179,226,52,455.0,Pound -False,24242,4.6,4.61704,4.61704,226,132,455.0,Pound -False,21809,4.0,4.17013,4.17013,225,19,455.0,Euro -False,1748,4.51471,4.52771,4.52771,226,18,455.0,Dollar -True,4753,4.0,3.90933,3.90933,225,109,455.0,Pound -False,484,3.84444,3.86011,3.86011,226,26,1760.0,Euro -True,11599,4.39583,4.37078,4.37078,224,24,455.0,Pound -True,4744,2.98276,2.96989,2.96989,224,21,455.0,Euro -True,1672,4.4,4.3805,4.3805,224,9,455.0,Pound -True,1082,4.2,4.20116,4.20116,224,56,455.0,Euro -True,15702,4.43671,4.42193,4.42193,223,59,455.0,Euro -True,1239,3.6,3.92254,3.92254,223,17,455.0,Dollar -False,1144,3.94,3.87286,3.87286,224,7,455.0,Euro -False,1919,4.25,4.2165,4.2165,223,19,455.0,Dollar -False,33402,3.9,3.55579,3.55579,222,17,455.0,Euro -True,1110,4.5,4.35678,4.35678,222,12,455.0,Pound -True,2166,4.40625,4.53455,4.53455,224,45,455.0,Euro -True,1038,4.16,4.14728,4.14728,221,27,455.0,Dollar -True,1309,3.85,3.60188,3.60188,221,8,455.0,Pound -False,903,4.27551,4.20646,4.20646,222,10,455.0,Pound -True,1565,4.33784,4.30821,4.30821,221,18,455.0,Dollar -False,10166,3.5,3.93843,3.93843,221,41,455.0,Dollar -True,1165,3.97059,3.79164,3.79164,222,16,455.0,Euro -False,15429,4.33333,4.39695,4.39695,221,79,455.0,Dollar -False,1589,4.5,4.33555,4.33555,221,31,455.0,Dollar -True,3005,3.65,3.57462,3.57462,220,46,455.0,Pound -False,2289,4.72581,4.70522,4.70522,221,143,455.0,Pound -False,1503,3.55,3.55098,3.55098,221,18,455.0,Pound -True,1907,4.32143,4.25766,4.25766,220,34,455.0,Pound -False,963,4.15625,4.23626,4.23626,220,379,455.0,Euro -True,2337,4.5,4.51066,4.51066,220,121,455.0,Pound -True,9484,4.55882,4.46828,4.46828,220,31,455.0,Euro -True,1864,4.25,4.13152,4.13152,220,46,455.0,Pound -False,12980,3.9,3.77606,3.77606,220,19,455.0,Euro -False,1167,4.13953,4.00401,4.00401,219,28,455.0,Pound -True,582,4.66667,4.68173,4.68173,219,69,455.0,Euro -True,779,4.02778,4.0759,4.0759,219,10,455.0,Pound -True,1052,4.39474,4.20054,4.20054,218,19,455.0,Euro -False,1237,4.1,3.98736,3.98736,218,22,455.0,Dollar -True,920,4.4,4.38426,4.38426,217,24,455.0,Pound -True,1719,4.225,4.22671,4.22671,217,44,455.0,Euro -False,933,4.35,4.43775,4.43775,217,182,455.0,Euro -False,4260,4.1,4.32241,4.32241,216,38,455.0,Pound -True,2762,4.05,4.17698,4.17698,216,17,455.0,Euro -False,1621,4.25,4.12152,4.12152,216,8,455.0,Euro -False,1171,4.25,4.32006,4.32006,215,40,455.0,Euro -True,27104,4.27717,4.25389,4.25389,216,576,455.0,Pound -False,998,4.10938,4.0875,4.0875,215,51,455.0,Euro -False,1759,3.6,3.56526,3.56526,215,12,455.0,Euro -True,429,4.0885,4.11495,4.11495,215,26,455.0,Euro -False,867,4.37037,4.38562,4.38562,215,17,455.0,Pound -False,2874,4.2,4.06697,4.06697,215,9,455.0,Euro -True,1432,4.41667,4.42848,4.42848,216,36,455.0,Pound -False,2245,3.7,3.62002,3.62002,215,23,700.0,Dollar -False,1160,4.28947,4.33927,4.33927,214,45,455.0,Euro -True,1003,4.6,4.61517,4.61517,214,7,455.0,Euro -False,24842,4.0,4.15979,4.15979,214,10,455.0,Pound -False,38246,4.08252,4.08397,4.08397,214,17,455.0,Pound -True,3406,3.8,3.74373,3.74373,214,9,455.0,Pound -True,3368,4.19048,4.12602,4.12602,215,53,462.0,Pound -True,1682,4.66667,4.67764,4.67764,213,27,455.0,Dollar -False,8464,3.6,3.77676,3.77676,213,56,455.0,Euro -False,472,3.98077,3.9891,3.9891,213,15,455.0,Euro -True,717,4.45,4.51628,4.51628,213,11,455.0,Dollar -False,7165,4.25,4.51744,4.51744,212,46,455.0,Dollar -False,1035,4.54688,4.35062,4.35062,212,284,481.0,Dollar -True,4086,4.05,3.9551,3.9551,212,29,455.0,Dollar -False,34864,3.9,4.1351,4.1351,212,25,455.0,Euro -True,3486,4.45455,4.41005,4.41005,212,28,455.0,Pound -True,6002,3.6,3.57099,3.57099,211,8,455.0,Pound -True,1812,4.19565,4.17014,4.17014,211,17,455.0,Pound -True,1589,4.37037,4.3729,4.3729,212,18,455.0,Euro -False,23391,4.39,4.64271,4.64271,211,111,455.0,Pound -True,956,4.25,4.13334,4.13334,209,39,455.0,Euro -False,8237,3.0,3.13804,3.13804,208,23,455.0,Euro -False,754,4.3,3.99984,3.99984,208,15,2480.0,Euro -True,7479,4.0,3.93713,3.93713,208,68,455.0,Euro -False,1799,3.54412,3.54025,3.54025,208,37,455.0,Dollar -False,12031,4.1,4.12713,4.12713,208,14,455.0,Euro -True,25741,4.35,4.24708,4.24708,208,232,455.0,Pound -True,15740,4.23333,4.26763,4.26763,208,17,455.0,Euro -True,512,4.62179,4.22976,4.22976,208,25,455.0,Euro -True,977,3.89474,3.92852,3.92852,207,20,455.0,Dollar -True,920,4.55714,4.5004,4.5004,208,10,455.0,Pound -False,12611,3.94783,3.86532,3.86532,207,30,455.0,Pound -False,2275,4.21875,4.23428,4.23428,207,27,455.0,Euro -True,1079,2.96875,2.9715,2.9715,207,26,455.0,Dollar -True,31507,4.28947,4.41422,4.41422,207,20,455.0,Dollar -False,14258,4.60714,4.66057,4.66057,206,79,474.0,Dollar -True,817,4.45652,4.40679,4.40679,206,22,455.0,Dollar -True,932,3.6,3.06865,3.06865,205,9,455.0,Euro -True,7851,3.58333,3.59552,3.59552,205,26,455.0,Pound -False,18426,4.15,4.29578,4.29578,205,162,455.0,Dollar -False,30075,4.0,3.84164,3.84164,205,51,455.0,Dollar -True,1909,4.45,4.39823,4.39823,205,26,455.0,Pound -False,1038,4.31667,4.32985,4.32985,205,29,455.0,Dollar -True,28806,3.75,4.05594,4.05594,205,189,455.0,Euro -False,1822,3.9,4.10293,4.10293,204,16,455.0,Euro -True,7542,3.79412,3.61878,3.61878,204,32,455.0,Dollar -False,1631,4.55,4.56011,4.56011,204,58,455.0,Euro -True,1616,4.28261,4.28892,4.28892,204,27,455.0,Euro -True,731,4.06522,4.09293,4.09293,205,53,468.0,Dollar -False,6171,4.25,4.27055,4.27055,204,33,455.0,Pound -True,4484,2.60526,2.61183,2.61183,204,157,488.0,Euro -True,2995,4.45833,4.41838,4.41838,203,35,455.0,Pound -False,747,3.95,3.84948,3.84948,203,12,455.0,Pound -False,2802,4.26667,4.32826,4.32826,203,40,455.0,Dollar -False,1555,4.6,4.6502,4.6502,203,44,455.0,Pound -True,871,4.33871,4.31874,4.31874,205,36,455.0,Pound -True,46584,4.21429,4.20281,4.20281,203,115,455.0,Pound -True,2028,4.77451,4.70282,4.70282,203,46,455.0,Euro -False,1477,4.04082,4.03608,4.03608,203,15,455.0,Dollar -True,1192,4.05263,4.07857,4.07857,201,43,455.0,Euro -False,1592,4.52174,4.50832,4.50832,201,30,455.0,Euro -False,1127,4.26804,4.26879,4.26879,200,192,455.0,Dollar -True,2188,3.9,3.78159,3.78159,200,22,455.0,Euro -True,2052,4.7,4.68347,4.68347,200,16,455.0,Dollar -False,1000,3.75,3.76996,3.76996,200,11,455.0,Dollar -False,8663,4.20139,4.18009,4.18009,201,29,455.0,Dollar -False,646,4.425,4.42924,4.42924,202,26,455.0,Pound -True,1057,4.15,4.13924,4.13924,200,34,455.0,Dollar -True,695,3.725,3.74306,3.74306,199,17,468.0,Euro -False,1076,4.53659,4.40413,4.40413,200,374,455.0,Dollar -True,1317,4.275,4.21826,4.21826,199,44,455.0,Pound -False,861,4.15942,4.26716,4.26716,202,38,455.0,Euro -False,9253,3.55,3.90481,3.90481,199,11,455.0,Pound -True,1635,4.46429,4.43099,4.43099,200,19,455.0,Euro -True,23659,2.36364,2.29501,2.29501,198,35,455.0,Pound -True,22107,4.5,4.5222,4.5222,198,24,455.0,Dollar -True,1213,3.83333,3.92237,3.92237,198,23,455.0,Pound -True,1042,4.48,4.51604,4.51604,198,49,455.0,Euro -False,2336,4.22368,4.26675,4.26675,198,28,455.0,Pound -False,3044,4.13333,4.29113,4.29113,198,62,455.0,Pound -False,837,4.27419,4.28423,4.28423,197,12,455.0,Pound -True,1344,4.63889,4.6626,4.6626,197,33,455.0,Euro -True,1620,4.36364,4.39044,4.39044,197,107,455.0,Euro -True,987,3.98837,4.02097,4.02097,197,9,455.0,Euro -True,1248,4.45,4.41922,4.41922,196,43,455.0,Pound -False,2526,4.60714,4.61616,4.61616,196,26,455.0,Pound -False,8372,4.25,4.25261,4.25261,195,26,455.0,Euro -False,12803,4.2,4.23432,4.23432,195,13,455.0,Dollar -False,2531,4.41667,4.50301,4.50301,195,29,520.0,Dollar -False,4917,4.3169,4.14596,4.14596,196,47,455.0,Euro -False,7626,4.35,4.1756,4.1756,196,27,455.0,Pound -True,779,4.2,4.28312,4.28312,195,43,455.0,Pound -False,9219,3.6,3.71922,3.71922,194,31,455.0,Dollar -False,727,4.20909,4.16591,4.16591,194,38,800.0,Euro -True,4123,4.23684,4.3517,4.3517,194,95,468.0,Dollar -True,10932,4.45,4.5865,4.5865,194,39,455.0,Dollar -True,874,4.13889,4.16624,4.16624,193,71,455.0,Euro -False,714,4.56349,4.55728,4.55728,195,14,455.0,Euro -False,4268,3.85,3.63895,3.63895,193,37,455.0,Dollar -False,2762,4.1,4.09404,4.09404,193,92,455.0,Euro -False,1020,3.84211,3.79832,3.79832,192,39,455.0,Euro -False,2083,4.47619,4.47133,4.47133,195,37,455.0,Dollar -False,678,4.12162,4.13285,4.13285,192,4,455.0,Pound -True,2558,4.2,4.28122,4.28122,193,17,455.0,Dollar -True,1685,4.4375,4.39327,4.39327,192,29,455.0,Euro -False,821,4.51562,4.516,4.516,191,63,455.0,Dollar -True,5288,4.21951,4.21436,4.21436,193,60,455.0,Euro -True,5856,4.5,4.53579,4.53579,191,40,455.0,Pound -True,20938,4.1625,4.33495,4.33495,191,108,455.0,Dollar -False,1106,4.1,4.13861,4.13861,191,104,455.0,Dollar -True,9096,4.5,4.64913,4.64913,191,31,455.0,Dollar -False,3776,4.33333,4.32303,4.32303,192,94,455.0,Euro -False,19852,4.14583,4.05342,4.05342,190,24,455.0,Euro -True,2238,4.73214,4.56595,4.56595,190,42,455.0,Euro -True,15000,4.35,4.08378,4.08378,189,10,455.0,Dollar -True,887,4.20946,4.21912,4.21912,189,61,455.0,Dollar -False,1655,4.2,4.19749,4.19749,189,70,455.0,Pound -True,1970,4.45,4.47474,4.47474,189,109,455.0,Dollar -False,36233,3.35,3.3166,3.3166,189,20,455.0,Pound -True,14343,4.33333,4.39232,4.39232,188,25,455.0,Pound -False,1400,4.22807,4.0855,4.0855,189,47,468.0,Euro -False,890,4.45652,4.43399,4.43399,188,20,455.0,Euro -False,2402,4.10714,4.11366,4.11366,188,8,700.0,Euro -True,31583,3.97268,4.00066,4.00066,188,65,455.0,Euro -True,28353,4.55,4.46393,4.46393,187,86,455.0,Euro -True,5282,3.8,3.83226,3.83226,187,35,455.0,Pound -True,2857,4.1,4.03456,4.03456,186,30,455.0,Pound -False,787,4.41667,4.40678,4.40678,186,52,455.0,Dollar -False,1242,4.75,4.67762,4.67762,186,34,455.0,Dollar -False,4951,4.19444,4.11079,4.11079,186,28,455.0,Pound -False,3033,4.27273,4.23354,4.23354,186,45,455.0,Dollar -False,2097,4.25,4.21488,4.21488,186,16,494.0,Euro -False,2169,4.4,4.46704,4.46704,185,38,455.0,Dollar -False,3963,3.85,4.0109,4.0109,185,12,455.0,Pound -False,796,4.07692,3.95508,3.95508,185,47,455.0,Dollar -False,1059,4.0,3.99133,3.99133,185,32,455.0,Euro -False,1011,4.13043,4.13366,4.13366,185,118,455.0,Pound -True,1847,4.3,4.31717,4.31717,185,18,455.0,Dollar -True,732,4.19565,4.21234,4.21234,185,19,455.0,Dollar -False,1767,4.36792,4.37589,4.37589,186,54,455.0,Pound -False,2458,4.35632,4.26954,4.26954,185,72,455.0,Dollar -False,10165,4.7,4.6942,4.6942,184,36,455.0,Dollar -False,961,4.25,4.15617,4.15617,184,8,455.0,Pound -False,13267,4.24728,4.32195,4.32195,185,12,455.0,Euro -False,503,4.23684,4.20923,4.20923,186,17,455.0,Pound -False,5811,3.4,3.30223,3.30223,184,42,455.0,Dollar -False,1322,4.25926,4.22834,4.22834,184,89,462.0,Euro -True,1173,3.55,3.08506,3.08506,183,5,455.0,Dollar -False,485,4.31061,4.41784,4.41784,183,5,455.0,Dollar -True,2368,4.37805,4.44002,4.44002,186,34,468.0,Euro -False,1723,4.41532,4.44376,4.44376,185,52,455.0,Dollar -False,841,4.66667,4.68872,4.68872,184,34,455.0,Euro -False,632,4.51667,4.50691,4.50691,182,51,455.0,Euro -True,699,4.05,4.04997,4.04997,182,71,455.0,Pound -False,6953,4.15,4.19005,4.19005,183,11,455.0,Pound -True,847,4.71739,4.72807,4.72807,182,71,455.0,Euro -False,1068,4.5,4.49289,4.49289,182,12,455.0,Pound -False,496,4.32692,4.28803,4.28803,181,10,455.0,Pound -False,6216,3.45,3.61199,3.61199,181,34,455.0,Euro -False,3047,4.5,4.50217,4.50217,181,35,455.0,Pound -False,5618,3.90625,3.79352,3.79352,181,28,455.0,Euro -True,8183,3.52941,3.23232,3.23232,181,25,455.0,Dollar -True,9485,4.34375,4.30279,4.30279,183,42,455.0,Euro -True,712,3.75,3.71879,3.71879,181,17,455.0,Pound -True,817,4.60714,4.59195,4.59195,181,43,455.0,Pound -False,1847,4.63158,4.66265,4.66265,181,22,455.0,Pound -False,6726,4.25,4.32241,4.32241,180,61,455.0,Dollar -True,818,3.85,3.74896,3.74896,180,18,455.0,Dollar -True,24360,4.4,4.44357,4.44357,181,28,455.0,Pound -False,13729,4.3125,4.27051,4.27051,179,16,455.0,Euro -True,1333,4.28261,4.28021,4.28021,179,19,455.0,Pound -True,1465,4.38095,4.43811,4.43811,179,24,455.0,Pound -True,917,4.55,4.55241,4.55241,179,19,455.0,Euro -False,2505,3.95,4.1415,4.1415,179,134,455.0,Euro -False,1726,4.35,4.3839,4.3839,179,91,455.0,Pound -True,1252,4.625,4.69175,4.69175,179,42,468.0,Pound -False,1182,4.075,4.05781,4.05781,178,38,455.0,Euro -True,4596,4.35,4.34427,4.34427,178,68,455.0,Pound -False,1171,4.37895,4.47023,4.47023,178,17,455.0,Euro -True,15560,4.41854,4.5002,4.5002,179,50,455.0,Euro -False,1162,4.2,4.14868,4.14868,178,45,455.0,Pound -False,1578,4.5339,4.54191,4.54191,178,91,455.0,Euro -True,1921,3.55,3.56858,3.56858,177,6,455.0,Euro -True,2240,4.42105,4.41635,4.41635,177,40,455.0,Dollar -True,4985,3.05,2.94689,2.94689,177,32,455.0,Dollar -True,1646,4.3,4.19697,4.19697,177,17,455.0,Pound -False,1950,4.1,4.21873,4.21873,177,26,455.0,Pound -True,748,4.09091,3.9803,3.9803,177,58,455.0,Euro -True,2447,3.25,3.74569,3.74569,177,108,455.0,Euro -True,1239,4.55,4.58046,4.58046,176,43,455.0,Pound -True,781,4.06618,4.08256,4.08256,177,205,481.0,Pound -False,5432,4.73077,4.71108,4.71108,177,75,455.0,Dollar -False,1971,4.05,3.95989,3.95989,176,45,455.0,Pound -False,958,4.64286,4.69399,4.69399,176,24,455.0,Dollar -False,6205,4.1,4.15951,4.15951,175,65,455.0,Dollar -False,628,4.3,4.50418,4.50418,175,10,455.0,Pound -True,860,4.72222,4.73611,4.73611,175,20,455.0,Dollar -True,5129,3.95,3.90807,3.90807,175,13,455.0,Pound -False,5885,3.9,3.97543,3.97543,176,35,468.0,Pound -False,574,4.83117,4.56374,4.56374,174,88,455.0,Pound -True,1136,4.21053,4.21007,4.21007,175,179,455.0,Euro -True,2607,4.8,4.8116,4.8116,174,47,455.0,Pound -True,2148,4.22321,4.23554,4.23554,174,85,455.0,Euro -True,1486,4.59722,4.71033,4.71033,175,187,455.0,Euro -False,2788,4.65,4.56075,4.56075,174,12,455.0,Pound -False,971,3.95,3.97017,3.97017,173,40,455.0,Pound -False,1519,4.08333,3.94945,3.94945,173,12,455.0,Euro -False,2941,3.6,3.43508,3.43508,173,80,455.0,Pound -False,4862,4.10938,3.96535,3.96535,173,9,455.0,Pound -False,3655,4.475,4.47034,4.47034,173,41,514.0,Dollar -True,796,4.71875,4.71577,4.71577,173,23,455.0,Pound -True,1466,4.0,4.00437,4.00437,173,0,468.0,Dollar -False,15715,4.1,3.91183,3.91183,173,28,455.0,Pound -True,1378,4.1,4.02889,4.02889,173,151,455.0,Euro -False,4319,4.05,3.96907,3.96907,172,18,455.0,Dollar -True,425,4.21622,4.22576,4.22576,172,30,455.0,Euro -True,2040,4.17391,4.18319,4.18319,172,42,455.0,Pound -True,1336,4.44444,4.37727,4.37727,172,31,455.0,Dollar -True,1178,4.67241,4.64422,4.64422,172,50,455.0,Dollar -True,3837,4.02941,4.13957,4.13957,172,12,468.0,Pound -False,14215,4.16667,4.08037,4.08037,172,69,455.0,Pound -True,1712,4.54545,4.63047,4.63047,171,89,455.0,Euro -False,1419,4.45238,4.53972,4.53972,171,13,468.0,Dollar -True,505,3.8913,3.91371,3.91371,172,22,455.0,Dollar -False,5111,3.8,3.91803,3.91803,171,38,455.0,Dollar -True,3193,4.32143,4.33893,4.33893,171,55,455.0,Pound -True,636,4.25,4.19757,4.19757,171,8,455.0,Euro -False,5033,3.45,3.36146,3.36146,171,47,455.0,Pound -True,697,4.15254,4.11487,4.11487,171,41,462.0,Dollar -True,767,3.8125,3.80998,3.80998,170,33,455.0,Pound -False,7455,2.85,2.32658,2.32658,170,26,455.0,Euro -True,629,4.21023,4.203,4.203,170,43,455.0,Dollar -False,1445,4.1,4.09312,4.09312,170,40,455.0,Euro -False,13789,3.95,3.91082,3.91082,170,27,455.0,Pound -True,1923,4.5625,4.53983,4.53983,170,46,455.0,Dollar -True,3827,4.0,4.04349,4.04349,169,39,455.0,Pound -True,1040,4.25,4.28101,4.28101,169,28,455.0,Dollar -False,864,3.2,3.24733,3.24733,169,58,455.0,Pound -True,7823,3.88,3.89669,3.89669,169,0,455.0,Dollar -False,778,4.3,4.29334,4.29334,168,15,455.0,Dollar -False,1687,4.6,4.66221,4.66221,168,15,455.0,Euro -False,628,4.08333,4.1052,4.1052,169,78,455.0,Dollar -False,2957,3.6,3.51557,3.51557,168,22,455.0,Euro -True,1054,4.35,4.30408,4.30408,168,19,455.0,Dollar -True,8679,3.65,3.59199,3.59199,168,68,455.0,Euro -False,802,4.05556,4.04124,4.04124,168,30,455.0,Euro -True,25207,4.15,4.41069,4.41069,167,24,455.0,Euro -False,890,4.10526,4.11437,4.11437,167,44,455.0,Euro -False,6013,3.35,3.64529,3.64529,167,16,455.0,Dollar -True,663,4.1,4.07773,4.07773,166,8,455.0,Euro -False,7369,3.3,3.21661,3.21661,166,34,455.0,Pound -True,5020,4.0,3.99545,3.99545,166,58,455.0,Dollar -True,25252,4.0339,4.03279,4.03279,166,20,455.0,Euro -False,18615,3.8,3.80077,3.80077,166,9,455.0,Dollar -False,1790,4.02,4.06683,4.06683,166,45,455.0,Euro -True,854,4.22222,3.81779,3.81779,166,37,455.0,Dollar -True,2328,4.25,4.21209,4.21209,166,19,455.0,Dollar -False,1373,4.25,4.30941,4.30941,165,21,800.0,Euro -True,19268,3.4,2.96337,2.96337,165,8,455.0,Dollar -True,8356,4.05,4.00802,4.00802,165,22,455.0,Euro -True,2492,4.52083,4.45547,4.45547,165,27,455.0,Dollar -True,3481,4.25,4.07289,4.07289,165,531,455.0,Pound -True,7452,3.5,3.60671,3.60671,165,14,455.0,Pound -False,833,4.16667,4.28608,4.28608,165,11,455.0,Pound -True,4782,4.15672,4.15008,4.15008,165,29,455.0,Dollar -True,804,4.5,4.54661,4.54661,165,15,455.0,Dollar -False,21214,3.8,4.29904,4.29904,165,21,455.0,Pound -True,503,4.16667,4.21441,4.21441,165,35,468.0,Dollar -False,2696,3.90909,4.05526,4.05526,165,5,455.0,Dollar -False,642,4.07143,4.19861,4.19861,165,25,455.0,Euro -True,797,4.47619,4.43776,4.43776,164,25,455.0,Pound -False,586,4.07812,4.05736,4.05736,164,20,455.0,Dollar -True,15752,4.1,4.21419,4.21419,164,23,455.0,Dollar -False,635,4.0,3.98731,3.98731,164,18,455.0,Pound -False,3811,3.65,3.76345,3.76345,163,10,455.0,Euro -True,1040,4.35,4.32942,4.32942,163,37,455.0,Dollar -True,1633,4.0,3.88902,3.88902,163,11,455.0,Pound -False,907,3.45,3.48584,3.48584,163,65,455.0,Pound -True,13161,4.05,3.59015,3.59015,163,12,455.0,Dollar -True,870,4.45833,4.44963,4.44963,163,43,455.0,Dollar -False,6103,4.15,4.19233,4.19233,163,60,455.0,Dollar -True,504,4.36667,4.40105,4.40105,163,24,455.0,Pound -True,3866,4.13492,4.16819,4.16819,163,34,455.0,Euro -True,8339,4.1,4.16034,4.16034,162,31,455.0,Euro -True,23405,3.9,3.9738,3.9738,162,31,455.0,Dollar -False,622,3.35135,3.42363,3.42363,162,27,455.0,Euro -False,322,4.59091,4.68286,4.68286,162,10,455.0,Pound -True,2303,4.59091,4.62553,4.62553,164,33,455.0,Dollar -True,428,4.26316,4.0832,4.0832,162,37,455.0,Pound -True,18953,3.72222,3.63515,3.63515,162,92,455.0,Pound -True,1175,4.0625,4.1474,4.1474,162,20,455.0,Euro -False,2273,4.55,4.58366,4.58366,162,87,462.0,Pound -True,793,4.10714,4.12478,4.12478,162,21,455.0,Dollar -True,4903,3.55,3.62704,3.62704,161,107,455.0,Dollar -False,16576,4.45833,4.75711,4.75711,161,23,455.0,Euro -False,601,4.43103,4.41029,4.41029,161,11,468.0,Dollar -False,10443,3.2,2.72633,2.72633,161,36,455.0,Pound -True,2897,4.2,4.18834,4.18834,161,18,455.0,Euro -True,33507,4.27586,4.29102,4.29102,161,102,455.0,Dollar -True,19930,4.25556,4.28483,4.28483,161,109,455.0,Euro -True,4811,4.21429,4.1836,4.1836,162,19,468.0,Euro -True,4027,4.09459,4.13097,4.13097,161,10,455.0,Pound -True,579,4.15,4.18294,4.18294,161,9,455.0,Pound -False,1816,4.7,4.75218,4.75218,160,42,455.0,Dollar -True,1041,3.8,3.71806,3.71806,160,90,455.0,Euro -False,1241,4.54545,4.64019,4.64019,160,21,455.0,Pound -True,14893,4.3871,4.42378,4.42378,160,36,455.0,Dollar -False,631,4.14,4.14583,4.14583,160,13,455.0,Euro -False,1523,4.17857,4.24336,4.24336,161,24,455.0,Pound -True,20280,4.21429,4.29494,4.29494,160,28,455.0,Pound -True,2303,3.8,3.61288,3.61288,160,73,455.0,Pound -True,35255,4.20455,3.80167,3.80167,173,8,455.0,Dollar -False,1131,4.64286,4.62593,4.62593,159,13,455.0,Dollar -True,2199,4.43103,4.49289,4.49289,159,50,455.0,Euro -True,20450,3.2,3.18677,3.18677,159,21,455.0,Dollar -True,1457,4.48,4.43495,4.43495,160,58,455.0,Dollar -True,2124,4.52381,4.43889,4.43889,159,37,455.0,Euro -False,17964,4.14894,4.28602,4.28602,160,13,455.0,Pound -True,20341,3.92,3.87658,3.87658,159,11,455.0,Euro -True,14670,4.28125,4.25758,4.25758,159,56,455.0,Euro -True,2448,4.1,3.96769,3.96769,159,60,455.0,Euro -False,13061,3.86667,3.68397,3.68397,159,53,455.0,Dollar -True,12824,4.6,4.75033,4.75033,158,26,455.0,Pound -True,1615,3.95,3.9193,3.9193,158,36,455.0,Pound -False,945,3.55,3.48569,3.48569,158,30,455.0,Dollar -False,846,4.16667,4.08611,4.08611,160,30,455.0,Dollar -True,3675,4.15,4.23844,4.23844,158,29,455.0,Pound -False,2468,4.225,4.07765,4.07765,159,157,455.0,Pound -True,985,4.675,4.68033,4.68033,158,18,455.0,Euro -True,821,4.28378,4.23693,4.23693,158,39,455.0,Pound -True,4620,4.1,4.01497,4.01497,157,36,455.0,Dollar -False,1013,4.26,4.04684,4.04684,158,61,455.0,Euro -True,9541,4.38679,4.40256,4.40256,157,22,455.0,Euro -False,16628,4.35294,4.32263,4.32263,157,41,455.0,Euro -False,7480,4.2,4.0611,4.0611,157,98,455.0,Euro -False,2544,3.75806,3.76635,3.76635,157,32,455.0,Pound -False,5539,3.15,3.18684,3.18684,157,83,455.0,Pound -False,791,4.65217,4.49153,4.49153,157,22,455.0,Pound -False,33109,4.02439,3.74229,3.74229,158,88,455.0,Pound -True,1354,4.6,4.52548,4.52548,156,65,455.0,Euro -True,4399,4.15,4.15069,4.15069,156,27,455.0,Pound -True,1112,4.5,4.49059,4.49059,156,91,455.0,Pound -False,1492,4.63636,4.60055,4.60055,155,26,455.0,Euro -False,2767,3.95,3.92445,3.92445,155,15,455.0,Pound -False,7146,4.75,4.67206,4.67206,155,23,455.0,Euro -True,1062,4.27273,4.2536,4.2536,155,39,455.0,Dollar -True,527,4.25,4.23727,4.23727,155,39,455.0,Dollar -False,7179,3.4,3.35458,3.35458,155,11,455.0,Euro -True,4107,4.0,4.01971,4.01971,155,10,455.0,Pound -True,682,4.46429,4.46253,4.46253,156,36,500.0,Pound -True,600,4.52941,4.56983,4.56983,155,48,455.0,Pound -True,11100,4.13889,4.21129,4.21129,155,26,455.0,Euro -False,3025,3.65,3.40969,3.40969,154,12,455.0,Pound -False,1496,3.5,3.54589,3.54589,154,21,455.0,Pound -False,2876,4.6,4.79203,4.79203,154,25,455.0,Dollar -False,1118,4.02778,4.04138,4.04138,154,49,455.0,Euro -False,641,4.34286,4.33461,4.33461,154,45,520.0,Pound -True,1788,4.0,4.04079,4.04079,153,28,455.0,Euro -False,707,4.48,4.53164,4.53164,153,63,455.0,Dollar -True,22713,4.09375,4.09023,4.09023,153,37,455.0,Pound -True,1062,4.18421,4.28074,4.28074,153,11,455.0,Euro -False,352,4.3662,4.39378,4.39378,153,31,455.0,Euro -True,15207,3.0,3.41384,3.41384,153,26,455.0,Euro -False,1992,3.7,3.85445,3.85445,153,22,455.0,Dollar -True,2253,4.3,4.30067,4.30067,153,21,455.0,Pound -True,16271,4.5,4.64872,4.64872,152,22,455.0,Pound -True,6328,3.55,3.10175,3.10175,152,15,455.0,Dollar -False,673,4.02632,4.053,4.053,152,42,455.0,Euro -False,1814,4.51471,4.47913,4.47913,152,194,462.0,Dollar -False,1550,4.4,4.41985,4.41985,151,23,455.0,Dollar -True,1328,4.39416,4.24544,4.24544,151,13,455.0,Dollar -True,7466,4.0,4.13687,4.13687,151,18,455.0,Euro -False,2263,2.95,2.4786,2.4786,151,19,455.0,Pound -True,918,4.78333,4.78123,4.78123,151,76,455.0,Euro -False,489,4.59722,4.6014,4.6014,151,15,455.0,Dollar -True,736,4.23913,4.21679,4.21679,151,49,468.0,Euro -True,3004,3.96667,3.99658,3.99658,151,66,455.0,Dollar -True,1305,4.05,4.06498,4.06498,151,31,455.0,Euro -True,315,4.05051,4.09259,4.09259,151,20,455.0,Pound -True,1488,4.4,4.35935,4.35935,150,61,455.0,Euro -True,1419,4.3913,4.37387,4.37387,150,38,455.0,Dollar -True,4869,4.42647,4.47739,4.47739,150,9,455.0,Euro -False,24349,4.0,4.16729,4.16729,150,66,455.0,Dollar -True,785,4.35,4.43096,4.43096,149,24,455.0,Dollar -True,726,4.15,4.16926,4.16926,149,23,455.0,Euro -False,2719,4.4,4.44483,4.44483,149,84,455.0,Dollar -True,13998,3.85714,3.6256,3.6256,149,9,455.0,Euro -True,12126,3.3,3.30909,3.30909,149,9,455.0,Pound -False,10019,3.75,3.80665,3.80665,149,51,455.0,Pound -True,2162,3.9,3.8924,3.8924,149,13,455.0,Euro -False,1985,3.4,3.34867,3.34867,148,45,455.0,Pound -True,2931,4.70769,4.71812,4.71812,148,64,455.0,Dollar -True,507,3.63043,3.60621,3.60621,149,10,455.0,Pound -True,18465,3.3,3.34686,3.34686,148,34,455.0,Euro -False,1579,4.75,4.77106,4.77106,148,38,455.0,Pound -False,1328,4.0,3.89976,3.89976,148,58,455.0,Euro -False,749,4.125,4.14009,4.14009,148,24,455.0,Dollar -True,1638,3.65,3.7121,3.7121,148,37,468.0,Euro -False,14252,4.15385,4.1185,4.1185,148,29,455.0,Dollar -False,11549,3.95,3.87756,3.87756,148,34,455.0,Euro -True,8540,4.71875,4.77271,4.77271,147,57,455.0,Dollar -True,7739,4.25,4.04509,4.04509,147,12,455.0,Pound -False,1546,3.9,3.93516,3.93516,147,22,455.0,Dollar -False,2117,3.45,3.31514,3.31514,147,43,455.0,Dollar -False,569,3.7,3.77174,3.77174,147,18,455.0,Pound -True,33488,4.1087,4.12771,4.12771,147,77,455.0,Euro -True,694,4.04545,4.06221,4.06221,147,6,455.0,Pound -False,4548,4.15385,4.1988,4.1988,147,44,455.0,Pound -True,5349,4.4,4.41595,4.41595,147,25,455.0,Dollar -True,19265,4.48889,4.52737,4.52737,147,24,455.0,Euro -False,529,4.45455,4.46181,4.46181,146,8,455.0,Euro -True,850,4.85,4.85368,4.85368,146,25,455.0,Dollar -False,657,4.5,4.49151,4.49151,146,11,455.0,Euro -True,911,4.23077,4.23222,4.23222,146,30,455.0,Dollar -True,2138,4.6,4.54232,4.54232,146,37,455.0,Pound -False,10540,3.9,3.79932,3.79932,146,40,455.0,Dollar -False,3349,4.25,4.30477,4.30477,145,14,455.0,Pound -False,852,4.55,4.55466,4.55466,146,27,455.0,Pound -True,391,4.23684,4.41258,4.41258,145,17,455.0,Euro -True,10941,4.7,4.57241,4.57241,155,46,455.0,Euro -True,718,3.0,2.9224,2.9224,145,45,455.0,Euro -False,12327,4.18478,4.26176,4.26176,145,8,455.0,Dollar -False,1935,4.33333,4.29789,4.29789,145,12,455.0,Dollar -True,1310,4.25,4.15517,4.15517,145,19,455.0,Euro -True,844,4.17647,4.18692,4.18692,145,185,455.0,Pound -True,3167,3.9,4.03347,4.03347,144,54,520.0,Euro -True,1364,4.5,4.51318,4.51318,144,28,455.0,Dollar -True,2424,3.3,3.24632,3.24632,144,34,455.0,Euro -True,30021,4.05263,4.16004,4.16004,144,59,455.0,Euro -False,23238,4.41176,4.32552,4.32552,144,36,455.0,Pound -True,32606,4.31667,4.34216,4.34216,145,91,455.0,Dollar -False,9340,4.5,4.2271,4.2271,145,20,455.0,Pound -False,1320,4.5,4.49584,4.49584,144,30,455.0,Euro -True,2663,3.2,3.43399,3.43399,144,22,455.0,Pound -True,9546,4.45,4.62825,4.62825,144,58,455.0,Dollar -True,11012,3.0,3.10689,3.10689,143,25,455.0,Dollar -False,6405,2.8,2.98926,2.98926,143,26,455.0,Dollar -True,17380,3.95,3.41214,3.41214,143,38,455.0,Pound -False,1348,4.1,4.1999,4.1999,143,13,455.0,Pound -True,26799,4.31034,4.3055,4.3055,144,10,455.0,Dollar -False,644,3.48148,3.373,3.373,143,16,455.0,Pound -False,1105,4.2,4.1637,4.1637,142,29,468.0,Euro -False,480,4.3,4.29774,4.29774,142,20,455.0,Dollar -True,583,3.93182,3.93855,3.93855,142,29,455.0,Euro -False,6330,4.25,4.224,4.224,142,48,455.0,Euro -False,6274,4.55882,4.53816,4.53816,142,49,455.0,Euro -False,2006,3.9,3.77589,3.77589,142,30,455.0,Pound -True,12948,4.41111,4.44579,4.44579,142,26,455.0,Dollar -False,483,3.875,3.81983,3.81983,142,37,455.0,Dollar -False,789,3.7,3.67687,3.67687,142,12,455.0,Euro -False,1061,3.9,3.88202,3.88202,142,65,455.0,Pound -True,8367,3.45,3.42623,3.42623,141,51,455.0,Dollar -True,2516,4.25,4.2321,4.2321,141,40,455.0,Euro -True,483,4.075,4.11852,4.11852,141,15,455.0,Pound -True,10213,4.275,4.34833,4.34833,141,18,455.0,Dollar -True,333,3.2,3.19357,3.19357,141,11,455.0,Dollar -False,12135,3.95,4.37151,4.37151,141,19,455.0,Pound -False,336,4.86154,4.79492,4.79492,141,0,455.0,Pound -True,1002,3.9,3.82048,3.82048,140,27,455.0,Dollar -True,2940,4.35,4.38983,4.38983,140,67,455.0,Pound -False,809,3.85,4.13676,4.13676,140,91,455.0,Dollar -True,24236,4.23077,4.25194,4.25194,141,11,455.0,Euro -True,9601,4.51923,4.56817,4.56817,140,52,455.0,Euro -True,744,4.19048,4.20678,4.20678,140,19,455.0,Pound -True,569,4.39474,4.37579,4.37579,140,22,455.0,Pound -False,908,4.45833,4.53621,4.53621,139,24,455.0,Pound -False,654,4.42,4.31873,4.31873,139,81,455.0,Pound -False,654,4.3,4.29706,4.29706,139,26,455.0,Euro -True,862,3.71875,3.6591,3.6591,139,0,455.0,Pound -True,962,4.5,4.42482,4.42482,139,11,455.0,Euro -False,469,4.0,3.9874,3.9874,139,26,455.0,Euro -False,494,4.15,3.74357,3.74357,139,13,455.0,Euro -False,7191,4.09091,4.01349,4.01349,139,119,455.0,Dollar -True,10012,4.5,4.7227,4.7227,139,24,455.0,Pound -True,12404,3.375,3.00437,3.00437,138,17,455.0,Euro -False,582,4.10526,4.0742,4.0742,138,47,455.0,Pound -False,768,4.39583,4.40651,4.40651,138,57,455.0,Dollar -True,783,4.05,4.16094,4.16094,138,13,455.0,Dollar -True,13388,4.45,4.61424,4.61424,138,7,455.0,Euro -False,472,4.12,4.11061,4.11061,138,28,455.0,Pound -True,1094,4.17241,4.19167,4.19167,138,21,455.0,Dollar -False,736,4.65,4.67886,4.67886,137,6,455.0,Euro -True,400,4.09677,4.11323,4.11323,137,19,455.0,Pound -False,830,4.35,4.32216,4.32216,137,17,455.0,Dollar -False,2177,4.7,4.73618,4.73618,137,19,455.0,Euro -True,759,4.5625,4.61793,4.61793,137,9,455.0,Dollar -False,9332,3.15,2.91914,2.91914,137,74,455.0,Dollar -True,438,4.35,4.15365,4.15365,136,9,455.0,Euro -False,694,4.54878,4.53536,4.53536,136,5,455.0,Euro -False,2136,4.9,4.95001,4.95001,136,26,455.0,Dollar -True,4316,4.47727,4.30652,4.30652,136,129,455.0,Dollar -True,383,4.10714,4.11461,4.11461,136,15,455.0,Dollar -True,3975,4.35417,4.3031,4.3031,136,80,468.0,Dollar -False,1422,4.10417,4.06644,4.06644,137,444,468.0,Dollar -True,1430,4.05,4.04776,4.04776,135,26,455.0,Pound -False,738,4.6087,4.5869,4.5869,135,16,455.0,Dollar -True,2101,3.45,3.40866,3.40866,135,29,455.0,Euro -True,920,4.4,4.39799,4.39799,135,56,455.0,Pound -True,417,4.0,3.93812,3.93812,135,10,455.0,Dollar -True,583,4.11111,4.09607,4.09607,134,31,2160.0,Euro -True,10008,3.8,3.68264,3.68264,134,6,455.0,Pound -False,2540,4.63333,4.56146,4.56146,135,14,800.0,Euro -True,591,4.6,4.76779,4.76779,134,12,455.0,Euro -False,10804,4.34328,4.35693,4.35693,138,16,455.0,Euro -True,311,4.3,4.28616,4.28616,134,17,455.0,Pound -True,1573,3.31818,3.31458,3.31458,134,36,455.0,Dollar -False,1875,4.15,3.69026,3.69026,134,25,455.0,Pound -False,776,4.2,4.1504,4.1504,134,30,455.0,Euro -True,586,4.35,4.39146,4.39146,133,17,455.0,Dollar -True,1814,4.8,4.81808,4.81808,133,20,455.0,Dollar -False,400,4.10714,4.09258,4.09258,133,38,455.0,Pound -True,1447,4.18518,4.21035,4.21035,133,27,455.0,Pound -False,969,4.03333,4.0302,4.0302,133,23,455.0,Pound -False,384,4.7,4.72612,4.72612,133,45,455.0,Pound -False,1140,4.1,4.07739,4.07739,133,18,455.0,Dollar -True,408,4.47368,4.46561,4.46561,133,11,455.0,Dollar -False,676,3.8,3.77361,3.77361,133,24,455.0,Dollar -True,13153,4.11278,3.97986,3.97986,137,10,455.0,Dollar -False,663,4.25,4.36681,4.36681,134,27,455.0,Euro -True,5505,3.875,3.64421,3.64421,133,182,455.0,Dollar -True,12055,4.0,4.20983,4.20983,132,19,455.0,Dollar -False,6222,4.25,4.03887,4.03887,132,15,455.0,Dollar -True,760,4.67593,4.66114,4.66114,132,64,455.0,Euro -True,2500,3.91667,3.86661,3.86661,132,131,455.0,Dollar -False,698,3.3,3.28551,3.28551,132,13,455.0,Pound -True,3889,3.85,3.92014,3.92014,132,32,455.0,Euro -True,5425,3.6,3.56567,3.56567,132,20,455.0,Euro -True,565,4.74074,4.74252,4.74252,132,34,455.0,Dollar -True,703,4.7,4.67365,4.67365,132,56,455.0,Pound -False,1639,4.61667,4.683,4.683,132,27,455.0,Pound -True,18396,4.1828,4.10612,4.10612,132,93,455.0,Dollar -True,2065,4.38942,4.57105,4.57105,132,16,455.0,Dollar -True,859,4.25,4.23639,4.23639,132,44,455.0,Pound -False,408,3.95833,3.979,3.979,131,25,455.0,Pound -False,20546,4.40426,4.38986,4.38986,131,31,455.0,Dollar -True,576,4.33333,4.21695,4.21695,131,23,1600.0,Pound -False,501,3.58824,3.51642,3.51642,131,16,455.0,Euro -False,3321,3.7,3.70517,3.70517,131,33,455.0,Pound -False,4588,4.19444,4.26451,4.26451,131,20,455.0,Euro -True,1316,3.95,3.96269,3.96269,131,48,455.0,Pound -False,8232,4.03333,3.88033,3.88033,132,21,455.0,Euro -True,549,3.3,3.20788,3.20788,131,10,455.0,Pound -True,9096,4.05,3.81551,3.81551,131,47,455.0,Euro -False,883,4.58974,4.21728,4.21728,130,70,455.0,Dollar -True,2240,3.9,3.73131,3.73131,130,9,455.0,Dollar -False,20026,4.22917,4.14292,4.14292,130,67,455.0,Pound -False,1253,4.125,3.60999,3.60999,130,35,455.0,Dollar -False,478,4.16667,4.22331,4.22331,129,257,474.0,Euro -True,448,4.26923,4.24014,4.24014,129,14,455.0,Dollar -True,14839,4.65385,4.87945,4.87945,129,27,455.0,Pound -False,1695,4.4,4.3699,4.3699,129,29,455.0,Dollar -False,2826,3.85,3.6652,3.6652,129,11,455.0,Pound -True,9531,3.55,3.65749,3.65749,129,46,455.0,Euro -False,13626,4.17568,4.21509,4.21509,129,16,455.0,Pound -True,719,4.85,4.93694,4.93694,129,40,720.0,Pound -False,1567,4.35,4.45984,4.45984,129,15,455.0,Dollar -False,1054,4.72917,4.69602,4.69602,129,64,455.0,Euro -False,801,4.1,4.38436,4.38436,128,18,455.0,Euro -True,1460,4.1,4.19707,4.19707,128,20,455.0,Dollar -False,3836,4.35,4.431,4.431,128,19,455.0,Euro -False,1775,4.65,4.62593,4.62593,128,33,455.0,Euro -True,1740,4.16667,4.23989,4.23989,128,13,455.0,Euro -False,812,4.35,4.29163,4.29163,128,23,455.0,Dollar -False,2870,4.1,4.13127,4.13127,128,41,468.0,Pound -True,4065,4.19118,4.28186,4.28186,128,40,455.0,Euro -False,8400,4.11538,4.1534,4.1534,128,17,488.0,Pound -True,1608,4.27586,4.1761,4.1761,127,61,455.0,Dollar -False,752,3.45,3.54119,3.54119,127,32,1600.0,Euro -True,1118,3.8,3.70138,3.70138,127,46,455.0,Dollar -True,2056,4.26471,4.26832,4.26832,127,24,455.0,Euro -False,16600,3.4,3.10187,3.10187,127,47,455.0,Dollar -True,6490,3.75,3.5796,3.5796,127,102,455.0,Pound -True,2304,4.28125,4.37392,4.37392,127,40,455.0,Euro -False,2876,4.19444,3.8732,3.8732,127,38,455.0,Dollar -False,2981,4.59211,4.30817,4.30817,127,38,455.0,Pound -True,525,4.1875,4.1777,4.1777,127,30,455.0,Euro -False,9934,3.26378,3.35142,3.35142,127,10,455.0,Dollar -True,3567,4.38462,4.37239,4.37239,127,23,462.0,Euro -True,717,4.1,4.10356,4.10356,126,17,455.0,Pound -True,958,3.65,3.83072,3.83072,126,43,455.0,Euro -False,10707,4.13333,4.16068,4.16068,126,10,455.0,Dollar -False,1222,4.13636,4.06947,4.06947,126,6,455.0,Pound -True,623,4.63014,4.64446,4.64446,127,55,455.0,Dollar -False,659,4.0,3.88112,3.88112,126,8,455.0,Pound -False,12768,4.43651,4.44404,4.44404,126,129,455.0,Euro -False,1892,3.84615,3.83944,3.83944,125,23,455.0,Pound -True,686,4.35714,4.05067,4.05067,125,19,455.0,Pound -False,1196,4.56122,4.5585,4.5585,125,66,455.0,Dollar -False,8509,4.3,4.09458,4.09458,126,35,455.0,Euro -True,275,4.48485,4.46267,4.46267,126,33,455.0,Pound -True,8006,4.25,4.24846,4.24846,124,17,455.0,Dollar -True,379,4.47059,4.46079,4.46079,124,20,455.0,Euro -False,575,4.46341,4.48222,4.48222,124,51,455.0,Pound -True,7479,4.125,4.1903,4.1903,124,26,455.0,Dollar -True,475,4.17949,4.15372,4.15372,124,31,455.0,Dollar -False,3801,4.05,4.04668,4.04668,124,26,455.0,Euro -False,739,4.27083,4.13338,4.13338,124,15,540.0,Dollar -True,8286,3.65,3.43898,3.43898,124,19,455.0,Pound -False,1656,3.9,3.99582,3.99582,124,66,455.0,Euro -False,14327,4.36111,4.12075,4.12075,123,77,455.0,Pound -True,1245,3.05,2.76416,2.76416,123,14,455.0,Pound -False,12064,4.39844,4.41497,4.41497,123,29,455.0,Pound -False,2913,4.4,4.35229,4.35229,123,30,455.0,Pound -False,545,3.85,3.83065,3.83065,123,21,455.0,Dollar -False,1038,4.75,4.70597,4.70597,123,25,455.0,Euro -False,628,3.75,3.55334,3.55334,123,14,455.0,Dollar -True,2991,3.6,3.611,3.611,122,19,455.0,Euro -True,27891,4.34016,4.43896,4.43896,124,64,455.0,Euro -True,2272,4.65,4.59861,4.59861,122,7,455.0,Euro -False,1119,4.7,4.73942,4.73942,122,211,455.0,Euro -True,5720,4.32432,4.39746,4.39746,122,20,455.0,Euro -False,1405,4.52941,4.58891,4.58891,122,95,455.0,Pound -True,11430,3.90625,3.88286,3.88286,122,17,455.0,Euro -True,1099,4.6,4.53166,4.53166,122,57,455.0,Dollar -True,7566,4.35,4.32155,4.32155,122,41,455.0,Pound -False,802,3.83871,3.7957,3.7957,122,20,455.0,Dollar -True,1953,3.85,4.02538,4.02538,122,20,455.0,Euro -False,4697,3.05,2.59287,2.59287,122,12,455.0,Dollar -True,3995,4.35,4.30453,4.30453,121,21,468.0,Pound -True,4551,4.05,4.13274,4.13274,121,35,455.0,Euro -False,452,3.85,4.0555,4.0555,121,13,455.0,Pound -False,548,3.97222,3.93706,3.93706,121,16,455.0,Pound -True,1072,4.3,4.3939,4.3939,121,0,455.0,Dollar -False,1580,4.15,4.2111,4.2111,121,24,455.0,Euro -False,415,4.28947,4.26786,4.26786,121,13,455.0,Dollar -False,6861,3.6,3.05298,3.05298,121,7,455.0,Pound -False,332,4.15625,4.15372,4.15372,123,9,455.0,Pound -False,791,4.45,4.46632,4.46632,121,42,2880.0,Dollar -True,19993,3.3,3.49751,3.49751,121,19,455.0,Euro -True,729,4.5,4.29996,4.29996,121,36,455.0,Euro -True,2602,3.8,3.76096,3.76096,121,21,455.0,Pound -False,7536,4.4,4.43075,4.43075,120,49,455.0,Euro -True,2028,3.7,3.21172,3.21172,120,5,455.0,Pound -True,3566,3.56349,3.54308,3.54308,120,5,455.0,Dollar -False,1590,3.95,3.76335,3.76335,120,18,455.0,Pound -True,1376,4.3,4.15563,4.15563,120,46,455.0,Euro -False,847,4.5,4.52516,4.52516,120,24,455.0,Euro -True,694,4.33333,4.34329,4.34329,120,42,455.0,Dollar -False,4114,3.8,3.85804,3.85804,120,35,455.0,Pound -True,17979,3.7,4.22167,4.22167,120,70,455.0,Pound -True,348,4.21212,4.16928,4.16928,121,52,455.0,Dollar -True,16518,4.25,4.36984,4.36984,120,27,455.0,Dollar -False,5624,4.52083,4.56817,4.56817,120,21,520.0,Dollar -False,575,4.31111,4.27462,4.27462,120,28,455.0,Pound -True,3380,4.2,4.21635,4.21635,120,13,455.0,Pound -False,3129,4.05,4.16716,4.16716,120,11,455.0,Euro -True,1426,4.3,4.25396,4.25396,119,19,800.0,Dollar -True,1108,4.55,4.48599,4.48599,119,35,455.0,Dollar -False,5043,3.9,3.95558,3.95558,119,103,455.0,Euro -True,16282,4.04167,3.9945,3.9945,120,20,455.0,Pound -True,534,4.53125,4.50755,4.50755,119,33,455.0,Dollar -False,740,4.45,4.4114,4.4114,119,21,455.0,Pound -False,1006,4.225,3.74587,3.74587,119,22,455.0,Dollar -True,1307,4.5,4.5311,4.5311,119,19,455.0,Dollar -False,7491,4.35,3.96319,3.96319,118,36,455.0,Dollar -True,498,4.575,4.59754,4.59754,118,10,494.0,Euro -False,1525,4.40323,4.43718,4.43718,118,96,455.0,Dollar -False,2001,4.15217,4.12223,4.12223,119,263,455.0,Dollar -False,957,4.0,3.97243,3.97243,118,27,455.0,Dollar -True,4886,4.0678,4.01264,4.01264,119,33,455.0,Euro -True,1252,4.05,4.0514,4.0514,117,10,455.0,Euro -False,740,4.3,4.24289,4.24289,117,17,455.0,Dollar -True,725,4.7,4.68654,4.68654,117,10,455.0,Pound -True,1410,4.25,4.21766,4.21766,117,23,494.0,Euro -True,7295,4.45,4.38106,4.38106,117,28,455.0,Pound -False,6044,3.95,3.67631,3.67631,117,11,455.0,Dollar -False,423,4.43182,4.2378,4.2378,118,48,455.0,Pound -False,3390,3.4,3.11505,3.11505,117,7,455.0,Euro -True,5889,4.0,4.0925,4.0925,117,45,455.0,Pound -True,14555,3.15,3.21294,3.21294,117,17,455.0,Euro -False,2031,4.67568,4.71918,4.71918,117,55,455.0,Dollar -True,1166,3.98684,3.99206,3.99206,116,19,455.0,Dollar -True,806,4.1,4.22772,4.22772,116,24,455.0,Euro -True,543,4.8,4.77648,4.77648,116,56,455.0,Pound -True,425,3.95,4.18664,4.18664,116,29,455.0,Euro -True,15808,2.55,2.72169,2.72169,116,5,455.0,Pound -False,23035,4.29592,4.42001,4.42001,116,50,455.0,Euro -False,733,4.65,4.63597,4.63597,115,35,1120.0,Dollar -False,2966,4.5,4.49705,4.49705,115,13,455.0,Euro -False,310,4.64286,4.67433,4.67433,116,33,455.0,Euro -True,544,4.49375,4.52031,4.52031,116,124,455.0,Euro -False,2056,4.1,4.2083,4.2083,115,25,455.0,Dollar -False,8769,4.05,4.12421,4.12421,115,46,455.0,Pound -True,5073,4.35,4.33791,4.33791,115,28,455.0,Dollar -False,512,4.1,4.1814,4.1814,115,77,455.0,Euro -True,1492,4.45,4.42978,4.42978,115,55,455.0,Euro -True,441,4.01471,3.73897,3.73897,115,19,455.0,Pound -True,1126,4.44828,4.34642,4.34642,116,57,455.0,Pound -True,470,4.15,4.17708,4.17708,115,25,455.0,Euro -True,4081,4.5,4.51396,4.51396,115,21,455.0,Pound -False,5710,4.05,3.77403,3.77403,114,30,455.0,Pound -False,487,4.26471,4.26287,4.26287,114,84,474.0,Euro -True,798,3.5,3.64994,3.64994,114,24,455.0,Pound -False,477,3.84848,3.8773,3.8773,115,42,800.0,Pound -True,2781,3.95,3.83457,3.83457,114,7,455.0,Euro -True,1740,3.85,3.91172,3.91172,114,15,455.0,Pound -True,16608,4.30508,4.3496,4.3496,115,44,3200.0,Euro -False,871,3.1,3.03415,3.03415,114,16,455.0,Euro -True,1565,4.2,4.16622,4.16622,114,61,455.0,Dollar -True,336,4.82301,4.71432,4.71432,116,36,455.0,Dollar -True,1076,4.15,4.11586,4.11586,114,85,455.0,Euro -True,12340,3.29167,3.07001,3.07001,114,5,455.0,Euro -True,4147,4.36364,4.40369,4.40369,114,96,474.0,Pound -True,1799,4.40385,4.42023,4.42023,114,20,455.0,Euro -True,834,4.45,4.42968,4.42968,114,49,455.0,Dollar -True,330,4.26667,4.21886,4.21886,113,27,455.0,Dollar -True,602,4.42035,4.44036,4.44036,115,14,455.0,Pound -True,1638,4.0,3.99036,3.99036,113,22,455.0,Euro -False,3147,4.0,3.98623,3.98623,113,43,520.0,Dollar -True,479,4.33628,4.38407,4.38407,113,25,455.0,Pound -False,2345,4.61111,4.54725,4.54725,113,24,455.0,Pound -True,706,3.75,3.73068,3.73068,113,28,455.0,Dollar -False,345,3.75,3.72283,3.72283,113,11,455.0,Dollar -True,10374,4.18182,3.7492,3.7492,113,88,455.0,Euro -False,11177,4.31818,4.41065,4.41065,113,18,455.0,Dollar -False,13378,4.6,4.17509,4.17509,112,24,455.0,Euro -False,806,4.34211,4.35515,4.35515,112,45,455.0,Pound -True,1655,3.82143,4.14829,4.14829,112,20,468.0,Dollar -True,2219,4.55,4.68477,4.68477,112,49,455.0,Euro -True,1574,4.1,4.08713,4.08713,112,22,455.0,Dollar -False,32964,4.08824,4.05915,4.05915,112,14,455.0,Dollar -False,1195,4.2,4.24409,4.24409,112,10,474.0,Pound -False,485,4.475,4.43815,4.43815,112,8,455.0,Pound -False,392,4.43333,4.34002,4.34002,111,11,468.0,Pound -True,407,3.87097,3.90669,3.90669,111,25,455.0,Pound -False,392,4.07143,3.83816,3.83816,111,29,455.0,Euro -True,31882,4.0,4.11204,4.11204,111,29,455.0,Euro -False,441,3.9,3.85619,3.85619,111,15,455.0,Dollar -True,2103,4.15,4.28099,4.28099,111,28,455.0,Dollar -True,2707,4.4,4.35754,4.35754,111,31,455.0,Dollar -True,1749,4.25,4.34787,4.34787,112,27,455.0,Pound -True,17123,3.5,3.38993,3.38993,112,30,455.0,Pound -False,20912,3.86667,3.94579,3.94579,111,17,455.0,Euro -False,313,4.5,4.51904,4.51904,111,25,455.0,Pound -True,887,4.05,4.13261,4.13261,111,46,455.0,Pound -True,357,4.6,4.64267,4.64267,111,14,455.0,Pound -True,567,4.11,4.21755,4.21755,111,314,455.0,Dollar -True,947,4.77941,4.77217,4.77217,111,156,455.0,Euro -False,619,4.39474,4.32129,4.32129,111,278,760.0,Euro -False,262,4.41304,4.51094,4.51094,110,5,455.0,Dollar -False,961,4.76923,4.74862,4.74862,110,106,455.0,Dollar -True,713,4.7,4.70874,4.70874,110,27,455.0,Euro -True,451,4.36364,4.31695,4.31695,110,9,455.0,Pound -False,265,4.28846,4.35243,4.35243,111,12,455.0,Dollar -True,407,3.99545,3.89338,3.89338,110,14,455.0,Euro -False,343,4.0339,3.92399,3.92399,112,16,455.0,Euro -False,1944,4.37209,4.20545,4.20545,111,24,455.0,Euro -False,1721,3.3,2.81412,2.81412,110,10,455.0,Pound -True,4538,4.05,3.88856,3.88856,110,69,455.0,Pound -False,773,4.0,3.98464,3.98464,110,30,455.0,Dollar -True,2233,4.25,4.37856,4.37856,110,19,455.0,Dollar -True,5129,3.95,3.79986,3.79986,110,11,455.0,Euro -False,1008,4.5,4.57044,4.57044,109,25,455.0,Pound -False,14097,3.65,3.58216,3.58216,109,36,455.0,Dollar -True,10570,4.25,4.25106,4.25106,109,64,455.0,Dollar -False,1632,4.55,4.55244,4.55244,110,35,455.0,Dollar -True,1031,4.75,4.71974,4.71974,109,76,455.0,Euro -False,611,4.32143,4.33183,4.33183,109,60,520.0,Euro -False,12212,4.5,4.45228,4.45228,109,21,455.0,Dollar -True,1452,4.08333,4.3017,4.3017,109,47,455.0,Dollar -True,14046,4.1,4.18812,4.18812,109,10,455.0,Euro -False,516,4.38462,4.36262,4.36262,109,31,455.0,Pound -True,501,3.97368,4.08301,4.08301,109,15,455.0,Euro -False,893,4.3,4.37036,4.37036,109,102,455.0,Dollar -False,21411,3.4,4.01316,4.01316,109,96,455.0,Dollar -False,984,4.1,4.05819,4.05819,109,17,455.0,Pound -False,420,4.15385,4.18855,4.18855,109,10,455.0,Euro -False,812,4.25,4.28089,4.28089,108,52,455.0,Euro -True,10673,3.6,3.86602,3.86602,108,78,455.0,Pound -True,690,4.25,4.22414,4.22414,108,20,455.0,Pound -False,3343,3.7,3.96834,3.96834,108,5,455.0,Dollar -False,525,4.3,4.39341,4.39341,108,73,455.0,Pound -False,367,3.29412,3.3526,3.3526,108,27,455.0,Euro -True,3773,3.9,4.04581,4.04581,108,14,455.0,Euro -True,2467,3.95,4.07083,4.07083,108,97,455.0,Euro -True,1218,4.61765,4.68275,4.68275,109,20,455.0,Pound -True,500,4.45455,4.44614,4.44614,108,20,455.0,Pound -True,19201,3.72685,3.72567,3.72567,108,37,455.0,Pound -True,544,4.4,4.37998,4.37998,108,37,455.0,Dollar -True,862,4.2,4.07609,4.07609,108,26,455.0,Dollar -False,571,3.9,3.91908,3.91908,110,25,455.0,Dollar -False,22090,3.9,3.84121,3.84121,108,11,455.0,Euro -True,1163,3.65,3.55854,3.55854,108,5,455.0,Dollar -True,15187,4.35227,4.43359,4.43359,109,9,455.0,Dollar -False,4502,4.02381,3.95498,3.95498,107,12,455.0,Dollar -False,3192,3.8,3.77812,3.77812,107,26,455.0,Euro -True,260,4.04167,4.0366,4.0366,107,11,455.0,Dollar -False,2573,4.15,4.0814,4.0814,107,79,455.0,Dollar -True,2528,4.15,4.11108,4.11108,107,61,455.0,Pound -False,9869,4.3,3.89988,3.89988,107,18,455.0,Pound -True,11916,4.2619,4.34079,4.34079,107,9,455.0,Euro -True,725,4.90187,4.86241,4.86241,107,32,455.0,Euro -True,3538,4.35,4.44774,4.44774,107,88,455.0,Euro -True,2338,4.53846,4.53014,4.53014,107,46,455.0,Dollar -True,9724,4.26744,4.1642,4.1642,106,6,455.0,Pound -True,856,4.5,4.49489,4.49489,106,29,455.0,Euro -True,1685,4.4902,4.53837,4.53837,106,6,455.0,Euro -True,934,4.17241,4.1386,4.1386,107,0,455.0,Euro -False,770,4.3,4.26275,4.26275,106,44,455.0,Pound -True,790,3.5,3.48356,3.48356,106,18,468.0,Pound -True,693,3.5,3.44986,3.44986,106,51,700.0,Dollar -False,623,4.1,3.96322,3.96322,106,32,455.0,Euro -False,977,4.38889,4.44579,4.44579,106,29,455.0,Pound -False,474,2.55,2.58963,2.58963,106,33,455.0,Pound -True,3055,4.25,4.18905,4.18905,105,35,455.0,Dollar -True,4506,3.4,3.46139,3.46139,105,20,455.0,Pound -False,286,3.68182,3.63394,3.63394,105,12,455.0,Pound -True,12176,4.32692,4.49062,4.49062,105,32,455.0,Dollar -True,1097,4.9697,4.97113,4.97113,105,85,455.0,Dollar -True,1166,3.9,3.94417,3.94417,105,49,455.0,Euro -True,4147,4.65,4.56942,4.56942,105,22,455.0,Euro -False,568,4.875,4.88825,4.88825,105,15,455.0,Dollar -False,17040,4.22727,4.2959,4.2959,105,17,455.0,Dollar -False,815,3.9,3.98464,3.98464,105,78,455.0,Pound -True,10940,2.95,2.92734,2.92734,105,14,455.0,Pound -False,1828,4.4,4.35462,4.35462,104,162,455.0,Dollar -False,436,4.25,4.18132,4.18132,104,68,455.0,Euro -True,2349,4.15,4.0072,4.0072,104,45,455.0,Dollar -False,470,4.55,4.39637,4.39637,104,36,455.0,Dollar -True,551,3.85,3.90193,3.90193,104,26,455.0,Euro -False,525,4.54762,4.52168,4.52168,104,16,455.0,Pound -False,443,3.6,3.55374,3.55374,104,16,455.0,Dollar -False,9238,3.9,4.14681,4.14681,104,32,455.0,Dollar -True,823,4.35,4.28918,4.28918,104,38,462.0,Pound -False,564,4.15,4.25886,4.25886,104,15,455.0,Pound -False,777,3.5,3.56487,3.56487,104,28,2880.0,Dollar -False,511,4.5875,4.60406,4.60406,104,181,455.0,Pound -False,567,4.39474,4.37307,4.37307,104,29,455.0,Euro -True,388,3.75,3.8292,3.8292,103,9,455.0,Euro -True,1767,4.52,4.49754,4.49754,104,53,455.0,Pound -False,1563,4.23529,4.24404,4.24404,103,62,455.0,Dollar -True,326,4.6,4.65814,4.65814,103,16,455.0,Pound -False,6787,3.86842,3.88171,3.88171,103,30,455.0,Euro -True,15175,3.96667,4.0588,4.0588,103,40,455.0,Dollar -False,13456,3.95,4.30095,4.30095,103,12,455.0,Pound -True,501,4.41176,4.45555,4.45555,103,84,455.0,Euro -True,2085,4.3,4.51104,4.51104,103,27,455.0,Euro -False,302,4.19231,4.17903,4.17903,103,12,455.0,Dollar -True,521,4.57447,4.5651,4.5651,103,65,455.0,Pound -False,586,4.2,4.16083,4.16083,102,25,455.0,Pound -False,4678,4.3,4.33933,4.33933,103,48,455.0,Pound -False,516,4.20588,4.13049,4.13049,102,102,455.0,Pound -True,12204,4.5,4.45244,4.45244,102,44,455.0,Dollar -True,1047,4.1,4.01243,4.01243,102,26,455.0,Pound -True,408,4.32143,4.34549,4.34549,102,14,455.0,Euro -False,741,4.51087,4.59122,4.59122,102,53,455.0,Dollar -True,313,4.2931,4.28208,4.28208,102,14,1600.0,Dollar -False,319,4.04,4.07319,4.07319,102,27,455.0,Dollar -False,6476,4.05,3.84567,3.84567,102,8,455.0,Euro -False,11145,4.1,4.10575,4.10575,102,30,455.0,Dollar -False,14389,3.34804,3.48062,3.48062,102,13,455.0,Pound -True,1099,4.5,4.4619,4.4619,102,34,455.0,Euro -True,688,4.0,4.0466,4.0466,102,11,455.0,Dollar -False,2101,4.1,4.16464,4.16464,101,16,455.0,Pound -False,9242,4.12727,4.16228,4.16228,101,21,455.0,Dollar -False,3136,4.0,3.79291,3.79291,101,10,455.0,Euro -False,1809,4.09375,4.09563,4.09563,101,28,455.0,Euro -True,3826,4.3,4.30727,4.30727,101,30,455.0,Dollar -False,24943,3.9,3.50415,3.50415,101,69,455.0,Euro -True,234,4.465,4.40828,4.40828,101,52,455.0,Dollar -True,418,4.02273,4.06523,4.06523,101,0,800.0,Dollar -False,8595,4.0,4.00054,4.00054,101,33,455.0,Pound -True,4339,4.0,4.04879,4.04879,101,25,455.0,Dollar -False,481,4.36207,4.41853,4.41853,101,29,455.0,Dollar -True,225,4.66216,4.68818,4.68818,102,17,2400.0,Pound -True,2346,4.6,4.64194,4.64194,101,39,455.0,Pound -False,1818,4.2,4.17778,4.17778,100,31,455.0,Pound -True,1371,4.04839,4.02521,4.02521,100,16,488.0,Dollar -False,3751,4.45,4.39842,4.39842,100,26,455.0,Pound -True,2753,4.25,4.33219,4.33219,100,24,1520.0,Pound -False,944,4.4,4.37184,4.37184,100,48,455.0,Pound -True,350,4.35938,4.37977,4.37977,100,19,455.0,Euro -False,421,4.26316,4.32427,4.32427,100,28,455.0,Dollar -True,1691,4.15,4.2416,4.2416,100,79,455.0,Euro -False,9218,4.25,4.199,4.199,100,39,455.0,Dollar -True,590,3.975,3.93949,3.93949,100,30,455.0,Pound -True,558,3.875,3.83874,3.83874,100,29,455.0,Dollar -True,688,4.3,4.15572,4.15572,100,35,455.0,Pound -True,525,4.4,4.36812,4.36812,99,31,455.0,Pound -False,4689,4.1,4.09988,4.09988,99,177,455.0,Pound -False,3279,4.1,4.11573,4.11573,99,31,455.0,Euro -True,744,4.30769,4.24798,4.24798,99,16,455.0,Pound -False,12330,4.2,4.01173,4.01173,99,34,455.0,Euro -True,1382,4.6,4.59548,4.59548,99,38,455.0,Dollar -True,6303,3.96774,4.03299,4.03299,99,27,455.0,Pound -True,419,4.36842,4.37324,4.37324,99,28,455.0,Pound -True,11542,3.4,2.44426,2.44426,99,21,455.0,Euro -True,7867,4.1,4.61318,4.61318,99,45,455.0,Euro -True,1512,4.5,4.52659,4.52659,99,34,455.0,Euro -False,18538,4.57576,4.63126,4.63126,106,101,455.0,Euro -True,452,4.6,4.61084,4.61084,98,14,455.0,Dollar -True,431,3.05,3.08345,3.08345,98,67,474.0,Pound -False,2011,4.1,4.07943,4.07943,98,44,455.0,Dollar -True,393,3.05,3.13228,3.13228,98,17,455.0,Dollar -True,4226,3.9,4.18947,4.18947,98,8,455.0,Dollar -True,5996,4.04286,4.07258,4.07258,98,21,455.0,Pound -True,519,4.65,4.6161,4.6161,98,26,455.0,Dollar -True,798,3.20455,3.39951,3.39951,100,16,455.0,Pound -False,253,4.63636,4.66248,4.66248,98,20,1440.0,Dollar -True,3345,3.75,3.11934,3.11934,98,25,455.0,Euro -True,295,3.58571,3.58864,3.58864,98,63,455.0,Euro -True,4989,3.95,3.94931,3.94931,98,16,455.0,Dollar -True,359,4.22973,4.24834,4.24834,99,108,455.0,Pound -True,662,4.05,3.94023,3.94023,97,17,455.0,Dollar -False,2137,3.75,3.60063,3.60063,97,33,455.0,Dollar -False,329,3.5,3.46153,3.46153,97,18,455.0,Euro -True,12127,4.4,4.36495,4.36495,97,47,455.0,Pound -True,5904,4.3,4.30524,4.30524,97,7,455.0,Pound -True,2985,3.95,4.13284,4.13284,97,11,455.0,Euro -False,6436,4.25,4.51298,4.51298,97,51,455.0,Pound -True,565,4.58333,4.64101,4.64101,97,145,455.0,Pound -True,595,3.8,3.85498,3.85498,97,34,455.0,Dollar -False,1466,4.35417,4.36629,4.36629,98,25,455.0,Euro -True,783,4.22222,4.25379,4.25379,97,18,455.0,Pound -False,431,4.27907,4.27194,4.27194,97,27,455.0,Euro -False,1773,4.3,4.30134,4.30134,97,11,455.0,Euro -False,3625,4.35,4.37025,4.37025,97,35,455.0,Pound -True,4894,4.05,3.72716,3.72716,97,6,455.0,Pound -True,345,3.95833,4.00534,4.00534,97,53,455.0,Dollar -False,832,4.5,4.53764,4.53764,97,26,468.0,Pound -True,5390,3.05,2.94365,2.94365,97,8,455.0,Pound -True,508,4.6,4.63978,4.63978,97,6,455.0,Dollar -True,5606,4.2,4.49478,4.49478,97,28,455.0,Pound -False,10632,4.1,3.97162,3.97162,97,0,700.0,Dollar -False,338,4.26667,4.26772,4.26772,97,13,455.0,Dollar -False,415,4.0,3.82684,3.82684,97,8,455.0,Euro -False,20686,4.8,4.744,4.744,104,12,455.0,Dollar -True,487,4.75,4.7285,4.7285,96,37,455.0,Pound -True,341,4.33333,4.35742,4.35742,96,10,455.0,Dollar -True,1521,4.1,4.19165,4.19165,96,45,455.0,Dollar -False,1585,3.0,3.03942,3.03942,96,29,455.0,Dollar -False,4322,4.05,4.03095,4.03095,96,46,455.0,Pound -False,453,4.65,4.60711,4.60711,97,11,455.0,Pound -True,4488,4.21429,4.22178,4.22178,96,69,455.0,Pound -True,443,3.35,3.45416,3.45416,96,20,455.0,Euro -False,342,4.0,4.04901,4.04901,96,18,455.0,Euro -True,11547,4.25,4.41355,4.41355,96,32,455.0,Pound -True,537,3.85,3.81052,3.81052,96,59,455.0,Dollar -True,256,3.90625,3.88376,3.88376,96,5,455.0,Pound -False,2103,4.15,4.10625,4.10625,96,22,455.0,Euro -False,2008,4.14912,4.24982,4.24982,97,10,455.0,Dollar -True,1792,4.45455,4.38503,4.38503,96,551,462.0,Pound -False,708,4.3,4.34392,4.34392,96,22,455.0,Euro -True,520,4.1,3.83008,3.83008,95,14,455.0,Euro -True,7011,3.8,3.97088,3.97088,95,122,455.0,Dollar -True,285,4.02778,4.05223,4.05223,95,5,455.0,Pound -False,4527,4.5,4.47059,4.47059,95,30,455.0,Euro -True,263,4.35,4.3177,4.3177,95,7,455.0,Dollar -False,772,4.3,4.19182,4.19182,95,27,455.0,Dollar -True,439,4.44286,4.56476,4.56476,96,39,1920.0,Euro -True,2560,3.6,3.68256,3.68256,95,26,455.0,Pound -False,16640,3.65,3.41953,3.41953,95,74,455.0,Dollar -False,368,4.09091,4.07659,4.07659,95,140,455.0,Pound -True,4069,4.34375,4.34438,4.34438,95,41,455.0,Dollar -False,3732,4.55,4.56176,4.56176,95,44,455.0,Euro -True,2440,4.28846,4.28301,4.28301,95,8,455.0,Pound -False,690,4.7,4.70469,4.70469,95,23,455.0,Euro -True,399,4.07143,3.99083,3.99083,95,45,455.0,Euro -True,545,4.35,4.34584,4.34584,95,45,455.0,Pound -True,566,4.16667,4.1161,4.1161,95,25,455.0,Dollar -True,6621,4.15,4.06703,4.06703,94,9,455.0,Euro -True,11803,3.4,3.1519,3.1519,94,7,455.0,Euro -True,1243,4.3,4.32326,4.32326,94,44,455.0,Dollar -True,3019,4.25,4.4638,4.4638,94,39,455.0,Euro -False,467,3.25,3.34626,3.34626,94,17,455.0,Euro -True,2630,4.2,4.15798,4.15798,94,18,455.0,Dollar -False,21390,4.75,4.71103,4.71103,94,24,520.0,Pound -True,3190,4.05,4.18867,4.18867,94,130,455.0,Dollar -True,12546,4.7,4.77751,4.77751,94,33,455.0,Dollar -False,1522,4.1,4.11092,4.11092,94,50,455.0,Dollar -False,1297,3.55,3.51888,3.51888,94,11,455.0,Euro -False,1553,3.88889,3.85267,3.85267,94,11,455.0,Dollar -False,5374,4.36364,4.35186,4.35186,93,14,455.0,Pound -True,1676,4.65,4.63447,4.63447,93,21,455.0,Dollar -False,10532,3.95,3.29695,3.29695,93,26,455.0,Euro -True,2034,4.4,4.33062,4.33062,93,17,455.0,Pound -False,962,4.05,3.9997,3.9997,93,18,455.0,Dollar -False,2661,4.52083,4.5637,4.5637,93,143,455.0,Pound -True,822,3.95,3.95514,3.95514,93,34,455.0,Pound -False,522,4.05,3.86986,3.86986,93,29,455.0,Pound -False,855,4.3,4.26093,4.26093,93,37,468.0,Euro -True,993,4.75,4.67838,4.67838,93,88,455.0,Dollar -False,1030,3.75,3.73064,3.73064,93,58,455.0,Pound -False,13062,3.825,4.15433,4.15433,93,44,455.0,Pound -True,4543,3.55,3.50858,3.50858,93,10,455.0,Pound -False,281,3.6,3.4488,3.4488,93,60,520.0,Pound -False,1447,4.25,4.21572,4.21572,93,16,474.0,Euro -False,4533,4.1,3.89022,3.89022,92,28,455.0,Pound -False,715,3.96875,4.06611,4.06611,92,12,455.0,Euro -True,2234,4.0,3.99698,3.99698,92,31,455.0,Dollar -True,365,4.54348,4.57629,4.57629,92,34,455.0,Dollar -True,1618,4.8,4.66202,4.66202,92,43,455.0,Pound -False,410,4.46154,4.45147,4.45147,92,7,455.0,Euro -True,4808,4.15,4.21768,4.21768,92,24,455.0,Euro -True,1504,4.2,4.30955,4.30955,92,132,455.0,Dollar -False,5977,4.15,3.77429,3.77429,92,20,455.0,Pound -True,6816,4.5,4.44141,4.44141,92,26,455.0,Dollar -True,5180,4.33333,4.32222,4.32222,92,95,455.0,Dollar -True,6687,3.5,3.49719,3.49719,92,16,455.0,Pound -False,8388,4.00581,4.02743,4.02743,94,32,455.0,Dollar -False,757,4.6,4.57799,4.57799,91,47,455.0,Euro -False,280,4.4,4.41995,4.41995,91,32,455.0,Pound -False,5071,4.5,4.64059,4.64059,91,23,455.0,Pound -False,657,4.49242,4.46367,4.46367,91,128,455.0,Euro -True,2707,4.25,4.30225,4.30225,91,19,455.0,Euro -True,1758,4.25,4.26089,4.26089,91,22,455.0,Pound -False,1743,4.3,4.34173,4.34173,92,57,455.0,Dollar -True,4418,4.4,4.39966,4.39966,91,14,455.0,Euro -False,2151,3.75,3.76465,3.76465,91,27,455.0,Euro -True,7497,4.15,4.11038,4.11038,91,18,455.0,Pound -False,10580,4.1,4.08863,4.08863,91,22,455.0,Euro -False,418,3.81818,4.21374,4.21374,91,43,455.0,Euro -False,2380,4.03846,4.07623,4.07623,91,24,455.0,Euro -True,2492,3.9,4.10672,4.10672,92,51,455.0,Dollar -True,23049,4.2,4.35768,4.35768,91,55,455.0,Pound -False,3675,4.15,4.2688,4.2688,91,24,455.0,Euro -False,2597,4.61364,4.63777,4.63777,91,17,455.0,Dollar -False,23792,3.4,3.56305,3.56305,91,29,455.0,Dollar -True,781,4.4,4.35287,4.35287,91,26,455.0,Dollar -False,1404,4.15,3.90464,3.90464,91,35,455.0,Euro -True,1202,4.51099,4.49074,4.49074,98,67,455.0,Euro -True,1578,4.55,4.48363,4.48363,90,64,455.0,Pound -False,7023,3.6,3.74147,3.74147,90,34,455.0,Dollar -True,305,2.6,2.63768,2.63768,90,29,455.0,Dollar -True,842,4.15,4.22015,4.22015,90,22,455.0,Pound -False,482,4.7,4.68817,4.68817,90,37,455.0,Euro -False,7963,4.26712,4.30346,4.30346,90,17,455.0,Dollar -False,900,4.45238,4.39862,4.39862,90,14,455.0,Pound -True,446,3.45,4.15364,4.15364,90,39,700.0,Euro -True,978,4.95,4.9809,4.9809,90,50,455.0,Pound -True,325,3.7,3.7323,3.7323,90,26,455.0,Dollar -False,2864,4.0,3.95886,3.95886,90,11,455.0,Dollar -True,1913,4.85,4.91189,4.91189,90,92,455.0,Dollar -False,3241,4.75,4.66004,4.66004,90,48,455.0,Dollar -False,951,4.45,4.51822,4.51822,90,13,455.0,Pound -True,2679,3.55,2.52641,2.52641,90,27,455.0,Euro -False,310,3.5,3.58332,3.58332,90,55,455.0,Euro -False,2462,3.9,3.62164,3.62164,90,27,468.0,Euro -False,1960,4.9,4.8774,4.8774,89,52,455.0,Euro -True,4298,4.25,4.08549,4.08549,89,46,455.0,Dollar -True,815,3.95,3.97856,3.97856,89,24,455.0,Euro -False,1527,4.44737,4.50863,4.50863,89,47,455.0,Euro -True,744,3.8,3.36394,3.36394,89,13,455.0,Pound -False,9447,4.04545,4.26582,4.26582,89,31,455.0,Euro -False,506,4.3,4.31315,4.31315,89,42,474.0,Pound -True,34187,3.5,3.74369,3.74369,89,11,455.0,Euro -False,1622,3.7,3.79312,3.79312,89,45,455.0,Euro -True,7966,3.9,3.37345,3.37345,89,14,455.0,Dollar -True,626,4.0,4.31948,4.31948,89,18,455.0,Euro -False,1957,4.6,4.82215,4.82215,89,26,455.0,Dollar -True,4332,4.4,4.40774,4.40774,89,51,455.0,Dollar -False,9093,3.89286,4.1321,4.1321,89,10,455.0,Euro -False,3479,2.75,2.98235,2.98235,89,13,455.0,Dollar -False,1102,3.7,3.58932,3.58932,89,49,455.0,Pound -True,1536,4.95,4.95256,4.95256,89,17,455.0,Dollar -False,356,4.3,4.34373,4.34373,89,44,455.0,Dollar -True,367,3.85,3.83618,3.83618,89,7,455.0,Dollar -True,1917,3.6,3.83989,3.83989,89,27,481.0,Dollar -False,9270,3.15,3.12974,3.12974,89,17,455.0,Dollar -False,15031,4.16667,4.18092,4.18092,88,186,455.0,Pound -True,4692,4.44737,4.36213,4.36213,88,30,455.0,Euro -True,4201,4.45,4.35692,4.35692,88,19,455.0,Pound -False,3484,4.3,4.30908,4.30908,88,32,455.0,Euro -False,4326,4.7,4.81967,4.81967,88,14,455.0,Dollar -True,1265,4.2,4.17671,4.17671,88,21,455.0,Pound -True,1112,3.55,3.41168,3.41168,88,14,455.0,Euro -False,19381,4.5,4.61526,4.61526,88,28,455.0,Euro -False,743,4.6,4.56965,4.56965,88,50,455.0,Dollar -False,2140,4.35,4.50233,4.50233,88,29,455.0,Pound -False,21917,4.02273,4.09689,4.09689,89,52,455.0,Dollar -False,6976,3.25,2.7709,2.7709,88,31,455.0,Dollar -True,271,4.36842,4.35498,4.35498,88,13,455.0,Dollar -True,282,4.2,4.25866,4.25866,88,8,455.0,Dollar -True,2786,3.55,3.58432,3.58432,88,14,455.0,Euro -False,2367,3.95,3.85946,3.85946,88,25,455.0,Dollar -False,807,4.63889,4.64007,4.64007,87,41,455.0,Dollar -True,290,4.375,4.374,4.374,87,35,455.0,Dollar -True,411,4.43284,4.4392,4.4392,87,22,455.0,Euro -True,1783,4.05,4.03486,4.03486,87,17,455.0,Pound -True,1361,4.05,4.07662,4.07662,87,35,455.0,Dollar -True,2696,3.42857,3.41788,3.41788,87,14,455.0,Pound -False,716,4.7,4.74284,4.74284,87,66,455.0,Pound -True,748,4.05,4.16681,4.16681,87,20,455.0,Euro -False,4034,4.0,4.09139,4.09139,87,49,455.0,Pound -False,3899,3.95,3.85883,3.85883,87,17,455.0,Dollar -False,3267,4.65,4.29509,4.29509,87,11,455.0,Dollar -True,2423,3.95,3.62453,3.62453,87,9,455.0,Pound -True,825,4.65,4.75174,4.75174,87,6,455.0,Euro -True,478,4.0,3.85969,3.85969,87,44,455.0,Euro -False,1827,4.43548,4.45434,4.45434,88,45,455.0,Pound -False,364,4.02778,3.95115,3.95115,88,14,494.0,Euro -False,749,4.2,4.1452,4.1452,87,25,455.0,Dollar -False,545,4.25,4.23938,4.23938,87,22,455.0,Dollar -False,275,4.4,4.38239,4.38239,87,83,455.0,Pound -True,401,3.2,3.43324,3.43324,87,14,455.0,Euro -False,4774,4.35,4.35766,4.35766,87,16,455.0,Pound -True,16790,4.0,3.84766,3.84766,86,22,455.0,Dollar -True,707,4.8,4.80823,4.80823,86,10,455.0,Dollar -True,2819,4.1,3.95676,3.95676,86,59,455.0,Dollar -True,11083,3.85526,3.77968,3.77968,86,19,455.0,Euro -False,7587,3.55,3.65396,3.65396,86,46,455.0,Euro -False,28750,3.05,3.3069,3.3069,86,31,455.0,Dollar -False,2672,4.05,4.15871,4.15871,86,30,455.0,Dollar -True,322,3.95,3.90424,3.90424,86,23,455.0,Pound -True,860,4.13636,4.17232,4.17232,86,29,455.0,Euro -True,4257,3.84906,3.93201,3.93201,86,17,455.0,Dollar -False,1296,4.025,4.01711,4.01711,86,34,455.0,Euro -True,1027,4.11111,4.07603,4.07603,86,21,455.0,Pound -True,411,4.7,4.75028,4.75028,86,29,455.0,Pound -False,565,3.8,3.8164,3.8164,86,19,455.0,Pound -True,6108,4.25,4.16524,4.16524,86,45,455.0,Dollar -False,335,3.65,3.38544,3.38544,86,11,455.0,Euro -True,511,4.2,4.14785,4.14785,86,14,455.0,Euro -False,975,4.5,4.49707,4.49707,86,15,455.0,Pound -False,1435,3.95,4.0675,4.0675,86,59,455.0,Euro -False,419,4.575,4.56545,4.56545,87,43,455.0,Euro -False,890,4.25,4.20688,4.20688,85,54,455.0,Pound -True,2401,4.25,4.23755,4.23755,85,16,455.0,Euro -True,8922,2.75,2.74957,2.74957,85,12,455.0,Dollar -True,779,3.9,3.93949,3.93949,85,13,455.0,Dollar -True,20896,3.89474,4.11666,4.11666,85,22,455.0,Euro -False,232,4.59412,4.62106,4.62106,88,15,455.0,Dollar -False,873,4.0,3.89532,3.89532,85,31,455.0,Euro -True,1312,4.35,4.333,4.333,85,16,455.0,Euro -True,1179,4.25,4.27884,4.27884,85,51,455.0,Dollar -False,3535,3.5,3.77282,3.77282,85,19,455.0,Dollar -True,6352,4.15,4.28249,4.28249,85,21,455.0,Euro -True,416,4.79167,4.77679,4.77679,85,16,455.0,Dollar -False,1436,4.75,4.80692,4.80692,85,13,455.0,Pound -False,18199,3.05,3.32392,3.32392,85,9,455.0,Euro -True,308,4.5,4.48037,4.48037,85,32,455.0,Pound -True,6941,2.65,2.85687,2.85687,85,53,455.0,Pound -False,1185,4.7,4.70169,4.70169,85,17,455.0,Pound -False,226,4.47222,4.43672,4.43672,85,11,455.0,Pound -True,1299,3.95,3.9567,3.9567,85,35,455.0,Dollar -False,493,4.65,4.6542,4.6542,86,13,455.0,Dollar -False,5021,4.55,4.27814,4.27814,85,6,455.0,Dollar -True,6406,4.68235,4.69634,4.69634,87,51,455.0,Euro -True,322,4.4375,4.49498,4.49498,86,27,455.0,Dollar -False,680,4.66667,4.63632,4.63632,85,44,455.0,Pound -True,408,4.15,4.16486,4.16486,85,23,455.0,Pound -False,716,4.47143,4.44134,4.44134,85,37,455.0,Pound -False,6147,3.4,3.45174,3.45174,84,28,455.0,Dollar -True,300,4.7,4.66565,4.66565,84,12,455.0,Euro -False,1286,2.65,2.55554,2.55554,84,8,455.0,Dollar -False,474,4.46053,4.42412,4.42412,84,17,455.0,Euro -False,199,3.8209,3.85092,3.85092,84,29,455.0,Dollar -True,1075,4.47727,4.37376,4.37376,84,50,455.0,Dollar -False,12215,3.03125,3.01447,3.01447,84,5,455.0,Dollar -False,4633,4.33333,4.3993,4.3993,84,12,455.0,Dollar -False,3047,4.32353,4.32646,4.32646,84,112,455.0,Euro -True,1726,4.45,4.35781,4.35781,84,34,455.0,Euro -False,340,4.75,4.7137,4.7137,84,23,455.0,Dollar -False,4155,4.35,4.49134,4.49134,84,29,455.0,Euro -False,6312,3.55,3.51761,3.51761,84,33,455.0,Pound -False,6708,3.85556,3.85275,3.85275,86,61,455.0,Pound -True,11741,4.32692,4.42829,4.42829,84,57,455.0,Euro -False,698,3.6,3.58949,3.58949,84,45,455.0,Pound -False,272,4.35,4.36192,4.36192,84,20,455.0,Dollar -True,1201,4.0,4.01228,4.01228,84,17,455.0,Dollar -True,363,4.1875,4.14823,4.14823,84,15,455.0,Dollar -False,6906,4.16667,4.16843,4.16843,84,458,455.0,Pound -False,484,3.33333,3.2593,3.2593,84,34,455.0,Euro -True,3088,4.15,4.23555,4.23555,84,22,468.0,Euro -True,2727,3.7381,3.73927,3.73927,84,47,455.0,Pound -False,343,4.31482,4.33653,4.33653,83,26,455.0,Euro -False,235,3.61111,3.65181,3.65181,83,17,455.0,Euro -False,716,4.55,4.55493,4.55493,83,12,455.0,Dollar -True,558,3.75,3.66886,3.66886,83,27,468.0,Euro -True,882,4.2,4.15429,4.15429,83,44,455.0,Dollar -True,2539,3.75,3.7575,3.7575,83,51,455.0,Dollar -True,336,4.25,4.49873,4.49873,84,28,455.0,Dollar -True,619,4.25,4.22313,4.22313,83,16,455.0,Euro -False,804,3.95,4.0003,4.0003,84,28,455.0,Euro -True,20217,4.28571,4.25612,4.25612,83,14,520.0,Dollar -False,402,4.14286,4.05392,4.05392,83,24,455.0,Pound -False,1264,4.65,4.65834,4.65834,83,18,455.0,Pound -False,230,4.33333,4.33473,4.33473,83,8,455.0,Dollar -False,915,4.15278,3.9309,3.9309,83,29,455.0,Pound -True,379,4.15,4.13428,4.13428,83,49,455.0,Euro -True,257,4.43902,4.49462,4.49462,83,15,455.0,Euro -True,489,4.02273,4.0694,4.0694,84,17,455.0,Euro -False,9714,4.32353,4.44148,4.44148,83,212,455.0,Dollar -True,1496,3.55,3.5554,3.5554,83,26,455.0,Dollar -False,20975,4.31452,4.32282,4.32282,83,12,455.0,Euro -True,1890,4.35,4.37973,4.37973,82,22,455.0,Dollar -False,442,4.5,4.56141,4.56141,82,40,455.0,Euro -False,373,3.9,3.86993,3.86993,82,25,455.0,Pound -True,373,4.57812,4.5679,4.5679,82,24,455.0,Dollar -True,666,4.91525,4.90006,4.90006,82,62,455.0,Euro -True,15284,3.88415,3.85431,3.85431,82,13,455.0,Euro -False,870,3.6,3.42124,3.42124,82,16,455.0,Euro -False,2734,3.9,3.88523,3.88523,82,27,455.0,Euro -False,3698,4.2,3.94032,3.94032,82,34,455.0,Pound -True,593,4.45,4.46682,4.46682,82,6,455.0,Dollar -True,526,3.9375,4.04758,4.04758,82,0,455.0,Dollar -False,8694,4.04878,4.08129,4.08129,82,15,455.0,Pound -True,415,3.55,3.42755,3.42755,82,15,455.0,Dollar -True,4140,4.15,4.15827,4.15827,82,24,455.0,Euro -True,15488,4.05,3.88058,3.88058,88,16,455.0,Pound -True,843,4.19444,4.17347,4.17347,82,32,455.0,Euro -False,14592,4.08333,4.11475,4.11475,82,30,455.0,Dollar -False,675,4.4,4.42767,4.42767,82,58,455.0,Dollar -False,875,3.55,3.5216,3.5216,82,8,700.0,Euro -True,1750,4.55,4.52778,4.52778,82,92,455.0,Dollar -True,2674,4.05,4.25583,4.25583,82,24,455.0,Dollar -True,3036,4.4,4.34649,4.34649,82,42,455.0,Euro -False,488,3.69231,3.71599,3.71599,82,69,455.0,Pound -True,1748,4.4,4.44612,4.44612,82,13,455.0,Pound -True,13470,4.30488,4.39685,4.39685,82,32,455.0,Dollar -True,363,4.1,4.11809,4.11809,82,47,455.0,Dollar -False,1467,4.52778,4.50588,4.50588,81,95,455.0,Pound -True,975,3.6,3.52429,3.52429,81,13,455.0,Pound -True,3083,3.9,3.86076,3.86076,81,48,455.0,Dollar -False,619,4.0,3.90928,3.90928,81,12,455.0,Dollar -True,5881,4.05,3.9872,3.9872,81,15,455.0,Euro -True,9649,3.9,3.85532,3.85532,81,25,455.0,Euro -True,1832,4.55,4.55,4.55,81,92,455.0,Euro -True,314,3.83333,3.78322,3.78322,81,13,455.0,Dollar -False,968,3.95,3.98295,3.98295,81,21,455.0,Euro -False,177,4.35,4.31268,4.31268,81,38,455.0,Euro -True,11357,3.95,4.1861,4.1861,81,36,455.0,Euro -True,329,4.2,4.19676,4.19676,80,52,455.0,Pound -True,792,4.95,4.94707,4.94707,80,20,455.0,Dollar -False,1457,4.0,4.09006,4.09006,80,61,455.0,Euro -True,436,3.5,3.38212,3.38212,80,6,455.0,Dollar -False,27260,3.75,3.53242,3.53242,80,16,455.0,Euro -False,398,4.34375,4.29791,4.29791,80,88,455.0,Euro -True,168,4.05263,4.10215,4.10215,80,5,455.0,Euro -True,2092,4.51562,4.58912,4.58912,80,25,455.0,Pound -True,425,3.75,3.83541,3.83541,83,0,455.0,Dollar -False,19076,4.30625,4.3788,4.3788,81,40,455.0,Euro -False,560,3.45,3.26682,3.26682,80,11,800.0,Dollar -False,482,4.5,4.48565,4.48565,80,23,455.0,Euro -True,6476,3.8,3.63394,3.63394,80,45,488.0,Pound -True,6132,4.05,4.46142,4.46142,80,45,455.0,Dollar -True,2650,4.5,4.53905,4.53905,80,25,455.0,Pound -True,583,3.55,3.55997,3.55997,80,30,455.0,Pound -True,458,4.625,4.65247,4.65247,80,34,455.0,Euro -False,5494,4.15,4.36289,4.36289,80,19,700.0,Dollar -True,184,4.54167,4.54334,4.54334,80,34,455.0,Euro -True,345,4.29412,4.28911,4.28911,80,18,700.0,Dollar -True,1019,4.3,4.31809,4.31809,80,29,455.0,Euro -True,3672,4.15,4.18831,4.18831,80,11,455.0,Euro -True,11090,4.48148,4.54226,4.54226,79,22,455.0,Pound -False,1387,3.7,3.60008,3.60008,79,15,455.0,Euro -True,694,4.25,4.19881,4.19881,79,26,455.0,Dollar -True,1148,3.85,3.89928,3.89928,79,10,455.0,Euro -False,292,4.45652,4.44845,4.44845,79,44,455.0,Euro -False,211,4.21875,4.2435,4.2435,80,12,455.0,Pound -False,1828,4.2,4.2015,4.2015,79,9,455.0,Dollar -False,9498,4.05,4.14224,4.14224,79,63,455.0,Dollar -True,191,4.32353,4.33431,4.33431,79,8,455.0,Pound -True,3488,4.05,3.73638,3.73638,79,21,455.0,Euro -True,19263,3.84615,3.66961,3.66961,79,6,455.0,Dollar -False,584,3.65,3.71297,3.71297,79,22,455.0,Euro -True,833,4.6,4.26534,4.26534,80,9,455.0,Euro -False,3248,4.15,4.18004,4.18004,79,9,455.0,Dollar -False,2918,3.8,3.84712,3.84712,79,10,455.0,Pound -False,926,4.05,4.02003,4.02003,79,17,455.0,Dollar -True,5055,4.65,4.53944,4.53944,79,49,455.0,Dollar -True,736,3.7,3.67413,3.67413,79,37,455.0,Euro -False,566,4.05,4.06401,4.06401,79,48,455.0,Euro -False,236,4.5,4.45709,4.45709,80,36,455.0,Euro -False,18061,4.0,4.20649,4.20649,79,6,455.0,Pound -False,1795,3.9,3.70254,3.70254,79,22,455.0,Dollar -False,405,3.45,3.49326,3.49326,79,30,455.0,Dollar -False,2736,4.25,4.28674,4.28674,78,36,455.0,Dollar -True,1171,3.75,3.69554,3.69554,79,16,455.0,Euro -False,778,3.85,4.02068,4.02068,78,8,455.0,Dollar -True,278,4.15,4.18222,4.18222,78,37,455.0,Euro -True,2722,3.7,3.60704,3.60704,78,55,455.0,Dollar -True,206,3.91667,3.92848,3.92848,78,27,455.0,Pound -False,2261,4.11818,4.14664,4.14664,78,9,455.0,Euro -True,324,4.47959,4.49511,4.49511,78,21,455.0,Euro -False,435,4.0,3.95549,3.95549,78,20,455.0,Euro -True,404,3.95,3.8378,3.8378,78,17,455.0,Pound -True,1441,4.1,4.16453,4.16453,78,35,455.0,Euro -False,511,4.05,4.17979,4.17979,78,28,455.0,Euro -True,1026,4.4,4.42971,4.42971,79,9,455.0,Dollar -True,17052,4.15,4.07501,4.07501,78,54,455.0,Euro -False,1310,4.55,4.55457,4.55457,78,25,455.0,Pound -True,11298,3.3,3.03258,3.03258,78,33,455.0,Euro -False,360,4.33333,4.23595,4.23595,78,33,3200.0,Pound -True,4295,4.1,4.05723,4.05723,78,103,455.0,Pound -True,3828,4.25,4.39,4.39,78,39,455.0,Euro -True,261,4.0625,4.03418,4.03418,79,9,455.0,Pound -False,211,3.2,3.14682,3.14682,78,5,455.0,Dollar -False,21152,3.35,3.42193,3.42193,78,7,455.0,Euro -True,6259,3.65,3.74246,3.74246,78,44,455.0,Dollar -False,334,3.65,3.76793,3.76793,78,34,455.0,Dollar -True,691,4.2,4.11684,4.11684,78,55,520.0,Euro -False,8357,4.55,4.56077,4.56077,78,97,455.0,Pound -True,5529,4.34091,4.29998,4.29998,78,79,455.0,Dollar -True,10099,4.07051,4.13718,4.13718,78,20,455.0,Dollar -True,307,4.02941,3.9376,3.9376,77,0,455.0,Pound -True,495,3.76923,3.80813,3.80813,77,116,455.0,Pound -False,3777,4.1,4.20088,4.20088,77,18,455.0,Euro -False,237,3.55,3.68655,3.68655,78,7,455.0,Pound -False,1747,4.7,4.6648,4.6648,77,5,455.0,Dollar -False,1104,4.05844,4.08298,4.08298,77,13,455.0,Pound -False,622,4.55,4.48789,4.48789,77,8,455.0,Euro -True,7641,3.35,3.24082,3.24082,77,19,455.0,Dollar -False,353,4.05882,4.06389,4.06389,77,270,481.0,Dollar -True,5409,4.45,4.52068,4.52068,77,10,455.0,Pound -False,1189,4.4,4.40374,4.40374,77,20,455.0,Dollar -True,1272,4.35,4.41547,4.41547,77,21,455.0,Dollar -True,412,3.76923,3.67463,3.67463,77,17,455.0,Pound -False,361,4.25,4.32147,4.32147,77,31,455.0,Euro -True,4271,4.10417,4.04312,4.04312,77,36,455.0,Euro -True,341,4.72917,4.64714,4.64714,77,0,3200.0,Euro -True,7836,3.95,3.87426,3.87426,77,77,455.0,Pound -True,796,4.2,4.16648,4.16648,77,12,455.0,Dollar -False,1364,4.0,3.97204,3.97204,77,18,455.0,Euro -True,1692,4.0,4.00095,4.00095,77,48,455.0,Dollar -True,2360,3.7,3.6354,3.6354,77,15,455.0,Dollar -True,226,4.35714,4.34502,4.34502,78,17,455.0,Dollar -False,5295,4.55882,4.56117,4.56117,78,17,455.0,Dollar -True,1559,4.3,4.2702,4.2702,77,25,455.0,Euro -False,1204,4.4,4.35003,4.35003,77,27,455.0,Dollar -True,494,4.5,4.5212,4.5212,77,5,455.0,Euro -True,286,4.18421,4.19382,4.19382,77,13,455.0,Euro -True,679,4.40909,4.40026,4.40026,76,249,455.0,Dollar -False,1820,4.8,4.74149,4.74149,75,53,455.0,Pound -True,6492,4.25,4.03881,4.03881,76,45,455.0,Euro -False,300,4.3,4.28482,4.28482,76,12,455.0,Euro -True,478,3.95,3.92189,3.92189,76,19,468.0,Dollar -False,273,4.15,4.03539,4.03539,76,46,455.0,Dollar -False,256,4.11111,4.15982,4.15982,76,10,455.0,Euro -True,245,4.63043,4.60185,4.60185,77,21,455.0,Euro -True,11131,4.55,4.50304,4.50304,76,26,455.0,Dollar -False,398,4.05,4.21869,4.21869,76,49,455.0,Pound -False,590,3.75,3.60416,3.60416,76,43,468.0,Euro -False,2709,4.0,3.994,3.994,76,25,455.0,Pound -True,299,4.33333,4.38087,4.38087,76,20,455.0,Dollar -False,7026,4.33036,4.33819,4.33819,76,26,455.0,Dollar -False,2832,4.25,4.32885,4.32885,76,52,455.0,Pound -False,3285,3.85,3.74719,3.74719,76,16,455.0,Dollar -False,887,3.95,3.94302,3.94302,75,47,455.0,Dollar -True,9448,4.35417,4.36784,4.36784,75,31,455.0,Euro -False,422,4.2,4.26282,4.26282,75,27,455.0,Dollar -False,827,4.2,4.15315,4.15315,76,44,455.0,Euro -True,1838,4.45,4.4086,4.4086,75,92,455.0,Euro -False,141,4.0,4.03561,4.03561,75,52,455.0,Dollar -True,364,3.95,4.06771,4.06771,75,9,455.0,Dollar -True,13917,4.36275,4.36576,4.36576,75,9,455.0,Euro -True,1586,3.9,3.99918,3.99918,75,19,455.0,Pound -False,3198,4.0,4.15939,4.15939,75,30,455.0,Pound -True,12718,4.58065,4.51405,4.51405,75,63,455.0,Pound -True,4203,4.37879,4.06645,4.06645,75,27,455.0,Pound -False,220,3.75,3.75237,3.75237,75,13,455.0,Euro -False,354,2.75,2.71519,2.71519,75,43,455.0,Dollar -True,359,4.3,4.26238,4.26238,75,41,455.0,Dollar -False,5174,3.65,3.5339,3.5339,75,18,455.0,Dollar -False,314,3.35,3.18663,3.18663,75,31,455.0,Pound -True,291,4.84615,4.86332,4.86332,76,22,462.0,Euro -False,440,3.95,3.98103,3.98103,75,19,455.0,Dollar -True,23060,4.3,4.54611,4.54611,75,64,455.0,Euro -True,1734,3.9,3.95395,3.95395,75,10,455.0,Pound -False,965,4.35,4.38618,4.38618,75,32,455.0,Euro -False,3212,4.5,4.46668,4.46668,75,24,455.0,Dollar -False,9064,4.05,4.09384,4.09384,75,65,455.0,Pound -True,5728,3.6,3.62947,3.62947,75,16,455.0,Dollar -True,566,4.79167,4.79325,4.79325,75,68,455.0,Euro -False,363,3.5,3.46374,3.46374,74,7,455.0,Euro -True,2530,4.75,4.6633,4.6633,74,47,455.0,Dollar -True,412,4.4537,4.46512,4.46512,75,164,455.0,Dollar -False,253,4.1,4.04269,4.04269,74,17,455.0,Euro -False,346,4.58784,4.5063,4.5063,75,11,455.0,Pound -True,4115,3.85,3.8198,3.8198,74,39,455.0,Dollar -True,3231,3.8,3.62052,3.62052,74,11,455.0,Euro -True,4333,3.55,3.53518,3.53518,74,12,455.0,Pound -True,274,3.91667,4.0071,4.0071,74,43,455.0,Dollar -True,2995,4.9,4.88591,4.88591,74,30,455.0,Dollar -True,1699,4.46667,4.55751,4.55751,75,49,455.0,Pound -False,4156,4.2,3.94456,3.94456,74,7,455.0,Pound -False,218,4.54167,4.52583,4.52583,75,26,455.0,Pound -True,1026,4.175,4.20691,4.20691,76,15,455.0,Dollar -False,5723,3.6,3.68102,3.68102,74,14,455.0,Dollar -True,673,4.4,4.33125,4.33125,74,43,455.0,Euro -False,6330,4.15,4.13431,4.13431,74,24,455.0,Euro -True,241,4.3,4.33381,4.33381,74,13,455.0,Euro -True,10991,3.84091,3.80016,3.80016,74,11,455.0,Pound -True,217,4.35,4.34493,4.34493,74,26,455.0,Euro -True,13244,4.07692,4.32866,4.32866,74,36,455.0,Pound -True,2410,3.55,3.47115,3.47115,73,6,468.0,Euro -False,3719,4.1,3.92037,3.92037,73,23,455.0,Dollar -False,547,4.65068,4.55979,4.55979,74,77,455.0,Pound -False,7992,4.15116,4.26763,4.26763,73,23,455.0,Dollar -False,5560,3.2,3.09543,3.09543,73,7,455.0,Pound -False,1265,3.9,3.80626,3.80626,73,18,455.0,Euro -False,275,4.1,3.99914,3.99914,73,20,455.0,Dollar -False,2094,4.35,4.39671,4.39671,73,66,455.0,Pound -False,6200,3.9,4.1454,4.1454,73,16,455.0,Dollar -False,5432,4.65,4.7941,4.7941,74,52,455.0,Euro -True,649,4.8,4.8056,4.8056,73,47,455.0,Euro -True,1359,4.5,4.47732,4.47732,73,8,455.0,Dollar -False,383,4.27083,4.20659,4.20659,75,19,455.0,Pound -True,1509,3.7,3.67647,3.67647,73,41,455.0,Dollar -False,22173,4.04795,4.15268,4.15268,73,46,455.0,Euro -False,445,3.75,3.7977,3.7977,73,49,520.0,Pound -True,621,3.5,3.7459,3.7459,73,0,455.0,Pound -True,7663,3.35,3.19614,3.19614,73,59,455.0,Euro -True,3927,2.92308,2.93964,2.93964,73,46,455.0,Dollar -True,1618,4.78125,4.76165,4.76165,74,40,455.0,Dollar -True,217,3.95,3.9616,3.9616,73,8,468.0,Euro -False,2665,3.45,3.36086,3.36086,73,12,455.0,Euro -False,645,3.8,3.73286,3.73286,72,31,455.0,Pound -True,489,4.16667,4.10347,4.10347,72,20,455.0,Dollar -True,1996,4.15,4.07474,4.07474,72,129,455.0,Euro -False,382,4.2,4.18647,4.18647,72,28,455.0,Dollar -False,3749,3.8,3.26728,3.26728,72,25,455.0,Dollar -False,505,4.3,4.35157,4.35157,72,45,455.0,Euro -False,2753,4.6,4.61709,4.61709,72,17,455.0,Pound -False,484,4.25,4.21402,4.21402,72,75,455.0,Pound -False,809,4.35,4.37385,4.37385,72,10,455.0,Pound -True,1418,4.45,4.47633,4.47633,72,59,455.0,Euro -False,342,3.88462,3.86749,3.86749,72,20,455.0,Euro -True,5103,3.96875,4.02106,4.02106,72,20,455.0,Dollar -False,291,4.4,4.39052,4.39052,72,46,455.0,Pound -True,15030,3.91667,3.95674,3.95674,72,60,455.0,Dollar -False,977,4.25,4.18521,4.18521,72,44,455.0,Pound -False,266,2.65,2.56658,2.56658,72,7,455.0,Pound -True,631,4.6,4.56576,4.56576,72,42,455.0,Pound -False,1966,4.25,4.20267,4.20267,72,69,455.0,Euro -True,4462,4.5,4.5493,4.5493,72,177,455.0,Pound -False,21595,4.04861,4.05731,4.05731,74,11,455.0,Dollar -False,624,4.55,4.5653,4.5653,72,42,455.0,Euro -False,791,4.4,4.37448,4.37448,72,24,455.0,Pound -False,3628,3.75,3.8214,3.8214,72,40,455.0,Euro -False,1246,4.3,4.55799,4.55799,72,13,455.0,Dollar -True,2973,3.7,3.66887,3.66887,72,33,455.0,Dollar -False,540,4.5,4.49234,4.49234,72,27,468.0,Euro -False,1870,4.7,4.69206,4.69206,71,42,455.0,Pound -True,2148,4.75,4.73907,4.73907,71,31,455.0,Dollar -True,150,4.05,4.13902,4.13902,71,37,455.0,Pound -True,2406,4.0,4.15762,4.15762,71,39,455.0,Pound -False,28530,4.08333,4.019,4.019,71,37,455.0,Euro -False,1252,4.05,3.92022,3.92022,71,12,455.0,Euro -True,11339,4.25,4.31068,4.31068,71,29,455.0,Euro -True,508,5.0,5.0,5.0,71,26,455.0,Euro -True,646,4.4,4.38271,4.38271,71,22,455.0,Pound -False,853,4.56667,4.55983,4.55983,71,22,455.0,Euro -False,401,4.2,4.22954,4.22954,71,37,455.0,Euro -True,8658,3.6,2.59673,2.59673,71,53,455.0,Pound -True,775,4.2,4.19585,4.19585,71,12,520.0,Dollar -True,14880,3.9898,4.0864,4.0864,74,31,455.0,Pound -True,4456,4.15,4.39348,4.39348,71,24,455.0,Pound -True,169,4.04,4.00723,4.00723,71,11,455.0,Euro -False,739,4.65,4.65278,4.65278,71,92,455.0,Pound -True,1262,4.15,4.31077,4.31077,71,55,455.0,Euro -False,361,3.65,3.63526,3.63526,71,11,455.0,Pound -True,418,4.175,4.14566,4.14566,71,35,455.0,Pound -True,378,3.95,3.89287,3.89287,71,57,455.0,Pound -False,5332,3.75,3.67238,3.67238,71,22,455.0,Pound -True,1792,3.4,3.25434,3.25434,71,92,455.0,Dollar -True,450,4.85,4.86006,4.86006,71,12,455.0,Pound -False,771,3.9,3.90571,3.90571,70,25,455.0,Pound -True,516,4.65,4.63702,4.63702,70,32,455.0,Euro -False,246,4.0,3.94708,3.94708,70,9,455.0,Pound -False,202,3.40909,3.48867,3.48867,71,26,455.0,Pound -True,243,4.12069,4.02843,4.02843,70,13,455.0,Dollar -False,5152,4.3,4.30757,4.30757,70,8,455.0,Dollar -True,9237,4.42,4.34906,4.34906,70,27,455.0,Dollar -False,649,3.6,3.584,3.584,70,34,455.0,Pound -False,389,4.35,4.33573,4.33573,70,26,455.0,Euro -True,1180,4.09091,3.76738,3.76738,70,0,520.0,Euro -True,1429,3.55,3.51249,3.51249,70,67,455.0,Dollar -True,2685,4.5,4.48456,4.48456,70,47,455.0,Euro -True,1881,4.4,4.33552,4.33552,70,28,455.0,Euro -False,165,4.47368,4.48045,4.48045,70,16,455.0,Pound -False,766,3.45,3.4581,3.4581,70,15,455.0,Euro -True,1737,4.1,4.36671,4.36671,70,92,455.0,Euro -True,395,4.25,4.26756,4.26756,70,17,455.0,Dollar -False,370,3.95,3.9247,3.9247,70,0,455.0,Pound -True,457,4.05,4.04697,4.04697,70,29,455.0,Euro -False,451,4.35,4.29975,4.29975,71,6,455.0,Pound -False,469,4.15,4.04647,4.04647,70,33,455.0,Euro -False,1555,4.4,4.44788,4.44788,70,56,455.0,Pound -False,5025,3.75,3.71628,3.71628,70,19,455.0,Dollar -True,6023,4.15,4.22797,4.22797,70,9,455.0,Dollar -False,4045,4.27273,4.39913,4.39913,70,28,455.0,Euro -False,3662,4.3,4.27386,4.27386,69,37,455.0,Pound -False,124,3.95,3.88146,3.88146,69,27,455.0,Dollar -True,4710,4.40476,4.43461,4.43461,69,28,455.0,Dollar -False,386,3.79167,3.70504,3.70504,69,26,455.0,Pound -True,598,4.41026,4.37119,4.37119,69,61,455.0,Dollar -True,507,4.9,4.8899,4.8899,69,48,455.0,Dollar -False,442,4.4,4.39906,4.39906,69,14,455.0,Pound -False,22758,4.09524,4.16343,4.16343,69,9,455.0,Pound -False,8726,3.9,3.65006,3.65006,69,22,455.0,Pound -False,9414,3.55,3.856,3.856,69,10,455.0,Dollar -False,1561,4.13636,3.73263,3.73263,69,106,455.0,Pound -False,391,4.75,4.70549,4.70549,69,46,455.0,Pound -False,466,4.6,4.53976,4.53976,69,34,455.0,Dollar -False,851,4.75,4.63967,4.63967,69,40,455.0,Dollar -True,201,4.1,3.86335,3.86335,68,14,455.0,Dollar -False,201,4.11765,4.10834,4.10834,68,30,455.0,Euro -True,213,4.3,4.3431,4.3431,68,5,468.0,Euro -True,772,4.75,4.79864,4.79864,68,35,455.0,Euro -True,1266,4.4,4.5021,4.5021,68,24,455.0,Euro -True,960,3.65,3.74481,3.74481,68,34,455.0,Dollar -True,2164,3.9,4.16316,4.16316,68,55,455.0,Euro -False,6031,4.75,4.7367,4.7367,68,24,455.0,Pound -True,476,4.2,4.19848,4.19848,68,16,455.0,Dollar -False,309,4.05,3.98958,3.98958,68,5,455.0,Pound -False,1476,4.0,3.91207,3.91207,68,14,455.0,Dollar -True,300,4.15,4.17653,4.17653,68,26,455.0,Euro -True,1286,4.3,4.30621,4.30621,68,83,455.0,Euro -False,1680,4.65,4.66266,4.66266,68,92,455.0,Euro -True,440,4.15,4.17876,4.17876,68,39,455.0,Pound -True,2902,4.25,4.2588,4.2588,68,18,455.0,Euro -False,2896,4.95,4.94385,4.94385,68,13,455.0,Dollar -False,2765,3.75,3.66918,3.66918,68,37,455.0,Pound -False,3590,4.1,3.98705,3.98705,68,63,455.0,Dollar -False,487,3.9,3.98609,3.98609,69,82,455.0,Pound -False,8076,2.95,2.59809,2.59809,68,9,455.0,Dollar -False,231,4.60345,4.56834,4.56834,68,32,455.0,Pound -True,4324,3.7,3.72104,3.72104,68,12,455.0,Euro -False,268,4.25,4.31141,4.31141,68,12,455.0,Dollar -False,320,4.54545,4.53293,4.53293,68,26,455.0,Dollar -False,964,4.45,4.37317,4.37317,68,13,455.0,Dollar -False,231,4.53676,4.53052,4.53052,69,77,455.0,Dollar -False,397,3.2,3.25462,3.25462,69,41,455.0,Pound -False,1756,4.5,4.47709,4.47709,68,316,455.0,Dollar -False,388,3.6,3.85137,3.85137,68,46,455.0,Pound -False,564,3.15,2.98522,2.98522,67,14,455.0,Pound -False,304,3.8,3.88258,3.88258,67,19,455.0,Dollar -True,225,3.34615,3.42565,3.42565,67,19,720.0,Euro -False,314,3.3,3.28707,3.28707,67,38,455.0,Euro -True,230,4.44118,4.42763,4.42763,67,17,455.0,Pound -True,1437,4.85,4.71516,4.71516,67,15,455.0,Pound -False,8487,3.7,3.78925,3.78925,67,8,455.0,Euro -False,524,4.4,4.30691,4.30691,67,48,455.0,Dollar -False,11517,4.46591,4.28121,4.28121,68,21,455.0,Pound -False,136,4.88235,4.87363,4.87363,67,16,3200.0,Pound -False,527,4.65217,4.63052,4.63052,67,31,455.0,Pound -True,842,3.9,3.95446,3.95446,67,15,455.0,Euro -False,323,4.7,4.66414,4.66414,67,11,455.0,Dollar -True,2632,4.25,4.38083,4.38083,67,10,455.0,Pound -False,379,3.95,3.96059,3.96059,67,13,455.0,Euro -True,229,4.73077,4.79327,4.79327,68,62,455.0,Pound -False,185,3.57143,3.70582,3.70582,67,16,455.0,Pound -False,384,4.8,4.83832,4.83832,67,26,455.0,Pound -True,5933,4.45,4.47096,4.47096,67,9,455.0,Pound -True,535,3.7,3.66975,3.66975,67,148,455.0,Pound -False,176,3.76923,3.74474,3.74474,67,18,455.0,Euro -True,3692,4.4,4.35223,4.35223,67,59,455.0,Euro -False,2983,4.4,4.38972,4.38972,67,25,455.0,Pound -False,3515,4.45,4.3505,4.3505,67,20,455.0,Euro -True,660,4.25,4.23637,4.23637,67,33,455.0,Euro -True,9765,3.65,3.94886,3.94886,67,17,455.0,Euro -False,371,4.75,4.71941,4.71941,67,47,455.0,Euro -False,1111,4.3,4.34361,4.34361,66,16,455.0,Dollar -False,1210,4.52,4.606,4.606,66,52,455.0,Pound -False,4755,4.05,3.97858,3.97858,66,14,455.0,Dollar -True,2014,3.6,3.27946,3.27946,66,19,455.0,Pound -False,7643,4.4,4.33914,4.33914,66,47,455.0,Dollar -False,307,4.25,4.36521,4.36521,66,26,455.0,Dollar -False,6309,2.05,2.07751,2.07751,66,7,455.0,Euro -False,759,4.35,4.3355,4.3355,67,34,455.0,Euro -True,1293,4.3,4.36741,4.36741,66,12,455.0,Pound -False,1603,4.05,3.97519,3.97519,66,15,455.0,Pound -False,2779,3.9,3.69716,3.69716,66,57,455.0,Pound -True,1107,3.9,4.14199,4.14199,66,19,455.0,Euro -True,9888,3.15,3.47573,3.47573,66,32,455.0,Euro -True,1819,4.35,4.11281,4.11281,66,32,455.0,Euro -True,1638,3.85,3.76019,3.76019,66,75,455.0,Dollar -True,753,4.0,3.96801,3.96801,66,158,462.0,Dollar -True,2173,4.25,4.01714,4.01714,66,38,455.0,Dollar -True,285,4.3,4.37658,4.37658,66,8,455.0,Euro -True,2127,3.9,3.93373,3.93373,66,42,455.0,Euro -False,178,4.08333,4.10801,4.10801,66,36,455.0,Pound -False,4161,3.65,3.55426,3.55426,66,5,455.0,Pound -True,424,4.3,4.37493,4.37493,66,36,455.0,Dollar -False,186,3.5,3.38361,3.38361,66,33,455.0,Dollar -True,225,4.33333,4.29483,4.29483,66,13,455.0,Pound -True,317,4.45,4.42744,4.42744,65,90,455.0,Pound -True,208,4.22115,4.18274,4.18274,65,16,455.0,Dollar -False,1996,4.4,4.54481,4.54481,65,14,455.0,Dollar -True,314,4.33019,4.34325,4.34325,65,60,455.0,Euro -True,4549,3.85,3.68515,3.68515,65,39,455.0,Dollar -False,340,3.85,3.93855,3.93855,65,29,455.0,Dollar -True,383,4.43333,4.36921,4.36921,66,5,455.0,Pound -False,376,3.8,3.71413,3.71413,65,11,455.0,Pound -True,1528,4.5,4.49468,4.49468,65,21,455.0,Pound -False,5232,3.75,3.58861,3.58861,65,23,455.0,Euro -False,1002,3.35,3.29116,3.29116,65,29,455.0,Pound -False,286,4.46154,4.38251,4.38251,65,40,1920.0,Pound -False,2269,4.4,4.32707,4.32707,65,16,455.0,Dollar -False,2316,4.3,4.23373,4.23373,65,52,455.0,Euro -False,7273,4.15,4.44866,4.44866,65,32,455.0,Dollar -False,220,4.41429,4.42572,4.42572,66,16,455.0,Pound -False,405,4.36364,4.33559,4.33559,65,11,455.0,Dollar -True,4333,4.0,3.92897,3.92897,66,11,455.0,Pound -False,258,4.2,4.26406,4.26406,65,45,494.0,Pound -True,917,4.45,4.44978,4.44978,65,28,455.0,Dollar -True,305,4.04545,4.14605,4.14605,65,14,455.0,Euro -True,251,4.47059,4.25936,4.25936,65,24,455.0,Dollar -False,491,4.27778,4.41185,4.41185,65,56,2720.0,Pound -False,1667,4.55,4.51133,4.51133,65,10,455.0,Dollar -False,1049,4.0,4.01695,4.01695,65,39,455.0,Dollar -True,227,4.3,4.55098,4.55098,66,19,455.0,Pound -True,120,4.0,4.07524,4.07524,65,7,455.0,Euro -True,9541,4.25641,4.31309,4.31309,65,38,455.0,Euro -True,229,4.13636,4.28819,4.28819,65,16,455.0,Euro -True,382,3.7,3.83012,3.83012,64,29,455.0,Dollar -False,296,3.4,3.51521,3.51521,64,41,455.0,Pound -False,11627,3.91463,3.95001,3.95001,64,21,455.0,Dollar -False,1144,3.96078,3.99805,3.99805,64,22,455.0,Pound -False,1293,4.33333,4.33012,4.33012,64,110,455.0,Pound -True,5738,4.7,4.74214,4.74214,64,25,455.0,Dollar -True,202,4.3587,4.40238,4.40238,64,30,455.0,Pound -False,2167,4.45,4.34867,4.34867,64,18,455.0,Euro -False,269,3.6,3.35283,3.35283,64,17,455.0,Dollar -False,1237,3.55,3.67073,3.67073,64,11,455.0,Pound -True,578,4.35,4.33069,4.33069,64,13,455.0,Pound -False,451,4.5,4.44023,4.44023,64,53,455.0,Dollar -False,201,4.05,4.09566,4.09566,64,9,455.0,Dollar -True,566,4.0,4.22308,4.22308,64,28,455.0,Dollar -True,8041,3.7,3.66214,3.66214,64,15,455.0,Dollar -False,800,4.71429,4.72019,4.72019,64,42,455.0,Pound -False,453,4.5,4.45769,4.45769,64,13,455.0,Pound -False,10737,4.1,4.26181,4.26181,64,63,455.0,Euro -False,688,4.55,4.30312,4.30312,64,12,455.0,Pound -False,324,4.4375,4.33205,4.33205,64,112,455.0,Dollar -False,1407,4.375,4.30133,4.30133,64,34,455.0,Dollar -True,555,3.1,3.14757,3.14757,64,19,455.0,Euro -False,1953,4.05,3.93774,3.93774,64,211,455.0,Euro -True,1787,3.56667,2.96286,2.96286,64,31,455.0,Pound -True,1959,4.05,3.98926,3.98926,63,16,455.0,Euro -True,5971,4.3,4.59795,4.59795,63,15,455.0,Euro -True,5926,4.15,4.20175,4.20175,63,33,455.0,Dollar -False,7190,4.2,4.13207,4.13207,63,30,455.0,Pound -True,704,4.2,4.21073,4.21073,63,27,455.0,Euro -False,259,3.72727,3.70949,3.70949,63,33,455.0,Pound -True,1718,4.15,4.32738,4.32738,63,92,455.0,Pound -False,243,4.05,4.0321,4.0321,63,16,455.0,Dollar -False,8873,4.0,3.69829,3.69829,63,9,455.0,Euro -True,412,4.2,4.2406,4.2406,63,22,455.0,Pound -True,596,4.2,4.07357,4.07357,63,11,455.0,Euro -False,4114,4.2,4.13255,4.13255,63,13,455.0,Euro -True,325,3.85,4.22343,4.22343,63,6,455.0,Pound -True,2628,4.25,4.21945,4.21945,63,8,455.0,Pound -False,1130,4.55,4.33029,4.33029,63,26,455.0,Dollar -True,131,4.6,4.6213,4.6213,63,8,455.0,Pound -False,267,4.45238,4.41191,4.41191,63,38,455.0,Euro -True,175,4.35,4.35483,4.35483,63,35,455.0,Pound -True,1681,4.7,4.67069,4.67069,63,12,455.0,Dollar -True,1493,4.35,4.31442,4.31442,64,30,455.0,Euro -True,493,4.41667,4.37437,4.37437,63,41,800.0,Euro -False,262,3.75,3.7406,3.7406,63,28,455.0,Dollar -False,4133,3.65,3.71131,3.71131,63,12,455.0,Euro -False,1725,4.3,4.23968,4.23968,63,18,455.0,Euro -False,556,3.85,3.88057,3.88057,63,54,455.0,Euro -False,1344,4.55,4.43086,4.43086,63,39,455.0,Euro -False,270,4.04545,3.98845,3.98845,63,8,455.0,Dollar -True,183,4.72222,4.56008,4.56008,63,11,455.0,Euro -True,394,4.62698,4.61718,4.61718,65,57,455.0,Pound -True,2621,4.7,4.64691,4.64691,62,73,455.0,Pound -False,3105,4.3,4.24762,4.24762,62,121,455.0,Pound -False,5971,3.8,3.87434,3.87434,62,9,455.0,Euro -False,206,3.8,3.83422,3.83422,62,5,455.0,Pound -True,252,4.2381,4.34942,4.34942,62,21,455.0,Dollar -True,2061,4.0,3.94119,3.94119,62,15,455.0,Dollar -False,296,4.05,3.90745,3.90745,62,28,455.0,Pound -True,231,4.08065,4.12576,4.12576,62,0,455.0,Pound -True,9986,4.2,4.09631,4.09631,62,52,455.0,Dollar -False,259,4.55,4.4468,4.4468,62,44,455.0,Dollar -True,1241,4.5,4.40385,4.40385,62,115,480.0,Euro -False,1125,4.25,4.29604,4.29604,62,23,455.0,Dollar -False,12316,4.43396,4.42445,4.42445,62,0,1600.0,Pound -True,931,4.28125,4.20788,4.20788,62,39,455.0,Euro -False,3645,4.2,4.38985,4.38985,62,23,455.0,Euro -False,2554,3.9,3.8113,3.8113,62,46,455.0,Pound -True,312,4.5,4.48812,4.48812,62,25,455.0,Pound -True,851,4.3,4.31611,4.31611,62,25,455.0,Pound -False,1451,4.4,4.40055,4.40055,62,14,455.0,Dollar -False,3063,4.15,4.07267,4.07267,62,56,455.0,Euro -True,495,4.2,4.19634,4.19634,62,13,455.0,Euro -False,5401,3.85,3.95256,3.95256,62,31,455.0,Euro -False,288,3.9,3.65925,3.65925,62,10,455.0,Pound -False,250,3.5,3.47526,3.47526,62,23,455.0,Pound -True,686,3.65,3.70025,3.70025,62,23,455.0,Pound -True,263,3.8,3.59978,3.59978,62,16,455.0,Pound -True,349,4.05,4.18856,4.18856,62,43,455.0,Pound -False,302,3.65,3.61411,3.61411,62,6,455.0,Pound -True,335,4.4,4.22005,4.22005,62,38,455.0,Dollar -False,6030,4.4,4.34259,4.34259,61,20,455.0,Dollar -True,143,4.0,3.87724,3.87724,62,14,455.0,Euro -True,505,3.9,3.93538,3.93538,61,19,455.0,Dollar -True,18552,4.07895,3.93772,3.93772,62,139,455.0,Pound -True,2470,4.1,3.98952,3.98952,61,15,455.0,Euro -True,1444,4.15,4.08032,4.08032,61,37,455.0,Dollar -True,2848,3.95,3.92503,3.92503,61,39,455.0,Dollar -True,1867,4.05,3.91132,3.91132,61,15,455.0,Pound -False,396,4.6,4.61037,4.61037,61,8,455.0,Pound -True,665,4.4,4.4807,4.4807,61,45,455.0,Euro -True,490,4.59677,4.60752,4.60752,61,47,455.0,Pound -False,1206,4.4,4.1818,4.1818,61,44,455.0,Dollar -False,1477,4.45,4.47446,4.47446,61,31,455.0,Dollar -False,1175,4.25,4.30278,4.30278,61,26,455.0,Pound -False,1500,4.4,4.41456,4.41456,61,14,455.0,Euro -True,13342,3.64754,3.55996,3.55996,62,10,455.0,Euro -True,268,4.25,4.19833,4.19833,61,0,455.0,Pound -True,17295,4.15909,3.86417,3.86417,61,152,455.0,Euro -False,454,4.9,4.92562,4.92562,61,15,455.0,Dollar -False,178,4.05,4.13371,4.13371,61,11,455.0,Dollar -True,374,4.61538,4.60355,4.60355,61,19,455.0,Pound -True,19859,3.5,3.29352,3.29352,61,17,455.0,Pound -False,2183,4.0,4.0294,4.0294,61,15,455.0,Dollar -False,812,3.95,3.60393,3.60393,61,13,455.0,Pound -True,327,4.05,4.19692,4.19692,61,24,455.0,Pound -False,291,3.9,3.78424,3.78424,61,27,455.0,Euro -False,11848,3.9,4.07127,4.07127,60,23,455.0,Dollar -True,3008,4.05,4.09666,4.09666,60,11,455.0,Pound -False,5818,3.9,3.74163,3.74163,60,30,455.0,Dollar -True,2880,3.55,3.49641,3.49641,60,18,455.0,Dollar -False,12211,4.06667,4.1757,4.1757,60,184,455.0,Dollar -False,111,3.9375,3.86045,3.86045,60,7,2240.0,Euro -False,414,4.52381,4.56219,4.56219,61,0,455.0,Euro -True,372,3.15,3.1369,3.1369,60,18,455.0,Pound -False,15268,4.02,4.11124,4.11124,60,21,455.0,Euro -False,3198,3.4,3.64323,3.64323,60,10,455.0,Euro -False,279,4.05,4.36455,4.36455,60,51,455.0,Pound -False,176,3.85,3.8264,3.8264,60,12,455.0,Pound -False,1798,4.6,4.54498,4.54498,60,53,455.0,Pound -True,2898,3.95,4.03603,4.03603,61,28,455.0,Euro -True,171,4.1,4.1206,4.1206,60,31,455.0,Pound -False,218,3.95,3.96138,3.96138,60,19,455.0,Pound -True,1874,4.07447,4.22342,4.22342,60,20,455.0,Pound -True,423,4.28261,4.34842,4.34842,60,36,455.0,Euro -False,1471,4.55,4.51692,4.51692,59,37,455.0,Dollar -False,639,3.9,3.85863,3.85863,59,22,455.0,Pound -False,784,4.66102,4.66882,4.66882,60,49,455.0,Euro -False,589,4.15,4.31405,4.31405,59,95,455.0,Pound -True,425,3.8,3.69323,3.69323,59,9,455.0,Euro -True,2380,4.4,4.42012,4.42012,59,38,455.0,Dollar -True,3575,3.75,3.46776,3.46776,59,0,455.0,Dollar -False,1341,4.55263,4.5624,4.5624,59,40,455.0,Dollar -False,292,4.29412,4.30545,4.30545,59,8,455.0,Euro -True,3048,3.9,4.19061,4.19061,59,74,455.0,Dollar -True,6138,4.35,4.26278,4.26278,59,63,455.0,Pound -True,459,4.05,4.1269,4.1269,59,10,455.0,Dollar -False,409,4.0,3.96623,3.96623,59,13,455.0,Dollar -True,413,4.25,4.29164,4.29164,59,15,455.0,Pound -True,2898,4.25,4.29623,4.29623,59,14,455.0,Pound -False,1484,4.15,4.09271,4.09271,59,29,455.0,Dollar -True,1437,4.2,4.19903,4.19903,59,61,455.0,Dollar -True,136,3.05,3.04233,3.04233,59,39,455.0,Dollar -False,11758,3.3,3.64119,3.64119,59,92,455.0,Pound -False,2696,4.1,4.14518,4.14518,59,35,455.0,Pound -False,4316,4.77119,4.68243,4.68243,59,136,455.0,Euro -True,507,4.5,4.53224,4.53224,59,14,455.0,Pound -False,1648,3.65,3.70299,3.70299,59,23,455.0,Euro -False,2310,4.76471,4.55371,4.55371,59,33,455.0,Pound -True,526,4.76923,4.76454,4.76454,59,36,455.0,Euro -True,692,4.0,4.05759,4.05759,59,24,455.0,Euro -False,432,4.7,4.63597,4.63597,59,13,455.0,Pound -True,478,4.85,4.83527,4.83527,59,12,455.0,Pound -False,391,4.65,4.72639,4.72639,59,25,455.0,Euro -False,440,3.4,3.29528,3.29528,59,53,455.0,Euro -True,236,4.15,4.1323,4.1323,59,52,455.0,Pound -True,386,3.95,3.87944,3.87944,59,56,455.0,Euro -True,1913,4.6,4.64248,4.64248,59,23,455.0,Dollar -False,3706,3.2,2.99993,2.99993,59,7,455.0,Euro -True,5061,3.45,3.01132,3.01132,59,7,455.0,Pound -True,340,4.2,4.19741,4.19741,58,9,455.0,Euro -True,1471,4.4,3.79367,3.79367,58,9,455.0,Pound -True,231,3.9,3.70667,3.70667,58,45,455.0,Euro -True,510,4.5,4.57306,4.57306,58,43,455.0,Dollar -True,3819,4.15,4.04441,4.04441,58,117,462.0,Dollar -True,3194,4.4,4.4004,4.4004,58,40,455.0,Dollar -False,1809,4.55,4.54915,4.54915,58,32,455.0,Dollar -False,8898,4.14655,4.27361,4.27361,58,23,455.0,Euro -False,385,4.68182,4.78128,4.78128,58,27,455.0,Dollar -False,1891,3.95,3.69291,3.69291,58,25,455.0,Euro -False,229,4.31818,4.28358,4.28358,59,31,455.0,Pound -True,1034,2.68182,2.83506,2.83506,58,11,455.0,Dollar -False,6885,3.9,3.95714,3.95714,58,17,455.0,Pound -True,373,3.95,3.73113,3.73113,58,8,455.0,Pound -False,1682,4.25,4.32408,4.32408,58,61,455.0,Dollar -True,250,4.9,4.89178,4.89178,58,15,960.0,Dollar -False,1037,4.4,4.40426,4.40426,58,50,455.0,Pound -False,5512,2.8,2.91713,2.91713,58,30,455.0,Euro -False,283,3.5,3.51194,3.51194,58,15,455.0,Pound -False,138,4.36364,4.36703,4.36703,58,24,455.0,Dollar -False,5555,3.35,3.4103,3.4103,58,32,455.0,Dollar -False,205,4.15385,4.20583,4.20583,58,14,455.0,Dollar -True,1630,4.95,4.92808,4.92808,58,7,455.0,Dollar -False,1260,3.05,2.78554,2.78554,58,18,455.0,Euro -False,1176,4.4,4.33518,4.33518,58,25,455.0,Pound -False,2996,2.2,2.29582,2.29582,58,27,455.0,Dollar -True,3089,3.9,3.87325,3.87325,58,27,455.0,Pound -False,545,4.66667,4.63545,4.63545,58,142,455.0,Euro -True,9008,4.48529,4.4563,4.4563,58,12,455.0,Euro -False,2436,4.1,3.99488,3.99488,58,16,455.0,Dollar -True,7468,4.45455,4.47415,4.47415,58,21,455.0,Euro -True,10233,4.21875,4.34796,4.34796,58,43,455.0,Dollar -False,20469,4.0,3.93518,3.93518,58,40,455.0,Euro -True,758,4.55,4.49512,4.49512,58,14,455.0,Euro -True,1119,4.0,3.89732,3.89732,59,11,455.0,Dollar -False,1340,3.7,3.77771,3.77771,59,50,455.0,Euro -True,4661,4.4,4.57504,4.57504,58,10,455.0,Dollar -True,4510,4.45,4.39331,4.39331,58,93,455.0,Euro -True,439,4.55,4.49899,4.49899,58,21,455.0,Pound -True,1932,4.1,3.86439,3.86439,58,36,455.0,Pound -True,288,4.1,4.15971,4.15971,58,52,455.0,Pound -False,167,3.9,3.82451,3.82451,58,15,455.0,Pound -False,509,4.2,4.10832,4.10832,57,20,455.0,Pound -False,410,4.05,4.12783,4.12783,57,17,455.0,Pound -False,334,4.3,4.3126,4.3126,57,55,455.0,Pound -True,219,4.23333,4.30848,4.30848,57,40,455.0,Dollar -True,14109,4.25,4.28733,4.28733,57,91,455.0,Euro -False,3882,4.05,4.19566,4.19566,57,11,455.0,Dollar -False,280,4.6,4.57536,4.57536,57,7,455.0,Euro -True,254,4.55,4.53034,4.53034,57,17,455.0,Dollar -True,359,4.21875,4.18076,4.18076,57,195,455.0,Pound -True,6444,4.3,4.16814,4.16814,57,18,455.0,Pound -True,4309,4.2,4.07351,4.07351,57,44,468.0,Pound -False,10080,4.71875,4.73261,4.73261,58,153,455.0,Dollar -True,220,4.85,4.84383,4.84383,57,7,455.0,Dollar -False,7060,3.85,3.82996,3.82996,57,37,455.0,Pound -True,287,4.35,4.30733,4.30733,57,7,455.0,Euro -False,245,4.62281,4.58191,4.58191,58,31,455.0,Euro -True,841,3.4,3.46133,3.46133,57,38,455.0,Dollar -False,10821,4.0,4.02509,4.02509,57,17,455.0,Dollar -True,231,4.2,4.16913,4.16913,57,81,455.0,Pound -False,4477,3.4,3.21822,3.21822,57,42,455.0,Pound -True,258,4.05,4.29626,4.29626,57,7,455.0,Pound -False,4065,4.2,4.49258,4.49258,57,32,455.0,Dollar -True,644,4.30882,4.40527,4.40527,57,62,455.0,Dollar -False,21004,3.25,3.12732,3.12732,57,22,455.0,Euro -True,2500,3.75,4.12821,4.12821,57,10,455.0,Dollar -False,1580,4.05,3.99108,3.99108,57,61,455.0,Pound -False,463,4.3,4.22167,4.22167,57,25,455.0,Pound -False,11390,4.35294,4.34961,4.34961,57,96,455.0,Dollar -False,884,4.65,4.64086,4.64086,57,11,455.0,Pound -False,5106,3.75,3.942,3.942,57,18,455.0,Pound -True,2863,4.5,4.50025,4.50025,56,128,455.0,Euro -True,126,4.1875,4.19073,4.19073,56,8,455.0,Pound -False,383,3.86667,4.01366,4.01366,56,191,481.0,Dollar -False,1400,4.3,4.56074,4.56074,56,18,455.0,Pound -False,14907,3.3,3.26591,3.26591,56,100,455.0,Euro -False,189,4.55,4.53083,4.53083,56,21,455.0,Pound -True,3427,3.55,3.64547,3.64547,56,13,455.0,Pound -True,413,4.4,4.31892,4.31892,56,16,455.0,Pound -True,4306,4.35,4.28025,4.28025,56,17,520.0,Dollar -True,4742,4.7,4.67261,4.67261,56,47,455.0,Pound -True,7710,4.26786,4.2442,4.2442,56,24,455.0,Euro -True,364,4.75,4.67849,4.67849,56,9,455.0,Pound -False,230,4.2,4.20953,4.20953,56,10,455.0,Dollar -True,3045,4.05,4.04542,4.04542,56,23,455.0,Dollar -False,308,3.9,3.87536,3.87536,56,10,455.0,Dollar -False,1969,4.05,4.33735,4.33735,56,11,455.0,Pound -True,5387,4.35,4.33368,4.33368,56,16,455.0,Euro -True,207,4.25,4.24314,4.24314,56,54,474.0,Dollar -False,219,4.3,4.35825,4.35825,56,101,455.0,Euro -True,7233,4.85,4.80401,4.80401,56,26,455.0,Dollar -True,6603,3.5,2.82617,2.82617,56,52,455.0,Dollar -True,7751,4.25,4.24026,4.24026,56,26,455.0,Euro -True,3245,3.8,3.90957,3.90957,56,10,455.0,Dollar -False,3373,3.25,3.26527,3.26527,56,14,455.0,Pound -True,399,4.65,4.60028,4.60028,56,28,455.0,Euro -False,289,4.05,4.00509,4.00509,56,40,455.0,Pound -False,1592,4.55,4.43367,4.43367,56,8,455.0,Euro -True,3981,3.0,2.9646,2.9646,56,37,455.0,Pound -False,3653,4.45,4.43382,4.43382,56,57,455.0,Pound -True,161,4.26786,4.24345,4.24345,56,10,455.0,Euro -False,3413,4.25,4.13967,4.13967,55,15,455.0,Dollar -False,237,4.6,4.54769,4.54769,55,9,455.0,Dollar -False,1905,3.7,3.66702,3.66702,55,9,455.0,Pound -False,1188,4.6,4.56194,4.56194,55,23,455.0,Pound -False,757,3.95,3.69729,3.69729,55,24,455.0,Euro -True,142,4.0,4.04371,4.04371,55,22,455.0,Dollar -False,1108,4.85,4.88821,4.88821,55,92,455.0,Dollar -False,1366,4.55,4.58407,4.58407,55,55,455.0,Pound -False,258,3.5,3.63787,3.63787,55,9,455.0,Dollar -False,981,4.3,4.17334,4.17334,55,22,455.0,Dollar -True,158,4.3,4.27764,4.27764,55,11,455.0,Euro -False,1251,3.8,3.87047,3.87047,55,44,455.0,Euro -True,149,4.45,4.63021,4.63021,55,14,2000.0,Pound -False,425,4.6,4.62924,4.62924,55,22,455.0,Pound -True,188,3.3,3.27626,3.27626,55,12,455.0,Pound -False,1742,4.1,4.08213,4.08213,55,6,455.0,Pound -False,3027,4.35,4.57453,4.57453,55,39,455.0,Pound -True,976,4.55,4.57155,4.57155,56,57,455.0,Pound -True,7657,3.85,3.83529,3.83529,55,37,455.0,Euro -False,187,4.4,4.4074,4.4074,55,16,455.0,Euro -True,1933,3.65,3.62133,3.62133,55,33,455.0,Dollar -True,8677,4.4,4.65699,4.65699,55,48,455.0,Dollar -False,135,4.11765,4.10962,4.10962,55,20,455.0,Pound -False,1247,4.8,4.78548,4.78548,55,11,455.0,Euro -False,676,4.35,4.20328,4.20328,55,26,455.0,Pound -False,805,4.6,4.60019,4.60019,55,10,455.0,Pound -True,2279,4.45,4.39353,4.39353,55,11,455.0,Dollar -True,818,3.95,3.98874,3.98874,55,26,455.0,Pound -False,6397,3.3,2.82118,2.82118,55,23,455.0,Dollar -False,2253,4.45,4.46304,4.46304,55,37,455.0,Pound -True,1032,4.5,4.4615,4.4615,55,23,455.0,Euro -False,157,4.35,4.33943,4.33943,54,23,455.0,Dollar -False,1029,3.75,3.65215,3.65215,54,19,455.0,Dollar -True,4602,4.8,4.76415,4.76415,54,23,455.0,Euro -False,6098,2.6,2.58015,2.58015,54,10,455.0,Euro -False,254,4.0,3.94612,3.94612,54,7,455.0,Euro -False,383,4.73148,4.71005,4.71005,55,377,455.0,Dollar -True,7103,3.7,3.21851,3.21851,54,36,455.0,Dollar -True,393,4.2,4.19375,4.19375,54,13,455.0,Pound -True,1740,4.45,4.38765,4.38765,54,13,455.0,Pound -True,265,4.07143,4.01139,4.01139,55,25,455.0,Pound -False,358,3.25,3.37928,3.37928,54,8,455.0,Euro -True,1161,4.05,4.08613,4.08613,54,17,455.0,Pound -False,2577,3.75,3.81872,3.81872,54,14,455.0,Pound -False,204,3.75,3.70102,3.70102,54,20,455.0,Pound -True,338,4.8,4.7399,4.7399,54,5,455.0,Pound -True,12260,4.25,4.52432,4.52432,54,62,455.0,Pound -False,2028,3.9,4.02204,4.02204,54,20,455.0,Euro -True,2400,3.95,3.84729,3.84729,54,23,455.0,Dollar -False,3309,4.15,4.11025,4.11025,54,48,455.0,Pound -False,415,3.95,4.07774,4.07774,54,15,455.0,Euro -False,402,4.28571,4.23407,4.23407,54,166,455.0,Euro -False,1127,4.59677,4.71314,4.71314,55,52,455.0,Euro -True,292,4.6,4.52552,4.52552,54,64,455.0,Dollar -False,639,3.4,3.53368,3.53368,54,44,455.0,Pound -True,1013,3.75,3.67033,3.67033,54,6,455.0,Dollar -False,388,4.55,4.62944,4.62944,54,12,455.0,Pound -False,5727,3.95,3.83473,3.83473,54,211,455.0,Dollar -False,139,3.3,3.3451,3.3451,54,34,455.0,Euro -False,867,4.1,3.95883,3.95883,54,10,455.0,Dollar -True,316,3.8,4.01729,4.01729,54,27,2880.0,Pound -False,471,3.4,3.40916,3.40916,54,48,455.0,Euro -True,12346,4.6,4.60998,4.60998,54,23,455.0,Dollar -True,254,4.15,4.14111,4.14111,54,11,455.0,Dollar -True,570,4.0,3.93836,3.93836,54,43,455.0,Euro -False,304,3.95,3.95504,3.95504,54,17,455.0,Euro -False,124,4.21212,4.19031,4.19031,54,10,455.0,Dollar -True,264,3.38462,3.37725,3.37725,54,40,455.0,Pound -True,7779,3.7,3.77691,3.77691,54,12,455.0,Dollar -True,2245,4.35,4.31918,4.31918,54,18,520.0,Pound -True,204,3.77273,3.78087,3.78087,54,316,455.0,Pound -True,264,3.9,4.00841,4.00841,54,15,455.0,Euro -False,735,3.8,3.85279,3.85279,53,26,455.0,Pound -True,1322,4.8,4.76018,4.76018,53,39,468.0,Euro -True,1929,4.35294,4.38899,4.38899,53,23,455.0,Euro -True,173,3.94792,3.98388,3.98388,53,65,455.0,Pound -True,150,4.3,4.24476,4.24476,53,13,455.0,Pound -True,1328,4.45,4.46418,4.46418,54,23,455.0,Dollar -False,4380,4.65,4.54167,4.54167,53,20,455.0,Pound -False,5707,2.55,2.67416,2.67416,53,18,455.0,Euro -False,8096,4.17857,4.24913,4.24913,53,59,455.0,Dollar -False,367,4.9,4.9817,4.9817,53,62,1600.0,Dollar -False,625,3.8,3.81492,3.81492,53,32,455.0,Pound -False,1239,3.25,3.12031,3.12031,53,20,455.0,Dollar -True,635,3.95,3.91905,3.91905,53,6,455.0,Dollar -False,3462,4.15,4.23195,4.23195,53,67,455.0,Euro -True,3340,4.25,4.30874,4.30874,53,21,455.0,Dollar -True,272,3.7,3.6777,3.6777,53,9,455.0,Pound -False,178,3.6,3.75841,3.75841,53,13,455.0,Dollar -False,3395,3.35,3.30818,3.30818,53,101,455.0,Pound -False,2055,4.1,4.00861,4.00861,53,6,455.0,Euro -True,2714,3.65,3.57725,3.57725,53,82,455.0,Pound -True,142,4.20833,4.17333,4.17333,53,11,455.0,Pound -True,338,4.45,4.5241,4.5241,53,12,455.0,Dollar -False,246,4.35,4.31701,4.31701,53,12,455.0,Pound -False,3899,4.4125,4.45672,4.45672,53,25,455.0,Dollar -True,206,3.6,3.75505,3.75505,53,13,455.0,Dollar -True,236,4.15,4.23034,4.23034,53,14,455.0,Pound -False,513,3.8,3.85174,3.85174,53,31,455.0,Euro -True,11970,3.9,3.61229,3.61229,53,36,455.0,Dollar -True,177,4.53846,4.59674,4.59674,53,62,455.0,Euro -True,3793,4.0,4.02656,4.02656,53,6,455.0,Dollar -False,12630,3.35,3.15486,3.15486,53,0,455.0,Dollar -True,257,4.25,4.31627,4.31627,52,22,455.0,Pound -False,1720,4.15,4.15175,4.15175,52,15,455.0,Euro -True,5826,4.1,4.15207,4.15207,52,33,455.0,Euro -True,13959,3.35,2.88069,2.88069,52,33,455.0,Pound -True,314,4.2,4.18526,4.18526,52,38,700.0,Euro -False,2506,4.1,4.35612,4.35612,54,33,455.0,Dollar -True,1498,4.09091,4.30013,4.30013,52,29,455.0,Euro -True,2192,4.35,4.28797,4.28797,52,36,455.0,Dollar -True,12856,3.7973,3.78798,3.78798,52,12,455.0,Dollar -False,273,4.46154,4.47845,4.47845,52,47,455.0,Dollar -False,352,4.15,4.06579,4.06579,52,20,455.0,Pound -True,301,4.05,3.97047,3.97047,52,9,455.0,Pound -False,701,4.16667,4.28602,4.28602,52,70,455.0,Pound -True,3339,4.3,4.43575,4.43575,52,37,455.0,Pound -False,1145,3.95,3.94365,3.94365,52,58,455.0,Euro -True,382,4.2,4.26162,4.26162,52,11,455.0,Euro -False,807,3.3,3.31394,3.31394,52,27,455.0,Pound -True,148,4.35,4.35974,4.35974,52,77,800.0,Dollar -True,2819,4.7,4.73625,4.73625,52,11,455.0,Euro -True,894,4.55,4.6366,4.6366,52,37,455.0,Euro -True,163,3.85714,3.85733,3.85733,52,16,455.0,Euro -False,139,4.8,4.80458,4.80458,52,7,455.0,Pound -False,10189,4.1,4.16738,4.16738,52,21,455.0,Pound -True,1071,4.16667,4.43364,4.43364,52,19,455.0,Euro -True,499,4.95,4.94125,4.94125,52,17,455.0,Dollar -True,1959,4.2,4.14682,4.14682,52,8,455.0,Dollar -True,9006,4.43902,4.34907,4.34907,52,23,455.0,Pound -True,4172,4.55,4.62384,4.62384,52,23,455.0,Dollar -True,956,4.1,4.10738,4.10738,52,104,455.0,Euro -False,712,3.7,3.76048,3.76048,52,22,455.0,Dollar -True,1395,4.4,4.39734,4.39734,52,9,455.0,Euro -False,728,3.9,3.97967,3.97967,52,50,455.0,Pound -True,2372,4.6,4.59787,4.59787,52,20,455.0,Pound -True,267,3.45,3.46099,3.46099,52,62,455.0,Pound -True,846,4.0,4.0974,4.0974,52,30,455.0,Pound -True,279,4.35,4.25851,4.25851,51,15,455.0,Dollar -True,2756,4.6,4.60469,4.60469,51,50,455.0,Pound -False,7153,3.4,3.18744,3.18744,51,27,455.0,Euro -False,2229,4.3,4.12324,4.12324,51,7,455.0,Euro -False,4453,4.25,4.26577,4.26577,51,18,455.0,Pound -True,134,4.15,4.21405,4.21405,51,38,1600.0,Euro -True,1050,4.15,4.24711,4.24711,51,25,455.0,Pound -False,1481,3.9,3.19813,3.19813,51,12,455.0,Pound -True,301,4.55882,4.54553,4.54553,54,72,455.0,Dollar -True,2379,2.55,2.65063,2.65063,51,49,455.0,Dollar -False,4561,4.25,4.26528,4.26528,51,34,455.0,Dollar -True,2066,4.5,4.35765,4.35765,51,41,455.0,Pound -True,3911,3.75,3.75776,3.75776,51,6,455.0,Pound -True,2943,3.9,3.35636,3.35636,51,9,455.0,Euro -True,8994,4.3,4.3145,4.3145,51,23,455.0,Euro -False,399,3.75,3.82698,3.82698,51,37,455.0,Euro -False,2660,4.45,4.38968,4.38968,51,24,455.0,Euro -False,1515,4.4,4.33375,4.33375,51,12,455.0,Euro -True,154,3.65,3.58127,3.58127,51,14,455.0,Dollar -False,8856,4.2875,4.26253,4.26253,52,34,455.0,Pound -False,179,4.5,4.54432,4.54432,51,25,1280.0,Euro -True,13659,4.0,3.92583,3.92583,51,24,455.0,Dollar -True,11104,3.75,4.19321,4.19321,51,30,455.0,Euro -True,5630,3.6,3.56832,3.56832,51,31,455.0,Pound -False,2515,4.2,3.88628,3.88628,51,6,455.0,Dollar -False,241,3.65,3.68891,3.68891,51,44,455.0,Pound -False,5653,3.75,3.69747,3.69747,51,5,455.0,Dollar -True,5314,4.12745,4.17253,4.17253,51,10,455.0,Dollar -False,1009,4.0,4.08929,4.08929,51,17,455.0,Dollar -True,3124,4.15,4.40987,4.40987,51,5,455.0,Dollar -True,253,4.5,4.5206,4.5206,51,29,455.0,Dollar -False,256,4.6,4.62257,4.62257,51,17,455.0,Euro -False,5973,4.3,4.32609,4.32609,51,58,455.0,Dollar -True,3154,4.1,4.08735,4.08735,51,10,455.0,Pound -False,207,4.55,4.64334,4.64334,51,6,455.0,Dollar -True,3172,3.2,3.04503,3.04503,51,53,455.0,Dollar -False,131,4.21875,4.17614,4.17614,51,39,455.0,Dollar -True,345,3.95,4.00365,4.00365,51,27,455.0,Pound -True,452,4.15,4.1746,4.1746,51,33,455.0,Euro -True,375,4.5,4.4685,4.4685,51,52,455.0,Dollar -True,1391,4.35,4.29687,4.29687,50,27,455.0,Euro -True,256,4.45,4.54555,4.54555,50,44,3200.0,Pound -True,436,3.65,3.41833,3.41833,50,6,455.0,Dollar -False,3602,3.5,3.13043,3.13043,50,19,455.0,Pound -False,1269,4.35,4.3218,4.3218,50,16,455.0,Pound -True,5537,4.6,4.67344,4.67344,50,10,455.0,Pound -True,3675,4.05,4.00975,4.00975,50,49,455.0,Pound -True,6886,4.34884,4.47965,4.47965,50,25,455.0,Dollar -True,1575,4.45,4.12383,4.12383,50,21,455.0,Euro -True,315,4.25,4.24982,4.24982,50,40,462.0,Dollar -False,1012,4.65,4.59632,4.59632,50,12,455.0,Euro -True,8727,4.05,4.32978,4.32978,50,22,455.0,Pound -False,1298,4.4,4.34465,4.34465,50,33,455.0,Pound -False,203,4.1,4.26405,4.26405,50,11,455.0,Euro -True,279,3.95,3.96166,3.96166,50,14,455.0,Dollar -False,1019,4.35,4.31869,4.31869,50,21,455.0,Pound -True,653,4.26923,4.34448,4.34448,50,157,455.0,Dollar -False,337,4.75,4.74318,4.74318,51,6,455.0,Pound -False,314,4.7,4.67915,4.67915,50,20,455.0,Euro -True,1520,4.5,4.3373,4.3373,52,194,455.0,Euro -True,712,3.9,3.76453,3.76453,50,52,455.0,Pound -False,5524,4.25,4.06984,4.06984,50,17,455.0,Pound -False,1919,4.35,4.311,4.311,50,35,455.0,Dollar -True,7955,4.17857,3.85052,3.85052,50,36,455.0,Euro -False,907,4.2,4.40906,4.40906,50,37,455.0,Euro -True,2553,3.6,3.50768,3.50768,50,18,455.0,Pound -False,3153,3.7,3.85131,3.85131,50,28,455.0,Dollar -True,6406,3.73077,3.97837,3.97837,50,27,455.0,Pound -False,1198,4.55,4.58408,4.58408,50,73,455.0,Pound -False,2011,4.15,4.18971,4.18971,50,46,455.0,Euro -False,2481,3.9,4.01325,4.01325,50,55,455.0,Pound -True,271,3.7,3.73831,3.73831,50,13,455.0,Dollar -False,8255,4.45,4.46266,4.46266,50,40,455.0,Pound -False,3764,4.3,4.27386,4.27386,50,26,455.0,Euro -False,307,4.2,4.14531,4.14531,50,17,455.0,Euro -False,125,3.7,3.62945,3.62945,50,10,455.0,Dollar -True,3362,4.4,4.25327,4.25327,50,27,455.0,Dollar -True,4334,4.2,4.02004,4.02004,50,18,455.0,Dollar -True,2005,4.15,4.03311,4.03311,50,83,455.0,Dollar -True,378,4.85,4.83617,4.83617,50,17,455.0,Dollar -False,2300,4.75,4.76447,4.76447,50,20,455.0,Pound -False,176,4.0,3.95192,3.95192,50,14,455.0,Dollar -True,3031,4.6,4.65591,4.65591,50,22,455.0,Dollar -True,5799,3.75,3.47668,3.47668,50,24,455.0,Euro -False,236,4.45,4.47415,4.47415,50,22,455.0,Dollar -False,321,3.68182,3.70453,3.70453,50,77,474.0,Pound -False,6819,2.0,2.20009,2.20009,50,7,455.0,Pound -False,1321,4.4,4.36046,4.36046,50,36,468.0,Pound -True,188,3.9,4.0582,4.0582,50,42,455.0,Euro -True,1304,4.45,4.45968,4.45968,50,28,455.0,Pound -True,281,3.8,3.80486,3.80486,50,42,455.0,Euro -False,4398,4.05,3.84504,3.84504,50,26,455.0,Pound -False,204,4.1,3.95413,3.95413,50,25,455.0,Dollar -False,211,4.67308,4.70658,4.70658,50,151,3200.0,Pound -True,3989,3.83333,4.0446,4.0446,50,90,455.0,Dollar -False,298,4.15,4.16191,4.16191,49,108,455.0,Dollar -True,252,3.85,3.77549,3.77549,49,38,455.0,Dollar -True,3722,3.85,4.05185,4.05185,49,19,455.0,Euro -True,394,4.3,4.23961,4.23961,49,28,455.0,Dollar -True,157,4.85,4.86379,4.86379,49,26,455.0,Pound -False,5803,3.9,3.88266,3.88266,49,77,455.0,Pound -True,1335,4.57143,4.51074,4.51074,49,145,455.0,Dollar -False,6049,4.3,4.2555,4.2555,49,22,455.0,Euro -True,4556,4.2,4.25634,4.25634,49,27,455.0,Dollar -True,180,4.35,4.35626,4.35626,49,46,468.0,Dollar -True,5858,4.27551,4.28635,4.28635,49,14,455.0,Euro -False,551,3.7,3.67325,3.67325,49,66,455.0,Pound -False,200,4.46154,4.43525,4.43525,49,30,455.0,Dollar -True,4678,4.05,4.20274,4.20274,49,22,455.0,Dollar -False,1299,4.2,4.29246,4.29246,49,16,455.0,Dollar -False,157,4.5,4.47925,4.47925,49,44,455.0,Pound -True,4264,2.7,2.72754,2.72754,49,34,455.0,Pound -True,219,4.15,3.62753,3.62753,49,10,455.0,Pound -False,850,4.35,4.34263,4.34263,49,9,455.0,Euro -True,235,3.45,3.41518,3.41518,49,7,455.0,Euro -False,1768,2.9,2.99099,2.99099,49,17,455.0,Euro -True,681,3.7,3.8387,3.8387,49,24,455.0,Euro -False,662,4.09375,4.14882,4.14882,49,24,455.0,Euro -False,235,4.5,4.34199,4.34199,49,19,455.0,Dollar -False,5264,3.5,3.885,3.885,49,13,455.0,Euro -False,1132,4.35,4.33932,4.33932,49,17,455.0,Dollar -True,1665,4.35,4.27569,4.27569,49,33,455.0,Dollar -True,1128,4.05,4.18855,4.18855,49,22,455.0,Pound -True,508,4.9,4.92356,4.92356,49,33,455.0,Euro -True,15191,3.65,4.10852,4.10852,49,43,455.0,Pound -True,910,2.6,2.76033,2.76033,49,5,455.0,Dollar -True,704,4.65,4.66712,4.66712,49,65,455.0,Euro -True,925,4.85,4.88831,4.88831,49,11,455.0,Euro -False,9460,4.3,4.50917,4.50917,49,46,455.0,Dollar -False,899,4.25,3.77768,3.77768,49,24,455.0,Pound -True,3549,3.3,3.52393,3.52393,50,125,462.0,Pound -True,321,3.95,3.92289,3.92289,49,11,455.0,Euro -False,1607,3.35,3.52195,3.52195,49,23,455.0,Pound -False,476,3.9,3.95781,3.95781,49,30,455.0,Euro -True,756,4.2,4.17857,4.17857,49,22,455.0,Dollar -False,336,4.05,3.99588,3.99588,49,24,455.0,Pound -False,5100,3.9,3.70335,3.70335,49,9,455.0,Dollar -True,666,4.05,4.01176,4.01176,48,24,455.0,Pound -True,1855,4.2,4.26753,4.26753,48,17,455.0,Dollar -False,303,3.65,3.61997,3.61997,48,8,455.0,Pound -True,808,4.35,3.82293,3.82293,48,8,455.0,Euro -True,4179,4.02083,4.18152,4.18152,48,10,455.0,Dollar -True,1645,4.55,4.33844,4.33844,48,86,455.0,Euro -False,197,3.92857,4.00355,4.00355,48,15,455.0,Euro -True,2014,4.0,4.06831,4.06831,48,51,455.0,Dollar -True,1897,4.25,4.27709,4.27709,48,53,455.0,Pound -False,1036,4.3,4.09952,4.09952,48,106,520.0,Euro -True,295,4.54167,4.54302,4.54302,48,55,455.0,Pound -True,516,4.15,4.20626,4.20626,48,10,455.0,Pound -True,154,4.3,4.32411,4.32411,49,45,455.0,Dollar -True,166,3.05,3.03083,3.03083,48,5,455.0,Dollar -True,220,4.15,4.17599,4.17599,48,29,455.0,Euro -True,3495,3.9,4.21311,4.21311,48,19,455.0,Euro -False,4475,3.05,3.07121,3.07121,48,65,455.0,Pound -False,188,4.65625,4.65879,4.65879,48,50,455.0,Euro -True,7079,3.5,3.23602,3.23602,48,19,455.0,Dollar -True,182,3.55,3.69647,3.69647,48,8,455.0,Euro -False,390,3.9,3.73216,3.73216,48,39,455.0,Pound -False,187,3.65,3.559,3.559,48,6,455.0,Pound -True,2477,3.85,3.59375,3.59375,48,11,455.0,Dollar -True,6085,3.55,4.07512,4.07512,48,16,455.0,Pound -False,1162,4.55,4.36531,4.36531,48,65,455.0,Euro -False,206,4.15,4.28843,4.28843,48,22,455.0,Dollar -False,393,3.55,3.68998,3.68998,48,36,455.0,Pound -True,2067,4.25,4.17464,4.17464,48,5,455.0,Dollar -True,134,4.56522,4.57331,4.57331,49,24,455.0,Pound -False,1908,4.18421,4.19248,4.19248,48,27,455.0,Dollar -False,2141,4.3,4.09327,4.09327,48,6,468.0,Pound -True,295,3.75,3.60453,3.60453,48,18,455.0,Euro -True,1222,4.2,4.49792,4.49792,48,15,455.0,Pound -True,1821,4.45,4.0677,4.0677,48,69,455.0,Pound -False,2250,4.45,4.45293,4.45293,48,15,455.0,Dollar -False,2580,3.1,3.27507,3.27507,48,39,455.0,Dollar -False,1643,4.2,4.20894,4.20894,48,24,455.0,Euro -False,177,4.2,4.16133,4.16133,48,190,455.0,Dollar -True,929,3.8,3.71586,3.71586,48,18,455.0,Pound -True,406,3.55,3.28712,3.28712,48,48,468.0,Euro -True,7442,3.8913,3.90809,3.90809,48,0,455.0,Euro -True,205,4.425,4.43793,4.43793,48,18,455.0,Pound -True,157,4.77273,4.52607,4.52607,47,20,3200.0,Euro -True,809,3.05,3.08854,3.08854,47,36,455.0,Dollar -False,7189,4.6,4.5761,4.5761,47,78,455.0,Euro -False,170,4.75,4.74816,4.74816,47,47,455.0,Pound -True,1965,4.0,3.95533,3.95533,47,27,455.0,Pound -True,3695,4.05,4.05674,4.05674,47,17,455.0,Euro -True,4176,3.6,3.13479,3.13479,47,18,455.0,Pound -False,4221,3.2,3.08164,3.08164,47,16,455.0,Pound -True,210,3.8,3.69653,3.69653,47,21,455.0,Euro -False,1217,4.15,4.17971,4.17971,48,26,455.0,Dollar -True,337,4.05,4.01348,4.01348,48,0,455.0,Euro -True,310,4.11538,3.9782,3.9782,47,0,455.0,Euro -True,492,3.85,3.89058,3.89058,47,18,455.0,Pound -True,6228,4.4,4.31092,4.31092,47,18,455.0,Pound -False,228,3.7,3.67785,3.67785,47,13,455.0,Euro -False,272,4.4,4.3803,4.3803,47,62,455.0,Euro -True,531,4.25,4.2762,4.2762,47,9,455.0,Pound -True,248,4.4,4.44199,4.44199,47,13,455.0,Euro -False,8383,3.8,4.08757,4.08757,47,14,455.0,Pound -True,434,4.65,4.64196,4.64196,47,5,455.0,Pound -True,6924,4.46,4.49747,4.49747,47,72,455.0,Dollar -True,1609,4.35,4.28294,4.28294,47,43,455.0,Pound -True,174,3.95,3.96325,3.96325,47,26,455.0,Pound -True,4741,4.35,4.09532,4.09532,47,57,455.0,Pound -False,3059,4.0,4.13244,4.13244,47,23,455.0,Pound -True,198,3.95,3.9485,3.9485,48,30,455.0,Pound -True,1764,4.0,4.48362,4.48362,47,9,455.0,Euro -True,7583,3.7,3.53044,3.53044,47,26,455.0,Dollar -True,374,4.9,4.89616,4.89616,47,38,455.0,Dollar -False,1466,4.55,4.53785,4.53785,47,37,455.0,Euro -True,1371,4.5,4.61049,4.61049,47,44,455.0,Euro -True,190,4.1,4.01931,4.01931,47,10,455.0,Euro -False,1924,4.27778,4.00744,4.00744,47,35,455.0,Dollar -True,204,3.84615,4.05385,4.05385,47,46,2400.0,Pound -False,6581,4.35,4.3583,4.3583,47,36,455.0,Euro -True,268,4.45652,4.45892,4.45892,47,12,455.0,Pound -False,233,3.95,4.0159,4.0159,47,17,455.0,Pound -True,340,4.15,4.13664,4.13664,47,23,468.0,Euro -True,3692,3.6,3.27587,3.27587,47,10,455.0,Dollar -False,901,4.45,4.38675,4.38675,47,46,455.0,Dollar -False,1132,3.9,3.84187,3.84187,47,19,455.0,Dollar -True,10188,3.55,3.41703,3.41703,47,51,455.0,Pound -True,350,3.9,3.95128,3.95128,47,32,455.0,Euro -True,2263,4.3,4.25779,4.25779,47,36,455.0,Pound -True,299,3.05,3.109,3.109,47,49,494.0,Pound -False,2537,3.9,3.86087,3.86087,47,52,455.0,Dollar -True,1262,3.6,3.57856,3.57856,47,48,455.0,Euro -False,274,4.17391,4.1969,4.1969,49,0,455.0,Euro -True,204,4.38235,4.38741,4.38741,47,7,455.0,Euro -True,1328,3.95,4.08553,4.08553,47,14,455.0,Dollar -False,644,4.1,4.09819,4.09819,47,22,455.0,Pound -True,211,4.21875,4.2439,4.2439,47,32,455.0,Pound -True,1031,4.2,4.19258,4.19258,47,23,455.0,Euro -False,2150,3.9,3.95722,3.95722,47,11,455.0,Euro -False,244,4.4,4.40465,4.40465,47,46,455.0,Pound -False,2232,4.25,4.2739,4.2739,47,37,455.0,Dollar -True,1556,4.39286,4.22661,4.22661,47,39,455.0,Dollar -True,4287,3.95,4.01923,4.01923,47,7,455.0,Dollar -False,1003,4.5,4.39799,4.39799,46,33,455.0,Euro -True,1282,4.7,4.44228,4.44228,46,25,455.0,Pound -True,166,4.25,4.3005,4.3005,46,8,455.0,Euro -True,416,4.6,4.58634,4.58634,46,17,455.0,Euro -False,187,4.15,4.11973,4.11973,46,8,455.0,Euro -True,228,3.94737,3.93124,3.93124,46,30,455.0,Euro -True,317,4.25,4.13047,4.13047,46,35,455.0,Euro -True,1891,3.9,3.87286,3.87286,46,8,455.0,Dollar -True,15201,3.95,4.12991,4.12991,46,7,455.0,Euro -True,2791,4.2,4.23405,4.23405,46,19,455.0,Pound -False,291,3.95,3.96893,3.96893,46,12,455.0,Dollar -True,1313,4.1,4.14855,4.14855,46,34,455.0,Dollar -False,214,4.15,4.07089,4.07089,46,43,455.0,Pound -False,713,4.4,4.29654,4.29654,46,84,455.0,Dollar -False,1105,3.85,4.05071,4.05071,46,62,455.0,Dollar -True,814,4.2,4.16461,4.16461,46,5,455.0,Pound -False,547,3.85,3.66547,3.66547,46,0,455.0,Pound -False,189,3.45,3.40582,3.40582,46,10,455.0,Pound -True,5816,3.8,3.95716,3.95716,46,19,455.0,Dollar -False,15118,3.8,3.85002,3.85002,46,22,455.0,Euro -False,207,4.35,4.44395,4.44395,46,18,455.0,Pound -True,3044,3.65,3.84023,3.84023,46,24,455.0,Euro -False,1333,4.55,4.50898,4.50898,46,6,455.0,Dollar -False,1207,4.2,4.1383,4.1383,46,27,455.0,Pound -False,12517,4.35,4.3019,4.3019,46,41,455.0,Dollar -False,1749,4.3,4.1594,4.1594,46,25,455.0,Pound -False,4862,3.7,3.23317,3.23317,46,45,455.0,Euro -False,150,4.4,4.31781,4.31781,46,50,455.0,Euro -False,123,4.58621,3.98656,3.98656,46,35,455.0,Euro -True,245,3.85,3.64913,3.64913,46,22,455.0,Dollar -True,1077,4.3,4.23117,4.23117,46,30,455.0,Dollar -False,1722,3.95,4.08308,4.08308,46,18,455.0,Pound -True,2844,3.7,3.62416,3.62416,46,13,455.0,Pound -True,803,4.15,3.9898,3.9898,46,31,468.0,Euro -True,291,4.08333,4.21813,4.21813,47,7,455.0,Pound -True,15537,4.57895,4.54675,4.54675,46,35,455.0,Dollar -True,1598,4.05,4.05478,4.05478,46,42,455.0,Euro -False,132,4.45,4.46236,4.46236,46,25,455.0,Dollar -True,1498,3.7,3.68713,3.68713,46,29,455.0,Dollar -True,2444,4.0,3.98778,3.98778,46,14,455.0,Pound -False,10846,3.4,3.72118,3.72118,45,21,455.0,Pound -True,982,3.95,3.98479,3.98479,45,5,455.0,Dollar -True,169,4.2,4.22069,4.22069,45,31,455.0,Euro -False,222,4.5,4.4542,4.4542,45,112,455.0,Dollar -True,466,4.05,4.00535,4.00535,45,64,455.0,Dollar -False,193,4.29545,4.27667,4.27667,45,0,455.0,Euro -False,366,4.3,4.28942,4.28942,45,105,455.0,Dollar -False,1354,3.25,3.21654,3.21654,45,33,455.0,Euro -True,1682,4.15,4.10132,4.10132,45,25,455.0,Dollar -True,568,3.35,3.28368,3.28368,45,23,455.0,Euro -False,2702,3.7,4.01074,4.01074,45,18,455.0,Pound -True,1170,4.0,4.105,4.105,45,24,455.0,Dollar -True,381,3.75,3.77297,3.77297,45,17,455.0,Dollar -True,2445,1.9,1.55305,1.55305,45,36,455.0,Euro -False,269,4.17857,4.35806,4.35806,45,154,455.0,Dollar -False,135,4.8,4.74564,4.74564,45,97,455.0,Euro -False,2265,4.2,4.20608,4.20608,45,64,455.0,Dollar -True,2108,4.75,4.79567,4.79567,45,42,455.0,Euro -False,2265,4.5,4.45774,4.45774,45,22,455.0,Euro -True,283,3.45,3.47984,3.47984,45,8,455.0,Euro -False,2162,4.4,4.27385,4.27385,45,21,455.0,Euro -True,4736,3.95,3.99003,3.99003,45,14,455.0,Pound -False,2635,4.15,4.15145,4.15145,45,31,455.0,Euro -True,4085,3.65,3.69852,3.69852,45,5,455.0,Pound -False,159,4.05,4.0945,4.0945,45,15,455.0,Pound -True,3519,4.5,4.56282,4.56282,45,12,455.0,Pound -False,1374,4.65,4.69073,4.69073,45,29,455.0,Pound -False,1286,3.9,3.89793,3.89793,45,87,455.0,Pound -True,6802,4.26087,4.11173,4.11173,45,11,455.0,Dollar -True,1846,4.1,4.12423,4.12423,45,5,455.0,Dollar -True,3453,3.1,3.19681,3.19681,45,5,455.0,Pound -False,185,3.0,3.04971,3.04971,45,8,455.0,Euro -False,5384,4.55,4.3864,4.3864,45,34,455.0,Dollar -False,1002,4.6,4.67703,4.67703,45,6,455.0,Euro -False,91,3.76087,3.75425,3.75425,45,17,455.0,Pound -False,217,4.19231,4.16509,4.16509,45,30,455.0,Dollar -False,307,3.8,3.79098,3.79098,45,21,455.0,Dollar -True,197,4.1,4.11379,4.11379,45,11,455.0,Dollar -True,156,4.0,3.97685,3.97685,45,32,455.0,Pound -False,227,4.45,4.46337,4.46337,45,5,455.0,Euro -True,70,4.35,4.18353,4.18353,45,7,455.0,Euro -True,295,4.35,4.34083,4.34083,45,5,455.0,Pound -False,1378,4.75,4.76626,4.76626,45,45,455.0,Dollar -False,6680,3.85,3.89703,3.89703,45,17,455.0,Dollar -True,99,4.15,4.08063,4.08063,45,27,455.0,Dollar -False,343,4.55,4.57972,4.57972,44,20,455.0,Pound -True,256,3.6,3.61632,3.61632,44,21,455.0,Euro -False,3686,3.95,4.12307,4.12307,44,15,455.0,Euro -False,1211,4.5,4.55349,4.55349,44,15,455.0,Pound -False,4370,3.3,3.25662,3.25662,44,10,455.0,Dollar -False,6488,3.5,3.61696,3.61696,44,84,455.0,Euro -True,134,4.16667,4.15061,4.15061,44,5,455.0,Euro -True,248,3.95,3.86538,3.86538,44,18,455.0,Pound -False,794,4.45,4.53956,4.53956,44,36,455.0,Pound -False,9465,3.7,3.7191,3.7191,44,23,455.0,Pound -True,3850,4.5,4.44507,4.44507,44,26,455.0,Pound -False,13351,3.65,3.54602,3.54602,44,24,455.0,Pound -False,8715,2.8,2.56675,2.56675,44,14,455.0,Dollar -False,1177,4.1,4.20105,4.20105,44,66,455.0,Dollar -False,8755,4.0,3.79659,3.79659,44,37,455.0,Dollar -True,1843,3.9,3.8586,3.8586,44,15,455.0,Pound -False,19023,3.85,3.70632,3.70632,44,20,455.0,Pound -False,208,3.8,3.78582,3.78582,45,19,455.0,Pound -True,6204,4.05,4.25779,4.25779,44,24,455.0,Dollar -False,173,4.1,4.1102,4.1102,44,9,455.0,Pound -True,272,4.5,4.49956,4.49956,44,8,455.0,Pound -True,274,4.45,4.41983,4.41983,44,121,455.0,Euro -True,285,4.0,4.0322,4.0322,44,21,455.0,Dollar -False,1626,3.85,3.92985,3.92985,44,22,455.0,Dollar -True,1967,4.2,4.19107,4.19107,44,19,455.0,Euro -True,82,4.26923,4.27873,4.27873,44,7,2080.0,Dollar -True,251,4.4,4.43267,4.43267,44,55,455.0,Dollar -True,1877,4.2,4.57406,4.57406,44,18,455.0,Euro -True,2156,3.85,3.90764,3.90764,44,18,455.0,Dollar -True,179,3.9,3.89423,3.89423,45,83,455.0,Euro -True,9028,4.7,4.77768,4.77768,44,35,455.0,Pound -True,188,4.8,4.82396,4.82396,44,6,960.0,Dollar -False,5585,3.41667,3.51445,3.51445,44,18,455.0,Pound -False,189,4.75,4.74461,4.74461,44,32,455.0,Euro -False,1354,3.7,3.78193,3.78193,44,47,455.0,Pound -False,168,4.68605,4.66232,4.66232,44,12,455.0,Dollar -False,2029,4.33333,4.24776,4.24776,44,39,455.0,Euro -False,1112,3.8,3.84036,3.84036,44,15,455.0,Dollar -False,1708,4.35,4.26789,4.26789,44,43,455.0,Euro -False,636,4.75,4.7633,4.7633,44,10,455.0,Euro -True,3671,3.95,3.85204,3.85204,44,27,455.0,Euro -True,922,3.95,3.92201,3.92201,44,16,455.0,Pound -False,5735,4.2,3.94216,3.94216,44,58,455.0,Euro -True,234,4.5,4.50001,4.50001,44,22,455.0,Dollar -False,2650,4.1,4.0528,4.0528,44,42,455.0,Dollar -True,896,3.85,3.85371,3.85371,44,26,455.0,Pound -False,1241,3.8,3.73034,3.73034,44,22,455.0,Pound -True,5286,3.42188,3.41967,3.41967,44,6,455.0,Pound -True,4314,4.45,4.3844,4.3844,44,20,455.0,Euro -True,191,4.4,4.45875,4.45875,44,46,455.0,Euro -False,748,3.85,3.97786,3.97786,43,97,455.0,Euro -True,366,3.7,3.64591,3.64591,43,16,455.0,Dollar -False,142,3.95,3.95254,3.95254,43,18,455.0,Pound -False,2368,4.0,3.90564,3.90564,43,30,455.0,Pound -False,2160,4.8,4.81977,4.81977,43,37,455.0,Euro -True,6914,3.9,4.10534,4.10534,43,23,455.0,Dollar -False,173,4.65,4.61081,4.61081,43,23,455.0,Pound -False,2412,4.22093,4.17258,4.17258,43,23,455.0,Pound -False,890,3.73256,3.6627,3.6627,43,9,455.0,Dollar -True,299,3.8,3.90431,3.90431,43,66,455.0,Pound -True,1214,3.8,3.81288,3.81288,43,35,455.0,Pound -False,1454,4.1,4.14268,4.14268,43,35,455.0,Dollar -True,5019,4.2,4.1911,4.1911,43,27,455.0,Pound -True,613,4.35,4.29712,4.29712,43,25,455.0,Euro -True,4700,4.15,4.43388,4.43388,43,24,455.0,Euro -False,519,4.1,4.02784,4.02784,43,0,455.0,Dollar -False,265,3.2,3.32123,3.32123,43,12,455.0,Dollar -True,198,4.07692,4.03977,4.03977,43,32,455.0,Pound -False,3319,4.55,4.45452,4.45452,43,513,455.0,Euro -False,1027,3.5,3.52061,3.52061,43,107,462.0,Pound -True,1667,4.2,4.29079,4.29079,43,15,455.0,Dollar -False,4863,4.4,4.31654,4.31654,43,26,455.0,Pound -False,122,2.95,2.84513,2.84513,43,10,455.0,Dollar -True,153,4.15,4.30917,4.30917,43,13,1520.0,Pound -True,8858,4.1,4.06886,4.06886,43,12,455.0,Pound -True,249,4.1,4.12645,4.12645,43,48,455.0,Dollar -True,142,3.85,3.88969,3.88969,43,13,455.0,Dollar -False,233,4.3,4.20049,4.20049,43,69,455.0,Dollar -False,3259,3.6,3.46312,3.46312,43,14,455.0,Euro -False,224,3.6,3.67166,3.67166,43,7,455.0,Dollar -False,8337,3.55,3.33288,3.33288,43,14,455.0,Euro -False,538,4.55,4.55704,4.55704,43,8,455.0,Euro -False,374,4.05,4.06071,4.06071,43,38,455.0,Dollar -False,238,4.3,4.27373,4.27373,43,8,455.0,Dollar -False,184,4.46512,4.53717,4.53717,43,12,455.0,Euro -False,292,4.15,3.70286,3.70286,43,14,455.0,Dollar -False,163,4.35,4.40848,4.40848,43,13,468.0,Dollar -False,73,4.3,4.38795,4.38795,43,36,455.0,Pound -False,498,4.1,4.20645,4.20645,43,71,455.0,Dollar -False,1061,3.5,3.51129,3.51129,43,18,455.0,Pound -False,116,4.4,4.42764,4.42764,43,21,455.0,Euro -False,285,3.1,3.07306,3.07306,43,0,455.0,Pound -False,1049,4.8,4.78726,4.78726,43,314,462.0,Dollar -True,7122,4.25,3.95051,3.95051,43,19,455.0,Euro -False,424,3.85,3.8536,3.8536,43,15,455.0,Pound -False,7739,3.05,2.41568,2.41568,43,18,455.0,Euro -True,975,4.20833,4.31248,4.31248,43,5,455.0,Euro -False,285,4.03333,4.07268,4.07268,43,179,455.0,Pound -False,1715,4.3,4.34987,4.34987,43,6,455.0,Pound -True,1051,4.5,4.57417,4.57417,42,15,455.0,Pound -True,193,3.95,4.01391,4.01391,42,17,455.0,Dollar -False,1614,4.15,4.13667,4.13667,42,31,455.0,Pound -True,2203,3.25,3.1985,3.1985,42,14,455.0,Dollar -True,1500,4.05,3.85149,3.85149,42,28,455.0,Euro -True,226,4.45,4.44256,4.44256,42,36,455.0,Euro -True,555,4.25862,3.96263,3.96263,42,34,2720.0,Euro -False,1936,3.8,3.78461,3.78461,42,15,455.0,Euro -True,2125,4.25,4.15706,4.15706,42,34,455.0,Dollar -True,426,4.2,4.15912,4.15912,42,54,455.0,Pound -False,8281,4.25,4.12075,4.12075,42,25,455.0,Euro -True,9666,4.36111,4.31494,4.31494,42,22,455.0,Euro -False,529,4.25,4.19092,4.19092,42,26,455.0,Dollar -False,247,3.15,3.14999,3.14999,42,38,455.0,Euro -False,167,3.9,3.8517,3.8517,42,10,455.0,Euro -True,407,4.7,4.65471,4.65471,42,82,455.0,Dollar -True,481,3.25,3.44122,3.44122,42,5,455.0,Dollar -False,224,4.55,4.26433,4.26433,42,21,455.0,Euro -False,5626,4.3,4.41015,4.41015,42,11,455.0,Dollar -True,1063,4.0,3.94086,3.94086,42,5,455.0,Euro -True,16086,4.52,4.41792,4.41792,45,23,468.0,Pound -False,2075,4.65,4.41708,4.41708,42,38,455.0,Dollar -True,196,4.25,4.22841,4.22841,42,31,480.0,Pound -False,702,4.7,4.71322,4.71322,42,11,455.0,Pound -False,1312,3.6,3.61261,3.61261,42,15,455.0,Pound -False,132,3.85,3.92316,3.92316,42,15,455.0,Dollar -False,178,4.05263,4.17375,4.17375,42,29,455.0,Dollar -False,281,4.17949,4.17553,4.17553,42,18,455.0,Euro -False,247,4.36905,4.35131,4.35131,42,210,3200.0,Euro -False,243,4.3,4.30965,4.30965,42,29,455.0,Euro -True,1476,3.75,3.74129,3.74129,42,18,455.0,Euro -False,4564,4.05,4.17374,4.17374,42,10,455.0,Euro -True,1281,4.35,4.27785,4.27785,42,16,455.0,Euro -True,1189,4.25,4.15237,4.15237,42,15,455.0,Euro -True,3037,4.2,4.12982,4.12982,42,18,455.0,Dollar -True,135,3.65,3.65096,3.65096,42,5,455.0,Dollar -True,2629,4.1,4.18378,4.18378,42,8,455.0,Pound -True,745,4.25,4.29805,4.29805,42,10,455.0,Pound -True,3206,3.65,3.35495,3.35495,42,38,455.0,Euro -False,193,4.0,4.12138,4.12138,42,22,455.0,Dollar -True,254,3.7,3.64635,3.64635,42,22,455.0,Dollar -True,141,3.19231,3.24634,3.24634,42,19,455.0,Euro -False,1763,4.2,4.28173,4.28173,42,23,455.0,Euro -True,7855,3.45,3.72348,3.72348,42,8,455.0,Euro -False,239,4.15,4.08637,4.08637,41,9,455.0,Pound -False,2286,3.5,3.26067,3.26067,41,9,455.0,Dollar -False,1047,4.7,4.6749,4.6749,41,27,455.0,Euro -True,679,4.15,4.21785,4.21785,41,28,455.0,Pound -False,343,4.0,3.98998,3.98998,42,16,455.0,Pound -True,3253,3.95,3.65995,3.65995,41,12,720.0,Dollar -True,181,4.63636,4.62355,4.62355,41,7,700.0,Euro -False,2327,4.65,4.60459,4.60459,41,12,455.0,Pound -True,507,3.35,3.35622,3.35622,41,14,455.0,Pound -True,1893,3.8,3.76124,3.76124,41,45,455.0,Euro -False,369,4.61538,4.61578,4.61578,41,88,455.0,Pound -False,230,4.14706,4.12986,4.12986,41,0,455.0,Pound -False,426,4.25,4.41282,4.41282,41,6,455.0,Pound -False,5108,3.75,3.03711,3.03711,41,26,455.0,Pound -False,108,4.08824,4.0879,4.0879,41,21,455.0,Dollar -True,4395,4.0,4.02824,4.02824,41,159,455.0,Euro -False,1558,4.1,4.15489,4.15489,41,13,455.0,Dollar -False,8227,3.8,3.88301,3.88301,41,23,455.0,Euro -False,4679,4.65,4.55401,4.55401,41,13,455.0,Dollar -False,74,4.2,4.19633,4.19633,41,6,455.0,Pound -True,2153,3.8,3.97423,3.97423,41,34,455.0,Euro -False,95,4.32143,4.4823,4.4823,42,12,2240.0,Dollar -True,4112,3.55,3.35986,3.35986,41,34,455.0,Dollar -False,2312,4.05,3.77223,3.77223,41,31,455.0,Pound -True,146,4.4,4.393,4.393,41,52,455.0,Euro -False,107,3.8,3.82384,3.82384,41,7,455.0,Dollar -False,271,3.75,3.64096,3.64096,41,123,455.0,Dollar -True,2851,4.45,4.67945,4.67945,41,25,455.0,Euro -True,980,4.2,4.15737,4.15737,41,11,455.0,Pound -False,136,4.6,4.58247,4.58247,41,24,455.0,Pound -False,525,4.45,4.52593,4.52593,41,17,455.0,Dollar -False,104,3.4,3.34412,3.34412,41,17,455.0,Dollar -True,1147,3.25,2.84797,2.84797,41,0,455.0,Dollar -True,14341,4.33333,4.48406,4.48406,41,98,455.0,Dollar -True,7054,4.22727,4.32712,4.32712,41,22,455.0,Euro -True,1495,3.25,3.35392,3.35392,41,21,455.0,Dollar -False,113,2.5,2.51939,2.51939,41,6,455.0,Euro -False,1802,3.9,3.92195,3.92195,41,27,455.0,Dollar -True,1162,4.25,4.17777,4.17777,41,38,455.0,Dollar -False,3364,3.65,3.58767,3.58767,42,23,455.0,Euro -False,961,3.65,3.63873,3.63873,41,25,455.0,Euro -False,4367,3.82353,3.91727,3.91727,41,40,455.0,Pound -True,4192,3.9,3.79573,3.79573,41,22,455.0,Dollar -True,743,3.0,2.95449,2.95449,41,23,455.0,Dollar -False,1347,4.2,4.20331,4.20331,41,36,455.0,Pound -False,137,4.55,4.54786,4.54786,41,105,455.0,Dollar -True,84,3.9,3.9343,3.9343,42,9,480.0,Pound -True,3384,2.6,2.7325,2.7325,41,23,455.0,Pound -False,3025,4.55,4.58455,4.58455,41,29,455.0,Dollar -True,170,4.45,4.43417,4.43417,41,26,455.0,Dollar -True,5849,3.05,2.69873,2.69873,41,37,455.0,Dollar -False,245,4.45,4.46463,4.46463,41,21,455.0,Dollar -True,1045,4.5,4.42306,4.42306,41,33,455.0,Pound -False,452,4.0,4.01007,4.01007,41,25,455.0,Euro -False,3007,3.45,3.53155,3.53155,41,18,455.0,Euro -True,373,4.3,4.24359,4.24359,42,23,455.0,Euro -True,5697,4.18,4.40068,4.40068,41,24,455.0,Dollar -True,6054,4.0,4.01152,4.01152,41,11,455.0,Pound -False,191,3.25,3.19862,3.19862,40,29,455.0,Euro -True,5031,4.4,4.20247,4.20247,40,13,455.0,Euro -True,8581,4.63636,4.68382,4.68382,40,33,455.0,Euro -False,518,3.9,4.13578,4.13578,40,39,455.0,Dollar -False,1782,4.5,4.70947,4.70947,40,24,455.0,Euro -False,2498,3.9,3.92093,3.92093,40,53,455.0,Dollar -False,96,3.61905,3.61379,3.61379,40,35,455.0,Pound -False,3435,4.875,4.96242,4.96242,40,54,455.0,Euro -True,875,4.1,4.02127,4.02127,40,24,455.0,Pound -True,1941,4.3,4.22101,4.22101,40,34,455.0,Pound -False,2160,4.45,4.38303,4.38303,40,30,455.0,Dollar -True,777,3.8,3.48434,3.48434,40,15,455.0,Euro -True,161,4.0,4.06449,4.06449,40,19,455.0,Dollar -False,259,3.7,3.51763,3.51763,40,54,700.0,Euro -False,1872,4.15,4.09478,4.09478,40,37,455.0,Pound -False,7327,2.05,1.94323,1.94323,40,111,455.0,Euro -True,1499,4.2,4.31501,4.31501,40,8,455.0,Pound -True,9084,4.225,4.25751,4.25751,41,14,455.0,Euro -False,4974,3.9,3.98864,3.98864,40,26,455.0,Dollar -True,212,4.65,4.60345,4.60345,40,28,455.0,Dollar -True,310,4.3,4.35523,4.35523,40,27,455.0,Dollar -False,155,4.71212,4.50451,4.50451,41,33,455.0,Euro -True,2326,4.05,4.33542,4.33542,40,22,455.0,Dollar -False,434,4.64706,4.47668,4.47668,40,50,455.0,Euro -True,4405,4.25,4.26,4.26,40,12,455.0,Pound -False,274,4.25,4.21558,4.21558,40,12,455.0,Euro -True,10027,4.125,4.12239,4.12239,40,24,455.0,Pound -False,2391,3.25,3.15396,3.15396,40,13,455.0,Pound -False,1317,4.05,4.10319,4.10319,40,17,455.0,Euro -False,4863,2.7,2.63667,2.63667,40,5,455.0,Dollar -False,1161,4.15,3.8854,3.8854,40,14,455.0,Euro -False,2547,3.55,3.63229,3.63229,40,23,455.0,Euro -True,330,3.0,2.89455,2.89455,40,12,455.0,Dollar -False,197,4.5,4.47625,4.47625,40,35,455.0,Dollar -True,295,4.4,4.36176,4.36176,40,7,455.0,Euro -False,6717,4.45,4.45218,4.45218,40,20,455.0,Euro -True,9784,4.1,3.64209,3.64209,40,22,520.0,Euro -True,1272,4.4,4.42194,4.42194,40,48,455.0,Pound -True,6686,4.1,3.99217,3.99217,40,10,455.0,Euro -True,8064,4.14103,4.19908,4.19908,40,21,455.0,Dollar -True,4038,4.2,4.20096,4.20096,40,16,455.0,Dollar -False,201,4.7,4.64732,4.64732,40,33,455.0,Pound -False,289,4.25,4.27966,4.27966,40,9,455.0,Euro -True,243,2.85,3.09546,3.09546,40,17,455.0,Dollar -True,1452,4.05,4.10409,4.10409,40,25,455.0,Dollar -True,10176,4.425,4.62619,4.62619,40,84,455.0,Euro -False,726,3.9,4.01546,4.01546,39,11,455.0,Dollar -False,2180,4.1,4.0658,4.0658,39,29,455.0,Euro -False,1866,4.6,4.52824,4.52824,39,44,455.0,Dollar -True,1257,4.35,4.42343,4.42343,39,15,455.0,Pound -True,147,4.4,4.42766,4.42766,39,29,455.0,Pound -True,1258,4.13333,4.17812,4.17812,39,85,455.0,Pound -True,367,3.25,3.36111,3.36111,39,21,455.0,Dollar -True,1094,4.5,4.5892,4.5892,39,49,455.0,Euro -True,4013,4.05,4.0482,4.0482,39,18,455.0,Euro -False,1850,4.65,4.71158,4.71158,39,22,455.0,Dollar -True,180,3.4,3.27122,3.27122,39,8,455.0,Euro -False,5284,4.3,4.21299,4.21299,39,18,455.0,Euro -True,2801,3.3,3.40046,3.40046,39,40,455.0,Pound -True,1621,4.3,4.28752,4.28752,39,29,455.0,Pound -False,77,4.42857,4.46634,4.46634,39,10,455.0,Euro -True,11587,4.4,4.41947,4.41947,39,13,455.0,Dollar -False,211,4.14103,4.0812,4.0812,39,8,455.0,Pound -True,2076,4.52273,4.3909,4.3909,40,27,455.0,Pound -True,2088,3.45,3.45876,3.45876,39,27,455.0,Pound -False,272,3.5,3.7051,3.7051,39,14,455.0,Dollar -True,10402,4.4,4.45947,4.45947,39,23,455.0,Pound -False,4473,3.85,3.9444,3.9444,39,14,455.0,Pound -False,4551,4.4,4.29178,4.29178,39,28,455.0,Pound -False,168,4.3,4.31609,4.31609,39,35,3200.0,Dollar -True,936,4.0,4.02951,4.02951,39,14,455.0,Dollar -False,1072,4.3,4.1488,4.1488,39,25,455.0,Euro -True,15924,3.85,3.75321,3.75321,39,12,455.0,Dollar -True,620,4.78571,4.6509,4.6509,40,36,455.0,Pound -True,667,3.95,3.9689,3.9689,39,26,455.0,Euro -False,324,4.15,4.15652,4.15652,39,26,455.0,Euro -False,396,4.0,3.23829,3.23829,39,9,455.0,Pound -False,360,4.2,4.116,4.116,39,12,455.0,Pound -False,163,4.31818,4.29819,4.29819,39,20,455.0,Pound -True,4271,4.55,4.18211,4.18211,39,30,455.0,Euro -True,343,4.47727,4.35081,4.35081,39,39,455.0,Euro -True,3345,3.9,3.96002,3.96002,39,22,455.0,Dollar -True,135,3.9,4.10487,4.10487,39,5,455.0,Euro -False,526,3.85,3.84431,3.84431,39,10,455.0,Euro -True,359,4.35,4.31888,4.31888,39,24,455.0,Pound -False,178,4.35,4.30399,4.30399,39,32,455.0,Euro -False,356,4.0,3.87003,3.87003,39,36,455.0,Dollar -True,4272,4.05,4.0144,4.0144,39,23,455.0,Euro -True,138,3.65,3.51929,3.51929,39,16,455.0,Euro -False,314,4.45,4.37885,4.37885,39,20,455.0,Dollar -True,11522,4.05,4.19359,4.19359,39,42,455.0,Euro -True,1123,4.45,4.43942,4.43942,39,24,455.0,Euro -True,526,4.45,4.43151,4.43151,39,50,455.0,Pound -False,99,4.4375,4.37743,4.37743,39,12,455.0,Dollar -False,2422,3.4,3.48486,3.48486,39,7,455.0,Pound -False,2159,3.5,3.60013,3.60013,39,12,455.0,Euro -False,2901,3.4,3.38591,3.38591,39,34,455.0,Dollar -True,163,3.6,3.66932,3.66932,39,7,455.0,Dollar -False,170,4.3,4.29292,4.29292,39,38,455.0,Euro -False,157,4.0,4.05329,4.05329,38,10,455.0,Dollar -False,201,4.25,4.22026,4.22026,38,17,455.0,Pound -False,439,5.0,5.0,5.0,38,71,455.0,Pound -False,115,4.23077,4.18597,4.18597,38,28,455.0,Pound -False,92,4.77632,4.43682,4.43682,38,31,455.0,Dollar -True,3247,4.0,4.05387,4.05387,38,38,455.0,Pound -False,1927,3.9,3.81174,3.81174,38,8,455.0,Pound -False,583,4.76667,4.75928,4.75928,38,119,455.0,Pound -False,1096,3.66667,3.4743,3.4743,39,10,455.0,Dollar -False,7091,4.19444,4.29798,4.29798,39,25,455.0,Euro -True,3039,4.1,3.94021,3.94021,38,17,455.0,Euro -True,112,4.33333,4.29691,4.29691,38,50,455.0,Dollar -True,864,3.65,3.60456,3.60456,38,24,455.0,Pound -True,7986,4.5,4.33345,4.33345,38,66,455.0,Dollar -False,1139,3.85,3.93873,3.93873,38,27,455.0,Dollar -False,5503,3.75,3.68009,3.68009,38,52,455.0,Pound -False,168,4.3,4.41799,4.41799,38,4,455.0,Pound -True,6643,4.52632,4.58633,4.58633,38,32,455.0,Dollar -False,9047,4.19737,4.26449,4.26449,39,15,455.0,Dollar -False,3136,3.55,3.00358,3.00358,38,8,455.0,Euro -False,143,3.95,4.01056,4.01056,38,7,455.0,Dollar -False,961,4.0,3.54105,3.54105,38,17,455.0,Euro -True,320,3.9,3.89598,3.89598,38,25,455.0,Pound -True,1351,4.4,4.23177,4.23177,38,11,455.0,Dollar -True,2482,4.1,4.06574,4.06574,38,15,455.0,Euro -False,3784,4.7,4.67652,4.67652,38,42,455.0,Dollar -False,1405,3.95,3.95256,3.95256,38,13,455.0,Pound -True,157,4.2,4.19834,4.19834,38,25,455.0,Dollar -False,5626,4.1,4.08983,4.08983,38,18,455.0,Dollar -True,503,3.75,3.77557,3.77557,38,12,455.0,Dollar -True,123,3.8,3.64321,3.64321,38,10,455.0,Euro -True,193,3.95,4.10975,4.10975,38,20,455.0,Dollar -True,753,3.95,3.90479,3.90479,38,31,455.0,Pound -False,4514,4.0,3.76661,3.76661,38,17,455.0,Euro -True,13347,3.78947,3.93601,3.93601,38,37,455.0,Euro -True,219,3.5,3.53301,3.53301,38,16,455.0,Dollar -False,1519,3.2,3.34162,3.34162,38,7,455.0,Dollar -True,2368,4.05,3.94269,3.94269,38,16,455.0,Dollar -True,392,4.6,4.57578,4.57578,39,39,455.0,Dollar -True,514,3.7,3.74909,3.74909,38,26,455.0,Pound -True,362,4.6,4.54845,4.54845,39,8,455.0,Dollar -False,292,3.85,3.94933,3.94933,38,107,455.0,Dollar -True,1806,4.75,4.70695,4.70695,38,16,455.0,Euro -True,3400,4.5,4.50025,4.50025,38,59,455.0,Euro -False,3272,4.05,4.09226,4.09226,38,12,455.0,Euro -True,7429,4.28571,4.30608,4.30608,38,192,455.0,Euro -True,1417,4.25,4.56091,4.56091,38,24,455.0,Pound -True,277,4.1,4.16261,4.16261,38,43,455.0,Pound -True,10005,3.8,4.17177,4.17177,38,36,455.0,Euro -False,2264,4.45,4.37144,4.37144,38,14,455.0,Euro -False,2945,4.43421,4.38928,4.38928,38,31,700.0,Euro -True,464,4.85,4.84243,4.84243,37,18,455.0,Pound -False,5270,3.75,3.36315,3.36315,37,23,455.0,Dollar -True,1080,4.4,4.52874,4.52874,37,34,455.0,Dollar -False,185,4.15,4.18056,4.18056,37,12,455.0,Pound -True,422,4.3,4.28183,4.28183,37,43,455.0,Pound -False,3501,3.5,3.68879,3.68879,37,32,455.0,Euro -False,114,4.35,4.25452,4.25452,37,17,455.0,Dollar -False,349,4.25,4.32866,4.32866,37,30,455.0,Dollar -True,4517,4.3,4.43479,4.43479,37,50,455.0,Dollar -False,363,4.1,4.05807,4.05807,37,38,455.0,Euro -True,3832,2.9,3.48933,3.48933,37,15,455.0,Euro -True,94,4.39286,4.37821,4.37821,37,9,3200.0,Dollar -True,109,3.4,3.36174,3.36174,37,32,455.0,Euro -False,390,4.1,4.09989,4.09989,37,24,455.0,Dollar -True,287,3.6,3.59916,3.59916,37,20,455.0,Pound -True,5053,2.5,2.73536,2.73536,37,28,455.0,Dollar -False,1179,4.45,4.46267,4.46267,37,26,455.0,Dollar -True,2811,4.2,4.21095,4.21095,37,14,455.0,Pound -True,690,4.3,4.2409,4.2409,37,7,455.0,Pound -True,1143,4.65,4.60998,4.60998,37,22,455.0,Pound -False,268,4.2,4.27744,4.27744,37,35,455.0,Dollar -True,1313,3.55,3.47183,3.47183,37,50,455.0,Dollar -False,728,2.6,2.59588,2.59588,37,7,455.0,Pound -True,4323,3.45,3.51398,3.51398,37,24,455.0,Pound -True,1359,3.9,3.84926,3.84926,37,12,455.0,Pound -True,221,4.35,4.37196,4.37196,37,19,455.0,Pound -True,1684,4.0,4.0365,4.0365,37,39,455.0,Pound -True,5070,4.2,4.13456,4.13456,37,19,455.0,Dollar -False,1424,4.2,4.03275,4.03275,37,31,455.0,Pound -False,104,4.32143,4.18066,4.18066,37,12,455.0,Euro -False,2686,3.85,3.72971,3.72971,37,21,455.0,Euro -True,140,3.35,3.35277,3.35277,37,10,455.0,Euro -True,479,4.25,4.22774,4.22774,37,14,455.0,Euro -True,1448,4.2,4.19399,4.19399,37,28,455.0,Pound -True,2465,4.65,4.67906,4.67906,37,16,455.0,Dollar -False,1646,2.95,2.86946,2.86946,37,19,455.0,Euro -True,414,3.7,3.52288,3.52288,37,18,520.0,Dollar -True,1313,3.9,3.93373,3.93373,37,22,455.0,Dollar -False,95,4.05,3.9742,3.9742,37,22,455.0,Euro -True,343,2.8,2.89167,2.89167,37,0,520.0,Pound -True,8543,4.32,4.48612,4.48612,37,6,455.0,Pound -True,7320,3.4,2.97273,2.97273,37,11,455.0,Pound -True,2633,4.15,4.04333,4.04333,37,26,455.0,Dollar -True,199,3.85,3.84194,3.84194,37,8,455.0,Dollar -True,391,3.05,3.0943,3.0943,37,26,455.0,Euro -False,180,3.15,3.07066,3.07066,37,24,455.0,Euro -True,108,3.25,3.24372,3.24372,37,8,455.0,Euro -False,13388,3.15,3.52042,3.52042,37,14,455.0,Dollar -True,178,4.46154,4.39436,4.39436,37,31,455.0,Euro -True,439,4.3,4.2672,4.2672,37,9,455.0,Pound -True,215,4.25,4.29162,4.29162,37,13,455.0,Dollar -False,3007,3.9,4.42748,4.42748,37,20,455.0,Pound -True,2194,4.6,4.58019,4.58019,37,27,455.0,Dollar -False,6402,3.55,3.47334,3.47334,37,20,455.0,Pound -True,160,4.0,3.98103,3.98103,37,59,455.0,Euro -True,2784,3.8,3.7435,3.7435,37,19,455.0,Euro -False,350,4.1,4.24054,4.24054,37,33,455.0,Pound -True,7211,3.75,3.66891,3.66891,37,69,455.0,Pound -True,6634,4.5,4.55978,4.55978,37,20,455.0,Pound -True,478,4.58333,4.56028,4.56028,37,10,455.0,Pound -False,1548,4.45,4.44713,4.44713,36,12,455.0,Euro -True,360,2.85,2.8686,2.8686,36,51,455.0,Dollar -False,243,4.1,4.00002,4.00002,36,10,455.0,Dollar -True,170,4.33333,4.31352,4.31352,36,0,455.0,Dollar -False,3341,4.26667,4.35011,4.35011,36,7,455.0,Dollar -False,6271,4.0,4.03066,4.03066,36,33,455.0,Euro -False,372,4.3,4.28484,4.28484,36,18,455.0,Dollar -False,553,2.95,2.97596,2.97596,36,16,455.0,Dollar -False,69,3.75,3.66158,3.66158,36,6,455.0,Pound -False,228,3.75,3.73263,3.73263,36,143,455.0,Pound -True,6012,4.8,4.82842,4.82842,36,56,455.0,Dollar -True,197,4.55,4.72431,4.72431,36,43,455.0,Dollar -True,1179,4.0,3.99632,3.99632,36,12,455.0,Euro -False,2868,4.5,4.52897,4.52897,36,12,455.0,Dollar -False,2171,3.55,3.60917,3.60917,36,37,455.0,Pound -True,326,3.65,3.73975,3.73975,36,21,455.0,Euro -True,1254,4.2,4.27843,4.27843,36,43,455.0,Dollar -True,977,4.54545,4.57811,4.57811,36,36,455.0,Pound -True,8686,4.15,4.39867,4.39867,36,71,455.0,Dollar -False,8533,4.04167,3.96655,3.96655,36,25,455.0,Euro -False,4507,3.25,3.46291,3.46291,36,19,455.0,Pound -True,112,4.0,4.0283,4.0283,36,10,455.0,Euro -False,919,4.02941,4.09865,4.09865,37,131,1360.0,Dollar -True,459,4.2,4.11625,4.11625,36,34,455.0,Pound -True,1634,2.8,2.7395,2.7395,36,27,455.0,Pound -True,2820,4.05,4.08098,4.08098,36,30,455.0,Euro -True,832,4.4,4.49174,4.49174,36,56,455.0,Euro -True,132,4.56522,4.48299,4.48299,37,27,455.0,Dollar -False,5821,3.85,3.78203,3.78203,36,36,455.0,Dollar -False,896,4.33333,4.32719,4.32719,36,36,455.0,Dollar -True,305,4.3,4.31143,4.31143,36,7,455.0,Pound -False,1114,4.3,4.29549,4.29549,36,16,455.0,Dollar -True,2791,4.35,4.23454,4.23454,36,26,455.0,Pound -True,9215,4.0,4.29464,4.29464,36,17,455.0,Pound -False,1953,4.6,4.58225,4.58225,36,14,455.0,Euro -True,126,4.3,4.31585,4.31585,36,21,455.0,Pound -False,9220,3.91667,3.95235,3.95235,36,28,455.0,Pound -False,173,4.25,4.23116,4.23116,36,16,455.0,Pound -False,225,4.3,4.18614,4.18614,36,20,455.0,Euro -False,157,4.45,4.62646,4.62646,36,29,700.0,Pound -True,2677,4.25,4.24988,4.24988,36,24,455.0,Euro -True,2606,4.2,4.14034,4.14034,36,14,455.0,Pound -True,122,3.9,3.94902,3.94902,36,22,455.0,Euro -False,157,3.9,3.97697,3.97697,36,39,455.0,Dollar -False,1108,4.2,4.41525,4.41525,36,28,455.0,Pound -False,780,3.4,3.49189,3.49189,36,21,455.0,Dollar -True,10834,4.11538,4.25516,4.25516,36,22,455.0,Pound -False,108,4.04545,4.07617,4.07617,36,0,455.0,Euro -True,2226,3.75,3.9849,3.9849,36,18,455.0,Pound -False,270,4.25,4.2549,4.2549,36,29,455.0,Dollar -True,835,4.8,4.80339,4.80339,36,77,455.0,Pound -False,203,4.4,4.51103,4.51103,36,8,455.0,Euro -False,2127,4.25,4.25158,4.25158,36,33,455.0,Pound -False,6023,4.3,4.39633,4.39633,36,23,455.0,Pound -False,101,4.18182,4.11472,4.11472,36,6,455.0,Dollar -False,150,4.95,4.95576,4.95576,36,9,960.0,Dollar -False,17413,3.4,3.31811,3.31811,36,40,455.0,Pound -True,2030,4.2,4.33658,4.33658,36,17,455.0,Pound -False,132,4.2,4.14098,4.14098,36,86,455.0,Dollar -False,1202,3.6,3.61619,3.61619,36,26,455.0,Dollar -True,10010,3.58824,3.71802,3.71802,35,23,455.0,Euro -True,268,4.15,4.12152,4.12152,35,33,455.0,Dollar -False,928,4.55,4.57295,4.57295,35,35,455.0,Pound -False,316,2.4,2.5215,2.5215,35,31,455.0,Euro -False,334,4.05,3.94362,3.94362,35,102,455.0,Pound -True,507,4.1,4.19622,4.19622,35,6,455.0,Pound -False,4221,4.71875,4.72526,4.72526,35,22,455.0,Pound -False,895,3.75,3.66608,3.66608,35,39,455.0,Dollar -False,1818,3.5,3.68103,3.68103,35,15,455.0,Euro -True,1317,4.45,4.47699,4.47699,35,56,455.0,Euro -False,4415,4.1,4.17502,4.17502,35,105,488.0,Euro -True,4563,4.45,4.36923,4.36923,35,63,455.0,Pound -True,292,4.4,4.42028,4.42028,35,25,455.0,Pound -True,124,3.85,3.87067,3.87067,35,21,455.0,Pound -False,113,4.2,4.27373,4.27373,35,17,455.0,Dollar -False,136,3.1,3.10345,3.10345,35,16,455.0,Dollar -False,4638,4.5,4.51931,4.51931,35,7,455.0,Pound -False,748,3.94286,4.0792,4.0792,35,0,455.0,Dollar -False,540,3.5,4.18524,4.18524,35,8,455.0,Dollar -True,793,4.0,4.00813,4.00813,35,25,455.0,Pound -True,110,4.0,3.92977,3.92977,35,6,455.0,Dollar -True,526,4.15,4.07681,4.07681,35,22,455.0,Dollar -False,244,3.7,3.78722,3.78722,35,21,455.0,Dollar -False,1902,3.8,3.77919,3.77919,35,40,455.0,Dollar -True,1349,4.0,4.02398,4.02398,35,17,455.0,Pound -True,245,4.7,4.65883,4.65883,35,33,455.0,Dollar -False,192,3.8,3.77464,3.77464,35,10,455.0,Pound -False,195,4.3,4.37611,4.37611,35,33,455.0,Dollar -False,81,4.25,4.19346,4.19346,35,7,455.0,Pound -False,2314,3.75,3.55424,3.55424,35,13,455.0,Euro -True,1085,4.0,4.05521,4.05521,35,28,455.0,Euro -False,86,4.45,4.28497,4.28497,35,15,455.0,Pound -False,6631,4.05,4.38849,4.38849,35,28,455.0,Dollar -False,2566,4.75,4.77095,4.77095,35,99,455.0,Dollar -False,229,4.15,4.0722,4.0722,35,15,700.0,Euro -True,1350,4.35,4.34032,4.34032,35,18,455.0,Pound -True,8681,4.5,4.35797,4.35797,35,40,455.0,Pound -False,1574,3.8,3.48533,3.48533,35,52,455.0,Dollar -True,693,4.55,4.60881,4.60881,35,14,455.0,Euro -True,2157,3.65,3.63239,3.63239,35,10,455.0,Dollar -True,1016,4.0,4.13471,4.13471,35,27,455.0,Dollar -True,9762,4.7,4.71852,4.71852,35,18,455.0,Dollar -False,4994,3.25,3.23537,3.23537,35,60,455.0,Euro -True,104,4.05,4.13178,4.13178,35,18,455.0,Pound -True,130,4.95,4.93529,4.93529,36,0,3200.0,Pound -True,104,4.28261,4.44637,4.44637,35,56,455.0,Euro -False,4411,4.05,3.95246,3.95246,35,29,455.0,Euro -False,72,4.36364,4.38776,4.38776,35,11,455.0,Euro -True,266,4.46154,4.47581,4.47581,36,42,455.0,Euro -False,5023,4.4,4.449,4.449,35,53,455.0,Pound -False,2310,3.75,4.04932,4.04932,35,53,455.0,Dollar -False,3129,4.15,4.16006,4.16006,35,14,455.0,Pound -True,1419,3.65,3.44811,3.44811,35,34,455.0,Dollar -True,3239,4.0,3.84593,3.84593,35,40,455.0,Pound -True,2511,4.8,4.80821,4.80821,36,32,455.0,Pound -False,1291,3.45,3.42982,3.42982,35,18,455.0,Euro -True,3297,4.4,4.23366,4.23366,35,19,455.0,Pound -False,276,4.33333,4.30393,4.30393,35,219,455.0,Dollar -True,200,4.3,4.36559,4.36559,35,17,455.0,Dollar -True,100,4.03571,4.08015,4.08015,35,20,455.0,Dollar -True,1041,4.35,4.21894,4.21894,35,73,455.0,Pound -True,1445,3.85,3.84912,3.84912,35,26,455.0,Euro -True,256,3.8,3.77616,3.77616,35,61,455.0,Dollar -True,880,4.1,4.02431,4.02431,36,14,455.0,Dollar -False,483,3.85,3.70114,3.70114,35,16,455.0,Pound -True,159,4.15,4.13108,4.13108,35,19,455.0,Euro -False,123,4.4,4.38468,4.38468,35,31,455.0,Pound -False,1937,3.5,3.62527,3.62527,35,8,455.0,Dollar -False,418,3.95,4.03753,4.03753,35,52,455.0,Pound -False,244,3.45,3.4648,3.4648,35,25,455.0,Pound -False,227,3.85,3.85314,3.85314,35,22,455.0,Pound -True,321,4.65,4.57196,4.57196,35,37,455.0,Euro -False,5996,3.6,3.13268,3.13268,35,22,455.0,Dollar -True,769,4.35,4.36649,4.36649,34,22,455.0,Dollar -False,111,4.25,4.41076,4.41076,34,41,455.0,Dollar -False,649,3.4,3.49054,3.49054,34,12,455.0,Pound -False,89,3.6,3.74624,3.74624,34,23,3200.0,Euro -True,1452,4.0,4.03456,4.03456,34,21,455.0,Pound -True,174,4.14286,4.2751,4.2751,37,29,455.0,Pound -True,177,4.51613,4.4126,4.4126,35,131,455.0,Pound -False,1616,3.95,3.92845,3.92845,34,28,455.0,Pound -False,1768,3.8,3.75037,3.75037,34,67,455.0,Pound -False,2283,4.5,4.47472,4.47472,34,49,455.0,Dollar -True,295,4.3,4.27262,4.27262,34,24,455.0,Dollar -False,953,3.55,3.68127,3.68127,34,16,455.0,Pound -True,469,3.3,3.06003,3.06003,34,25,455.0,Euro -True,14404,4.25,4.18484,4.18484,34,145,455.0,Dollar -True,5138,3.5,3.98373,3.98373,34,9,800.0,Pound -False,205,4.1,3.92702,3.92702,34,7,455.0,Pound -False,72,4.1,4.24297,4.24297,34,74,455.0,Euro -False,2801,3.85,3.73097,3.73097,34,41,455.0,Euro -False,412,4.45,4.6631,4.6631,34,7,455.0,Pound -True,389,3.9,3.89551,3.89551,34,41,455.0,Dollar -False,175,4.25,4.20917,4.20917,34,37,455.0,Euro -False,4722,3.2,2.99937,2.99937,34,24,455.0,Euro -True,3619,3.9,3.8544,3.8544,34,34,455.0,Pound -False,167,3.75,3.9554,3.9554,34,20,455.0,Pound -True,150,4.25,4.27542,4.27542,34,22,455.0,Dollar -False,746,4.85294,4.78937,4.78937,34,16,455.0,Dollar -True,315,2.25,2.2485,2.2485,34,7,455.0,Dollar -False,191,3.75,3.75495,3.75495,34,10,455.0,Dollar -True,3698,4.25,4.18778,4.18778,34,23,455.0,Euro -True,724,4.5,4.7013,4.7013,34,78,455.0,Pound -False,1089,4.45,4.49929,4.49929,34,6,455.0,Euro -False,119,4.35,4.34426,4.34426,34,6,455.0,Dollar -True,101,4.5,4.54132,4.54132,34,7,455.0,Euro -True,2114,3.9,3.95461,3.95461,34,8,455.0,Pound -True,1304,4.15,4.08527,4.08527,34,38,468.0,Pound -True,1668,4.5,4.4917,4.4917,34,27,455.0,Dollar -False,366,4.2,4.07354,4.07354,34,18,455.0,Pound -True,1948,3.6,3.49417,3.49417,34,31,455.0,Euro -True,1601,3.9,4.18066,4.18066,34,7,455.0,Euro -False,9081,3.85,3.93421,3.93421,34,26,455.0,Euro -False,1626,4.5,4.36047,4.36047,34,18,455.0,Dollar -True,2831,4.1,3.93517,3.93517,34,10,455.0,Pound -False,94,4.2,4.21137,4.21137,34,17,455.0,Dollar -True,5961,4.29412,4.40398,4.40398,34,11,455.0,Euro -True,272,3.95,3.87215,3.87215,34,31,455.0,Dollar -True,267,3.95,3.9932,3.9932,34,26,455.0,Dollar -False,385,3.85,3.78419,3.78419,34,31,455.0,Pound -True,1597,4.65,4.6327,4.6327,34,29,455.0,Pound -False,158,3.1,3.15165,3.15165,34,22,455.0,Euro -False,3696,4.25,4.21377,4.21377,34,19,455.0,Pound -False,172,4.23214,4.25595,4.25595,34,13,455.0,Pound -False,214,4.35,4.49926,4.49926,34,32,455.0,Euro -False,12794,3.7,3.78622,3.78622,34,53,455.0,Euro -True,8224,3.6,3.89028,3.89028,34,16,455.0,Euro -True,1537,4.13158,4.25051,4.25051,34,47,455.0,Euro -False,7107,4.2,4.46468,4.46468,34,37,455.0,Dollar -False,1599,4.45,4.54026,4.54026,34,26,455.0,Dollar -True,806,3.8,3.6844,3.6844,34,30,455.0,Euro -False,363,4.0,3.86162,3.86162,34,51,455.0,Dollar -False,1584,3.9,3.71626,3.71626,34,50,455.0,Pound -False,113,4.07895,3.97984,3.97984,34,34,455.0,Euro -False,314,4.39706,4.48056,4.48056,34,9,455.0,Pound -False,3546,4.5,4.56973,4.56973,34,19,455.0,Pound -False,1117,4.1,4.12242,4.12242,33,9,455.0,Euro -True,164,4.35,4.32095,4.32095,33,110,455.0,Pound -True,155,4.85,4.84262,4.84262,33,14,455.0,Pound -True,6769,3.7,4.07146,4.07146,33,14,455.0,Euro -False,1764,4.3,4.24326,4.24326,33,8,455.0,Euro -False,1979,4.15,3.90836,3.90836,33,27,455.0,Euro -False,68,4.1,4.13946,4.13946,33,7,455.0,Dollar -True,108,3.9,3.85839,3.85839,33,27,455.0,Dollar -True,2759,3.65,3.62494,3.62494,33,12,455.0,Pound -True,1075,3.85,3.83842,3.83842,33,16,455.0,Euro -True,105,4.56061,4.56875,4.56875,36,43,455.0,Pound -True,116,4.3,4.30656,4.30656,33,6,455.0,Dollar -True,230,4.15,4.22913,4.22913,33,12,455.0,Euro -True,197,4.2,4.21466,4.21466,33,54,455.0,Pound -False,1424,4.05,4.17516,4.17516,33,17,455.0,Euro -True,1260,3.55,3.60502,3.60502,33,30,455.0,Euro -True,1099,4.4,4.39986,4.39986,33,17,455.0,Euro -False,208,4.40909,4.36064,4.36064,33,9,455.0,Dollar -False,310,4.2,4.17224,4.17224,33,33,455.0,Dollar -True,2264,3.55,3.56694,3.56694,33,13,455.0,Euro -False,816,3.55,3.54281,3.54281,33,18,455.0,Pound -False,2266,4.3,4.2552,4.2552,33,7,455.0,Pound -True,663,4.55,4.69098,4.69098,33,29,455.0,Dollar -False,2762,3.85,3.59521,3.59521,33,20,455.0,Dollar -False,3845,3.9,4.06461,4.06461,33,20,455.0,Pound -False,5820,3.5,3.30793,3.30793,33,28,455.0,Pound -True,153,4.0,3.92333,3.92333,33,17,455.0,Pound -False,4430,4.4,4.19823,4.19823,33,33,455.0,Pound -False,293,3.75,3.74303,3.74303,33,18,455.0,Euro -True,212,3.75,3.73634,3.73634,33,19,455.0,Pound -True,2666,4.0,3.73182,3.73182,33,27,455.0,Euro -False,315,4.71429,4.69314,4.69314,33,313,455.0,Pound -True,5181,4.5,4.48189,4.48189,33,16,455.0,Dollar -False,99,4.3,4.24721,4.24721,33,12,455.0,Dollar -False,110,4.3,4.32601,4.32601,33,24,455.0,Dollar -False,975,2.8,2.63071,2.63071,33,27,468.0,Euro -True,215,4.0,3.96958,3.96958,33,19,455.0,Dollar -True,185,4.31818,4.25879,4.25879,33,13,455.0,Euro -True,1329,3.95,4.04095,4.04095,33,9,455.0,Pound -False,387,4.64583,4.62816,4.62816,33,11,455.0,Pound -True,5818,3.7,3.57281,3.57281,33,31,455.0,Pound -True,2121,4.25,4.13832,4.13832,33,7,455.0,Euro -True,5563,3.15,3.09239,3.09239,33,8,455.0,Euro -False,262,3.5,3.60993,3.60993,33,13,455.0,Euro -False,892,3.7,3.74821,3.74821,33,23,455.0,Euro -True,642,3.75,3.94566,3.94566,33,15,455.0,Dollar -True,3615,4.0,3.94266,3.94266,33,9,455.0,Pound -True,189,3.65,3.8821,3.8821,33,78,455.0,Euro -True,8098,4.21875,4.41968,4.41968,33,27,455.0,Dollar -True,960,4.25,4.2654,4.2654,33,5,455.0,Euro -True,3747,3.5,2.90921,2.90921,33,21,468.0,Dollar -True,116,4.375,4.35504,4.35504,33,9,455.0,Pound -True,283,4.15,4.15977,4.15977,33,78,455.0,Pound -False,482,3.9,3.86386,3.86386,33,10,468.0,Euro -True,378,4.2,4.18811,4.18811,33,65,455.0,Pound -False,1297,4.15,4.14013,4.14013,33,19,455.0,Pound -False,1501,2.8,2.97476,2.97476,33,26,455.0,Dollar -False,248,4.5,4.48916,4.48916,33,27,455.0,Euro -False,3195,4.45,4.47386,4.47386,33,39,455.0,Euro -True,296,4.55882,4.21475,4.21475,33,34,455.0,Pound -True,1276,3.8,3.81182,3.81182,33,19,455.0,Dollar -True,2065,4.45,4.44598,4.44598,33,14,455.0,Dollar -False,223,4.3,4.1284,4.1284,33,15,455.0,Euro -True,148,3.95,3.97834,3.97834,33,16,455.0,Euro -False,2819,4.2,4.46797,4.46797,33,11,455.0,Dollar -True,245,4.85,4.81125,4.81125,33,51,455.0,Dollar -True,5353,4.42424,4.56803,4.56803,33,8,455.0,Dollar -False,512,4.6,4.70493,4.70493,32,24,455.0,Euro -False,263,4.75,4.75285,4.75285,32,6,455.0,Euro -True,1735,3.75,3.75629,3.75629,32,12,455.0,Euro -False,233,3.55,3.60847,3.60847,32,44,455.0,Euro -True,1249,3.7,3.88096,3.88096,32,44,455.0,Pound -False,1144,4.8,4.77889,4.77889,32,16,455.0,Euro -False,176,3.9,4.06412,4.06412,32,88,455.0,Euro -True,109,4.3,4.39168,4.39168,32,26,455.0,Euro -True,1029,4.40625,4.4239,4.4239,32,10,455.0,Euro -True,3577,3.15,3.30378,3.30378,32,7,455.0,Pound -False,2123,4.35,4.22233,4.22233,32,6,455.0,Pound -False,2655,4.0,4.06282,4.06282,32,120,455.0,Euro -True,2855,4.1,4.18984,4.18984,32,24,455.0,Euro -True,156,4.55,4.53762,4.53762,32,6,455.0,Euro -True,684,3.2,3.4717,3.4717,32,13,455.0,Dollar -False,412,3.7,3.70804,3.70804,32,7,455.0,Pound -False,468,3.75,3.87619,3.87619,32,54,455.0,Dollar -True,371,4.1,3.96186,3.96186,32,44,455.0,Euro -False,222,4.5,4.57179,4.57179,32,87,455.0,Pound -False,145,4.45,4.33166,4.33166,32,21,455.0,Euro -False,97,4.35,4.48686,4.48686,32,17,455.0,Dollar -True,144,4.35,4.36814,4.36814,32,5,455.0,Pound -False,74,4.2,4.16463,4.16463,32,12,455.0,Dollar -True,174,4.35,4.36877,4.36877,32,50,455.0,Pound -False,4039,4.1,4.43175,4.43175,32,17,455.0,Pound -False,1360,4.15,4.32936,4.32936,32,11,455.0,Dollar -False,1938,4.25,4.20115,4.20115,34,51,455.0,Dollar -True,169,3.9,3.88388,3.88388,32,30,455.0,Euro -True,116,3.4,3.29105,3.29105,32,8,455.0,Dollar -False,6615,3.35,4.03258,4.03258,32,0,455.0,Euro -False,156,4.35,4.34373,4.34373,32,20,455.0,Dollar -True,1714,4.0,3.96079,3.96079,32,97,455.0,Pound -False,209,3.95,4.00123,4.00123,32,44,455.0,Euro -False,254,3.9,3.84019,3.84019,32,12,455.0,Euro -False,1155,4.55,4.63889,4.63889,32,19,455.0,Euro -True,107,4.8,4.7655,4.7655,32,50,455.0,Dollar -False,166,4.76667,4.72768,4.72768,32,26,455.0,Pound -False,253,3.85,3.88102,3.88102,32,28,455.0,Pound -False,649,2.85,2.78543,2.78543,32,7,455.0,Pound -False,903,3.7,3.66676,3.66676,32,6,455.0,Pound -True,1415,4.9,4.87331,4.87331,32,27,455.0,Euro -False,287,3.9,3.83114,3.83114,32,30,455.0,Pound -False,1362,4.55,4.50371,4.50371,32,25,455.0,Pound -True,692,4.6,4.57694,4.57694,32,16,455.0,Dollar -False,1137,4.3,4.33725,4.33725,32,24,455.0,Euro -True,123,3.95,3.94667,3.94667,32,38,455.0,Euro -True,10161,4.15,4.26592,4.26592,32,15,455.0,Pound -True,1167,3.35,3.62298,3.62298,32,22,455.0,Euro -True,942,4.35,4.08302,4.08302,32,18,455.0,Dollar -False,1153,4.35,4.17974,4.17974,32,8,455.0,Dollar -False,774,4.1,4.05345,4.05345,32,34,455.0,Euro -False,2386,4.59375,4.57659,4.57659,32,25,455.0,Euro -True,101,4.73438,4.72755,4.72755,32,40,455.0,Pound -False,902,3.55,3.67652,3.67652,32,19,455.0,Dollar -True,3082,3.7,3.82056,3.82056,32,29,455.0,Euro -False,8274,4.0,4.18747,4.18747,32,31,455.0,Pound -False,3669,3.9,3.7578,3.7578,32,12,455.0,Dollar -False,141,4.8,4.78966,4.78966,32,7,455.0,Pound -False,141,4.16667,4.16797,4.16797,32,21,455.0,Euro -False,116,3.5,3.44313,3.44313,32,49,455.0,Pound -True,5093,3.2,3.55247,3.55247,31,14,455.0,Pound -True,2514,4.4,4.34484,4.34484,31,16,455.0,Euro -False,1492,3.5,3.71457,3.71457,31,21,455.0,Pound -True,537,3.65,3.61792,3.61792,31,60,520.0,Euro -False,158,3.8,3.77149,3.77149,31,44,455.0,Pound -True,1727,4.8,4.78907,4.78907,31,20,455.0,Dollar -True,799,4.2,4.16749,4.16749,31,17,455.0,Dollar -True,247,4.6,4.61806,4.61806,31,59,455.0,Dollar -True,4794,3.95,4.21912,4.21912,31,44,455.0,Euro -True,149,3.7,3.759,3.759,31,14,455.0,Pound -False,138,3.15,3.13706,3.13706,31,7,455.0,Euro -True,237,4.3,4.29203,4.29203,31,12,455.0,Euro -True,1227,3.9,3.80289,3.80289,31,29,455.0,Pound -False,97,3.96154,4.05924,4.05924,31,18,455.0,Pound -False,3728,3.67742,3.6748,3.6748,31,6,455.0,Dollar -False,1177,4.2,4.38461,4.38461,31,6,455.0,Euro -False,141,4.75,4.77004,4.77004,31,53,455.0,Pound -False,5003,3.7,3.58261,3.58261,31,25,455.0,Pound -False,4791,4.0,3.66321,3.66321,31,30,455.0,Pound -True,1205,4.3,4.21277,4.21277,31,19,455.0,Pound -True,231,4.7,4.6791,4.6791,31,38,455.0,Pound -True,1120,4.25,4.19282,4.19282,31,7,455.0,Euro -False,2647,4.4,4.39356,4.39356,31,24,455.0,Euro -True,719,4.4,4.44521,4.44521,31,25,455.0,Pound -False,128,4.35,4.31884,4.31884,31,22,455.0,Dollar -False,167,4.40909,4.37767,4.37767,31,51,455.0,Pound -False,6434,4.04839,4.0535,4.0535,31,17,455.0,Dollar -False,1344,3.1,3.45442,3.45442,31,20,455.0,Euro -True,2816,4.2,4.39006,4.39006,31,39,455.0,Dollar -True,9307,3.84615,3.99604,3.99604,31,22,455.0,Euro -True,2617,4.05,3.8635,3.8635,31,15,455.0,Euro -True,6031,4.38,4.36757,4.36757,31,36,455.0,Pound -False,145,3.8,3.8093,3.8093,31,56,455.0,Pound -False,1560,4.15,3.99678,3.99678,31,16,455.0,Dollar -False,3915,3.35,3.67118,3.67118,31,10,455.0,Dollar -False,268,3.85,4.26562,4.26562,31,7,455.0,Pound -False,200,4.2931,4.20266,4.20266,31,13,455.0,Pound -False,242,3.65,3.14027,3.14027,31,39,455.0,Pound -False,1340,4.1,3.99053,3.99053,31,7,455.0,Euro -True,1351,3.35,3.07031,3.07031,31,9,455.0,Pound -False,219,4.0,4.09962,4.09962,31,16,455.0,Dollar -False,103,3.5,3.30415,3.30415,31,62,455.0,Euro -False,83,4.05,4.02476,4.02476,31,8,455.0,Dollar -True,397,3.2,3.22574,3.22574,31,18,455.0,Pound -True,1971,4.5,4.42724,4.42724,31,17,455.0,Euro -False,227,4.25,4.2789,4.2789,31,31,455.0,Dollar -False,445,3.2,3.46072,3.46072,31,45,455.0,Dollar -True,438,3.6,3.63769,3.63769,31,26,455.0,Euro -False,376,3.8,3.77373,3.77373,31,20,455.0,Euro -True,606,4.05,4.10496,4.10496,31,32,455.0,Dollar -False,852,4.15,4.15231,4.15231,31,31,455.0,Pound -False,4082,3.7,3.49514,3.49514,31,55,455.0,Pound -False,100,3.8,3.82838,3.82838,31,15,455.0,Pound -True,219,3.5,3.4581,3.4581,31,0,455.0,Pound -False,160,4.71429,4.71397,4.71397,31,27,455.0,Pound -True,8497,4.43333,4.49667,4.49667,31,18,455.0,Pound -False,169,4.75,4.77053,4.77053,31,20,455.0,Dollar -True,417,4.3,4.20312,4.20312,31,29,455.0,Pound -False,128,3.7,3.52775,3.52775,31,11,455.0,Dollar -True,9337,4.1,4.0987,4.0987,31,12,455.0,Euro -True,3916,3.95,3.8062,3.8062,31,37,455.0,Pound -True,95,4.59091,4.70311,4.70311,31,11,455.0,Euro -False,3744,4.3,4.61997,4.61997,31,26,455.0,Pound -False,505,4.55,4.52495,4.52495,31,18,455.0,Euro -True,155,3.45,3.40131,3.40131,31,6,455.0,Euro -False,613,2.7,2.94153,2.94153,31,9,455.0,Pound -False,134,4.35,4.33382,4.33382,31,33,455.0,Dollar -False,274,4.05,4.15409,4.15409,31,49,455.0,Dollar -True,5941,4.25806,4.36622,4.36622,31,30,455.0,Pound -True,1290,3.6,3.41654,3.41654,31,44,455.0,Dollar -False,621,3.45,3.50799,3.50799,31,22,455.0,Dollar -True,810,4.0,4.23479,4.23479,31,27,455.0,Dollar -True,1205,3.3,3.38882,3.38882,31,37,455.0,Euro -False,74,4.45,4.41949,4.41949,31,8,455.0,Dollar -True,150,3.8,3.67462,3.67462,31,20,455.0,Euro -False,1781,4.25,3.96435,3.96435,31,6,455.0,Pound -False,132,3.75,3.70564,3.70564,31,12,455.0,Dollar -True,239,4.65,4.56058,4.56058,31,36,455.0,Euro -True,8121,4.58333,4.60474,4.60474,31,17,455.0,Pound -True,229,4.59677,4.63915,4.63915,32,20,455.0,Dollar -True,707,4.1,4.03922,4.03922,30,47,455.0,Pound -False,170,4.15,4.17631,4.17631,30,9,455.0,Pound -False,288,4.55,4.4468,4.4468,30,36,455.0,Dollar -False,2413,4.05,3.96793,3.96793,30,30,455.0,Dollar -False,338,4.35,4.36109,4.36109,30,35,455.0,Dollar -True,282,4.3,4.25073,4.25073,30,26,455.0,Dollar -False,532,3.4,3.38313,3.38313,30,33,455.0,Dollar -True,249,3.55,3.62732,3.62732,30,67,455.0,Pound -False,212,4.25,4.17772,4.17772,30,34,455.0,Dollar -False,875,4.4,4.39903,4.39903,30,14,455.0,Euro -True,4369,4.4,4.56712,4.56712,30,42,455.0,Dollar -False,2555,4.6,4.52162,4.52162,30,39,455.0,Euro -True,778,4.15,4.229,4.229,30,17,455.0,Pound -True,2181,3.65,3.67787,3.67787,30,39,455.0,Dollar -False,155,4.5,4.47075,4.47075,30,25,455.0,Dollar -True,5983,4.34483,4.36768,4.36768,30,22,455.0,Dollar -False,129,4.1,4.13243,4.13243,30,37,455.0,Euro -False,3234,4.25,4.0752,4.0752,30,17,455.0,Euro -True,856,3.85,3.94248,3.94248,30,74,468.0,Dollar -False,210,3.5,3.51871,3.51871,30,12,455.0,Dollar -True,2917,3.05,3.07745,3.07745,30,7,455.0,Dollar -False,266,4.2,4.1363,4.1363,30,94,455.0,Dollar -True,2093,4.1,4.11916,4.11916,30,262,455.0,Euro -False,184,3.45,3.43277,3.43277,30,17,468.0,Pound -True,88,4.0,3.9427,3.9427,30,20,455.0,Euro -True,206,4.55,4.56614,4.56614,30,0,455.0,Dollar -False,88,4.65,4.54717,4.54717,30,23,455.0,Euro -True,5007,4.05,3.97673,3.97673,30,41,455.0,Euro -False,252,4.05,4.12705,4.12705,30,25,455.0,Pound -True,996,4.1,4.08643,4.08643,30,8,455.0,Euro -True,178,3.6,3.44566,3.44566,30,40,455.0,Pound -False,70,4.43478,4.0283,4.0283,30,15,455.0,Pound -True,3408,4.05,3.94015,3.94015,30,70,455.0,Pound -False,213,3.35,3.29351,3.29351,30,8,455.0,Dollar -True,278,4.55,4.53579,4.53579,30,6,455.0,Euro -False,1160,4.3,4.18305,4.18305,30,32,455.0,Euro -False,190,4.35,4.33391,4.33391,30,74,455.0,Euro -True,753,3.9,3.9085,3.9085,30,19,455.0,Dollar -True,3400,3.4,3.44882,3.44882,30,28,455.0,Dollar -True,5789,4.45,4.50494,4.50494,30,22,455.0,Euro -False,1602,4.55,4.50046,4.50046,30,39,455.0,Dollar -True,5844,3.3,3.18944,3.18944,30,20,455.0,Pound -True,953,3.8,3.8439,3.8439,30,49,455.0,Pound -False,100,4.33333,4.42089,4.42089,30,11,455.0,Euro -False,82,4.45,4.38993,4.38993,30,12,455.0,Pound -True,863,4.2,4.09023,4.09023,30,8,455.0,Pound -False,2997,3.7,4.00036,4.00036,30,16,455.0,Dollar -True,2698,4.35,4.20252,4.20252,30,32,455.0,Pound -False,721,4.55,4.55346,4.55346,30,21,455.0,Dollar -False,190,4.6,4.59896,4.59896,30,12,455.0,Pound -True,1099,3.85,3.81719,3.81719,30,15,455.0,Euro -False,6872,4.6,4.37432,4.37432,30,24,455.0,Euro -True,208,3.45,3.68734,3.68734,30,26,455.0,Euro -False,323,4.45,4.53625,4.53625,30,47,455.0,Pound -False,566,3.95,3.9521,3.9521,30,25,455.0,Pound -True,2217,3.7,3.47584,3.47584,30,25,455.0,Euro -True,2503,3.75,3.20141,3.20141,30,16,455.0,Pound -False,6488,4.5,4.66144,4.66144,30,14,455.0,Dollar -False,811,2.95,3.39738,3.39738,30,37,455.0,Euro -False,787,4.25,4.25065,4.25065,30,11,455.0,Euro -False,128,4.55,4.63798,4.63798,30,45,455.0,Pound -True,93,4.95,4.93679,4.93679,30,59,455.0,Euro -False,104,4.33333,4.24841,4.24841,30,15,455.0,Dollar -False,2292,4.25,4.39643,4.39643,31,66,455.0,Dollar -False,170,4.2,4.14669,4.14669,30,19,455.0,Euro -False,3377,4.15,3.93552,3.93552,30,10,455.0,Dollar -False,840,2.75,2.79436,2.79436,30,24,455.0,Euro -True,662,4.15,4.10097,4.10097,30,40,455.0,Dollar -False,343,4.7,4.66858,4.66858,30,27,455.0,Pound -False,512,3.25,3.18356,3.18356,30,41,455.0,Euro -False,243,4.05,3.98356,3.98356,30,52,455.0,Dollar -False,285,4.7,4.75213,4.75213,30,34,455.0,Euro -False,154,4.1,3.8422,3.8422,30,46,455.0,Dollar -False,196,4.0,3.91846,3.91846,30,72,455.0,Pound -True,162,4.71667,4.6724,4.6724,30,54,455.0,Pound -False,4720,3.9,4.00103,4.00103,30,6,455.0,Pound -False,190,4.2619,4.25768,4.25768,30,108,455.0,Pound -True,131,4.75,4.79686,4.79686,31,42,455.0,Dollar -False,2106,3.25,2.98505,2.98505,30,15,455.0,Dollar -False,149,4.45,4.53297,4.53297,29,36,455.0,Euro -True,204,3.75,3.37795,3.37795,29,29,455.0,Euro -False,1140,4.25,4.35117,4.35117,29,27,455.0,Euro -False,208,4.25,3.9917,3.9917,29,26,455.0,Pound -True,256,3.35,3.32451,3.32451,29,15,455.0,Euro -False,4834,3.95,3.99411,3.99411,29,21,455.0,Euro -False,216,4.4,4.38149,4.38149,29,33,455.0,Euro -False,88,3.8,3.80632,3.80632,29,11,455.0,Euro -True,1418,4.7,4.67019,4.67019,29,19,455.0,Euro -False,5572,4.2,3.96595,3.96595,29,21,455.0,Pound -True,1466,4.7,4.68821,4.68821,29,65,455.0,Euro -False,1196,4.1,4.22218,4.22218,29,10,455.0,Dollar -False,6834,2.8,2.68612,2.68612,29,13,455.0,Dollar -False,167,3.5,3.54172,3.54172,29,16,455.0,Dollar -True,193,3.75,3.70958,3.70958,29,18,455.0,Dollar -True,4178,4.3,4.26738,4.26738,29,13,455.0,Dollar -False,148,4.55,4.52722,4.52722,29,45,455.0,Euro -True,4030,4.65,4.5893,4.5893,29,11,455.0,Euro -True,1443,3.95,3.96999,3.96999,29,22,455.0,Dollar -True,1122,3.85,3.84617,3.84617,29,12,455.0,Euro -True,717,3.3,3.35149,3.35149,29,12,455.0,Euro -True,1123,4.75,4.71822,4.71822,29,9,455.0,Dollar -False,693,3.45,3.34219,3.34219,29,40,455.0,Euro -False,250,4.55,4.58831,4.58831,29,26,455.0,Pound -True,888,4.05,4.07397,4.07397,29,46,455.0,Pound -False,1219,4.4,4.4285,4.4285,29,37,455.0,Dollar -False,140,4.6,4.63656,4.63656,29,11,455.0,Euro -False,2265,3.9,3.86818,3.86818,29,12,455.0,Dollar -False,69,4.4,4.4285,4.4285,29,8,455.0,Pound -True,399,4.3,4.33032,4.33032,29,49,455.0,Euro -True,1457,4.25,4.38652,4.38652,29,18,455.0,Pound -True,2855,4.05,4.27026,4.27026,29,21,455.0,Pound -False,297,3.65,3.87953,3.87953,29,26,800.0,Pound -True,132,4.16667,4.23643,4.23643,29,35,455.0,Pound -False,38,4.74138,4.74189,4.74189,29,22,700.0,Dollar -False,233,4.2,4.20839,4.20839,29,10,455.0,Dollar -False,2043,4.15,4.03761,4.03761,29,78,455.0,Euro -False,11150,3.8,3.84653,3.84653,29,45,455.0,Dollar -True,1126,3.45,3.29835,3.29835,29,36,455.0,Euro -False,125,3.9,3.77434,3.77434,29,44,455.0,Pound -False,195,3.95,3.84869,3.84869,29,8,455.0,Pound -False,135,4.05,3.94432,3.94432,29,36,455.0,Pound -False,84,4.15,4.07337,4.07337,29,26,455.0,Pound -False,2423,4.5,4.39126,4.39126,29,12,455.0,Euro -True,67,4.15,4.05024,4.05024,29,8,455.0,Pound -True,7253,4.22727,4.1227,4.1227,29,29,455.0,Euro -False,1743,4.15,4.13558,4.13558,29,45,455.0,Pound -False,2094,4.5,4.46268,4.46268,29,56,455.0,Euro -True,247,4.5,4.42794,4.42794,29,13,455.0,Euro -True,122,4.4,4.34529,4.34529,29,22,455.0,Dollar -False,136,3.5,3.54899,3.54899,30,24,455.0,Dollar -True,1826,3.2,3.55848,3.55848,29,22,455.0,Euro -False,1079,4.05,4.0529,4.0529,29,11,455.0,Dollar -False,66,4.55,4.53549,4.53549,29,17,455.0,Euro -False,138,3.95,3.96288,3.96288,29,42,455.0,Dollar -True,6766,4.17241,4.20019,4.20019,29,29,455.0,Pound -False,860,3.9,3.87178,3.87178,29,23,455.0,Euro -True,118,3.95,3.93049,3.93049,29,10,455.0,Pound -False,829,3.95,3.93963,3.93963,29,36,455.0,Euro -True,132,3.85,3.80213,3.80213,29,55,455.0,Euro -False,6398,4.05,3.78251,3.78251,29,35,455.0,Euro -False,238,4.25,4.10472,4.10472,29,42,455.0,Dollar -False,134,4.65,4.70907,4.70907,29,17,455.0,Pound -True,292,4.95,4.95259,4.95259,29,30,455.0,Euro -False,313,3.5,3.59567,3.59567,29,14,455.0,Pound -True,2695,4.55,4.38428,4.38428,29,19,455.0,Dollar -True,1602,4.8,4.74569,4.74569,29,10,455.0,Pound -True,3438,3.35,3.53096,3.53096,29,15,455.0,Euro -True,123,4.3,4.28191,4.28191,29,11,2320.0,Pound -False,149,4.05,3.88676,3.88676,29,54,455.0,Pound -True,5041,4.05172,4.14027,4.14027,29,27,455.0,Pound -False,109,4.68966,4.63355,4.63355,29,7,455.0,Pound -True,442,4.05,4.17677,4.17677,29,31,455.0,Dollar -False,334,3.45,3.48576,3.48576,29,22,455.0,Euro -True,281,4.15,4.23283,4.23283,29,65,455.0,Euro -False,135,3.0,3.04761,3.04761,29,9,455.0,Dollar -True,737,4.25,4.07217,4.07217,29,27,455.0,Euro -False,92,4.4,4.26486,4.26486,29,25,455.0,Dollar -True,1055,3.95,3.84461,3.84461,29,7,455.0,Euro -False,224,4.2,4.13437,4.13437,29,22,455.0,Pound -True,5597,3.95,4.20521,4.20521,29,27,455.0,Dollar -True,1877,4.7,4.68048,4.68048,29,24,455.0,Euro -True,87,3.5,3.49379,3.49379,29,27,455.0,Euro -False,336,4.7,4.73441,4.73441,28,35,455.0,Euro -False,111,4.25,4.25056,4.25056,28,13,455.0,Euro -True,111,3.9,4.10898,4.10898,28,18,455.0,Pound -False,602,3.0,2.97331,2.97331,28,41,455.0,Pound -True,110,4.45,4.48784,4.48784,28,14,455.0,Euro -False,193,4.6,4.59291,4.59291,28,36,455.0,Dollar -True,119,3.8,3.67156,3.67156,28,15,455.0,Pound -False,1456,3.45,3.49235,3.49235,28,10,455.0,Pound -False,49,3.45,3.45645,3.45645,28,12,455.0,Euro -False,1153,4.3,4.27442,4.27442,28,25,455.0,Pound -False,1287,3.85,3.95382,3.95382,28,10,455.0,Euro -True,519,3.75,3.72947,3.72947,28,8,455.0,Pound -False,6139,3.7,3.21873,3.21873,28,18,455.0,Euro -False,1050,4.15,4.00025,4.00025,28,29,455.0,Dollar -True,662,4.2,4.09761,4.09761,28,26,700.0,Dollar -False,136,4.35,4.36637,4.36637,28,22,455.0,Euro -True,846,4.3,4.35939,4.35939,28,13,455.0,Dollar -True,118,4.75,4.81861,4.81861,29,29,455.0,Pound -False,1441,3.65,3.85383,3.85383,28,10,455.0,Euro -True,181,4.65,4.62531,4.62531,28,12,455.0,Dollar -False,1832,3.3,3.28611,3.28611,28,69,455.0,Euro -False,4010,4.15,3.89241,3.89241,28,13,455.0,Dollar -False,78,4.28571,4.24081,4.24081,28,0,640.0,Euro -False,195,4.75,4.7836,4.7836,28,21,455.0,Dollar -False,782,4.3,4.30445,4.30445,29,79,455.0,Euro -True,130,4.5,4.54117,4.54117,28,34,455.0,Euro -True,176,3.8,3.6235,3.6235,28,32,455.0,Pound -False,1068,3.35,3.39779,3.39779,28,32,455.0,Euro -True,151,4.75,4.73896,4.73896,28,14,455.0,Pound -True,2033,4.1,4.05481,4.05481,28,72,455.0,Dollar -True,172,4.16071,4.14038,4.14038,28,10,455.0,Dollar -False,1209,4.15,4.11888,4.11888,28,39,455.0,Pound -True,694,4.4,4.38328,4.38328,28,27,455.0,Dollar -False,5369,4.05,3.87161,3.87161,28,67,455.0,Pound -True,101,4.6,4.59053,4.59053,28,16,455.0,Euro -False,75,4.58824,4.60903,4.60903,28,35,455.0,Dollar -True,323,4.55,4.54603,4.54603,28,44,455.0,Pound -False,455,4.35,4.41787,4.41787,28,42,455.0,Euro -False,173,3.8,3.73263,3.73263,28,13,455.0,Pound -False,111,3.1,2.92756,2.92756,28,10,455.0,Pound -True,4811,4.1,3.90464,3.90464,28,23,455.0,Dollar -True,4071,3.7,3.61118,3.61118,28,37,455.0,Dollar -False,53,4.86,4.85517,4.85517,28,26,455.0,Euro -True,121,4.85,4.84737,4.84737,28,12,455.0,Dollar -False,1246,4.25,4.28269,4.28269,28,17,455.0,Euro -True,210,4.45,4.42563,4.42563,28,46,455.0,Dollar -True,1466,3.75,4.25624,4.25624,28,43,455.0,Pound -True,2256,3.65,3.65823,3.65823,28,7,455.0,Euro -True,236,3.95,4.01401,4.01401,28,10,455.0,Euro -False,209,4.6,4.60132,4.60132,28,31,455.0,Dollar -False,779,2.95,2.88443,2.88443,28,5,455.0,Dollar -False,108,4.91071,4.89885,4.89885,30,46,455.0,Euro -True,752,3.6,3.98967,3.98967,28,31,455.0,Pound -True,173,4.6,4.57709,4.57709,28,6,720.0,Pound -False,5014,3.9,3.98257,3.98257,28,31,455.0,Dollar -True,3207,4.25,4.30652,4.30652,28,8,455.0,Dollar -False,155,4.2,4.17963,4.17963,28,28,455.0,Euro -True,123,3.25,3.23188,3.23188,28,12,455.0,Dollar -True,481,4.35,4.35438,4.35438,28,15,455.0,Dollar -True,394,4.3,4.42225,4.42225,28,73,455.0,Euro -True,100,4.5,4.52913,4.52913,28,27,455.0,Dollar -False,723,4.5,4.58155,4.58155,28,60,455.0,Pound -True,2060,4.0,3.91291,3.91291,28,43,455.0,Euro -True,1506,4.05,4.2306,4.2306,28,20,455.0,Dollar -True,2476,3.95,3.79535,3.79535,28,12,455.0,Dollar -True,1053,3.4,3.76106,3.76106,28,10,455.0,Pound -False,1147,4.2,4.19551,4.19551,28,11,455.0,Pound -True,68,4.4,4.24177,4.24177,28,27,455.0,Pound -True,1124,4.5,4.52622,4.52622,29,9,455.0,Pound -True,124,4.53846,4.53072,4.53072,28,40,1920.0,Pound -True,1676,3.65,3.40537,3.40537,28,95,455.0,Dollar -False,6913,4.05,4.06866,4.06866,28,27,455.0,Euro -True,389,3.65,3.74593,3.74593,28,23,455.0,Euro -False,149,2.85,2.85834,2.85834,28,41,455.0,Pound -True,206,4.1,4.23321,4.23321,28,25,455.0,Euro -True,117,4.2,4.22994,4.22994,28,13,455.0,Pound -True,143,4.45,4.46589,4.46589,28,10,455.0,Pound -False,694,4.2,4.20013,4.20013,28,11,455.0,Dollar -True,135,4.86364,4.84194,4.84194,28,6,455.0,Pound -False,116,4.3,4.27284,4.27284,28,14,455.0,Dollar -True,900,4.25,4.24342,4.24342,27,19,700.0,Euro -True,221,4.7,4.6136,4.6136,27,41,455.0,Euro -False,707,4.5,4.50731,4.50731,27,18,455.0,Dollar -False,1633,4.0,3.93767,3.93767,27,22,455.0,Pound -False,7580,3.39286,3.80102,3.80102,27,21,455.0,Pound -True,99,4.0,4.0371,4.0371,27,17,455.0,Euro -True,152,4.2,4.38152,4.38152,27,27,455.0,Dollar -True,191,3.7,3.46294,3.46294,27,0,455.0,Euro -False,6612,4.27083,4.42049,4.42049,27,26,455.0,Euro -False,6537,3.9,3.57496,3.57496,27,15,455.0,Dollar -False,176,3.85,3.84146,3.84146,27,9,455.0,Pound -False,255,4.05,3.89175,3.89175,27,16,455.0,Pound -True,65,3.55,4.17567,4.17567,27,5,455.0,Euro -False,607,3.85,3.79979,3.79979,27,36,455.0,Euro -True,3038,4.25,4.10971,4.10971,27,52,455.0,Pound -True,8693,4.33333,4.37427,4.37427,27,68,455.0,Euro -False,3691,4.35,4.1603,4.1603,27,39,468.0,Pound -True,186,3.75,3.64867,3.64867,27,13,455.0,Dollar -True,627,3.85,3.9597,3.9597,27,15,455.0,Pound -False,331,4.05,4.02448,4.02448,27,33,455.0,Dollar -True,1735,3.55,3.62677,3.62677,27,52,455.0,Euro -True,142,4.6,4.58361,4.58361,27,11,800.0,Pound -False,118,3.85,3.8478,3.8478,27,20,455.0,Pound -True,2369,3.85,3.68989,3.68989,27,38,455.0,Pound -True,119,4.75,4.77984,4.77984,27,29,455.0,Dollar -False,1979,4.4,4.31946,4.31946,27,29,455.0,Dollar -True,127,4.59259,4.58543,4.58543,27,29,455.0,Euro -False,4276,3.72222,3.65047,3.65047,27,8,455.0,Euro -False,526,4.2,4.61035,4.61035,28,49,455.0,Euro -True,170,3.55,3.65748,3.65748,27,10,455.0,Pound -False,1343,4.3,3.8461,3.8461,27,36,455.0,Pound -True,166,4.4,4.42428,4.42428,27,44,455.0,Dollar -False,80,3.07692,3.10904,3.10904,27,18,455.0,Dollar -False,258,3.8,3.84493,3.84493,27,17,455.0,Pound -False,82,3.85,3.79214,3.79214,27,34,455.0,Dollar -True,120,3.9,4.0578,4.0578,27,49,455.0,Euro -True,105,3.85,3.88345,3.88345,27,6,455.0,Euro -False,1609,4.8,4.8544,4.8544,27,23,455.0,Euro -True,1752,4.15,4.09916,4.09916,27,8,455.0,Pound -True,1183,3.7,3.66632,3.66632,27,20,455.0,Dollar -True,1672,3.45,3.43806,3.43806,27,4,455.0,Pound -False,1326,4.5,4.53031,4.53031,27,29,455.0,Pound -True,68,4.05,3.96999,3.96999,27,41,455.0,Pound -True,1061,3.85,3.78202,3.78202,27,6,455.0,Pound -True,191,4.11765,4.09969,4.09969,27,15,455.0,Pound -True,185,4.5,4.54034,4.54034,27,47,455.0,Euro -True,263,4.15,4.10223,4.10223,27,88,462.0,Euro -True,680,4.15,4.10219,4.10219,27,13,455.0,Euro -False,77,4.33333,4.33282,4.33282,27,25,455.0,Dollar -False,2089,3.5,3.57258,3.57258,27,96,455.0,Euro -True,3146,3.15,3.22498,3.22498,27,16,455.0,Euro -False,232,4.4,4.31949,4.31949,27,35,455.0,Dollar -True,4556,4.3,3.92197,3.92197,27,11,455.0,Dollar -False,408,4.15,4.38281,4.38281,27,12,455.0,Pound -True,113,4.05,4.07321,4.07321,27,9,455.0,Euro -False,184,4.85,4.84597,4.84597,27,37,455.0,Euro -False,361,3.9,3.84124,3.84124,27,59,455.0,Euro -True,2495,4.15,4.02382,4.02382,27,11,455.0,Pound -False,183,4.30769,4.23763,4.23763,28,34,455.0,Pound -True,138,4.57407,4.57942,4.57942,27,41,1520.0,Pound -True,1391,4.05,4.09566,4.09566,27,29,455.0,Euro -False,70,4.31818,4.33015,4.33015,27,8,455.0,Pound -False,1075,3.85,3.74158,3.74158,27,25,455.0,Dollar -True,256,4.0,3.9951,3.9951,27,9,455.0,Pound -False,128,4.3,4.21021,4.21021,27,29,455.0,Pound -False,1362,3.25,3.29053,3.29053,27,21,455.0,Pound -False,62,3.9,3.937,3.937,27,24,2880.0,Pound -False,904,4.7,4.69918,4.69918,27,11,455.0,Dollar -False,6187,4.35,4.71852,4.71852,27,24,455.0,Euro -False,246,3.8,3.75377,3.75377,27,0,455.0,Euro -True,3209,4.5,4.47988,4.47988,27,113,455.0,Dollar -True,296,4.0,4.05657,4.05657,27,38,455.0,Pound -True,213,3.8,3.75853,3.75853,27,5,455.0,Euro -False,3318,3.7,3.73458,3.73458,27,28,455.0,Pound -False,2211,4.05,3.89007,3.89007,27,12,455.0,Pound -False,7265,3.84375,3.83191,3.83191,27,11,455.0,Euro -True,109,3.8,3.926,3.926,27,43,455.0,Euro -True,1436,3.55,3.69014,3.69014,26,47,455.0,Dollar -False,247,3.8,3.99676,3.99676,26,26,455.0,Euro -False,1036,3.85,3.93156,3.93156,26,19,455.0,Pound -True,605,4.5,4.45061,4.45061,26,16,455.0,Pound -True,862,4.1,3.87651,3.87651,26,22,455.0,Dollar -True,534,3.1,3.09057,3.09057,26,9,455.0,Euro -True,3614,4.65,4.65824,4.65824,26,20,455.0,Dollar -False,101,4.6,4.5748,4.5748,26,10,455.0,Pound -True,136,4.8,4.74665,4.74665,26,63,455.0,Dollar -False,14677,4.11538,3.94368,3.94368,26,91,455.0,Dollar -True,5411,4.25,4.23542,4.23542,26,7,455.0,Dollar -False,1518,3.91667,3.98742,3.98742,26,5,455.0,Pound -True,3642,3.5,3.12582,3.12582,26,12,455.0,Dollar -True,2442,3.85,3.9491,3.9491,26,21,455.0,Dollar -False,100,4.45,4.40392,4.40392,26,29,455.0,Euro -False,249,4.35,4.47652,4.47652,26,12,455.0,Dollar -True,184,4.35,4.43386,4.43386,26,10,455.0,Euro -False,68,4.0,4.02518,4.02518,26,35,455.0,Pound -True,72,4.25,4.26464,4.26464,26,8,455.0,Euro -False,1287,3.6,3.61818,3.61818,26,24,455.0,Euro -False,1178,3.1,3.20675,3.20675,26,18,455.0,Dollar -True,2683,4.35,4.35507,4.35507,27,18,455.0,Dollar -False,332,4.85,4.90098,4.90098,27,25,455.0,Pound -False,1736,4.05,4.05432,4.05432,26,17,455.0,Dollar -True,97,3.65,3.60327,3.60327,26,15,455.0,Pound -False,792,3.3,3.33312,3.33312,26,9,455.0,Euro -False,5262,3.15,3.15779,3.15779,26,17,455.0,Dollar -False,132,3.25,3.34161,3.34161,26,13,455.0,Pound -True,118,4.1,4.11736,4.11736,26,13,455.0,Euro -False,165,4.55,4.54823,4.54823,26,12,455.0,Pound -True,8959,3.9,2.62665,2.62665,27,14,455.0,Pound -True,203,3.55,3.34705,3.34705,26,25,455.0,Euro -True,71,3.85,3.85835,3.85835,26,12,455.0,Dollar -False,1332,4.15,4.15746,4.15746,26,56,455.0,Euro -False,3544,3.4,3.10467,3.10467,26,12,455.0,Dollar -True,6104,4.4,4.51548,4.51548,26,10,455.0,Euro -True,13084,4.35,4.12239,4.12239,26,6,455.0,Dollar -False,7179,4.34615,4.51694,4.51694,26,23,455.0,Pound -True,1755,4.45,4.36144,4.36144,26,29,455.0,Euro -True,1410,4.3,4.27943,4.27943,26,46,455.0,Euro -False,2781,3.85,3.70314,3.70314,26,8,455.0,Euro -True,1066,2.8,2.97557,2.97557,26,23,455.0,Euro -True,259,4.0,3.95252,3.95252,26,23,455.0,Pound -False,72,4.6,4.45672,4.45672,26,21,455.0,Pound -False,2449,3.9,4.14263,4.14263,26,11,455.0,Euro -False,1496,4.15,4.3831,4.3831,26,25,455.0,Euro -False,1014,3.9,3.85836,3.85836,26,22,455.0,Dollar -False,2746,4.05,4.19926,4.19926,26,21,455.0,Pound -True,1119,3.85,3.80626,3.80626,26,35,455.0,Pound -False,96,4.2,4.15157,4.15157,26,17,455.0,Pound -True,1473,4.2,4.24547,4.24547,26,30,455.0,Euro -True,1102,4.55,4.48819,4.48819,26,15,455.0,Pound -True,1102,3.95,3.99664,3.99664,26,192,455.0,Euro -False,2729,4.55,4.51303,4.51303,26,38,455.0,Pound -False,3607,4.1,4.07973,4.07973,26,62,455.0,Pound -False,175,4.8,4.78301,4.78301,26,12,455.0,Euro -False,54,3.47059,3.63367,3.63367,26,14,455.0,Euro -False,81,4.7,4.68577,4.68577,26,37,455.0,Dollar -True,2370,3.95,4.04328,4.04328,26,19,455.0,Dollar -False,3079,4.7,4.62204,4.62204,26,30,455.0,Pound -True,3982,4.3,4.38968,4.38968,26,17,455.0,Dollar -True,2532,4.0,3.91773,3.91773,26,76,455.0,Euro -True,119,4.5,4.44512,4.44512,26,60,455.0,Pound -False,3226,4.1,4.22179,4.22179,26,12,455.0,Pound -True,5607,3.65,3.76709,3.76709,26,30,455.0,Pound -False,848,3.9,4.03456,4.03456,26,19,455.0,Euro -False,1210,3.85,3.54949,3.54949,26,34,455.0,Euro -True,292,4.35,4.41459,4.41459,26,19,455.0,Euro -True,155,4.22727,4.00769,4.00769,26,48,455.0,Pound -True,5051,3.6,3.65932,3.65932,26,11,455.0,Pound -True,124,4.2,4.185,4.185,26,10,455.0,Pound -True,5391,3.92308,3.94271,3.94271,26,21,455.0,Pound -True,77,4.73077,4.52705,4.52705,26,39,455.0,Euro -True,612,4.45,4.53348,4.53348,26,41,455.0,Pound -False,139,3.8,3.95437,3.95437,26,11,455.0,Euro -True,927,4.25,4.20871,4.20871,26,32,455.0,Pound -False,1250,3.75,3.50345,3.50345,26,36,455.0,Pound -False,791,3.85,3.50657,3.50657,26,25,455.0,Pound -True,122,4.8,4.79498,4.79498,26,35,455.0,Dollar -True,3662,3.15,2.66672,2.66672,26,145,455.0,Pound -True,37,3.85,4.08247,4.08247,26,9,455.0,Euro -False,1170,3.55,3.63187,3.63187,26,24,455.0,Euro -True,2157,3.45,3.69566,3.69566,26,17,455.0,Pound -False,777,3.7,3.72159,3.72159,26,26,455.0,Pound -False,2551,3.55,3.41162,3.41162,26,37,455.0,Pound -True,126,3.6,3.47162,3.47162,27,0,455.0,Pound -False,3933,3.7,3.57555,3.57555,26,10,455.0,Pound -True,545,3.85,3.97576,3.97576,26,28,455.0,Dollar -False,5500,4.32692,4.27801,4.27801,26,12,455.0,Pound -True,463,4.25,3.99639,3.99639,25,14,455.0,Euro -True,1211,3.65,3.5836,3.5836,25,39,455.0,Pound -True,281,3.5,3.49967,3.49967,25,15,455.0,Dollar -True,984,3.7,3.66123,3.66123,25,19,455.0,Euro -False,1189,4.05,4.09105,4.09105,25,99,455.0,Dollar -True,2006,3.95,3.97287,3.97287,25,19,455.0,Pound -False,121,4.0,4.03127,4.03127,25,24,455.0,Pound -False,474,3.3,3.32523,3.32523,25,74,455.0,Dollar -False,216,4.5,4.36054,4.36054,25,28,455.0,Dollar -False,111,4.9,4.89941,4.89941,25,9,1600.0,Dollar -True,159,4.1,4.1909,4.1909,25,115,455.0,Euro -False,156,4.0,4.00033,4.00033,25,46,468.0,Pound -False,198,4.38095,4.31999,4.31999,25,64,455.0,Pound -True,120,4.07692,4.10748,4.10748,25,42,455.0,Euro -True,834,3.25,3.01802,3.01802,25,26,455.0,Euro -True,671,3.75,3.82331,3.82331,25,18,455.0,Dollar -False,161,4.45,4.38935,4.38935,25,39,455.0,Euro -True,337,3.65,3.65906,3.65906,25,27,455.0,Euro -True,2366,4.25,4.38033,4.38033,25,10,455.0,Dollar -False,2220,4.0,4.0383,4.0383,25,12,455.0,Pound -False,1949,4.3,4.33203,4.33203,25,24,455.0,Dollar -False,1261,4.6,4.59276,4.59276,25,91,455.0,Pound -True,165,4.44,4.44651,4.44651,27,49,455.0,Euro -False,8232,4.1,4.13294,4.13294,25,37,455.0,Dollar -False,80,3.8,3.77506,3.77506,25,10,455.0,Dollar -False,137,3.65,3.60355,3.60355,25,9,455.0,Euro -True,958,3.25,3.33399,3.33399,25,35,455.0,Euro -False,5186,3.5,3.588,3.588,25,19,455.0,Euro -True,58,3.9,3.869,3.869,25,8,455.0,Euro -False,2752,3.7,3.6355,3.6355,25,13,455.0,Euro -True,1175,4.55,4.58596,4.58596,25,23,455.0,Dollar -False,75,3.35,3.33789,3.33789,25,9,455.0,Euro -True,109,4.25,3.94227,3.94227,25,11,455.0,Pound -True,3376,3.55,3.58187,3.58187,25,12,455.0,Euro -True,102,4.31818,4.30034,4.30034,25,25,455.0,Dollar -False,825,4.47368,4.45701,4.45701,25,85,455.0,Pound -True,152,4.6,4.57253,4.57253,25,45,455.0,Pound -True,993,4.2,4.28208,4.28208,25,14,455.0,Pound -True,3021,3.5,3.50621,3.50621,25,10,455.0,Euro -True,3638,4.15,4.05955,4.05955,25,33,455.0,Euro -False,1500,4.35,4.35399,4.35399,25,38,455.0,Euro -False,194,4.45,4.42107,4.42107,25,45,3200.0,Pound -True,13181,4.5,4.64346,4.64346,25,76,455.0,Euro -False,154,4.0,3.99083,3.99083,25,26,455.0,Pound -False,5639,3.5,3.63667,3.63667,25,24,455.0,Dollar -False,960,4.0,3.95255,3.95255,25,22,455.0,Euro -False,66,4.05,4.02094,4.02094,25,16,455.0,Euro -True,119,4.35,4.29944,4.29944,25,36,455.0,Pound -True,5569,4.65,4.81056,4.81056,25,49,455.0,Pound -False,108,4.25,4.14752,4.14752,25,8,455.0,Dollar -False,230,4.27083,4.43679,4.43679,25,30,455.0,Euro -False,3088,3.8,3.82396,3.82396,25,6,455.0,Pound -False,1431,3.75,3.55269,3.55269,25,43,455.0,Pound -True,71,4.05,4.03662,4.03662,25,20,455.0,Pound -False,860,4.2,4.19254,4.19254,25,21,455.0,Euro -True,283,4.15,4.04032,4.04032,25,16,455.0,Pound -False,925,3.05,3.1225,3.1225,25,12,455.0,Euro -True,7470,3.7,3.96158,3.96158,25,10,455.0,Pound -False,5056,4.2,4.16921,4.16921,25,14,455.0,Euro -False,3627,3.5,3.89712,3.89712,25,37,455.0,Pound -True,143,4.48,4.54238,4.54238,25,50,1200.0,Euro -True,66,3.85,3.4887,3.4887,25,18,1360.0,Euro -True,8297,3.6,3.87812,3.87812,25,38,455.0,Dollar -False,324,4.45,4.21312,4.21312,25,38,455.0,Dollar -True,471,3.7,3.78116,3.78116,25,11,455.0,Dollar -False,94,4.0,4.02976,4.02976,25,12,455.0,Euro -True,172,3.95,3.7328,3.7328,25,13,455.0,Euro -False,325,4.25,4.27848,4.27848,25,9,455.0,Pound -False,111,3.95,3.88866,3.88866,25,20,455.0,Dollar -True,83,3.9,3.87844,3.87844,25,11,455.0,Pound -False,138,3.7,3.53708,3.53708,25,0,455.0,Pound -False,338,4.55,4.50662,4.50662,25,0,455.0,Euro -True,1355,4.35,4.36524,4.36524,25,26,455.0,Euro -False,69,4.58,4.27687,4.27687,25,10,455.0,Pound -False,507,4.05,4.01269,4.01269,25,10,455.0,Pound -True,5258,4.15,4.03139,4.03139,25,134,455.0,Pound -True,765,4.4,4.52771,4.52771,25,6,455.0,Dollar -False,1339,4.0,3.90664,3.90664,25,15,455.0,Dollar -True,4521,3.65,4.01711,4.01711,25,21,455.0,Pound -True,66,4.75,4.74846,4.74846,25,27,455.0,Dollar -True,2553,3.35,3.62194,3.62194,25,54,455.0,Dollar -True,6232,3.8,3.66636,3.66636,25,7,455.0,Dollar -True,661,4.15,4.17718,4.17718,24,57,455.0,Euro -True,118,3.8,3.75769,3.75769,24,6,455.0,Euro -True,85,3.3,3.32237,3.32237,24,11,455.0,Pound -True,3003,3.85,3.63206,3.63206,24,22,455.0,Euro -False,151,3.2,3.15752,3.15752,24,11,455.0,Dollar -True,143,3.85,3.97658,3.97658,24,48,455.0,Euro -False,1823,4.5,4.6288,4.6288,24,11,455.0,Euro -False,2142,4.0,3.98658,3.98658,24,58,455.0,Euro -False,755,4.1,4.03838,4.03838,24,17,455.0,Dollar -False,1338,3.2,3.27347,3.27347,24,8,455.0,Dollar -True,747,4.25,4.28777,4.28777,24,16,455.0,Dollar -False,2077,4.2,4.06177,4.06177,24,8,455.0,Euro -True,108,4.3,4.13959,4.13959,24,48,455.0,Dollar -False,2454,3.3,3.13407,3.13407,24,18,455.0,Dollar -False,108,4.8,4.82344,4.82344,24,21,455.0,Euro -False,65,2.35,2.47247,2.47247,24,72,455.0,Dollar -False,338,4.13636,3.82782,3.82782,24,29,455.0,Euro -False,440,3.95,3.93661,3.93661,24,14,455.0,Pound -False,729,3.35,3.03714,3.03714,24,26,455.0,Pound -True,107,4.05,4.01392,4.01392,24,47,455.0,Euro -True,4245,3.7,3.92925,3.92925,24,24,455.0,Dollar -True,79,4.55,4.54661,4.54661,24,12,455.0,Pound -True,211,3.95,4.0796,4.0796,24,0,455.0,Euro -True,4210,3.75,3.32402,3.32402,24,24,455.0,Pound -True,1118,4.1,4.13112,4.13112,24,31,455.0,Euro -False,1203,4.35,4.30861,4.30861,24,11,455.0,Pound -True,2476,4.85,4.82562,4.82562,24,175,455.0,Euro -True,1786,3.9,3.96673,3.96673,24,15,455.0,Dollar -True,223,3.9,3.85902,3.85902,24,16,455.0,Pound -False,427,4.75,4.7612,4.7612,24,22,455.0,Pound -True,121,3.95,3.84463,3.84463,24,17,455.0,Euro -False,383,4.2,4.17254,4.17254,24,42,455.0,Pound -True,149,4.45,4.33837,4.33837,24,19,455.0,Euro -True,1142,3.4,3.27646,3.27646,24,17,455.0,Euro -True,579,2.55,2.75386,2.75386,24,40,455.0,Euro -False,9492,4.05,3.94271,3.94271,24,18,455.0,Pound -True,6297,3.9,3.90234,3.90234,24,12,455.0,Euro -True,11454,4.2,3.80062,3.80062,24,21,455.0,Dollar -False,808,3.4,4.04479,4.04479,24,21,455.0,Dollar -False,126,4.15,4.00392,4.00392,24,30,455.0,Pound -False,1275,4.7,4.77214,4.77214,24,29,455.0,Euro -False,1264,4.2,4.15987,4.15987,24,22,455.0,Pound -True,1074,4.25,4.24453,4.24453,24,13,455.0,Dollar -False,241,4.4,4.37964,4.37964,24,25,455.0,Pound -True,232,4.3,4.33147,4.33147,24,31,455.0,Dollar -False,302,4.4,4.41381,4.41381,24,8,455.0,Pound -False,1192,4.8,4.70219,4.70219,24,99,455.0,Euro -False,166,3.9,3.8891,3.8891,24,7,455.0,Euro -True,146,4.05,4.43926,4.43926,24,27,455.0,Euro -True,1737,4.05,3.91849,3.91849,24,18,455.0,Euro -False,655,4.65,4.65753,4.65753,24,23,455.0,Pound -False,1360,4.4,4.35246,4.35246,24,59,455.0,Euro -True,106,4.5,4.50281,4.50281,24,10,455.0,Dollar -False,4990,3.75,2.97987,2.97987,24,10,455.0,Pound -True,1758,4.2,4.00677,4.00677,24,30,455.0,Dollar -True,1715,4.2,4.09507,4.09507,24,28,455.0,Dollar -False,5987,4.38095,4.28571,4.28571,24,37,455.0,Pound -True,214,4.85,4.83278,4.83278,24,29,455.0,Pound -True,433,3.65,3.62455,3.62455,24,25,455.0,Euro -True,62,3.7,3.61892,3.61892,24,6,455.0,Dollar -False,120,4.65,4.59209,4.59209,24,28,2560.0,Euro -True,109,4.5,4.76546,4.76546,25,31,455.0,Euro -True,182,4.55,4.58652,4.58652,24,18,455.0,Pound -False,4918,4.3,3.97773,3.97773,24,25,455.0,Pound -True,2526,3.6,3.53098,3.53098,24,68,455.0,Pound -True,4759,3.8,3.73628,3.73628,24,23,455.0,Euro -False,1020,2.65,2.69486,2.69486,24,29,455.0,Dollar -False,894,4.35,3.90109,3.90109,24,8,455.0,Dollar -False,290,3.85,3.76617,3.76617,24,12,455.0,Pound -True,737,3.95,4.00796,4.00796,24,78,455.0,Dollar -True,1760,3.6,3.43983,3.43983,24,42,455.0,Euro -True,7692,4.375,4.55199,4.55199,24,40,455.0,Dollar -False,1201,3.8,3.88573,3.88573,24,19,455.0,Euro -False,95,4.5,4.57092,4.57092,25,39,1840.0,Dollar -True,5559,4.3,4.30467,4.30467,24,21,455.0,Euro -True,3015,4.2,3.92732,3.92732,24,11,455.0,Dollar -True,95,3.45,3.50621,3.50621,24,18,455.0,Euro -True,129,4.35,4.33272,4.33272,24,15,700.0,Dollar -True,80,2.85,2.83686,2.83686,24,8,455.0,Pound -True,914,4.3,4.33021,4.33021,24,82,455.0,Euro -True,124,3.4,3.42758,3.42758,24,11,455.0,Euro -False,5015,3.39286,3.34213,3.34213,24,0,455.0,Euro -True,481,3.3,2.93186,2.93186,24,10,455.0,Dollar -True,2260,4.45,4.44146,4.44146,24,247,462.0,Pound -False,235,4.4,4.40651,4.40651,24,56,455.0,Pound -False,869,3.85,3.48492,3.48492,24,80,455.0,Dollar -False,568,3.9,3.96083,3.96083,24,26,455.0,Dollar -False,101,4.79167,4.81289,4.81289,25,40,455.0,Euro -True,1677,4.3,4.54189,4.54189,24,31,1920.0,Euro -True,1129,3.65,3.39624,3.39624,24,17,455.0,Euro -True,155,4.1,4.28139,4.28139,24,12,455.0,Pound -False,197,4.6,4.59222,4.59222,24,13,455.0,Pound -True,2491,4.05,3.8684,3.8684,24,31,455.0,Pound -True,193,4.65,4.64669,4.64669,24,20,455.0,Euro -False,133,4.25,4.20093,4.20093,24,51,455.0,Pound -False,97,3.7,3.71652,3.71652,24,11,455.0,Euro -True,95,3.25,3.27375,3.27375,24,143,455.0,Pound -True,165,3.86364,3.89194,3.89194,24,51,455.0,Euro -False,627,3.9,4.15755,4.15755,23,19,455.0,Euro -False,616,3.9,3.92626,3.92626,23,14,455.0,Dollar -False,2780,4.0,4.50944,4.50944,23,28,455.0,Euro -True,2263,4.4,4.53414,4.53414,23,16,455.0,Dollar -False,627,3.6,3.6002,3.6002,23,22,455.0,Dollar -False,724,3.5,3.76836,3.76836,24,19,455.0,Dollar -True,1349,4.1,4.13964,4.13964,23,25,455.0,Dollar -True,1079,2.05,2.56684,2.56684,23,19,455.0,Euro -False,306,4.45,4.39143,4.39143,23,37,455.0,Dollar -False,2188,3.7,3.7202,3.7202,23,9,455.0,Pound -True,122,4.25,4.04513,4.04513,23,49,455.0,Pound -True,2018,3.45,2.81024,2.81024,23,36,455.0,Euro -False,188,4.3,4.38451,4.38451,23,11,455.0,Dollar -False,5693,4.58333,4.44607,4.44607,23,31,455.0,Dollar -True,149,4.1875,3.98799,3.98799,23,0,494.0,Dollar -False,81,4.4,4.3939,4.3939,23,13,455.0,Pound -True,5808,4.6087,4.67048,4.67048,23,10,455.0,Pound -False,4199,3.5,3.79306,3.79306,23,13,455.0,Dollar -True,348,4.15,4.09105,4.09105,23,105,455.0,Dollar -True,511,4.35,4.51084,4.51084,23,48,455.0,Euro -True,1482,4.35,4.36878,4.36878,23,17,455.0,Euro -False,606,3.95,3.88701,3.88701,23,13,455.0,Dollar -True,1669,3.65,3.65861,3.65861,23,29,455.0,Euro -False,1320,3.4,3.38678,3.38678,23,13,455.0,Euro -True,1084,3.55,3.51681,3.51681,23,49,455.0,Euro -True,448,4.55,4.61121,4.61121,23,9,455.0,Euro -False,1654,3.8,3.88109,3.88109,23,23,455.0,Dollar -True,464,3.7,3.69145,3.69145,23,34,455.0,Pound -True,1189,3.6,3.59777,3.59777,23,18,455.0,Dollar -True,1366,4.3,4.50807,4.50807,23,18,455.0,Dollar -True,194,4.05,3.97704,3.97704,23,10,455.0,Pound -False,133,4.35,4.42397,4.42397,23,15,455.0,Pound -False,2070,4.6,4.49007,4.49007,23,29,455.0,Dollar -False,204,4.45,4.37976,4.37976,23,40,455.0,Pound -True,2285,3.95,3.78926,3.78926,23,69,455.0,Pound -True,108,3.9,3.44139,3.44139,23,13,455.0,Pound -True,3585,3.1,2.81441,2.81441,23,63,455.0,Euro -False,181,3.65,3.71877,3.71877,23,13,455.0,Pound -True,89,3.25,3.43545,3.43545,23,16,455.0,Euro -True,3014,4.05,4.5511,4.5511,23,5,455.0,Euro -True,692,3.93478,3.88976,3.88976,23,37,455.0,Dollar -True,2340,4.05,4.01262,4.01262,23,13,455.0,Euro -False,974,4.5,4.38601,4.38601,23,7,455.0,Pound -True,1795,3.65,3.73643,3.73643,23,38,455.0,Euro -True,315,4.3,4.35206,4.35206,23,36,455.0,Euro -False,475,3.7,3.57401,3.57401,23,12,455.0,Pound -False,1178,3.95,3.92543,3.92543,23,19,455.0,Dollar -True,728,4.05,3.91927,3.91927,23,82,455.0,Euro -False,942,4.4,4.43817,4.43817,23,31,455.0,Pound -True,6568,3.55,3.65505,3.65505,23,66,455.0,Pound -True,88,3.7,3.72199,3.72199,23,20,455.0,Dollar -True,50,4.15,3.98682,3.98682,23,26,455.0,Euro -False,57,4.6,4.58088,4.58088,23,17,455.0,Euro -True,1204,4.25,4.13093,4.13093,23,31,455.0,Euro -True,4954,4.4,4.47478,4.47478,23,79,455.0,Dollar -True,241,4.3,4.33276,4.33276,23,42,455.0,Dollar -False,614,3.45,3.50206,3.50206,23,35,455.0,Dollar -True,390,3.55,3.57137,3.57137,23,5,455.0,Euro -False,2138,4.35,4.21151,4.21151,23,47,455.0,Euro -False,106,4.15,4.61579,4.61579,23,20,455.0,Euro -False,249,4.15,4.13178,4.13178,23,10,455.0,Euro -False,1158,4.3,4.11447,4.11447,23,37,455.0,Pound -False,1303,4.2,4.26409,4.26409,23,19,455.0,Dollar -False,83,4.05,3.96777,3.96777,23,34,455.0,Pound -True,5926,4.34211,4.50294,4.50294,23,37,455.0,Euro -False,10751,3.65,4.07393,4.07393,23,29,455.0,Pound -True,338,3.85,3.7328,3.7328,23,28,455.0,Dollar -False,1958,3.95,3.72986,3.72986,23,34,455.0,Dollar -False,79,3.25,3.78532,3.78532,23,108,455.0,Pound -False,150,4.05,4.03556,4.03556,23,17,455.0,Pound -True,4167,3.45,3.37593,3.37593,23,37,455.0,Euro -True,127,3.65,3.60651,3.60651,23,26,455.0,Dollar -True,1153,3.75,3.65809,3.65809,23,87,455.0,Euro -False,4953,4.1,4.17003,4.17003,23,13,455.0,Euro -False,1509,4.4,4.37427,4.37427,23,102,455.0,Dollar -True,102,4.3,4.312,4.312,23,31,455.0,Euro -False,1009,4.35,4.30409,4.30409,23,40,455.0,Pound -False,1101,4.20455,4.25928,4.25928,23,10,3200.0,Pound -False,5660,4.22222,4.27592,4.27592,23,26,455.0,Pound -True,840,4.25,4.36505,4.36505,23,21,455.0,Dollar -True,297,4.4,4.41347,4.41347,23,33,455.0,Dollar -True,123,4.2,4.48369,4.48369,23,11,455.0,Pound -False,1213,4.15,4.03216,4.03216,23,35,455.0,Euro -True,111,3.9,3.8826,3.8826,23,18,455.0,Euro -False,91,4.3,4.28709,4.28709,23,11,455.0,Dollar -True,613,3.8,3.66383,3.66383,23,64,455.0,Euro -False,1860,4.7,4.71437,4.71437,23,12,455.0,Dollar -False,665,4.3,4.35975,4.35975,23,28,455.0,Euro -True,101,4.0,3.86502,3.86502,23,40,455.0,Dollar -False,753,2.8,2.5237,2.5237,23,49,455.0,Euro -False,3083,3.7,3.87941,3.87941,23,33,455.0,Euro -False,169,4.3,4.29038,4.29038,23,86,455.0,Pound -False,5505,3.86364,3.96645,3.96645,22,28,455.0,Euro -False,1625,3.5,2.87219,2.87219,22,22,455.0,Pound -True,82,4.25,4.23937,4.23937,22,7,455.0,Euro -True,142,3.6,3.58757,3.58757,22,8,455.0,Euro -True,122,4.45,4.5039,4.5039,22,13,455.0,Euro -True,208,4.25,4.45881,4.45881,22,17,455.0,Pound -True,1206,3.8,3.91113,3.91113,22,14,455.0,Euro -False,892,4.2,4.25756,4.25756,22,32,455.0,Euro -True,255,3.5,3.48719,3.48719,22,20,455.0,Pound -False,804,4.05,3.85148,3.85148,22,13,455.0,Euro -True,940,2.75,2.75738,2.75738,22,8,455.0,Dollar -False,10621,4.4,4.23455,4.23455,22,33,455.0,Pound -False,76,4.85,4.83713,4.83713,22,8,455.0,Euro -False,151,3.75,3.65545,3.65545,22,30,455.0,Pound -True,282,4.65,4.66975,4.66975,23,18,455.0,Euro -True,682,4.5,4.4719,4.4719,22,41,455.0,Euro -True,1159,3.95,3.94564,3.94564,22,6,455.0,Pound -False,2150,4.3,4.34716,4.34716,22,9,455.0,Dollar -False,120,4.35,4.32853,4.32853,22,9,455.0,Dollar -False,89,3.65,3.64547,3.64547,22,132,455.0,Pound -True,426,4.05,4.09002,4.09002,22,33,455.0,Dollar -True,156,3.95,4.04201,4.04201,22,9,455.0,Pound -False,1174,4.7,4.65907,4.65907,22,31,455.0,Euro -True,193,4.3,4.3967,4.3967,22,45,455.0,Euro -True,171,4.3,4.02226,4.02226,22,14,455.0,Euro -False,2110,3.9,3.95434,3.95434,22,8,455.0,Pound -True,108,3.5,3.76526,3.76526,22,13,455.0,Pound -False,6972,4.25,4.15296,4.15296,22,47,455.0,Euro -True,3615,3.7,3.61816,3.61816,22,12,455.0,Euro -False,131,4.25,4.24175,4.24175,22,24,520.0,Dollar -True,107,3.75,3.80181,3.80181,22,46,455.0,Pound -False,3062,3.84091,3.92185,3.92185,22,15,455.0,Pound -False,3721,3.5,3.7219,3.7219,22,60,455.0,Pound -True,184,4.35,4.33321,4.33321,22,23,455.0,Euro -True,1923,4.4,4.36859,4.36859,22,34,455.0,Euro -True,1357,4.1,3.92176,3.92176,22,33,455.0,Euro -False,6124,4.22727,4.4734,4.4734,22,28,455.0,Pound -True,2058,4.55,4.54056,4.54056,22,124,455.0,Euro -True,3641,3.75,3.63921,3.63921,22,16,455.0,Dollar -False,95,4.4,4.39081,4.39081,22,10,455.0,Euro -False,1375,2.5,2.55396,2.55396,22,15,455.0,Pound -False,508,4.45,4.42709,4.42709,22,24,455.0,Dollar -False,2755,4.5,4.6887,4.6887,22,20,455.0,Pound -False,114,3.5,3.12081,3.12081,22,9,455.0,Dollar -False,269,4.4,4.36987,4.36987,22,6,455.0,Dollar -False,1100,3.95,3.82171,3.82171,22,9,455.0,Dollar -True,4146,3.65,3.73494,3.73494,22,28,455.0,Dollar -False,101,4.25,4.33636,4.33636,22,16,455.0,Pound -False,1186,4.5,4.63929,4.63929,22,8,455.0,Euro -False,1161,4.05,4.16751,4.16751,22,39,455.0,Pound -True,1188,4.15,4.42303,4.42303,22,17,455.0,Dollar -False,736,4.7,4.68615,4.68615,22,13,455.0,Pound -False,1029,4.05,3.98843,3.98843,22,13,455.0,Dollar -True,122,4.3,4.34151,4.34151,22,15,455.0,Pound -True,738,4.05,4.09372,4.09372,22,6,455.0,Pound -True,13725,4.0,3.91192,3.91192,22,16,455.0,Dollar -True,210,4.7,4.63545,4.63545,22,13,455.0,Euro -True,194,3.1,3.10021,3.10021,22,19,455.0,Euro -True,3446,4.35,4.27516,4.27516,22,42,455.0,Pound -True,582,3.1,3.23602,3.23602,22,39,455.0,Euro -True,138,3.95,3.89272,3.89272,22,19,455.0,Pound -True,1102,3.95,3.98211,3.98211,22,32,455.0,Dollar -True,129,3.6,3.67571,3.67571,22,57,455.0,Pound -True,708,3.95,4.12205,4.12205,22,18,455.0,Pound -False,104,4.0,4.02044,4.02044,22,27,455.0,Euro -False,124,3.3,3.40152,3.40152,22,22,455.0,Euro -True,478,3.5,3.58116,3.58116,22,16,455.0,Euro -True,616,1.9,1.61558,1.61558,22,4,455.0,Euro -True,927,3.55,3.57274,3.57274,22,23,455.0,Euro -True,3980,4.1,4.18163,4.18163,22,17,455.0,Pound -True,650,3.4,3.31326,3.31326,22,40,455.0,Pound -False,105,4.35,4.29433,4.29433,22,265,455.0,Dollar -False,72,4.3,4.32375,4.32375,22,111,455.0,Pound -False,109,4.45,4.47669,4.47669,22,27,455.0,Pound -False,238,4.65,4.66455,4.66455,22,34,455.0,Pound -True,1674,3.8,4.1599,4.1599,22,27,455.0,Dollar -False,783,3.3,3.31806,3.31806,22,65,455.0,Dollar -True,148,4.55,4.59081,4.59081,22,27,455.0,Dollar -False,2781,4.0,3.94682,3.94682,23,10,455.0,Dollar -False,2141,4.75,4.72823,4.72823,22,25,455.0,Euro -False,93,4.45,4.44196,4.44196,22,8,1520.0,Euro -True,5906,3.25,3.15487,3.15487,22,9,455.0,Pound -True,1456,4.2,4.33916,4.33916,22,7,455.0,Euro -False,119,4.0,4.00505,4.00505,22,14,455.0,Dollar -False,1560,4.1,4.11187,4.11187,22,17,455.0,Pound -True,3279,4.5,4.40583,4.40583,22,38,455.0,Pound -False,75,4.1,4.13158,4.13158,22,22,474.0,Dollar -False,773,4.55,4.57692,4.57692,22,27,455.0,Pound -False,10694,3.95,3.65715,3.65715,22,26,455.0,Pound -True,1426,3.5,3.39709,3.39709,22,22,455.0,Euro -True,553,4.05,4.1249,4.1249,22,9,455.0,Pound -False,563,4.65,4.5444,4.5444,22,43,455.0,Pound -False,4929,4.29412,4.56594,4.56594,22,27,455.0,Pound -False,37,4.34091,4.24819,4.24819,22,18,455.0,Euro -False,1011,3.7,3.68492,3.68492,22,20,455.0,Dollar -True,909,3.7,3.80852,3.80852,22,22,455.0,Pound -True,1788,3.8,3.75542,3.75542,22,12,455.0,Euro -False,1393,4.2,4.19273,4.19273,22,34,455.0,Euro -False,93,3.05,2.97567,2.97567,22,43,455.0,Pound -True,4132,4.3,4.4392,4.4392,22,7,455.0,Dollar -False,2015,3.45,3.36304,3.36304,22,59,455.0,Pound -False,4981,4.5,4.30166,4.30166,22,15,455.0,Pound -True,175,2.9,2.77059,2.77059,22,42,455.0,Pound -False,1499,4.65,4.63475,4.63475,22,9,455.0,Dollar -True,80,4.35,4.21262,4.21262,22,23,455.0,Euro -False,600,4.6,4.45018,4.45018,22,21,455.0,Dollar -False,2828,4.4,4.42499,4.42499,22,47,455.0,Euro -True,1374,4.6,4.42776,4.42776,22,25,455.0,Euro -True,4093,3.84615,3.72496,3.72496,22,61,455.0,Pound -False,793,4.11538,4.10117,4.10117,22,64,455.0,Dollar -False,118,3.35,3.33974,3.33974,21,16,455.0,Euro -False,1616,4.5,4.53558,4.53558,21,6,455.0,Euro -True,5660,4.2,4.1806,4.1806,21,152,455.0,Pound -True,1152,3.45,3.3892,3.3892,21,12,455.0,Euro -True,4862,3.95,3.82335,3.82335,21,15,455.0,Euro -True,119,3.7,3.68894,3.68894,21,7,455.0,Dollar -True,120,4.35,4.34907,4.34907,21,5,455.0,Dollar -True,2069,3.7,3.66409,3.66409,21,12,455.0,Pound -False,40,4.15,4.3056,4.3056,21,7,455.0,Euro -False,58,4.5,4.4779,4.4779,21,10,455.0,Euro -False,841,3.85714,3.89864,3.89864,21,15,455.0,Pound -True,723,4.25,4.2654,4.2654,21,11,455.0,Dollar -True,38,4.05,4.13097,4.13097,21,26,455.0,Euro -True,2678,4.15,4.16909,4.16909,21,12,455.0,Dollar -False,550,4.4,4.17296,4.17296,21,31,455.0,Pound -False,2704,4.25,4.21049,4.21049,22,7,455.0,Dollar -False,94,4.04545,4.03103,4.03103,21,34,455.0,Euro -True,1271,4.25,4.12953,4.12953,21,12,455.0,Dollar -False,129,4.35,4.25902,4.25902,21,30,455.0,Dollar -False,1547,3.3,3.89898,3.89898,21,32,455.0,Dollar -True,265,4.5,4.49784,4.49784,21,40,455.0,Euro -True,2435,3.8,3.42771,3.42771,21,22,455.0,Euro -True,1735,4.75,4.71759,4.71759,21,6,455.0,Pound -False,479,3.35,3.28366,3.28366,21,74,462.0,Euro -True,304,3.9,3.84838,3.84838,21,21,455.0,Dollar -True,91,4.59524,4.58563,4.58563,22,38,455.0,Pound -True,7508,4.45,4.51678,4.51678,21,23,455.0,Euro -False,4007,4.57143,4.65215,4.65215,21,26,455.0,Euro -False,168,4.6,4.58759,4.58759,21,13,455.0,Pound -False,232,4.2,4.19829,4.19829,21,12,455.0,Dollar -True,67,3.8,3.93027,3.93027,21,39,455.0,Pound -True,296,4.2,4.19198,4.19198,21,17,455.0,Euro -False,1347,4.55,4.50693,4.50693,21,9,455.0,Dollar -True,2739,3.45,3.34648,3.34648,21,49,455.0,Dollar -True,103,4.45,4.38509,4.38509,21,11,455.0,Euro -False,1267,3.9,3.78622,3.78622,21,14,455.0,Dollar -False,1906,4.35,4.35385,4.35385,21,20,455.0,Pound -True,7466,4.35,4.44546,4.44546,21,9,455.0,Dollar -False,1039,4.3,4.29154,4.29154,21,26,455.0,Euro -False,162,3.7,3.61014,3.61014,21,44,455.0,Pound -True,550,4.04762,3.97211,3.97211,23,32,455.0,Euro -True,47,4.0,4.04619,4.04619,21,28,455.0,Dollar -False,6745,4.30952,4.47072,4.47072,21,31,455.0,Pound -True,112,4.1,4.0341,4.0341,21,24,455.0,Euro -True,199,3.75,3.65599,3.65599,21,20,455.0,Dollar -False,815,4.4,4.36165,4.36165,21,46,455.0,Pound -False,3362,3.4,3.16611,3.16611,21,9,455.0,Euro -False,463,3.4,3.44159,3.44159,21,16,455.0,Euro -False,1535,3.7,3.42673,3.42673,21,16,455.0,Pound -True,224,4.45,4.39843,4.39843,21,20,455.0,Dollar -False,193,4.65,4.62819,4.62819,21,13,455.0,Dollar -True,6363,3.8,3.87089,3.87089,21,12,455.0,Pound -False,144,3.2,3.29281,3.29281,21,12,3200.0,Pound -False,108,3.35,3.33438,3.33438,21,18,455.0,Euro -False,106,4.5,4.51006,4.51006,21,37,455.0,Dollar -False,6403,3.8,3.49993,3.49993,21,20,455.0,Pound -True,174,4.25,4.27482,4.27482,21,8,455.0,Dollar -False,4114,3.66667,3.67234,3.67234,21,0,455.0,Dollar -True,9085,3.85,3.78137,3.78137,21,24,455.0,Dollar -False,203,4.4,4.39047,4.39047,21,24,700.0,Dollar -False,597,4.65,4.58965,4.58965,21,19,455.0,Euro -True,1358,4.2,4.09119,4.09119,21,31,455.0,Dollar -True,1431,3.5,3.60318,3.60318,21,9,455.0,Euro -True,1121,4.05,3.54423,3.54423,21,7,455.0,Dollar -False,302,3.95,4.33886,4.33886,21,19,455.0,Euro -True,5643,4.30769,4.47019,4.47019,21,16,455.0,Dollar -True,7316,3.3,2.81206,2.81206,21,16,455.0,Euro -True,3756,3.85,3.74166,3.74166,21,15,455.0,Dollar -True,279,4.5,4.47441,4.47441,21,13,455.0,Pound -False,155,3.65,3.67897,3.67897,21,177,455.0,Pound -True,4057,4.45,4.72598,4.72598,21,29,455.0,Pound -True,169,3.75,3.77558,3.77558,21,9,455.0,Euro -True,80,4.55,4.55452,4.55452,21,45,455.0,Pound -False,633,4.25,4.19314,4.19314,21,18,455.0,Dollar -False,7224,3.95,4.18794,4.18794,21,22,455.0,Euro -False,375,3.8,3.81025,3.81025,21,26,455.0,Dollar -True,100,3.9,3.99257,3.99257,21,9,455.0,Dollar -True,4951,3.9,4.09102,4.09102,21,14,455.0,Pound -True,212,4.05,3.97093,3.97093,21,15,455.0,Pound -True,1447,3.15,3.1907,3.1907,21,27,455.0,Pound -True,2605,3.9,3.79614,3.79614,21,14,455.0,Dollar -True,1125,3.95,4.03895,4.03895,21,34,455.0,Euro -False,1183,4.1,4.05519,4.05519,21,14,455.0,Pound -False,1361,3.45,3.31676,3.31676,21,21,455.0,Euro -True,757,3.8,3.78357,3.78357,21,86,455.0,Dollar -True,3261,4.35,4.62803,4.62803,21,37,455.0,Pound -True,1332,4.3,4.4075,4.4075,21,11,455.0,Dollar -True,710,3.9,3.94238,3.94238,21,21,455.0,Pound -False,2047,4.0,3.97387,3.97387,21,24,455.0,Dollar -False,579,4.8,4.80131,4.80131,21,78,455.0,Euro -False,100,4.0,3.97504,3.97504,21,26,455.0,Euro -True,79,3.65,3.74043,3.74043,21,21,455.0,Euro -False,68,3.85,3.9007,3.9007,21,51,455.0,Euro -True,45,2.95,3.00819,3.00819,21,12,455.0,Pound -False,91,3.65,3.59366,3.59366,21,22,455.0,Dollar -True,91,4.25,4.17564,4.17564,21,35,700.0,Pound -False,159,3.95,3.98119,3.98119,21,19,455.0,Dollar -True,3554,4.2,4.54788,4.54788,21,95,455.0,Euro -False,100,3.95,3.75932,3.75932,21,20,455.0,Euro -False,45,4.15,4.10992,4.10992,21,10,455.0,Pound -False,1271,4.5,4.46207,4.46207,21,23,455.0,Dollar -True,12256,4.33333,4.39365,4.39365,23,79,455.0,Pound -True,578,3.5,3.38139,3.38139,20,47,455.0,Dollar -False,125,4.0,4.03818,4.03818,20,49,455.0,Pound -True,2384,4.1,4.12955,4.12955,20,41,455.0,Pound -True,723,3.55,3.57661,3.57661,20,42,455.0,Euro -False,104,3.95,4.20256,4.20256,20,19,455.0,Euro -True,3408,4.1,4.60403,4.60403,20,18,455.0,Dollar -True,594,3.85,3.72418,3.72418,20,19,455.0,Euro -True,1309,4.05,4.05879,4.05879,20,16,455.0,Pound -False,78,4.45,4.42863,4.42863,20,40,455.0,Dollar -True,648,3.55,3.51023,3.51023,20,15,455.0,Pound -False,69,4.05,4.04323,4.04323,20,29,455.0,Dollar -True,105,3.5,3.61997,3.61997,20,437,455.0,Pound -True,920,3.8,3.88089,3.88089,20,72,455.0,Dollar -False,705,4.4,4.42062,4.42062,20,20,455.0,Euro -False,147,3.3,3.26527,3.26527,20,0,455.0,Pound -True,281,3.75,3.67983,3.67983,20,33,455.0,Euro -True,59,4.4,4.32489,4.32489,20,8,455.0,Pound -False,3585,4.2,3.84066,3.84066,20,27,455.0,Euro -False,693,3.75,3.75174,3.75174,20,78,455.0,Pound -False,62,4.05,3.74184,3.74184,20,39,455.0,Euro -False,1164,3.2,3.27116,3.27116,20,20,800.0,Pound -False,444,4.1,3.99925,3.99925,20,129,455.0,Dollar -False,506,3.75,3.76865,3.76865,20,11,455.0,Dollar -False,3429,4.35,4.17876,4.17876,20,21,455.0,Pound -False,3162,3.85,3.87148,3.87148,20,19,455.0,Pound -True,83,4.0,4.06977,4.06977,20,32,455.0,Pound -True,1304,4.25,4.2731,4.2731,20,5,455.0,Euro -False,598,3.9,3.86681,3.86681,20,36,800.0,Dollar -False,95,3.85,3.82195,3.82195,20,20,455.0,Dollar -True,129,3.45,3.47508,3.47508,20,29,455.0,Dollar -True,1766,4.7,4.68761,4.68761,20,41,455.0,Pound -True,660,4.45,4.5949,4.5949,20,16,455.0,Euro -True,500,4.35,4.3722,4.3722,20,43,455.0,Euro -True,121,4.40909,4.37687,4.37687,20,0,455.0,Pound -True,920,3.8,3.51193,3.51193,20,19,455.0,Euro -True,1030,4.55,4.71312,4.71312,20,15,455.0,Dollar -False,2000,4.0,3.9262,3.9262,20,17,455.0,Euro -True,2187,4.05,3.99607,3.99607,20,15,455.0,Pound -True,71,3.65,3.65389,3.65389,20,7,455.0,Pound -True,73,4.5,4.487,4.487,20,17,455.0,Pound -False,57,4.25,4.27852,4.27852,20,40,455.0,Pound -False,270,4.3,4.26309,4.26309,20,11,455.0,Pound -True,1604,4.3,4.28012,4.28012,20,43,455.0,Euro -True,2742,3.75,3.40256,3.40256,20,26,455.0,Dollar -True,97,4.45,4.44119,4.44119,20,34,455.0,Dollar -False,93,4.4,4.4045,4.4045,20,34,455.0,Dollar -False,1970,3.75,3.81653,3.81653,20,8,455.0,Euro -False,78,4.1,4.03159,4.03159,20,18,455.0,Euro -True,6010,4.375,4.13536,4.13536,20,20,455.0,Pound -False,10023,4.4,4.61139,4.61139,20,14,455.0,Dollar -True,108,4.4,4.3654,4.3654,20,45,455.0,Pound -True,85,4.0,4.00402,4.00402,20,10,455.0,Pound -False,1039,4.0,4.0819,4.0819,20,22,455.0,Euro -True,5144,3.95,4.03058,4.03058,20,30,455.0,Dollar -False,101,3.6,3.59215,3.59215,20,20,455.0,Euro -False,1937,4.3,4.33084,4.33084,20,6,455.0,Euro -True,1109,4.4,4.40205,4.40205,20,15,455.0,Dollar -True,143,4.25,4.2541,4.2541,20,27,455.0,Pound -False,3112,3.7,3.865,3.865,20,128,455.0,Pound -True,1606,4.1,4.12954,4.12954,20,41,455.0,Dollar -False,147,4.55,4.63318,4.63318,20,40,455.0,Euro -False,3646,4.35,4.19502,4.19502,20,139,455.0,Euro -False,3293,3.8,3.85279,3.85279,20,8,455.0,Pound -False,102,4.6,4.69322,4.69322,20,15,455.0,Pound -True,723,4.05,4.08285,4.08285,20,32,455.0,Euro -False,861,3.7,3.7978,3.7978,20,16,455.0,Dollar -False,4947,4.33333,4.41206,4.41206,20,20,455.0,Dollar -False,45,3.6,3.78818,3.78818,20,5,455.0,Dollar -False,3021,4.05,4.0677,4.0677,20,52,455.0,Dollar -True,66,4.3,4.31467,4.31467,20,74,455.0,Dollar -True,75,4.0,3.82433,3.82433,20,24,455.0,Pound -False,4992,4.5,4.56305,4.56305,20,27,455.0,Dollar -True,444,4.7,4.60424,4.60424,20,14,455.0,Dollar -True,5958,4.15,4.26242,4.26242,20,43,455.0,Dollar -False,113,4.2,4.19679,4.19679,20,10,455.0,Euro -False,1577,4.25,4.29975,4.29975,20,33,455.0,Dollar -True,47,3.75,3.7917,3.7917,20,31,455.0,Pound -True,69,4.7,4.69887,4.69887,20,61,455.0,Pound -True,265,3.7,3.57661,3.57661,20,14,455.0,Euro -False,1188,4.75,4.75749,4.75749,20,18,455.0,Pound -False,189,4.45833,4.47624,4.47624,20,18,455.0,Euro -True,86,4.1,4.11507,4.11507,20,20,455.0,Euro -False,99,4.5,4.47636,4.47636,21,81,3200.0,Euro -False,60,4.65,4.52846,4.52846,20,15,455.0,Dollar -True,56,4.1,4.05738,4.05738,20,46,455.0,Dollar -True,51,4.95,4.95714,4.95714,20,16,3200.0,Pound -True,660,3.8,3.59464,3.59464,20,29,455.0,Dollar -True,1118,4.4,4.24409,4.24409,20,6,455.0,Dollar -False,1808,4.3,4.36668,4.36668,20,58,455.0,Euro -False,2338,3.85,3.80114,3.80114,20,5,455.0,Dollar -True,1868,4.25,4.18223,4.18223,20,8,455.0,Euro -True,182,3.75,3.69133,3.69133,20,95,455.0,Euro -True,2456,3.9,3.95488,3.95488,20,10,455.0,Pound -False,1183,4.25,4.03561,4.03561,20,11,455.0,Dollar -True,75,4.75,4.73138,4.73138,20,18,455.0,Pound -False,2205,4.0,4.01955,4.01955,20,45,455.0,Dollar -True,554,4.25,4.19137,4.19137,20,19,455.0,Dollar -False,57,3.45,3.38182,3.38182,20,129,455.0,Dollar -False,1480,3.9,3.88933,3.88933,20,49,455.0,Dollar -True,2084,4.45,4.52768,4.52768,20,14,455.0,Pound -False,66,4.15,4.06578,4.06578,20,56,455.0,Dollar -True,549,3.4,3.29632,3.29632,20,14,455.0,Euro -False,228,3.85,3.96634,3.96634,20,59,455.0,Euro -False,106,3.8,3.75107,3.75107,20,5,455.0,Pound -False,781,3.4,3.3559,3.3559,20,24,455.0,Dollar -True,2580,4.6,4.57587,4.57587,20,26,455.0,Euro -False,4129,3.6,3.2474,3.2474,20,11,455.0,Dollar -False,59,4.13636,4.20773,4.20773,20,25,455.0,Euro -True,1238,3.85,4.06495,4.06495,20,5,455.0,Dollar -False,867,3.5,3.85723,3.85723,19,6,455.0,Euro -False,565,3.8,3.92075,3.92075,19,31,455.0,Dollar -True,1134,4.65,4.61137,4.61137,19,12,455.0,Pound -True,165,3.9,3.75888,3.75888,19,6,455.0,Dollar -True,1267,2.35,2.43303,2.43303,19,33,455.0,Euro -True,58,4.25,4.20633,4.20633,19,15,455.0,Euro -True,2308,3.65,3.84667,3.84667,19,24,455.0,Pound -False,2808,4.95,4.90521,4.90521,19,22,455.0,Euro -True,86,4.0,3.36475,3.36475,19,9,455.0,Pound -False,73,3.5,3.44393,3.44393,19,26,455.0,Pound -True,355,4.45,4.58586,4.58586,19,10,455.0,Dollar -True,1331,4.2,4.26134,4.26134,19,27,455.0,Pound -False,4181,4.25,4.24178,4.24178,19,10,455.0,Dollar -True,3041,3.8,3.82697,3.82697,19,10,455.0,Dollar -True,87,4.35,4.22223,4.22223,19,10,800.0,Dollar -True,156,4.65,4.64008,4.64008,19,25,455.0,Pound -False,106,4.6,4.62699,4.62699,20,52,455.0,Euro -True,6059,4.45,4.63441,4.63441,19,21,455.0,Dollar -False,495,4.57895,4.46993,4.46993,19,31,455.0,Pound -False,102,3.55,3.65693,3.65693,19,26,455.0,Dollar -True,62,3.35,3.13137,3.13137,19,7,455.0,Pound -False,98,4.15,4.08644,4.08644,19,14,455.0,Pound -False,4170,4.4,4.63301,4.63301,19,24,455.0,Dollar -False,3925,4.47222,4.59266,4.59266,20,82,455.0,Euro -False,168,4.65,4.57966,4.57966,19,12,455.0,Dollar -True,98,3.85,3.75533,3.75533,19,31,455.0,Dollar -True,75,4.2,4.18961,4.18961,19,25,455.0,Dollar -True,65,3.85,3.92326,3.92326,19,9,455.0,Euro -True,164,3.4,3.46872,3.46872,19,7,455.0,Pound -True,1011,3.4,3.40989,3.40989,19,25,455.0,Pound -True,2937,3.92105,4.28547,4.28547,19,20,455.0,Dollar -True,1894,4.4,4.54346,4.54346,19,22,455.0,Dollar -True,1135,4.7,4.72968,4.72968,19,7,455.0,Pound -True,1008,3.9,4.05739,4.05739,19,21,455.0,Euro -True,1058,4.6,4.77574,4.77574,19,7,455.0,Pound -True,1180,3.65,3.53127,3.53127,19,13,455.0,Dollar -False,4780,4.05,3.88357,3.88357,19,30,455.0,Dollar -False,5665,4.25,4.23727,4.23727,19,83,455.0,Euro -False,87,3.95,3.79917,3.79917,19,18,455.0,Euro -True,1868,3.95,4.21885,4.21885,19,10,455.0,Euro -True,3269,4.45,4.34024,4.34024,19,33,455.0,Euro -True,1096,3.65,3.54375,3.54375,19,13,455.0,Pound -True,191,4.0,4.0481,4.0481,19,14,455.0,Euro -True,80,2.8,2.7452,2.7452,19,57,455.0,Pound -True,196,4.3,4.32165,4.32165,19,15,455.0,Euro -False,848,2.75,2.69154,2.69154,19,6,455.0,Dollar -True,816,3.85,3.88786,3.88786,19,12,455.0,Dollar -True,8141,3.4,2.85454,2.85454,19,35,455.0,Pound -False,159,3.95,3.86325,3.86325,19,52,455.0,Pound -False,62,4.7,4.68261,4.68261,19,19,455.0,Pound -False,81,4.41176,4.40502,4.40502,19,21,455.0,Pound -True,69,4.3,4.30313,4.30313,19,11,455.0,Pound -False,46,4.1,4.13172,4.13172,19,16,455.0,Euro -False,2143,3.15,3.85548,3.85548,19,16,455.0,Dollar -True,1029,4.4,4.33224,4.33224,19,34,455.0,Dollar -True,3904,4.35,4.45111,4.45111,19,10,455.0,Pound -True,130,3.55,3.42971,3.42971,19,28,455.0,Euro -False,1210,4.3,4.31511,4.31511,19,23,455.0,Euro -True,576,4.35,4.31623,4.31623,19,11,455.0,Euro -False,50,3.85,4.06261,4.06261,19,12,455.0,Euro -True,64,3.85,3.87272,3.87272,19,7,455.0,Pound -False,573,4.4,4.47652,4.47652,19,14,455.0,Euro -True,4371,2.85,3.05094,3.05094,19,5,455.0,Pound -False,4185,4.2,4.25579,4.25579,19,17,455.0,Dollar -False,96,4.55,4.59579,4.59579,19,23,455.0,Euro -False,118,3.75,3.65736,3.65736,19,0,455.0,Pound -False,67,4.1,4.13457,4.13457,19,46,455.0,Euro -True,967,4.15,4.30216,4.30216,19,24,455.0,Pound -False,191,4.25,4.32588,4.32588,19,22,455.0,Euro -True,1129,4.35,4.30718,4.30718,19,15,455.0,Dollar -False,1036,3.7,3.75231,3.75231,19,17,455.0,Pound -True,96,4.45,4.46721,4.46721,19,20,455.0,Dollar -True,706,3.9,3.85664,3.85664,19,166,462.0,Pound -True,58,4.3,4.21518,4.21518,19,17,1440.0,Dollar -True,7165,3.85,3.6995,3.6995,19,29,455.0,Euro -True,56,4.35,4.30975,4.30975,19,9,455.0,Pound -False,2678,4.3,4.29831,4.29831,19,24,455.0,Dollar -True,1169,3.7,3.74266,3.74266,19,32,455.0,Dollar -True,1934,3.05,3.26429,3.26429,19,16,455.0,Euro -True,216,3.55,3.65123,3.65123,19,42,455.0,Pound -False,59,3.85,3.91282,3.91282,19,36,455.0,Euro -True,54,3.4,3.41503,3.41503,19,26,455.0,Euro -True,1054,4.3,4.30092,4.30092,19,80,455.0,Dollar -False,293,4.65,4.66864,4.66864,19,39,455.0,Pound -False,277,4.1,4.0003,4.0003,19,34,455.0,Euro -False,186,4.1,4.00153,4.00153,19,12,455.0,Dollar -False,1651,3.85,3.24984,3.24984,19,25,455.0,Pound -True,89,3.2,3.32788,3.32788,19,28,455.0,Dollar -True,2094,4.6,4.54813,4.54813,19,42,455.0,Euro -True,3845,3.35,3.23941,3.23941,19,20,455.0,Euro -False,222,3.8,4.02973,4.02973,19,49,455.0,Dollar -False,287,4.05,3.98562,3.98562,19,15,455.0,Dollar -True,818,3.0,3.12816,3.12816,19,6,455.0,Euro -False,83,4.8,4.83208,4.83208,19,47,455.0,Euro -False,1487,3.65,3.65419,3.65419,19,15,455.0,Euro -False,77,4.25,4.13526,4.13526,19,58,455.0,Pound -False,73,3.7,3.76806,3.76806,19,28,455.0,Dollar -True,1675,4.36842,3.81179,3.81179,19,12,455.0,Dollar -True,35,4.0,4.0496,4.0496,19,15,455.0,Dollar -True,65,3.35,3.34611,3.34611,19,0,800.0,Dollar -True,2459,4.25,4.29272,4.29272,19,30,455.0,Dollar -False,884,4.05,3.45235,3.45235,19,84,455.0,Dollar -False,130,4.78947,4.76502,4.76502,20,135,455.0,Euro -False,140,4.25,4.05902,4.05902,19,23,455.0,Euro -True,82,3.7,3.9218,3.9218,20,11,455.0,Euro -True,1244,3.9,3.60711,3.60711,19,10,455.0,Dollar -True,64,4.25,4.2507,4.2507,19,17,455.0,Pound -False,39,3.9,3.92289,3.92289,19,9,455.0,Euro -True,1092,4.8,4.80017,4.80017,19,60,455.0,Dollar -False,1316,3.95,4.01131,4.01131,19,18,455.0,Dollar -False,113,4.1,3.81087,3.81087,19,26,455.0,Euro -False,16071,4.15,4.07993,4.07993,19,5,455.0,Pound -True,2234,3.75,3.81124,3.81124,19,5,455.0,Pound -False,4182,4.65789,4.72874,4.72874,19,20,455.0,Pound -False,1576,3.35,3.12,3.12,18,7,455.0,Dollar -True,105,4.2,4.25913,4.25913,18,35,455.0,Euro -True,1259,3.45,3.36791,3.36791,18,29,455.0,Pound -True,1155,4.2,4.06795,4.06795,18,21,455.0,Dollar -True,13435,4.2,3.76017,3.76017,18,47,455.0,Pound -False,1787,3.95,3.90535,3.90535,18,29,455.0,Dollar -True,270,3.95,3.88485,3.88485,18,101,455.0,Pound -False,13054,3.65,3.65554,3.65554,18,17,455.0,Pound -True,216,4.5,4.4386,4.4386,18,18,455.0,Euro -True,82,4.1,4.1352,4.1352,18,30,455.0,Dollar -True,1440,4.35,4.2071,4.2071,19,29,455.0,Pound -False,84,4.15,4.17644,4.17644,18,27,455.0,Pound -False,3238,2.6,2.70521,2.70521,18,11,455.0,Euro -False,2899,4.25,3.74127,3.74127,18,43,455.0,Euro -False,296,4.0,4.03131,4.03131,18,8,455.0,Pound -False,49,3.95,3.91237,3.91237,18,5,455.0,Dollar -True,52,4.2,4.13909,4.13909,18,75,455.0,Euro -False,1799,4.25,4.50587,4.50587,18,35,455.0,Pound -False,135,4.3,4.28223,4.28223,18,16,455.0,Dollar -True,108,4.1,4.06219,4.06219,18,11,455.0,Dollar -True,108,3.85,3.71877,3.71877,18,0,455.0,Euro -True,69,4.3,4.31191,4.31191,18,16,455.0,Dollar -False,43,3.65,3.63486,3.63486,18,9,455.0,Pound -False,92,4.35,4.37938,4.37938,18,38,455.0,Pound -True,126,4.25,4.2738,4.2738,18,41,455.0,Dollar -True,3725,4.23077,3.99114,3.99114,18,33,455.0,Euro -True,67,4.16667,4.37165,4.37165,18,18,455.0,Dollar -False,1437,3.5,3.57326,3.57326,18,14,455.0,Dollar -True,124,4.25,4.22102,4.22102,18,60,455.0,Dollar -True,3347,4.6,4.81636,4.81636,18,23,455.0,Pound -False,49,4.9,4.88135,4.88135,18,14,455.0,Euro -True,66,4.3,4.27859,4.27859,19,0,455.0,Pound -True,852,3.8,4.1276,4.1276,18,8,455.0,Pound -True,6021,3.6,3.71853,3.71853,18,10,455.0,Dollar -True,70,4.65,4.68436,4.68436,18,21,455.0,Euro -True,54,4.1,4.12745,4.12745,18,11,455.0,Pound -True,379,4.1,4.08705,4.08705,18,17,455.0,Pound -False,38,5.0,5.0,5.0,18,14,455.0,Euro -False,366,4.25,4.25697,4.25697,18,18,455.0,Euro -False,41,4.45,4.57743,4.57743,18,6,455.0,Dollar -False,59,4.45,4.42053,4.42053,18,14,455.0,Euro -True,952,4.5,4.45912,4.45912,18,18,455.0,Dollar -False,67,4.5,4.49391,4.49391,18,41,455.0,Euro -True,100,4.8,4.77084,4.77084,18,38,455.0,Dollar -True,14522,3.15,2.84006,2.84006,18,23,455.0,Euro -False,93,4.15,3.99065,3.99065,18,33,700.0,Euro -False,370,4.35,4.56911,4.56911,18,6,455.0,Euro -False,1104,3.1,3.12894,3.12894,18,26,455.0,Dollar -True,81,4.35,4.37818,4.37818,18,7,1120.0,Euro -False,88,1.9,1.64343,1.64343,18,8,455.0,Euro -False,6017,3.85,3.70335,3.70335,18,10,455.0,Pound -True,86,3.75,3.7513,3.7513,18,185,455.0,Dollar -True,981,4.9,4.89161,4.89161,18,7,455.0,Euro -True,731,3.35,3.00799,3.00799,18,5,455.0,Euro -False,56,4.65,4.69406,4.69406,18,50,455.0,Pound -True,3939,2.9,3.17281,3.17281,18,17,455.0,Pound -True,197,3.9,3.76287,3.76287,18,14,455.0,Euro -True,771,4.375,4.42691,4.42691,18,21,455.0,Euro -False,70,4.44444,4.35369,4.35369,18,8,455.0,Pound -True,113,4.0,4.01657,4.01657,18,45,455.0,Pound -True,355,4.65,4.60242,4.60242,18,19,455.0,Euro -False,837,3.45,3.45357,3.45357,18,30,455.0,Pound -False,126,3.7,3.5827,3.5827,18,89,455.0,Euro -False,147,4.0,4.08668,4.08668,18,34,455.0,Dollar -False,592,4.2,4.19766,4.19766,18,33,455.0,Dollar -False,978,4.5,4.25116,4.25116,18,16,455.0,Dollar -False,1513,3.45,3.40608,3.40608,18,20,455.0,Dollar -True,177,4.4,4.4732,4.4732,18,27,455.0,Euro -True,3919,3.6,3.05513,3.05513,18,10,455.0,Pound -False,2699,4.27273,4.27557,4.27557,18,23,455.0,Dollar -True,2186,4.6,4.61185,4.61185,19,25,455.0,Euro -False,126,4.65,4.74769,4.74769,18,45,455.0,Dollar -True,40,4.0,4.00224,4.00224,18,17,455.0,Pound -False,919,3.9,3.8932,3.8932,18,233,455.0,Euro -False,3900,3.83333,3.95246,3.95246,18,9,455.0,Dollar -False,4210,4.40625,4.10631,4.10631,18,20,455.0,Euro -True,702,3.85,3.8268,3.8268,18,78,455.0,Pound -True,4216,4.16667,4.23123,4.23123,18,6,455.0,Dollar -True,265,4.4,4.29639,4.29639,18,18,455.0,Dollar -False,3247,4.3,4.2535,4.2535,18,28,455.0,Euro -False,258,4.55,4.46519,4.46519,18,27,455.0,Dollar -True,4277,4.3,4.37539,4.37539,18,33,455.0,Pound -False,1085,4.55,4.78398,4.78398,18,11,455.0,Dollar -True,47,4.65,4.63931,4.63931,18,13,455.0,Euro -True,928,4.25,4.18514,4.18514,18,12,455.0,Pound -True,105,4.1,4.0926,4.0926,18,22,455.0,Pound -False,219,4.15,4.10218,4.10218,18,39,455.0,Euro -False,1023,3.4,3.11205,3.11205,18,7,455.0,Pound -True,5550,4.35,4.43562,4.43562,18,47,455.0,Pound -True,2059,3.85,3.93658,3.93658,18,7,455.0,Dollar -False,3604,2.8,2.27137,2.27137,18,11,455.0,Dollar -True,1569,4.25,4.33173,4.33173,18,24,455.0,Dollar -False,1852,4.1,4.13322,4.13322,18,11,455.0,Pound -True,292,4.4,4.49535,4.49535,18,36,455.0,Dollar -True,77,3.95,3.9397,3.9397,18,21,455.0,Dollar -False,60,4.3,4.14202,4.14202,18,8,455.0,Dollar -True,77,3.65,3.58294,3.58294,18,21,455.0,Pound -False,150,4.6,4.58549,4.58549,18,19,455.0,Euro -True,123,4.1,4.06374,4.06374,18,15,455.0,Euro -False,696,2.35,2.67156,2.67156,18,11,455.0,Euro -False,1701,3.65,3.86469,3.86469,18,23,455.0,Pound -True,1593,3.9,3.80966,3.80966,18,7,455.0,Euro -True,3428,3.5,3.43474,3.43474,18,29,455.0,Dollar -True,6487,4.0,3.71852,3.71852,18,17,455.0,Euro -True,2524,4.4,4.29016,4.29016,18,14,455.0,Dollar -True,8585,4.1,4.1588,4.1588,18,65,455.0,Euro -True,591,3.95,4.14191,4.14191,18,15,455.0,Euro -True,68,4.5,4.45148,4.45148,18,26,455.0,Pound -True,5811,3.35,3.25463,3.25463,18,55,455.0,Pound -True,1330,4.4,4.18465,4.18465,18,13,455.0,Euro -True,69,4.05,3.9138,3.9138,18,7,455.0,Pound -True,58,4.35,4.32127,4.32127,18,11,455.0,Dollar -False,2769,4.4,4.52157,4.52157,18,9,455.0,Dollar -False,46,4.15,4.09289,4.09289,18,29,455.0,Dollar -False,52,4.5,4.53631,4.53631,18,42,455.0,Dollar -False,2902,4.2,4.07732,4.07732,18,13,455.0,Pound -False,1131,3.85,4.16081,4.16081,18,17,455.0,Pound -True,69,3.75,3.74002,3.74002,18,11,455.0,Dollar -False,576,3.45,3.2994,3.2994,18,30,455.0,Dollar -False,422,3.95,3.87578,3.87578,18,24,455.0,Euro -True,909,4.35,4.40308,4.40308,18,11,455.0,Dollar -False,79,4.15,4.18331,4.18331,18,63,455.0,Pound -True,59,4.25,4.2063,4.2063,18,17,455.0,Euro -False,2755,3.9,4.00565,4.00565,18,23,455.0,Dollar -True,68,3.95,3.93774,3.93774,18,9,455.0,Pound -False,1211,3.75,3.56437,3.56437,17,15,455.0,Dollar -True,235,3.75,3.7162,3.7162,17,71,455.0,Euro -True,1207,3.95,3.89986,3.89986,17,8,455.0,Dollar -True,1710,4.65,4.3213,4.3213,17,28,455.0,Dollar -False,1013,3.8,3.75807,3.75807,17,26,455.0,Dollar -False,2924,4.45,4.43082,4.43082,17,22,455.0,Dollar -True,145,4.7,4.45049,4.45049,17,19,455.0,Pound -True,1138,4.1,4.1368,4.1368,17,113,455.0,Euro -True,275,4.35,4.05408,4.05408,17,12,455.0,Pound -False,617,4.05,4.03927,4.03927,17,6,455.0,Dollar -False,1377,4.8,4.79403,4.79403,17,9,455.0,Pound -True,140,4.0,3.86219,3.86219,17,8,455.0,Pound -False,96,4.4,4.38819,4.38819,17,30,455.0,Pound -True,2110,4.2,4.21697,4.21697,17,25,455.0,Pound -False,92,3.45,3.37278,3.37278,17,25,455.0,Pound -True,47,4.15,4.1295,4.1295,17,26,455.0,Euro -False,373,4.7,4.6003,4.6003,17,61,455.0,Pound -True,62,4.3,4.29494,4.29494,17,15,455.0,Dollar -False,248,3.75,4.11207,4.11207,17,45,455.0,Dollar -True,100,4.4,4.332,4.332,17,22,455.0,Dollar -True,5763,4.02941,4.10753,4.10753,17,12,455.0,Euro -True,75,4.5,4.473,4.473,17,12,455.0,Pound -True,110,4.25,4.25268,4.25268,17,11,455.0,Dollar -True,115,3.8,3.81077,3.81077,17,114,455.0,Pound -False,1477,4.3,4.43086,4.43086,17,78,455.0,Pound -True,2436,4.3,4.50617,4.50617,17,11,455.0,Pound -True,928,4.0,3.99207,3.99207,17,12,455.0,Pound -False,1694,4.65,4.6471,4.6471,17,54,455.0,Pound -False,1139,3.35,3.41961,3.41961,17,12,455.0,Dollar -False,127,3.65,3.64398,3.64398,17,12,455.0,Euro -False,1201,4.1,3.72599,3.72599,17,29,455.0,Pound -False,5673,4.1,4.05901,4.05901,17,11,455.0,Euro -True,3390,4.45,4.29325,4.29325,17,22,455.0,Euro -False,1040,4.35,4.44567,4.44567,17,24,455.0,Dollar -True,1549,3.8,3.87788,3.87788,17,33,488.0,Euro -True,65,4.45,4.56137,4.56137,17,42,455.0,Dollar -True,628,4.45,4.34132,4.34132,17,64,800.0,Dollar -True,352,3.9,3.91005,3.91005,17,24,700.0,Pound -True,90,4.5,4.59402,4.59402,17,19,455.0,Dollar -False,37,3.5,3.46521,3.46521,17,13,455.0,Euro -True,135,3.7,3.76609,3.76609,17,46,455.0,Dollar -False,1048,3.55,3.52571,3.52571,17,15,455.0,Pound -True,975,4.7,4.6525,4.6525,17,48,455.0,Euro -True,8453,3.75,3.87649,3.87649,17,16,455.0,Dollar -True,3177,3.7,3.63908,3.63908,17,8,455.0,Dollar -False,120,4.5,4.48014,4.48014,17,58,455.0,Euro -True,83,4.15,4.16186,4.16186,17,5,455.0,Pound -True,48,4.45,4.45174,4.45174,17,11,455.0,Dollar -True,96,3.7,3.75491,3.75491,17,9,455.0,Pound -False,1117,3.85,3.84459,3.84459,17,17,455.0,Euro -True,2054,3.75,3.33539,3.33539,17,42,455.0,Euro -False,3350,3.25,3.42741,3.42741,17,13,455.0,Euro -True,367,4.05882,4.05118,4.05118,17,16,455.0,Dollar -True,101,4.47059,4.42149,4.42149,17,28,455.0,Pound -True,1764,4.25,3.89262,3.89262,17,8,455.0,Pound -False,128,3.5,3.26387,3.26387,17,22,455.0,Dollar -True,4192,4.15,4.11233,4.11233,17,10,455.0,Euro -False,2556,3.9,3.87559,3.87559,17,19,455.0,Pound -False,239,3.95,3.97474,3.97474,17,45,455.0,Euro -True,81,4.6,4.55263,4.55263,17,0,1600.0,Pound -False,83,4.40625,4.45208,4.45208,17,37,455.0,Euro -False,66,4.05,4.04099,4.04099,17,27,455.0,Pound -False,1901,3.9,3.84861,3.84861,17,30,455.0,Euro -True,1357,3.6,3.82586,3.82586,17,8,455.0,Euro -False,1874,3.85,3.89575,3.89575,17,10,455.0,Dollar -True,3540,3.8,3.48499,3.48499,17,19,455.0,Dollar -True,56,4.2,4.15313,4.15313,17,44,455.0,Pound -False,2152,3.6,3.62669,3.62669,17,23,455.0,Pound -True,64,4.52941,4.50407,4.50407,17,87,455.0,Dollar -False,1340,3.9,4.09304,4.09304,17,25,455.0,Pound -False,555,3.0,2.98952,2.98952,17,85,455.0,Pound -True,1119,4.55,4.58622,4.58622,17,5,455.0,Dollar -False,131,3.05,3.07089,3.07089,17,27,455.0,Pound -False,1251,4.35,4.17988,4.17988,17,47,455.0,Pound -True,2178,3.85,3.70524,3.70524,17,22,455.0,Dollar -True,1420,3.65,4.14201,4.14201,17,58,455.0,Dollar -True,2069,4.4,4.38359,4.38359,17,24,455.0,Pound -True,92,4.55,4.46196,4.46196,17,31,455.0,Pound -False,7985,4.2,4.37942,4.37942,17,8,455.0,Pound -False,2271,3.5,3.91562,3.91562,17,21,455.0,Euro -True,221,4.65,4.59211,4.59211,17,28,455.0,Euro -True,2608,4.3,4.50725,4.50725,17,20,455.0,Pound -True,140,4.44118,4.39391,4.39391,17,107,455.0,Dollar -False,104,3.85,3.86064,3.86064,17,15,455.0,Euro -True,5832,4.09091,4.34311,4.34311,17,21,455.0,Euro -False,220,4.05,4.03856,4.03856,17,34,455.0,Euro -True,279,3.55,3.67297,3.67297,17,10,700.0,Dollar -False,98,4.3,4.29401,4.29401,17,17,455.0,Pound -True,56,3.55,3.83687,3.83687,17,14,455.0,Dollar -True,1426,3.95,3.90116,3.90116,17,37,2160.0,Dollar -True,69,4.2,4.17539,4.17539,17,36,455.0,Pound -True,1139,4.9,4.92147,4.92147,17,13,455.0,Pound -True,749,3.75,3.79685,3.79685,17,14,455.0,Pound -False,63,4.8,4.67687,4.67687,17,14,455.0,Pound -False,113,4.15,4.14724,4.14724,17,29,455.0,Pound -False,1146,3.85,4.02928,4.02928,17,44,455.0,Dollar -False,299,3.9,3.76462,3.76462,17,1,455.0,Pound -False,388,3.9,3.87423,3.87423,17,35,455.0,Pound -False,536,3.90909,3.96563,3.96563,17,11,455.0,Dollar -False,942,3.3,3.09365,3.09365,17,18,455.0,Euro -False,194,4.2,4.22672,4.22672,17,24,455.0,Euro -True,273,4.1,4.13713,4.13713,17,17,455.0,Euro -False,4068,3.65,3.79369,3.79369,17,134,481.0,Dollar -True,204,4.5,4.51918,4.51918,17,22,455.0,Dollar -True,555,4.05,4.01501,4.01501,17,17,455.0,Euro -True,1966,4.35,4.34085,4.34085,17,10,455.0,Euro -False,183,4.2,3.87773,3.87773,17,29,455.0,Pound -True,937,4.3,4.21783,4.21783,17,22,455.0,Euro -False,88,3.15,3.28301,3.28301,17,0,455.0,Dollar -True,69,3.85,3.80075,3.80075,17,0,455.0,Euro -True,104,4.55,4.41755,4.41755,17,18,455.0,Pound -False,981,4.45,4.37434,4.37434,17,22,455.0,Pound -False,123,3.75,3.7344,3.7344,17,107,455.0,Dollar -False,39,3.75,4.0094,4.0094,17,19,455.0,Dollar -True,147,4.91176,4.9118,4.9118,17,0,2800.0,Euro -False,67,4.1,4.01883,4.01883,17,13,455.0,Dollar -False,31,5.0,5.0,5.0,17,18,455.0,Euro -True,82,4.6,4.5667,4.5667,16,39,700.0,Euro -True,479,3.95,3.8522,3.8522,16,34,455.0,Pound -True,118,4.25,4.17394,4.17394,16,24,455.0,Dollar -False,2728,4.25,4.10708,4.10708,16,19,455.0,Dollar -True,2458,3.55,3.35607,3.35607,16,35,455.0,Pound -False,70,4.15,4.06382,4.06382,16,17,455.0,Euro -True,72,4.1,4.12144,4.12144,16,32,455.0,Pound -False,592,4.5,4.53431,4.53431,16,19,455.0,Pound -False,3051,4.8,4.77601,4.77601,16,18,455.0,Pound -True,1394,3.7,3.60745,3.60745,16,14,455.0,Pound -False,2872,3.75,3.84025,3.84025,16,29,455.0,Pound -False,13842,4.35,4.48722,4.48722,16,15,455.0,Pound -False,2519,3.6,3.40135,3.40135,16,49,455.0,Dollar -True,72,3.7,3.69757,3.69757,16,45,455.0,Pound -True,53,4.55,4.46995,4.46995,16,19,455.0,Dollar -True,64,4.05,4.07569,4.07569,16,9,455.0,Pound -True,1146,4.6,4.57635,4.57635,16,25,455.0,Euro -True,106,3.95,3.98931,3.98931,16,48,455.0,Dollar -False,5944,3.55,3.74497,3.74497,16,16,455.0,Pound -False,72,3.85,3.94853,3.94853,16,6,455.0,Dollar -True,156,3.8,3.78188,3.78188,16,14,455.0,Pound -True,150,3.5,3.48406,3.48406,16,24,455.0,Euro -True,4041,3.85,4.19303,4.19303,16,22,455.0,Dollar -False,619,3.8,4.10221,4.10221,16,11,455.0,Dollar -False,93,4.8,4.78638,4.78638,16,36,455.0,Euro -True,1052,4.65,4.57066,4.57066,16,10,455.0,Dollar -False,74,4.35,4.28484,4.28484,16,12,455.0,Pound -True,91,4.1,4.14041,4.14041,16,6,455.0,Dollar -False,163,4.1,3.99956,3.99956,16,25,455.0,Euro -False,1487,3.85,3.89495,3.89495,16,17,455.0,Dollar -True,3031,4.05,3.7855,3.7855,16,17,455.0,Pound -True,999,4.05,3.83766,3.83766,16,17,455.0,Euro -True,62,2.4,2.63988,2.63988,16,10,455.0,Euro -True,142,4.75,4.69401,4.69401,16,27,455.0,Pound -False,740,4.35,4.48272,4.48272,16,16,455.0,Pound -True,66,3.65,3.19447,3.19447,16,48,455.0,Dollar -False,1871,3.65,3.52759,3.52759,16,38,455.0,Dollar -True,92,3.9,4.00294,4.00294,16,177,455.0,Pound -False,55,3.90625,3.91125,3.91125,16,77,455.0,Euro -True,1594,4.05,4.03808,4.03808,16,21,455.0,Dollar -True,969,3.89286,4.12866,4.12866,16,22,455.0,Euro -False,56,4.1,4.18256,4.18256,16,13,455.0,Euro -True,74,4.59375,4.46345,4.46345,17,18,455.0,Dollar -False,54,4.65625,4.67052,4.67052,16,47,2080.0,Dollar -False,164,4.53125,4.51629,4.51629,16,24,455.0,Dollar -False,6777,4.125,4.14923,4.14923,16,10,455.0,Euro -False,45,4.90625,4.8528,4.8528,16,5,455.0,Euro -True,1296,4.25,4.23978,4.23978,16,21,455.0,Euro -True,7443,4.3,4.14911,4.14911,16,48,455.0,Pound -True,152,4.45,4.44176,4.44176,16,30,455.0,Dollar -True,100,4.35,4.30646,4.30646,16,14,455.0,Dollar -False,38,3.45,3.4647,3.4647,16,44,455.0,Pound -True,36,4.05,4.11524,4.11524,16,28,455.0,Euro -True,1044,4.5,4.65127,4.65127,16,15,455.0,Dollar -False,77,4.6,4.64017,4.64017,16,26,455.0,Pound -True,58,4.25,4.25051,4.25051,16,11,455.0,Pound -False,23,3.8,4.04204,4.04204,16,0,455.0,Pound -True,1895,3.7,2.96288,2.96288,16,29,455.0,Dollar -False,273,3.55,3.42099,3.42099,16,20,455.0,Euro -False,51,4.65,4.58972,4.58972,16,38,455.0,Euro -True,587,3.9,4.01107,4.01107,16,17,455.0,Pound -False,61,4.0,3.97029,3.97029,16,5,455.0,Dollar -True,151,3.8,3.98043,3.98043,16,17,455.0,Pound -True,93,4.65,4.65239,4.65239,16,31,455.0,Pound -True,44,4.1,3.98911,3.98911,16,7,455.0,Pound -True,3453,3.625,3.40714,3.40714,16,7,455.0,Pound -False,140,4.4,4.50688,4.50688,16,51,455.0,Pound -True,113,4.15,4.23371,4.23371,16,9,455.0,Pound -False,1122,4.1,3.59435,3.59435,16,33,455.0,Pound -False,75,4.1,4.15291,4.15291,16,44,455.0,Pound -True,96,4.5,4.51414,4.51414,16,32,455.0,Pound -True,501,4.45,4.39522,4.39522,16,26,455.0,Dollar -True,850,3.2,2.79323,2.79323,16,19,455.0,Pound -True,141,4.55,4.52637,4.52637,16,10,455.0,Euro -False,82,3.85,3.75835,3.75835,16,16,455.0,Pound -True,14847,3.3,3.84735,3.84735,16,13,455.0,Pound -True,1184,3.7,3.90588,3.90588,16,27,455.0,Dollar -True,78,4.1,4.04786,4.04786,16,19,455.0,Euro -False,59,4.1,3.89024,3.89024,16,27,455.0,Pound -True,58,3.85,3.89266,3.89266,16,11,455.0,Pound -False,133,3.3,3.71046,3.71046,16,0,455.0,Pound -False,52,3.85,3.77254,3.77254,17,13,455.0,Euro -False,4947,4.2,4.51804,4.51804,16,27,455.0,Euro -False,1282,3.95,3.94731,3.94731,16,13,455.0,Dollar -True,1746,4.5,4.48288,4.48288,16,8,455.0,Pound -True,4330,3.0,3.03757,3.03757,16,8,455.0,Euro -True,731,3.7,3.59817,3.59817,16,77,455.0,Euro -True,1617,3.875,4.00037,4.00037,16,32,1200.0,Pound -False,5236,4.4375,4.45284,4.45284,16,17,455.0,Pound -True,659,4.25,4.47238,4.47238,16,24,455.0,Pound -True,70,4.15,4.10482,4.10482,17,12,455.0,Pound -False,672,3.9,3.8675,3.8675,16,50,455.0,Euro -True,5019,4.45,4.44001,4.44001,16,18,455.0,Dollar -False,579,4.1,4.08751,4.08751,16,46,455.0,Dollar -False,1453,4.05,3.97901,3.97901,16,49,455.0,Dollar -True,78,2.75,2.61105,2.61105,16,12,455.0,Dollar -False,5463,4.2,4.13581,4.13581,16,93,455.0,Dollar -False,57,3.5,3.61004,3.61004,16,21,455.0,Pound -True,160,2.85,2.44747,2.44747,16,64,455.0,Dollar -False,808,4.05,4.02462,4.02462,16,43,455.0,Dollar -False,1342,4.8,4.61131,4.61131,16,15,455.0,Dollar -False,1267,3.65,3.47102,3.47102,16,41,455.0,Pound -False,54,3.9,3.86476,3.86476,16,6,455.0,Euro -True,44,3.6,3.49974,3.49974,16,14,455.0,Pound -False,60,4.5,4.39265,4.39265,16,25,455.0,Pound -True,569,3.55,3.5278,3.5278,16,11,455.0,Pound -False,674,4.25,4.26481,4.26481,16,19,1600.0,Dollar -False,1776,4.45,4.62096,4.62096,16,40,455.0,Dollar -False,67,4.1,4.14678,4.14678,16,10,455.0,Euro -False,790,4.0,4.05204,4.05204,16,17,455.0,Pound -False,96,3.65,3.55769,3.55769,16,14,455.0,Dollar -True,3034,4.35,4.21845,4.21845,16,24,455.0,Euro -True,1106,4.55,4.51334,4.51334,16,7,455.0,Pound -False,1575,4.0,4.2857,4.2857,16,24,455.0,Euro -False,891,4.65,4.65048,4.65048,16,16,455.0,Dollar -True,1030,3.9,3.90127,3.90127,16,11,455.0,Dollar -False,1126,4.1,4.08687,4.08687,16,6,455.0,Pound -True,102,3.55,3.75704,3.75704,16,16,455.0,Dollar -False,99,4.4,4.18449,4.18449,16,12,455.0,Pound -False,112,3.2,3.44929,3.44929,16,51,455.0,Euro -True,56,3.6,3.6045,3.6045,16,6,455.0,Euro -True,5216,3.1,3.44241,3.44241,16,20,455.0,Dollar -False,80,4.1,4.0545,4.0545,16,8,455.0,Dollar -True,1436,3.55,3.94176,3.94176,16,15,455.0,Dollar -True,64,4.35,4.29989,4.29989,16,11,455.0,Dollar -True,42,3.8,3.82937,3.82937,16,74,455.0,Pound -False,74,3.5,3.46414,3.46414,16,21,455.0,Euro -False,296,3.9,3.85017,3.85017,16,10,455.0,Dollar -True,2187,3.6,3.58682,3.58682,16,35,455.0,Euro -True,49,4.4,4.36569,4.36569,16,43,455.0,Dollar -True,762,4.0,3.95215,3.95215,16,18,455.0,Dollar -False,967,4.2,4.31136,4.31136,16,29,455.0,Dollar -True,613,4.0,3.83585,3.83585,16,37,455.0,Dollar -True,144,4.1,4.12603,4.12603,16,294,455.0,Euro -True,763,4.2,4.22878,4.22878,16,12,455.0,Pound -False,1801,4.0,3.99497,3.99497,16,16,455.0,Pound -False,290,3.9,3.79259,3.79259,16,17,455.0,Pound -False,5218,4.9,4.84513,4.84513,16,22,455.0,Pound -False,46,3.85,4.07361,4.07361,16,9,455.0,Dollar -True,277,3.7,3.76358,3.76358,16,25,455.0,Pound -True,1000,3.8,3.92498,3.92498,16,11,455.0,Pound -False,172,4.6,4.56319,4.56319,16,6,455.0,Dollar -False,66,4.05,4.03277,4.03277,16,11,455.0,Euro -True,49,3.85,3.93973,3.93973,16,12,455.0,Pound -False,44,4.55,4.28111,4.28111,16,64,455.0,Euro -True,52,4.25,4.346,4.346,16,16,455.0,Pound -True,50,4.5,4.38929,4.38929,16,25,455.0,Dollar -True,181,4.15,4.06094,4.06094,16,0,455.0,Dollar -False,66,4.4,4.3826,4.3826,15,9,455.0,Pound -True,89,4.5,4.33581,4.33581,15,42,455.0,Euro -False,2759,3.8,4.06578,4.06578,15,25,455.0,Euro -False,242,3.55,3.49004,3.49004,15,31,455.0,Dollar -True,3917,4.25,4.235,4.235,15,24,455.0,Dollar -True,2023,3.95,3.93662,3.93662,15,9,455.0,Euro -False,3745,3.75,3.92185,3.92185,15,21,455.0,Pound -False,925,3.45,3.43566,3.43566,15,14,455.0,Pound -True,90,4.0,4.06015,4.06015,15,56,455.0,Pound -False,81,3.85,3.85841,3.85841,15,11,455.0,Pound -True,369,4.35,4.33274,4.33274,15,13,455.0,Pound -True,74,4.65,4.61828,4.61828,15,48,455.0,Euro -False,91,4.2,4.57934,4.57934,15,20,455.0,Pound -True,9922,3.35,3.47732,3.47732,15,25,455.0,Euro -False,155,4.1,4.07876,4.07876,15,55,455.0,Euro -False,41,4.2,4.12937,4.12937,15,8,455.0,Pound -True,148,4.1,4.15685,4.15685,15,37,455.0,Dollar -False,85,3.05,3.10945,3.10945,15,51,1520.0,Pound -False,131,4.2,4.36217,4.36217,15,33,700.0,Dollar -False,146,4.2,4.1809,4.1809,15,0,455.0,Dollar -True,49,4.93333,4.93335,4.93335,15,28,455.0,Pound -False,37,4.0,3.87987,3.87987,15,26,455.0,Pound -False,113,4.3,4.23028,4.23028,15,53,455.0,Euro -True,276,4.3,4.24695,4.24695,15,8,455.0,Pound -False,7296,4.4,4.53387,4.53387,15,17,455.0,Euro -False,30,4.65,4.6628,4.6628,15,10,455.0,Euro -False,29,4.45455,4.2141,4.2141,15,27,455.0,Dollar -True,129,4.3,4.34967,4.34967,15,55,455.0,Dollar -True,1048,4.45,4.54792,4.54792,15,10,455.0,Pound -False,2174,4.7,4.74642,4.74642,15,18,455.0,Dollar -True,68,3.55,3.5925,3.5925,15,18,455.0,Dollar -True,96,4.15,4.2018,4.2018,15,48,455.0,Pound -True,2372,3.5,3.72961,3.72961,15,9,455.0,Dollar -True,122,3.5,3.46998,3.46998,15,0,455.0,Pound -True,40,4.35,4.30651,4.30651,15,8,455.0,Euro -False,71,3.8,3.87578,3.87578,15,6,455.0,Dollar -False,6072,4.05,4.40069,4.40069,15,30,455.0,Euro -True,509,4.45,4.15735,4.15735,15,22,455.0,Dollar -True,40,3.85,4.03984,4.03984,15,59,455.0,Dollar -False,1218,4.3,4.37319,4.37319,15,31,455.0,Dollar -True,226,3.0,3.18415,3.18415,15,20,455.0,Dollar -True,485,4.55,4.48075,4.48075,15,9,455.0,Euro -False,1068,4.35,4.40978,4.40978,15,29,455.0,Euro -False,46,3.55,3.66266,3.66266,15,50,455.0,Pound -False,5683,4.05,3.31787,3.31787,15,12,455.0,Dollar -True,1029,4.35,4.03414,4.03414,15,32,455.0,Euro -True,422,3.75,3.83399,3.83399,15,11,455.0,Euro -True,83,4.65,4.64772,4.64772,15,22,455.0,Euro -False,35,4.35,4.36436,4.36436,15,9,455.0,Euro -True,403,3.35,3.64926,3.64926,15,19,455.0,Dollar -True,778,3.6,3.56892,3.56892,15,9,455.0,Pound -False,75,4.65,4.66723,4.66723,15,13,1120.0,Pound -True,62,3.85,3.74563,3.74563,15,57,455.0,Euro -True,1682,4.25,4.36741,4.36741,15,10,455.0,Euro -True,70,4.35,4.43382,4.43382,15,11,455.0,Euro -False,2329,4.5,4.77309,4.77309,15,14,455.0,Pound -False,50,4.2,4.25115,4.25115,15,9,455.0,Dollar -False,74,4.55,4.58945,4.58945,15,28,455.0,Pound -True,48,4.0,3.95071,3.95071,15,13,455.0,Euro -True,4311,4.06667,3.85993,3.85993,15,16,455.0,Dollar -True,2388,4.1,4.08646,4.08646,15,55,455.0,Pound -False,309,4.35,4.39133,4.39133,15,79,455.0,Dollar -False,92,4.15,4.20445,4.20445,15,29,455.0,Euro -False,614,3.8,3.96077,3.96077,15,16,455.0,Pound -False,1310,4.1,4.19875,4.19875,15,9,455.0,Dollar -False,1231,3.95,3.86915,3.86915,15,25,455.0,Euro -False,210,3.55,3.65532,3.65532,15,60,455.0,Euro -False,75,3.6,3.63584,3.63584,15,10,455.0,Dollar -True,2578,4.15,4.27255,4.27255,15,27,455.0,Pound -False,106,4.15,4.22091,4.22091,15,15,455.0,Euro -True,152,4.5,4.63332,4.63332,15,10,455.0,Pound -True,422,4.2,4.04895,4.04895,15,26,455.0,Dollar -False,96,4.1,4.08596,4.08596,16,0,455.0,Dollar -False,115,3.85,3.89235,3.89235,15,7,455.0,Pound -True,3772,3.65,3.49599,3.49599,15,37,455.0,Pound -False,131,4.25,4.39725,4.39725,15,11,455.0,Euro -True,542,4.15,3.9156,3.9156,15,13,455.0,Dollar -True,97,4.45,4.49054,4.49054,15,9,455.0,Pound -False,35,4.15,4.1618,4.1618,15,10,455.0,Dollar -False,30,4.6,4.56523,4.56523,15,40,455.0,Dollar -True,223,4.6,4.68529,4.68529,15,14,455.0,Euro -True,62,4.1,4.25847,4.25847,15,17,455.0,Euro -False,63,3.9,3.8203,3.8203,15,58,455.0,Euro -True,725,4.4,4.40129,4.40129,15,16,455.0,Dollar -False,103,4.15,4.19107,4.19107,15,45,455.0,Euro -False,1315,3.65,3.73548,3.73548,15,6,455.0,Dollar -False,90,3.6,3.55844,3.55844,15,33,455.0,Dollar -True,134,3.95,3.72842,3.72842,15,44,455.0,Dollar -False,7667,4.6,4.61353,4.61353,15,16,455.0,Dollar -True,132,4.6,4.46817,4.46817,15,49,455.0,Pound -True,47,4.45,4.40941,4.40941,15,5,455.0,Pound -True,1506,3.55,3.45198,3.45198,15,20,455.0,Euro -True,1031,4.2,4.21349,4.21349,16,21,455.0,Pound -True,83,2.85,3.01984,3.01984,15,157,455.0,Pound -False,59,4.4,4.41195,4.41195,15,6,455.0,Dollar -True,23,3.8,3.80404,3.80404,15,0,455.0,Dollar -True,20,4.96667,4.94068,4.94068,15,10,1360.0,Dollar -False,29,3.75,3.77427,3.77427,17,23,700.0,Euro -False,1132,4.0,4.12806,4.12806,15,42,455.0,Euro -False,1899,4.2,4.30199,4.30199,15,10,455.0,Pound -False,1536,4.1,3.67328,3.67328,15,123,455.0,Pound -False,116,4.63333,4.57235,4.57235,15,18,455.0,Dollar -False,2334,3.5,3.61257,3.61257,15,9,455.0,Euro -False,48,4.15,4.17941,4.17941,15,8,455.0,Dollar -False,72,3.9,3.87975,3.87975,15,38,1920.0,Pound -True,33,4.6,4.47771,4.47771,15,10,2960.0,Pound -True,66,4.25,4.22134,4.22134,15,10,455.0,Pound -True,51,4.5,4.41046,4.41046,15,187,455.0,Dollar -True,1284,4.2,4.31909,4.31909,15,26,455.0,Dollar -False,95,3.8,3.89312,3.89312,15,30,455.0,Dollar -False,135,4.05,4.02573,4.02573,15,29,455.0,Pound -False,5398,3.3,3.50348,3.50348,15,17,455.0,Euro -False,2984,3.8,3.70362,3.70362,15,85,455.0,Dollar -False,2365,3.95,4.03554,4.03554,15,43,455.0,Dollar -False,1335,4.35,4.07332,4.07332,15,7,455.0,Pound -False,54,3.8,3.84445,3.84445,15,8,455.0,Pound -False,2102,4.6,4.5275,4.5275,15,15,455.0,Euro -True,71,3.55,3.62406,3.62406,15,17,455.0,Pound -True,36,3.35,3.25782,3.25782,15,6,455.0,Euro -False,55,4.2,4.19923,4.19923,15,12,455.0,Euro -True,55,3.55,3.51786,3.51786,15,7,455.0,Pound -False,1003,4.2,4.37303,4.37303,15,20,455.0,Pound -True,91,4.3,4.33842,4.33842,15,28,455.0,Euro -False,5470,4.35,4.25333,4.25333,15,42,455.0,Euro -False,345,4.0,4.00512,4.00512,15,0,455.0,Pound -True,64,4.05,3.98663,3.98663,15,26,455.0,Dollar -False,2111,4.0,4.02741,4.02741,15,26,455.0,Pound -True,43,4.25,4.23991,4.23991,15,6,455.0,Pound -True,139,3.6,3.74257,3.74257,15,17,455.0,Dollar -True,1486,4.2,4.41773,4.41773,15,10,455.0,Euro -False,74,4.1,4.1065,4.1065,15,12,455.0,Euro -False,4668,4.1,4.27804,4.27804,15,16,455.0,Pound -False,161,3.75,3.7367,3.7367,15,24,455.0,Pound -False,170,4.0,3.98242,3.98242,15,23,455.0,Dollar -False,1088,3.75,3.79607,3.79607,15,21,455.0,Dollar -True,67,4.25,4.2286,4.2286,15,7,455.0,Pound -False,108,4.65,4.68728,4.68728,15,15,455.0,Pound -False,70,4.05,4.04808,4.04808,15,22,455.0,Pound -True,697,4.0,4.01153,4.01153,15,78,455.0,Dollar -False,1114,3.65,3.43659,3.43659,15,22,455.0,Pound -True,1119,3.95,3.94147,3.94147,15,12,455.0,Dollar -False,44,4.35,4.40368,4.40368,15,16,455.0,Dollar -False,29,3.9,3.90045,3.90045,15,9,455.0,Pound -True,63,4.35,4.43799,4.43799,15,55,455.0,Euro -False,369,4.05,4.05008,4.05008,14,10,455.0,Dollar -True,90,4.1,4.05689,4.05689,14,10,455.0,Euro -True,87,4.35,4.31388,4.31388,14,22,455.0,Dollar -True,132,4.1,4.04673,4.04673,14,9,455.0,Pound -False,621,4.8,4.74109,4.74109,14,20,455.0,Pound -True,43,4.35,4.3568,4.3568,14,19,455.0,Euro -False,820,4.25,3.99057,3.99057,14,18,455.0,Euro -True,252,4.55,4.52021,4.52021,14,46,455.0,Pound -False,241,4.4,4.31639,4.31639,14,36,455.0,Pound -True,4749,2.95,2.7973,2.7973,14,34,455.0,Euro -False,2438,4.1,4.49918,4.49918,14,31,455.0,Dollar -False,155,4.65,4.61424,4.61424,14,12,455.0,Pound -False,112,4.1,4.00912,4.00912,14,44,455.0,Dollar -True,538,4.25,4.13285,4.13285,14,32,455.0,Dollar -False,66,4.45,4.43608,4.43608,14,22,455.0,Pound -False,865,3.85,3.66108,3.66108,14,34,455.0,Euro -True,43,4.6,4.52241,4.52241,14,10,455.0,Pound -False,727,4.05,4.02184,4.02184,14,14,455.0,Dollar -False,1753,4.5,4.68319,4.68319,14,12,455.0,Dollar -False,51,3.8,3.88542,3.88542,14,8,455.0,Euro -True,49,3.7,3.69035,3.69035,14,7,455.0,Pound -False,1920,4.65,4.6123,4.6123,14,19,455.0,Pound -False,1307,3.85,3.71522,3.71522,14,10,455.0,Euro -True,4374,4.14286,4.20588,4.20588,14,8,455.0,Dollar -True,75,3.85,3.79992,3.79992,14,16,507.0,Pound -True,1782,4.2,4.09522,4.09522,14,27,455.0,Euro -False,556,3.7,3.4107,3.4107,14,17,455.0,Dollar -False,2752,4.2,4.08939,4.08939,14,18,455.0,Euro -True,39,3.5,3.66946,3.66946,14,7,455.0,Dollar -False,1943,4.1,4.09314,4.09314,14,10,455.0,Euro -False,2467,3.45,3.73492,3.73492,14,45,455.0,Dollar -True,3395,4.1,4.03712,4.03712,14,34,455.0,Euro -False,829,3.45,3.27833,3.27833,14,15,455.0,Dollar -True,1308,4.05,3.90689,3.90689,14,26,455.0,Dollar -True,1555,4.15,4.06577,4.06577,14,114,455.0,Dollar -False,1079,4.25,4.26812,4.26812,14,19,455.0,Euro -True,56,4.0,4.1373,4.1373,14,5,455.0,Euro -True,64,4.55,4.5892,4.5892,14,18,800.0,Euro -True,2030,4.4,4.35593,4.35593,14,19,455.0,Dollar -True,64,4.7,4.68573,4.68573,15,20,455.0,Euro -True,114,3.9,3.75075,3.75075,14,19,455.0,Pound -False,73,4.55,4.50503,4.50503,14,42,700.0,Dollar -False,348,4.6,4.57317,4.57317,14,19,455.0,Euro -False,78,4.85,4.84935,4.84935,14,36,455.0,Euro -True,18,4.1,4.18984,4.18984,14,9,455.0,Pound -True,139,4.75,4.88961,4.88961,14,58,455.0,Euro -False,916,3.25,3.19151,3.19151,14,26,455.0,Euro -False,1608,3.8,3.82992,3.82992,14,11,455.0,Pound -True,892,4.7,4.66821,4.66821,14,23,455.0,Dollar -True,2928,3.9,3.67029,3.67029,14,20,455.0,Euro -False,824,4.5,4.69529,4.69529,14,17,455.0,Dollar -True,814,3.9,3.3225,3.3225,14,14,455.0,Pound -True,90,4.45,4.61233,4.61233,14,26,455.0,Pound -True,155,4.35,4.24553,4.24553,14,30,455.0,Pound -False,68,3.55,3.48968,3.48968,14,54,455.0,Pound -False,59,4.15,4.0572,4.0572,14,7,455.0,Euro -True,2041,4.65,4.70267,4.70267,14,25,560.0,Dollar -True,60,3.875,3.91453,3.91453,14,7,455.0,Euro -True,57,3.7,4.03218,4.03218,14,5,700.0,Euro -True,467,4.0,3.95801,3.95801,14,47,455.0,Pound -True,260,4.03571,4.09392,4.09392,14,9,455.0,Pound -False,390,3.75,3.76435,3.76435,14,18,455.0,Pound -True,93,3.3,3.42999,3.42999,14,0,455.0,Pound -False,47,3.3,3.3796,3.3796,14,16,455.0,Pound -True,1535,4.4,4.01014,4.01014,14,9,455.0,Pound -False,2387,4.0,4.2793,4.2793,14,13,455.0,Euro -False,34,3.15,3.1176,3.1176,14,9,455.0,Dollar -True,1338,4.35,4.21654,4.21654,14,55,455.0,Euro -True,1053,4.75,4.85645,4.85645,15,10,455.0,Pound -False,25,4.89286,4.95169,4.95169,14,73,455.0,Euro -True,349,4.35,4.10248,4.10248,14,11,455.0,Pound -False,138,4.1,4.05106,4.05106,14,15,455.0,Dollar -True,62,4.3,4.19227,4.19227,14,22,455.0,Pound -True,80,4.2,4.23117,4.23117,14,20,455.0,Euro -False,1533,3.6,3.79779,3.79779,14,15,455.0,Euro -True,572,3.95,3.91815,3.91815,14,15,455.0,Dollar -False,1066,3.45,3.36557,3.36557,14,8,455.0,Dollar -True,60,4.3,4.27069,4.27069,14,8,455.0,Euro -True,72,4.25,4.24152,4.24152,14,11,455.0,Pound -False,1439,3.75,4.10028,4.10028,14,35,455.0,Euro -False,128,4.2,4.22284,4.22284,14,22,455.0,Euro -True,8715,3.89286,3.88109,3.88109,14,211,455.0,Dollar -True,2047,3.9,3.86408,3.86408,14,23,455.0,Euro -False,1168,3.35,3.05524,3.05524,14,22,455.0,Euro -False,543,4.2,4.04161,4.04161,14,23,455.0,Pound -True,553,4.0,3.92501,3.92501,14,28,455.0,Euro -True,902,3.45,3.47905,3.47905,14,35,455.0,Euro -True,8549,2.65,3.22581,3.22581,14,19,455.0,Pound -False,28,3.9,3.85708,3.85708,14,13,455.0,Euro -False,32,4.05,4.0528,4.0528,14,12,455.0,Dollar -False,74,4.4,4.67358,4.67358,14,28,455.0,Pound -False,43,4.05,4.24388,4.24388,14,52,455.0,Dollar -True,4435,3.65,3.51524,3.51524,14,21,468.0,Euro -False,116,3.7,3.73292,3.73292,14,32,455.0,Dollar -False,106,4.85,4.80524,4.80524,14,52,455.0,Pound -True,49,4.1,4.07835,4.07835,14,15,455.0,Dollar -False,2188,3.6,3.75824,3.75824,14,54,455.0,Dollar -False,1244,3.95,3.9038,3.9038,14,34,455.0,Pound -False,220,4.25,4.39925,4.39925,14,27,455.0,Dollar -True,46,3.8,3.78878,3.78878,14,47,455.0,Euro -True,132,3.95,3.94032,3.94032,14,25,455.0,Pound -True,3077,3.85,3.83796,3.83796,14,7,455.0,Dollar -False,1911,4.35,4.26309,4.26309,14,20,455.0,Dollar -True,80,3.85,3.86779,3.86779,14,25,455.0,Dollar -True,46,4.25,4.12569,4.12569,14,38,455.0,Pound -False,1097,4.55,4.59241,4.59241,14,10,455.0,Dollar -False,1443,4.2,4.11403,4.11403,14,25,455.0,Dollar -True,4392,4.3,4.12301,4.12301,14,25,455.0,Dollar -True,70,4.25,4.28254,4.28254,14,21,800.0,Dollar -True,44,3.5,3.39405,3.39405,14,41,455.0,Dollar -False,1199,4.45,4.40223,4.40223,14,20,455.0,Pound -False,26,3.45,3.49611,3.49611,14,20,455.0,Euro -False,1236,4.45,4.28792,4.28792,14,9,455.0,Dollar -False,52,3.95,3.72735,3.72735,14,69,455.0,Euro -True,107,3.85,3.6947,3.6947,14,50,455.0,Dollar -False,77,4.05,4.18413,4.18413,14,7,455.0,Dollar -False,4332,2.35,2.36562,2.36562,14,54,455.0,Dollar -False,1898,3.75,3.47469,3.47469,14,5,455.0,Pound -False,885,3.95,3.85102,3.85102,15,25,455.0,Dollar -True,6127,4.0,3.85366,3.85366,14,10,455.0,Euro -True,86,4.42308,4.35893,4.35893,14,39,455.0,Pound -False,62,3.95,3.63225,3.63225,14,10,455.0,Dollar -False,51,3.75,3.83758,3.83758,14,10,455.0,Dollar -True,1040,3.5,3.44862,3.44862,14,19,455.0,Pound -False,1208,4.15,4.47922,4.47922,14,31,455.0,Pound -True,3141,3.75,3.09765,3.09765,14,42,455.0,Pound -True,586,4.45,4.48824,4.48824,14,23,455.0,Pound -False,910,4.15,3.82279,3.82279,14,31,455.0,Dollar -False,756,2.9,2.79821,2.79821,14,28,455.0,Euro -True,96,4.1,4.05963,4.05963,14,45,455.0,Euro -False,50,4.4,4.40145,4.40145,14,68,455.0,Pound -False,561,4.2,4.10488,4.10488,14,11,455.0,Dollar -True,1987,4.25,4.1816,4.1816,14,16,455.0,Euro -True,157,3.75,3.62366,3.62366,14,67,455.0,Dollar -True,66,4.0,4.1557,4.1557,14,14,455.0,Pound -True,1218,3.45,3.39269,3.39269,14,25,455.0,Euro -True,143,4.6,4.53135,4.53135,14,8,455.0,Dollar -False,1960,3.75,3.81488,3.81488,14,20,455.0,Pound -False,95,4.2,4.19664,4.19664,14,54,455.0,Pound -True,363,3.65,3.66633,3.66633,14,15,455.0,Euro -True,65,4.0,4.02295,4.02295,14,18,455.0,Pound -False,151,3.8,3.70807,3.70807,14,0,455.0,Dollar -True,3710,3.0,2.92729,2.92729,14,24,455.0,Euro -False,48,4.4,4.35465,4.35465,14,30,455.0,Pound -False,3780,3.2,3.68273,3.68273,14,27,455.0,Pound -True,2353,4.05,4.07053,4.07053,14,23,455.0,Pound -False,602,4.0,3.96926,3.96926,14,20,455.0,Dollar -True,1779,4.55,4.42445,4.42445,14,29,455.0,Dollar -False,146,3.9,3.96486,3.96486,14,11,455.0,Dollar -True,1189,4.2,4.16573,4.16573,14,25,455.0,Dollar -True,126,3.7,3.70988,3.70988,14,15,455.0,Dollar -False,38,3.35,3.51448,3.51448,14,17,455.0,Dollar -False,1603,3.8,3.76176,3.76176,14,61,455.0,Euro -False,83,3.45,3.29798,3.29798,14,23,455.0,Dollar -True,337,3.9,3.77228,3.77228,14,30,455.0,Dollar -False,1038,4.6,4.26708,4.26708,14,15,455.0,Euro -False,276,2.05,2.13571,2.13571,14,6,455.0,Dollar -False,59,4.45,4.50157,4.50157,14,15,455.0,Dollar -False,82,3.95,3.89716,3.89716,14,124,468.0,Pound -False,78,4.5,4.4746,4.4746,14,155,455.0,Dollar -True,104,3.9,3.92653,3.92653,14,20,455.0,Euro -True,2634,3.75,4.15918,4.15918,14,15,455.0,Pound -False,1987,3.55,3.51401,3.51401,14,14,455.0,Pound -False,2496,4.0,3.95459,3.95459,14,18,455.0,Pound -True,1117,4.1,4.05595,4.05595,14,7,455.0,Euro -False,1337,4.3,4.69792,4.69792,14,36,455.0,Dollar -True,1686,3.96429,3.75292,3.75292,14,40,455.0,Euro -False,44,3.95,3.76103,3.76103,14,44,455.0,Euro -True,96,4.17857,4.12593,4.12593,15,0,455.0,Dollar -True,629,4.15,4.25698,4.25698,13,42,455.0,Pound -True,2091,2.7,2.5325,2.5325,13,8,455.0,Dollar -True,49,4.4,4.38475,4.38475,13,14,455.0,Dollar -True,65,4.5,4.39174,4.39174,13,10,455.0,Euro -True,49,4.9,4.89384,4.89384,13,14,455.0,Dollar -False,76,3.55,3.52936,3.52936,13,51,455.0,Pound -False,92,3.9,3.56233,3.56233,13,21,455.0,Pound -True,49,3.95,3.95432,3.95432,13,10,455.0,Euro -False,76,3.7,3.55012,3.55012,13,9,455.0,Euro -False,1062,4.2,4.05164,4.05164,13,14,455.0,Pound -True,204,3.6,3.57755,3.57755,13,22,455.0,Pound -False,1741,3.75,3.86572,3.86572,13,34,455.0,Pound -False,1152,3.1,3.63278,3.63278,13,119,455.0,Euro -False,94,4.42308,4.50624,4.50624,13,63,455.0,Euro -False,1599,4.1,4.02181,4.02181,13,16,455.0,Dollar -False,82,4.25,4.24206,4.24206,13,8,455.0,Pound -False,1560,4.4,4.40638,4.40638,13,19,455.0,Dollar -True,50,4.85,4.86665,4.86665,13,6,960.0,Dollar -True,35,4.2,4.27659,4.27659,13,10,455.0,Dollar -True,1568,4.2,4.19827,4.19827,13,9,455.0,Pound -False,90,4.05,3.99567,3.99567,13,11,455.0,Dollar -False,3358,4.1,4.14042,4.14042,13,30,455.0,Euro -False,88,4.5,4.39438,4.39438,13,19,455.0,Pound -False,96,4.9,4.8891,4.8891,13,24,455.0,Dollar -False,216,4.2,4.16931,4.16931,13,52,455.0,Pound -True,958,4.25,4.20948,4.20948,13,26,455.0,Pound -True,1024,3.5,3.51123,3.51123,13,16,455.0,Euro -False,1224,4.0,3.95597,3.95597,13,31,455.0,Euro -True,1738,3.8,3.83432,3.83432,13,7,455.0,Euro -True,49,4.3,4.36885,4.36885,13,13,455.0,Dollar -True,7034,3.95,3.82027,3.82027,13,31,455.0,Pound -True,57,3.6,3.40864,3.40864,13,6,455.0,Pound -True,1443,4.05,3.53047,3.53047,13,16,455.0,Euro -True,1004,4.2,3.97626,3.97626,13,16,455.0,Dollar -False,420,4.85,4.91233,4.91233,13,19,455.0,Dollar -False,44,4.35,4.41202,4.41202,13,10,455.0,Pound -False,116,4.45,4.32239,4.32239,13,104,455.0,Euro -True,2978,5.0,5.0,5.0,24,11,455.0,Euro -True,490,4.26923,4.47506,4.47506,13,14,455.0,Pound -True,76,3.65,3.80403,3.80403,13,7,455.0,Euro -True,1059,4.2,4.16477,4.16477,13,12,455.0,Dollar -True,63,3.85,3.85985,3.85985,13,9,455.0,Dollar -True,2787,3.55,3.46013,3.46013,13,13,455.0,Euro -True,135,4.5,4.48127,4.48127,13,20,455.0,Euro -False,1211,3.55,3.58551,3.58551,13,0,455.0,Pound -True,39,4.7,4.68885,4.68885,13,26,455.0,Euro -True,22,3.9,3.9079,3.9079,13,9,455.0,Euro -True,574,3.75,3.81565,3.81565,13,21,455.0,Dollar -False,84,4.65385,4.71505,4.71505,13,50,455.0,Pound -True,55,3.95,3.81172,3.81172,13,11,455.0,Pound -True,1154,4.15,4.00956,4.00956,13,24,455.0,Dollar -False,442,4.3,4.44678,4.44678,13,10,455.0,Pound -False,36,4.15,4.01005,4.01005,13,19,455.0,Dollar -True,716,4.15,4.20703,4.20703,13,27,455.0,Euro -False,247,3.95,3.91829,3.91829,13,10,455.0,Pound -True,1242,3.45,3.43545,3.43545,13,9,455.0,Dollar -True,35,3.7,4.00886,4.00886,13,0,455.0,Pound -True,37,4.46154,4.28778,4.28778,13,62,455.0,Pound -False,3172,4.2,4.44072,4.44072,13,10,455.0,Euro -False,3101,4.05,4.20407,4.20407,13,8,455.0,Euro -True,1523,3.75,4.05836,4.05836,13,16,455.0,Euro -False,1306,4.0,4.18043,4.18043,13,21,455.0,Dollar -True,43,3.95,3.92349,3.92349,13,10,455.0,Pound -True,1945,4.4,4.11904,4.11904,13,31,455.0,Pound -True,1084,4.15,4.14659,4.14659,13,16,455.0,Dollar -True,501,4.25,4.37631,4.37631,13,13,455.0,Pound -False,6079,3.2,3.14359,3.14359,13,56,455.0,Euro -True,24,3.8,3.84316,3.84316,13,7,455.0,Euro -True,265,3.35,3.23173,3.23173,13,52,455.0,Dollar -False,30,4.25,4.43854,4.43854,13,31,455.0,Euro -True,1135,3.4,3.27869,3.27869,13,15,455.0,Pound -True,87,3.75,3.79803,3.79803,13,13,455.0,Euro -True,72,4.4,4.40476,4.40476,13,30,455.0,Dollar -False,111,4.3,4.22686,4.22686,13,9,455.0,Pound -True,4557,4.75,4.58358,4.58358,13,43,455.0,Dollar -True,33,4.0,3.92956,3.92956,13,23,455.0,Dollar -True,49,4.0,3.94235,3.94235,13,9,455.0,Euro -False,223,4.45,4.3684,4.3684,13,38,455.0,Dollar -False,57,3.3,3.41776,3.41776,13,28,455.0,Euro -False,38,3.65,3.72103,3.72103,13,14,455.0,Euro -True,58,3.6,3.57129,3.57129,13,0,455.0,Euro -True,102,4.75,4.76802,4.76802,13,40,455.0,Pound -False,223,3.7,3.60191,3.60191,13,0,455.0,Dollar -True,51,3.95,3.72085,3.72085,13,39,455.0,Pound -True,84,4.3,4.18434,4.18434,13,23,455.0,Euro -True,1049,4.5,4.51257,4.51257,13,9,455.0,Euro -True,163,4.61538,4.17242,4.17242,13,44,455.0,Dollar -True,54,4.65,4.68512,4.68512,13,6,455.0,Dollar -False,138,4.65,4.61396,4.61396,13,22,455.0,Dollar -False,504,3.85,3.81905,3.81905,13,17,455.0,Pound -True,1258,3.95,4.26924,4.26924,13,13,455.0,Dollar -True,124,4.75,4.7272,4.7272,13,8,455.0,Euro -True,1175,4.8,4.79676,4.79676,13,26,455.0,Pound -False,1237,3.65,4.4032,4.4032,13,9,455.0,Pound -True,1614,3.95,4.23444,4.23444,13,7,455.0,Dollar -True,966,4.9,4.8805,4.8805,13,28,455.0,Euro -True,69,3.85,3.63298,3.63298,13,31,455.0,Dollar -False,111,3.15,3.17697,3.17697,13,9,455.0,Dollar -True,1300,3.1,2.64121,2.64121,13,13,455.0,Dollar -True,64,4.6,4.60036,4.60036,13,10,455.0,Pound -True,6072,4.0,4.06575,4.06575,13,60,455.0,Pound -True,42,4.2,4.20767,4.20767,13,21,455.0,Pound -True,4013,3.75,4.11477,4.11477,13,51,455.0,Euro -True,31,4.3,4.40014,4.40014,13,28,455.0,Dollar -False,4181,3.91667,3.81305,3.81305,13,83,455.0,Dollar -True,2097,4.45,4.45308,4.45308,13,27,455.0,Dollar -False,768,3.9,3.87283,3.87283,14,165,455.0,Dollar -False,90,4.2,4.33413,4.33413,13,38,455.0,Euro -True,53,3.9,4.03051,4.03051,13,0,455.0,Pound -False,34,3.45,3.63169,3.63169,13,40,455.0,Dollar -True,33,4.05,4.16554,4.16554,13,8,455.0,Euro -False,634,4.3,4.24762,4.24762,13,28,455.0,Pound -False,1697,4.55,4.4782,4.4782,13,20,455.0,Dollar -True,143,4.75,4.80176,4.80176,13,36,455.0,Euro -True,1044,3.95,3.87206,3.87206,13,10,455.0,Euro -False,2019,4.95,4.9064,4.9064,13,15,455.0,Pound -False,49,4.2,4.10792,4.10792,13,14,455.0,Euro -True,1259,4.6,4.49399,4.49399,13,23,455.0,Dollar -False,179,3.85,3.77029,3.77029,13,28,455.0,Pound -False,592,3.1,3.36913,3.36913,13,17,455.0,Dollar -True,41,3.25,3.13383,3.13383,13,5,455.0,Pound -False,112,4.15,4.16457,4.16457,13,5,455.0,Pound -True,242,4.35,4.43932,4.43932,13,68,455.0,Euro -True,51,3.35,3.31979,3.31979,13,39,455.0,Euro -False,3595,4.0,3.78232,3.78232,13,52,455.0,Dollar -True,7564,3.85,3.86233,3.86233,13,55,455.0,Euro -False,54,4.30769,4.41061,4.41061,14,24,720.0,Pound -True,580,4.69231,4.74312,4.74312,13,28,455.0,Pound -True,47,4.80769,4.8323,4.8323,13,17,455.0,Dollar -True,152,4.65,4.52816,4.52816,13,34,455.0,Pound -True,79,4.65385,4.69209,4.69209,13,28,455.0,Euro -True,103,4.55,4.61382,4.61382,13,13,700.0,Pound -False,42,3.5,3.41878,3.41878,13,23,455.0,Pound -True,2387,2.8,2.56224,2.56224,13,115,455.0,Pound -False,460,4.7,4.65226,4.65226,13,43,455.0,Dollar -True,543,3.45,3.39711,3.39711,13,15,455.0,Euro -False,1801,3.75,3.98438,3.98438,13,70,455.0,Dollar -True,85,3.8,3.93748,3.93748,13,18,455.0,Pound -False,93,4.4,4.42311,4.42311,13,11,455.0,Dollar -False,149,4.35,4.36304,4.36304,13,7,455.0,Pound -False,78,3.7,3.68364,3.68364,13,36,455.0,Pound -True,77,4.15,4.13274,4.13274,13,35,455.0,Euro -True,65,3.7,3.70105,3.70105,13,181,455.0,Dollar -False,38,4.8,4.77888,4.77888,13,28,455.0,Pound -False,70,3.85,3.84247,3.84247,13,21,455.0,Pound -False,1091,4.4,4.30416,4.30416,13,8,455.0,Pound -False,1468,3.75,3.38099,3.38099,13,15,455.0,Dollar -True,93,4.15,4.20693,4.20693,13,23,455.0,Pound -True,2805,4.55,4.47125,4.47125,13,7,455.0,Pound -True,12737,3.75,3.71438,3.71438,13,6,455.0,Dollar -False,680,4.0,4.18531,4.18531,13,16,455.0,Euro -True,8039,4.5,4.62781,4.62781,13,114,455.0,Dollar -False,2921,4.5,4.45001,4.45001,13,40,455.0,Pound -True,56,4.5,4.32082,4.32082,13,7,455.0,Pound -False,626,3.95,3.87101,3.87101,12,34,455.0,Dollar -False,34,3.85,3.96716,3.96716,12,5,455.0,Pound -True,1277,4.65,4.61261,4.61261,12,22,455.0,Euro -False,61,3.9,3.84434,3.84434,12,11,455.0,Pound -True,206,4.05,3.96145,3.96145,12,74,455.0,Euro -False,50,4.3,4.23286,4.23286,12,10,455.0,Pound -True,996,3.95,3.79001,3.79001,12,18,455.0,Euro -True,97,4.25,4.19875,4.19875,12,59,455.0,Dollar -False,588,3.75,3.57653,3.57653,12,148,455.0,Dollar -True,50,4.75,4.70167,4.70167,12,15,455.0,Pound -False,541,4.4,4.41176,4.41176,12,21,455.0,Pound -False,217,3.95,4.01246,4.01246,12,12,455.0,Dollar -False,30,3.85,3.89383,3.89383,12,56,455.0,Euro -True,40,4.6,4.61383,4.61383,12,10,455.0,Dollar -False,1766,4.1,4.22702,4.22702,12,8,455.0,Dollar -False,62,4.4,4.35566,4.35566,12,26,455.0,Dollar -False,299,4.8,4.80297,4.80297,12,8,455.0,Dollar -False,2340,3.85,3.76009,3.76009,12,6,455.0,Euro -True,62,4.25,4.08173,4.08173,12,16,455.0,Dollar -True,35,4.5,4.42379,4.42379,12,6,455.0,Euro -False,647,2.95,2.74372,2.74372,12,0,455.0,Dollar -True,2077,3.0,2.94999,2.94999,12,20,455.0,Dollar -False,42,4.6,4.56306,4.56306,12,25,455.0,Euro -True,29,4.25,4.39902,4.39902,12,10,700.0,Pound -True,66,4.2,4.25311,4.25311,12,0,455.0,Dollar -True,41,3.9,3.87074,3.87074,12,12,455.0,Euro -False,41,3.0,2.894,2.894,12,7,455.0,Euro -True,38,4.15,3.93506,3.93506,12,23,2400.0,Euro -True,1370,3.9,4.33037,4.33037,12,5,455.0,Dollar -False,1143,4.25,4.21775,4.21775,13,173,455.0,Euro -True,79,3.9,3.82771,3.82771,12,22,455.0,Pound -True,2107,4.1,4.16078,4.16078,12,30,455.0,Pound -True,54,4.25,4.14715,4.14715,12,48,455.0,Pound -False,86,4.7,4.70163,4.70163,12,29,455.0,Pound -False,98,4.0,3.95196,3.95196,12,79,455.0,Dollar -True,1740,3.55,3.71824,3.71824,12,26,700.0,Pound -False,97,4.1,4.23722,4.23722,12,9,455.0,Pound -True,361,4.35,4.33302,4.33302,12,25,455.0,Dollar -False,2033,3.35,3.02456,3.02456,12,19,455.0,Dollar -False,102,4.15,4.07451,4.07451,12,24,455.0,Euro -True,1107,4.55,4.51708,4.51708,12,149,455.0,Euro -True,2549,3.8,4.24211,4.24211,12,26,455.0,Pound -True,80,3.65,3.67135,3.67135,12,7,455.0,Pound -True,588,3.4,3.23843,3.23843,12,22,455.0,Dollar -False,75,3.55,3.48552,3.48552,12,48,455.0,Pound -False,2075,3.55,3.64146,3.64146,12,31,455.0,Dollar -False,513,4.1,3.95064,3.95064,12,19,455.0,Pound -True,647,3.65,3.29311,3.29311,12,6,455.0,Pound -True,58,4.2,4.19869,4.19869,12,7,455.0,Euro -False,73,4.55,4.64616,4.64616,12,36,455.0,Pound -False,165,3.4,3.45628,3.45628,12,19,455.0,Euro -False,31,4.0,3.87522,3.87522,12,13,455.0,Euro -False,3144,3.95,4.19427,4.19427,12,67,455.0,Dollar -True,55,4.9,4.82619,4.82619,12,0,3200.0,Dollar -False,31,4.05,4.01137,4.01137,12,17,455.0,Pound -True,660,3.65,3.55994,3.55994,12,27,455.0,Euro -True,233,4.55,4.53595,4.53595,12,21,455.0,Dollar -True,1002,4.65,4.60051,4.60051,12,53,455.0,Euro -True,65,4.05,4.10673,4.10673,12,20,455.0,Dollar -True,4539,3.5,3.75386,3.75386,12,25,455.0,Euro -False,6113,4.6,4.57101,4.57101,12,26,455.0,Euro -False,1289,4.5,4.79101,4.79101,12,10,455.0,Euro -False,27,4.8,4.75983,4.75983,12,32,640.0,Euro -True,65,4.25,4.33542,4.33542,12,32,455.0,Euro -True,176,3.4,3.32266,3.32266,12,7,455.0,Dollar -False,227,4.2,4.29008,4.29008,12,16,455.0,Dollar -True,1029,3.65,3.82952,3.82952,12,12,455.0,Dollar -False,127,3.85,3.8096,3.8096,12,35,455.0,Euro -False,750,4.45,4.09778,4.09778,12,38,455.0,Pound -True,30,3.85,3.8796,3.8796,12,9,455.0,Pound -False,530,4.35,4.29389,4.29389,12,18,455.0,Euro -False,75,3.75,3.74535,3.74535,12,20,455.0,Pound -True,293,4.5,4.3725,4.3725,12,23,455.0,Euro -True,1283,4.3,4.16406,4.16406,12,16,455.0,Pound -True,58,4.6,4.62055,4.62055,12,34,455.0,Euro -False,1486,4.45,4.51889,4.51889,12,28,455.0,Dollar -False,80,3.7,3.14466,3.14466,12,53,480.0,Euro -True,28,4.4,4.3575,4.3575,12,23,455.0,Dollar -True,44,4.25,4.10302,4.10302,12,0,455.0,Dollar -False,66,4.04167,4.04286,4.04286,12,0,455.0,Dollar -False,3986,2.95833,2.5671,2.5671,12,17,455.0,Euro -True,3043,4.35,4.42692,4.42692,12,45,455.0,Pound -True,1304,3.4,3.20707,3.20707,12,12,455.0,Dollar -False,79,4.2,4.17743,4.17743,12,14,455.0,Pound -True,72,3.6,3.50377,3.50377,12,24,455.0,Dollar -False,122,3.85,3.79906,3.79906,12,9,455.0,Euro -True,165,3.85,3.67451,3.67451,12,28,455.0,Dollar -False,1536,4.2,4.39744,4.39744,12,55,455.0,Pound -True,49,3.35,3.3947,3.3947,12,16,455.0,Pound -False,34,4.2,4.169,4.169,12,30,455.0,Euro -False,2029,4.15,4.00975,4.00975,12,14,455.0,Dollar -False,40,3.95,3.96958,3.96958,12,11,455.0,Dollar -False,1049,3.95,4.076,4.076,12,15,455.0,Euro -True,9464,4.3,4.15295,4.15295,12,24,455.0,Euro -False,59,3.35,3.24225,3.24225,12,0,455.0,Dollar -False,118,4.2,4.13924,4.13924,12,0,520.0,Dollar -False,371,4.15,4.14773,4.14773,12,16,455.0,Euro -False,112,4.7,4.62917,4.62917,12,73,455.0,Dollar -False,488,4.35,4.27294,4.27294,12,25,455.0,Euro -False,93,4.1,3.97453,3.97453,12,16,455.0,Euro -True,31,4.5,4.31666,4.31666,12,25,455.0,Pound -True,81,3.9,3.89827,3.89827,12,11,455.0,Dollar -True,916,4.4,4.32721,4.32721,12,35,455.0,Dollar -False,736,4.0,3.9011,3.9011,12,24,455.0,Pound -False,2710,4.25,4.45555,4.45555,12,12,455.0,Euro -False,50,4.05,4.0594,4.0594,12,15,455.0,Pound -True,970,4.6,4.3852,4.3852,12,24,455.0,Pound -True,37,4.1,4.09324,4.09324,12,24,455.0,Pound -True,44,4.4,4.39751,4.39751,12,8,455.0,Euro -True,1516,3.75,3.69124,3.69124,12,17,455.0,Dollar -False,286,4.4,4.32129,4.32129,12,19,455.0,Dollar -False,47,3.25,3.29249,3.29249,12,16,455.0,Pound -True,39,4.1,4.11916,4.11916,12,27,455.0,Pound -False,72,4.25,4.21651,4.21651,12,13,455.0,Dollar -True,767,4.5,4.21031,4.21031,12,13,455.0,Euro -False,85,3.6,3.59414,3.59414,12,19,455.0,Euro -True,33,4.45,4.46405,4.46405,12,35,455.0,Euro -True,38,3.5,3.45678,3.45678,12,24,455.0,Dollar -False,63,3.6,3.6913,3.6913,12,24,455.0,Euro -False,54,3.2,3.19688,3.19688,12,33,455.0,Dollar -True,550,4.3,3.53003,3.53003,12,19,455.0,Pound -True,114,4.1,4.1834,4.1834,12,0,455.0,Pound -True,2767,3.75,3.57041,3.57041,12,17,455.0,Pound -True,2092,4.4,4.6797,4.6797,12,48,455.0,Pound -False,2383,3.7,3.44693,3.44693,12,10,455.0,Pound -False,3848,3.41667,3.56776,3.56776,12,9,455.0,Dollar -True,29,4.15,3.7931,3.7931,12,15,455.0,Pound -True,44,4.75,4.77271,4.77271,12,9,455.0,Pound -True,56,4.1,4.07729,4.07729,12,12,455.0,Dollar -False,2447,3.9,3.88184,3.88184,12,21,455.0,Euro -True,46,3.75,3.78074,3.78074,12,21,455.0,Pound -False,65,4.77273,4.7977,4.7977,12,77,3200.0,Euro -True,740,3.4,3.59748,3.59748,12,180,455.0,Pound -True,56,3.7,3.84998,3.84998,12,53,455.0,Dollar -False,3651,4.1,3.60603,3.60603,12,24,455.0,Euro -False,88,4.5,4.6282,4.6282,12,21,455.0,Pound -True,590,3.85,3.67142,3.67142,12,31,455.0,Pound -False,836,3.05,2.99068,2.99068,12,5,455.0,Euro -True,739,4.25,4.08074,4.08074,12,21,455.0,Dollar -False,2218,3.65,3.52654,3.52654,12,22,455.0,Dollar -False,648,4.45,4.35609,4.35609,12,26,455.0,Pound -True,4619,4.1,4.05246,4.05246,12,12,455.0,Dollar -True,1088,4.0,3.91853,3.91853,12,19,455.0,Euro -False,4021,3.35,3.55193,3.55193,12,21,455.0,Pound -False,61,4.0,4.00118,4.00118,12,42,455.0,Euro -False,105,3.2,3.03757,3.03757,12,27,455.0,Pound -False,49,4.4,4.35025,4.35025,12,10,455.0,Euro -True,64,4.75,4.74198,4.74198,12,9,1680.0,Euro -False,62,4.35,4.19712,4.19712,12,10,455.0,Euro -False,993,3.95,4.19726,4.19726,12,6,455.0,Pound -False,33,3.7,3.92942,3.92942,12,31,455.0,Euro -False,904,3.9,3.8234,3.8234,12,21,455.0,Euro -False,1266,3.95,4.24415,4.24415,12,16,455.0,Pound -False,2072,4.05,3.89606,3.89606,12,8,455.0,Euro -False,616,3.7,4.10183,4.10183,12,63,455.0,Pound -True,63,4.4,4.44557,4.44557,12,24,455.0,Euro -False,638,4.3,4.18456,4.18456,12,28,455.0,Dollar -True,58,3.5,3.42971,3.42971,12,6,455.0,Pound -True,35,3.91667,3.92982,3.92982,12,7,455.0,Pound -True,59,4.75,4.75726,4.75726,12,14,455.0,Dollar -False,898,4.3,4.08207,4.08207,12,18,455.0,Dollar -False,1316,2.75,2.21485,2.21485,12,29,455.0,Euro -False,112,4.25,4.1582,4.1582,12,50,455.0,Euro -False,1092,3.3,3.10256,3.10256,12,30,455.0,Pound -True,544,4.1,4.14656,4.14656,12,19,455.0,Pound -False,63,2.85,2.77801,2.77801,12,0,455.0,Pound -False,96,4.4,4.37135,4.37135,12,14,455.0,Dollar -True,160,3.65,3.51111,3.51111,12,8,455.0,Euro -False,9183,3.2,3.22473,3.22473,12,39,455.0,Euro -False,214,4.4,4.30664,4.30664,12,109,455.0,Dollar -False,335,2.75,2.87703,2.87703,12,21,455.0,Pound -False,687,3.8,4.02892,4.02892,12,17,455.0,Dollar -False,44,3.95,3.9079,3.9079,12,7,455.0,Dollar -True,1144,3.75,3.73756,3.73756,12,19,455.0,Dollar -False,2140,3.8,3.64477,3.64477,12,16,455.0,Pound -True,60,4.35,4.52405,4.52405,12,9,455.0,Pound -False,60,4.15,4.17525,4.17525,12,30,455.0,Euro -True,37,4.35,4.27388,4.27388,12,28,455.0,Dollar -False,1610,4.35,4.59958,4.59958,12,8,455.0,Euro -False,1138,4.15,4.01325,4.01325,12,15,455.0,Pound -False,76,4.45,4.37216,4.37216,12,240,455.0,Dollar -True,1048,3.4,3.17117,3.17117,12,22,455.0,Pound -False,133,3.8,4.02096,4.02096,12,26,455.0,Pound -False,1095,4.7,4.63776,4.63776,12,55,455.0,Dollar -False,71,4.2,4.42279,4.42279,12,16,455.0,Euro -False,92,4.4,4.40897,4.40897,12,23,455.0,Pound -False,55,4.2,4.14125,4.14125,12,17,455.0,Pound -False,84,4.25,4.30401,4.30401,12,12,455.0,Pound -True,40,4.25,4.25378,4.25378,12,29,455.0,Dollar -True,92,4.7,4.68822,4.68822,12,57,455.0,Dollar -False,2190,4.45,4.64267,4.64267,12,9,455.0,Pound -False,52,3.6,3.67824,3.67824,12,88,455.0,Dollar -False,2296,3.85,4.07447,4.07447,12,28,455.0,Pound -False,1188,4.25,4.14233,4.14233,11,36,455.0,Euro -False,74,3.75,3.82416,3.82416,11,23,455.0,Dollar -True,1286,3.75,3.51436,3.51436,11,21,455.0,Euro -False,620,4.15,4.24147,4.24147,11,40,455.0,Dollar -True,29,3.7,3.73923,3.73923,11,10,455.0,Euro -True,151,4.15,4.07694,4.07694,11,12,455.0,Euro -True,323,4.7,4.80841,4.80841,11,54,455.0,Dollar -False,32,4.45,4.34853,4.34853,11,11,455.0,Pound -False,24,4.2,4.20086,4.20086,11,11,455.0,Pound -True,1671,4.45,4.3806,4.3806,11,33,455.0,Pound -True,1417,4.1,3.99671,3.99671,11,6,455.0,Dollar -True,220,3.45,3.55505,3.55505,11,17,455.0,Pound -False,3409,3.95,4.12651,4.12651,11,17,455.0,Euro -False,5077,3.7,4.16015,4.16015,11,12,455.0,Pound -False,83,4.1,3.91882,3.91882,11,23,455.0,Dollar -False,715,4.15,4.36677,4.36677,11,9,455.0,Euro -True,743,4.7,4.75184,4.75184,11,52,455.0,Pound -True,43,4.5,4.41083,4.41083,11,52,455.0,Dollar -True,86,3.65,3.75795,3.75795,11,24,455.0,Dollar -False,39,4.15,4.14546,4.14546,11,14,455.0,Dollar -True,48,3.75,3.73117,3.73117,11,8,455.0,Dollar -False,1208,4.0,4.28623,4.28623,11,0,455.0,Dollar -False,90,4.40909,4.41312,4.41312,11,133,455.0,Euro -True,604,4.45,4.36425,4.36425,11,17,455.0,Pound -True,641,3.65,3.71438,3.71438,11,22,455.0,Euro -False,72,4.35,4.31621,4.31621,11,5,455.0,Euro -False,410,4.0,4.42447,4.42447,12,13,455.0,Euro -False,237,4.15,4.19113,4.19113,11,30,455.0,Euro -False,614,4.55,4.6378,4.6378,11,9,455.0,Euro -True,330,4.45,4.38906,4.38906,11,40,455.0,Euro -True,1043,2.9,2.90401,2.90401,11,26,455.0,Euro -True,1039,2.2,2.35863,2.35863,11,11,455.0,Euro -False,1783,4.4,4.51446,4.51446,11,19,455.0,Euro -False,68,4.05,4.1694,4.1694,11,9,455.0,Dollar -True,80,4.5,4.17276,4.17276,11,34,455.0,Pound -True,54,4.35,4.38169,4.38169,11,35,455.0,Dollar -False,578,4.2,4.20354,4.20354,11,15,455.0,Dollar -True,59,4.6,4.58763,4.58763,13,10,455.0,Pound -False,52,3.6,3.58039,3.58039,11,7,455.0,Dollar -True,35,4.5,4.31235,4.31235,11,12,455.0,Dollar -True,547,3.7,3.80816,3.80816,11,19,455.0,Pound -True,54,2.75,2.80897,2.80897,11,0,455.0,Pound -False,190,4.75,4.72834,4.72834,11,43,455.0,Euro -True,2140,4.25,4.1649,4.1649,11,5,455.0,Dollar -True,89,3.7,3.70797,3.70797,11,12,455.0,Pound -False,2176,4.65,4.71177,4.71177,11,50,455.0,Euro -False,43,4.0,3.72052,3.72052,11,35,455.0,Pound -False,50,4.55,4.56074,4.56074,11,5,455.0,Dollar -False,1088,4.5,4.47393,4.47393,11,15,455.0,Dollar -True,2478,4.5,4.36198,4.36198,11,85,700.0,Euro -False,108,4.05,4.13233,4.13233,11,10,455.0,Euro -True,103,4.0,3.97848,3.97848,11,10,455.0,Dollar -True,2078,4.45,4.52411,4.52411,11,65,455.0,Pound -False,356,4.35,4.46361,4.46361,11,20,455.0,Euro -True,1132,4.4,4.33642,4.33642,11,81,455.0,Pound -False,36,4.75,4.73259,4.73259,11,28,455.0,Dollar -True,414,4.25,4.18635,4.18635,11,15,455.0,Pound -False,778,4.3,4.31447,4.31447,11,25,455.0,Pound -True,1239,3.85,3.91978,3.91978,11,30,455.0,Dollar -False,42,3.45,3.4903,3.4903,11,28,455.0,Dollar -True,329,4.4,4.35061,4.35061,11,15,455.0,Euro -True,828,4.45,4.34883,4.34883,11,14,455.0,Pound -True,49,4.0,3.82686,3.82686,11,29,455.0,Euro -True,1092,3.55,3.05383,3.05383,11,20,700.0,Pound -False,155,3.6,3.62602,3.62602,11,62,455.0,Pound -False,161,4.05,3.76614,3.76614,13,21,455.0,Pound -True,1034,3.7,3.84171,3.84171,11,13,455.0,Pound -True,224,4.25,4.18661,4.18661,11,27,455.0,Euro -True,66,3.8,3.91791,3.91791,11,63,455.0,Pound -False,188,4.0,4.0437,4.0437,11,0,455.0,Dollar -True,1182,4.3,4.26829,4.26829,11,29,455.0,Euro -False,2724,4.1,4.5748,4.5748,11,40,455.0,Dollar -False,1949,3.35,3.72354,3.72354,11,0,455.0,Euro -True,75,4.4,4.29543,4.29543,11,16,455.0,Euro -True,95,3.75,3.73148,3.73148,11,21,455.0,Euro -True,180,4.8,4.78647,4.78647,11,10,720.0,Pound -True,26,4.3,4.36419,4.36419,11,21,455.0,Dollar -False,5865,4.2,4.29984,4.29984,11,21,455.0,Pound -False,16,5.0,5.0,5.0,11,19,455.0,Euro -False,53,4.35,4.37075,4.37075,11,10,455.0,Pound -False,1382,3.75,3.85979,3.85979,11,11,455.0,Euro -True,709,4.75,4.79229,4.79229,11,20,455.0,Pound -True,46,4.2,4.19977,4.19977,11,17,455.0,Dollar -True,96,4.7,4.74145,4.74145,11,10,455.0,Pound -True,46,4.3,4.30583,4.30583,11,18,455.0,Euro -True,74,4.7,4.79718,4.79718,11,19,455.0,Euro -True,37,4.6,4.62166,4.62166,11,10,455.0,Dollar -True,368,3.65,3.73266,3.73266,11,9,455.0,Pound -False,35,4.85,4.76092,4.76092,11,5,455.0,Pound -True,59,4.55,4.54683,4.54683,11,10,455.0,Euro -True,1754,4.3,4.19638,4.19638,11,22,455.0,Pound -False,49,3.2,3.05637,3.05637,11,13,455.0,Pound -False,4805,3.25,3.48463,3.48463,11,30,2080.0,Dollar -True,269,3.8,3.25895,3.25895,11,10,455.0,Pound -False,3971,3.05,3.19257,3.19257,11,23,455.0,Euro -False,65,3.9,4.05341,4.05341,11,17,455.0,Euro -False,195,4.15,4.17779,4.17779,11,71,455.0,Euro -True,242,4.6,4.47392,4.47392,11,38,455.0,Pound -False,1114,4.45,4.4974,4.4974,11,9,455.0,Euro -True,54,4.7,4.57513,4.57513,11,29,455.0,Dollar -False,39,4.05,4.02904,4.02904,11,18,455.0,Pound -False,72,4.75,4.71197,4.71197,11,16,455.0,Euro -True,54,3.85,3.88023,3.88023,11,11,455.0,Pound -True,51,3.75,3.65175,3.65175,11,38,455.0,Pound -False,91,4.5,4.37937,4.37937,11,26,455.0,Dollar -True,1034,4.45,4.56185,4.56185,11,8,455.0,Euro -False,58,4.25,4.25295,4.25295,11,21,455.0,Pound -False,46,3.35,3.37629,3.37629,11,26,455.0,Euro -True,2766,2.6,3.04863,3.04863,11,19,455.0,Pound -False,23,4.05,4.09154,4.09154,11,9,455.0,Dollar -True,1424,4.2,4.24817,4.24817,11,33,455.0,Euro -False,792,4.7,4.45974,4.45974,11,17,455.0,Euro -False,36,4.2,4.1434,4.1434,11,5,455.0,Pound -True,2041,3.95,3.97809,3.97809,11,17,455.0,Dollar -False,28,4.55,4.44698,4.44698,11,16,455.0,Pound -True,35,4.25,4.21142,4.21142,11,18,455.0,Dollar -False,193,4.9,4.82234,4.82234,11,61,455.0,Euro -False,1355,4.0,4.31412,4.31412,12,16,455.0,Dollar -False,32,3.2,3.27465,3.27465,11,37,455.0,Euro -True,1555,4.05,3.98905,3.98905,11,5,455.0,Pound -False,59,4.0,3.98205,3.98205,11,11,455.0,Pound -True,52,3.9,4.17135,4.17135,11,11,455.0,Euro -True,80,4.1,4.01512,4.01512,11,23,455.0,Euro -False,1028,4.0,3.88804,3.88804,11,5,455.0,Euro -False,667,4.35,4.35881,4.35881,11,24,455.0,Dollar -False,52,4.2,4.17038,4.17038,11,8,455.0,Dollar -False,41,4.25,4.3205,4.3205,11,9,455.0,Dollar -False,1039,4.75,4.53329,4.53329,11,25,455.0,Euro -True,171,4.3,4.28165,4.28165,11,17,455.0,Pound -False,862,4.3,4.2207,4.2207,11,18,455.0,Dollar -False,85,4.2,4.05231,4.05231,11,10,455.0,Euro -True,325,4.35,4.35294,4.35294,11,18,455.0,Euro -True,96,3.7,3.63978,3.63978,11,15,455.0,Dollar -True,64,3.7,3.75242,3.75242,11,15,455.0,Pound -False,108,4.25,4.1175,4.1175,11,0,455.0,Dollar -False,1343,2.7,1.89903,1.89903,11,7,455.0,Euro -True,173,4.95,4.93166,4.93166,11,52,455.0,Euro -True,248,4.45,4.38776,4.38776,11,17,455.0,Euro -False,141,4.3,4.27383,4.27383,11,12,455.0,Pound -False,450,4.0,3.91559,3.91559,11,17,455.0,Euro -True,30,3.55,3.50079,3.50079,11,5,455.0,Pound -True,1920,3.55,3.62733,3.62733,11,9,455.0,Dollar -True,23,4.72727,4.69607,4.69607,11,28,455.0,Euro -True,72,3.86364,3.80367,3.80367,11,33,455.0,Pound -True,636,4.18182,4.34254,4.34254,11,23,455.0,Dollar -False,1928,4.15,4.11903,4.11903,11,14,455.0,Pound -True,1486,4.7,4.71641,4.71641,11,26,455.0,Euro -True,987,4.6,4.81352,4.81352,11,13,455.0,Pound -True,64,3.75,3.72383,3.72383,11,16,455.0,Pound -True,433,4.2,4.21904,4.21904,11,12,455.0,Pound -False,5050,3.4,2.8784,2.8784,11,10,455.0,Euro -True,119,4.25,4.2076,4.2076,11,8,455.0,Dollar -True,538,3.7,3.56805,3.56805,11,12,455.0,Pound -True,68,4.5,4.69482,4.69482,11,49,455.0,Euro -False,133,4.65,4.68187,4.68187,11,31,455.0,Euro -False,580,3.85,4.03939,4.03939,11,27,720.0,Euro -False,28,3.55,3.5442,3.5442,11,16,455.0,Euro -False,1944,3.25,2.52548,2.52548,11,197,455.0,Euro -True,35,4.2,4.19891,4.19891,11,7,455.0,Pound -False,46,4.5,4.48868,4.48868,11,71,455.0,Euro -True,3716,4.65,4.82525,4.82525,11,18,455.0,Euro -True,137,3.5,3.44847,3.44847,11,0,455.0,Dollar -False,22,5.0,5.0,5.0,11,8,455.0,Pound -True,34,4.6,4.59322,4.59322,11,16,455.0,Dollar -True,276,4.5,4.28141,4.28141,10,27,455.0,Pound -True,40,3.8,3.63141,3.63141,10,14,455.0,Dollar -False,1086,2.9,2.76441,2.76441,10,19,455.0,Pound -True,164,4.4,4.4419,4.4419,10,27,455.0,Pound -False,1537,3.65,3.85143,3.85143,10,89,455.0,Dollar -True,2433,4.05,4.29321,4.29321,10,18,455.0,Euro -False,47,4.5,4.48216,4.48216,10,16,455.0,Euro -False,852,4.85,4.80928,4.80928,10,40,455.0,Dollar -False,48,4.4,4.34541,4.34541,10,29,455.0,Pound -False,2543,4.5,4.25616,4.25616,10,38,455.0,Euro -True,29,3.85,3.83488,3.83488,10,11,455.0,Dollar -True,63,4.35,4.26384,4.26384,10,7,455.0,Pound -True,1005,4.2,4.00558,4.00558,10,29,455.0,Dollar -True,351,3.75,3.66123,3.66123,10,7,455.0,Pound -False,1052,3.4,3.43376,3.43376,10,48,455.0,Dollar -False,1767,3.7,3.38269,3.38269,10,17,455.0,Dollar -True,1013,2.9,3.01157,3.01157,10,20,455.0,Pound -False,34,4.65,4.63941,4.63941,10,18,455.0,Pound -True,530,3.65,3.61717,3.61717,10,5,455.0,Euro -False,77,4.0,4.03124,4.03124,10,27,455.0,Pound -False,5000,3.25,3.64818,3.64818,10,25,455.0,Euro -False,61,3.35,2.9219,2.9219,10,0,455.0,Dollar -False,726,3.3,3.26955,3.26955,10,19,455.0,Euro -True,5228,3.5,3.45808,3.45808,10,112,455.0,Dollar -False,147,4.65,4.61456,4.61456,10,55,455.0,Pound -False,26,4.55,4.55226,4.55226,10,23,455.0,Euro -True,56,4.55,4.36521,4.36521,10,12,455.0,Euro -True,61,4.1,4.28044,4.28044,10,15,455.0,Dollar -False,5601,4.25,4.38341,4.38341,10,0,700.0,Euro -True,27,4.35,4.43494,4.43494,10,21,455.0,Euro -True,1058,4.45,4.52666,4.52666,10,9,455.0,Dollar -True,3777,4.4,4.34033,4.34033,10,10,455.0,Dollar -True,41,3.35,3.21149,3.21149,10,11,455.0,Pound -True,411,4.8,4.77205,4.77205,10,23,455.0,Pound -True,1395,3.95,4.12724,4.12724,10,27,455.0,Dollar -True,1539,3.8,3.45574,3.45574,10,68,455.0,Dollar -False,1295,3.95,3.78244,3.78244,10,53,455.0,Euro -True,1033,4.55,4.4626,4.4626,10,64,455.0,Euro -True,576,3.8,3.71513,3.71513,10,16,455.0,Euro -False,38,4.1,4.25492,4.25492,10,14,3200.0,Pound -False,1064,4.45,4.42586,4.42586,10,21,455.0,Pound -False,47,3.4,2.71577,2.71577,10,37,455.0,Euro -True,2438,4.4,4.21947,4.21947,10,5,455.0,Pound -False,1037,4.5,4.43014,4.43014,10,15,455.0,Pound -True,417,4.4,4.267,4.267,10,36,455.0,Euro -True,42,4.15,4.21383,4.21383,10,17,455.0,Pound -False,559,4.0,3.74595,3.74595,10,22,455.0,Pound -False,49,3.95,3.81232,3.81232,10,190,455.0,Pound -True,546,3.95,3.4009,3.4009,10,67,455.0,Pound -True,1000,4.1,4.11463,4.11463,10,7,468.0,Pound -True,151,4.65,4.63177,4.63177,10,12,455.0,Pound -True,4529,3.65,3.45845,3.45845,10,24,455.0,Euro -False,230,4.2,4.3598,4.3598,10,36,455.0,Dollar -True,90,4.45,4.41812,4.41812,10,57,455.0,Pound -False,16,4.8,4.72915,4.72915,10,7,700.0,Pound -False,7439,3.65,3.52121,3.52121,10,22,455.0,Euro -False,1808,2.85,2.75955,2.75955,10,23,455.0,Euro -True,679,4.7,4.78107,4.78107,10,22,455.0,Dollar -False,58,4.3,4.31471,4.31471,10,65,455.0,Euro -True,152,4.65,4.51243,4.51243,10,18,455.0,Dollar -True,2592,3.65,3.49421,3.49421,10,31,455.0,Dollar -True,822,4.05,3.98888,3.98888,10,13,455.0,Dollar -False,3292,4.15,4.20407,4.20407,10,13,455.0,Dollar -False,399,4.15,4.08303,4.08303,10,34,455.0,Dollar -False,111,4.6,4.51537,4.51537,10,45,455.0,Dollar -True,978,4.5,4.47326,4.47326,10,19,455.0,Euro -True,45,4.45,4.32714,4.32714,10,17,455.0,Pound -True,109,4.55,4.47325,4.47325,10,26,455.0,Euro -True,107,4.75,4.69781,4.69781,10,27,455.0,Euro -False,2499,3.45,3.95188,3.95188,10,0,455.0,Euro -False,606,3.45,3.56836,3.56836,10,23,455.0,Pound -False,57,3.9,3.76297,3.76297,10,8,455.0,Dollar -False,87,3.75,3.73231,3.73231,10,33,455.0,Euro -False,386,3.9,4.1705,4.1705,10,11,455.0,Dollar -False,56,4.2,4.22698,4.22698,10,56,455.0,Dollar -True,41,3.95,3.93099,3.93099,10,10,455.0,Euro -False,425,4.5,4.19925,4.19925,10,19,455.0,Euro -True,557,4.05,4.046,4.046,10,38,455.0,Pound -True,81,3.75,3.83876,3.83876,10,0,455.0,Pound -True,3625,4.3,4.54998,4.54998,10,22,455.0,Euro -False,52,4.6,4.59554,4.59554,10,20,700.0,Euro -True,41,4.25,4.10169,4.10169,10,9,455.0,Pound -True,34,4.6,4.11323,4.11323,10,6,455.0,Euro -True,86,4.15,4.06304,4.06304,10,28,455.0,Pound -True,49,3.75,3.62246,3.62246,10,10,455.0,Dollar -True,1266,3.6,3.78278,3.78278,10,23,455.0,Pound -True,82,4.5,4.42826,4.42826,10,30,455.0,Pound -True,6476,4.45,4.5494,4.5494,10,24,455.0,Euro -True,24,3.85,3.82489,3.82489,10,7,455.0,Pound -False,36,4.3,4.29273,4.29273,10,13,455.0,Pound -True,521,3.45,3.391,3.391,10,11,455.0,Euro -False,45,4.0,4.18982,4.18982,10,9,455.0,Euro -True,24,4.7,4.68659,4.68659,10,17,3200.0,Euro -True,62,3.95,3.91565,3.91565,10,36,455.0,Pound -True,2306,4.0,4.28476,4.28476,10,11,455.0,Euro -False,22,3.9,3.9253,3.9253,10,9,455.0,Pound -True,36,4.0,3.99447,3.99447,10,35,455.0,Euro -True,51,3.25,3.04953,3.04953,10,16,455.0,Dollar -False,25,3.2,3.23954,3.23954,10,10,455.0,Pound -False,2312,4.05,4.44464,4.44464,10,19,455.0,Euro -False,16,4.35,4.32715,4.32715,10,0,455.0,Dollar -True,74,4.7,4.63695,4.63695,10,20,455.0,Euro -False,39,4.3,4.32227,4.32227,10,26,455.0,Dollar -True,41,4.7,4.70733,4.70733,10,46,455.0,Pound -False,43,4.6,4.43572,4.43572,10,51,455.0,Euro -True,858,4.7,4.76671,4.76671,10,37,455.0,Euro -True,1296,4.2,4.08675,4.08675,10,7,455.0,Pound -False,60,3.75,3.49832,3.49832,10,22,455.0,Dollar -True,2039,4.4,4.223,4.223,10,33,455.0,Euro -True,928,4.1,3.89492,3.89492,10,28,455.0,Euro -True,58,3.95,3.84187,3.84187,10,20,455.0,Dollar -True,83,3.9,3.8569,3.8569,10,0,455.0,Dollar -True,30,4.65,4.59446,4.59446,10,9,455.0,Euro -True,74,4.2,4.04524,4.04524,10,14,455.0,Pound -False,1297,4.15,3.93052,3.93052,10,28,455.0,Pound -True,588,4.4,4.30002,4.30002,10,19,455.0,Pound -False,1464,4.1,4.17331,4.17331,10,14,468.0,Dollar -True,500,4.35,4.17565,4.17565,10,45,455.0,Dollar -True,7690,3.9,4.18557,4.18557,10,23,455.0,Dollar -True,26,4.75,4.70753,4.70753,10,20,455.0,Dollar -True,2510,3.55,2.72078,2.72078,10,29,455.0,Euro -True,3412,4.35,4.65095,4.65095,10,17,455.0,Pound -False,42,4.2,4.25161,4.25161,10,47,455.0,Dollar -True,38,4.15,3.82558,3.82558,10,31,455.0,Pound -True,1504,4.9,4.93028,4.93028,10,19,455.0,Dollar -True,1983,4.75,4.62049,4.62049,10,38,455.0,Pound -False,453,3.0,3.21463,3.21463,10,27,455.0,Pound -True,59,4.3,4.441,4.441,10,15,455.0,Pound -True,57,4.45,4.37659,4.37659,10,34,455.0,Euro -False,1802,4.15,4.13127,4.13127,10,0,455.0,Euro -False,40,4.55,4.52886,4.52886,10,17,455.0,Pound -True,1221,4.15,3.92465,3.92465,10,31,455.0,Euro -True,314,3.9,3.9734,3.9734,10,5,455.0,Pound -True,21,3.75,3.81655,3.81655,10,9,455.0,Pound -True,2531,4.35,4.14436,4.14436,10,27,455.0,Pound -True,963,4.4,4.23333,4.23333,10,34,455.0,Dollar -True,159,3.7,3.83597,3.83597,10,20,455.0,Dollar -False,105,3.65,3.51043,3.51043,10,49,455.0,Pound -True,2324,4.1,3.7908,3.7908,10,44,455.0,Euro -False,165,3.65,3.5381,3.5381,10,21,455.0,Euro -True,1709,3.95,3.75663,3.75663,10,79,455.0,Euro -True,782,4.05,4.1357,4.1357,10,6,455.0,Pound -False,421,4.1,4.23951,4.23951,10,35,455.0,Pound -True,2163,3.9,4.06696,4.06696,10,10,455.0,Euro -False,132,3.4,3.29552,3.29552,10,0,455.0,Dollar -False,4973,3.55,3.07111,3.07111,10,18,455.0,Euro -False,75,4.65,4.66476,4.66476,10,25,455.0,Pound -False,61,4.2,4.19989,4.19989,10,0,455.0,Euro -True,83,3.35,3.4774,3.4774,10,0,455.0,Euro -True,33,3.65,3.34821,3.34821,10,11,455.0,Pound -False,27,3.8,3.77676,3.77676,10,29,455.0,Euro -True,74,4.65,4.6728,4.6728,10,31,455.0,Dollar -True,251,3.5,3.28753,3.28753,10,59,455.0,Pound -True,168,3.3,3.63965,3.63965,10,36,455.0,Dollar -True,995,4.25,3.80753,3.80753,10,25,455.0,Dollar -False,110,3.85,3.73915,3.73915,10,44,455.0,Dollar -False,79,4.4,4.43583,4.43583,10,30,455.0,Euro -False,55,3.95,4.12211,4.12211,10,21,455.0,Euro -False,45,4.1,4.06131,4.06131,10,31,455.0,Euro -False,726,4.45,4.43011,4.43011,10,37,455.0,Euro -True,1105,4.1,4.12516,4.12516,10,9,455.0,Pound -False,1142,4.2,4.39733,4.39733,10,36,455.0,Euro -True,45,3.9,3.74089,3.74089,10,14,455.0,Pound -True,45,4.55,4.51065,4.51065,10,41,455.0,Pound -True,2039,3.85,4.25355,4.25355,10,58,455.0,Dollar -False,663,3.45,3.43103,3.43103,10,26,455.0,Dollar -True,1584,4.45,4.75564,4.75564,10,11,455.0,Pound -False,32,4.9,4.9159,4.9159,10,6,455.0,Dollar -False,37,4.4,4.51947,4.51947,10,15,455.0,Dollar -False,27,4.6,4.59793,4.59793,10,19,455.0,Dollar -False,34,4.65,4.69005,4.69005,10,15,455.0,Euro -False,114,4.75,4.75572,4.75572,10,10,455.0,Dollar -False,139,4.65,4.6712,4.6712,11,54,455.0,Dollar -False,3550,4.0,3.52901,3.52901,9,23,468.0,Dollar -True,56,4.05556,3.98869,3.98869,9,31,455.0,Pound -False,25,3.88889,3.80001,3.80001,9,8,455.0,Dollar -False,511,4.38889,4.20956,4.20956,9,57,455.0,Euro -True,65,4.22222,4.42615,4.42615,9,9,455.0,Pound -True,34,4.66667,4.66629,4.66629,9,15,455.0,Dollar -True,1588,4.16667,4.3223,4.3223,9,39,455.0,Pound -False,1903,4.22222,4.37486,4.37486,9,23,455.0,Pound -True,1698,4.16667,4.06777,4.06777,9,5,455.0,Pound -True,1648,4.05556,4.52313,4.52313,9,13,468.0,Pound -False,6250,3.88889,4.15955,4.15955,9,17,455.0,Dollar -True,307,3.55556,3.09811,3.09811,9,10,455.0,Dollar -False,52,4.27778,4.24545,4.24545,9,32,455.0,Dollar -True,47,3.0,3.17521,3.17521,9,0,640.0,Euro -True,1078,4.11111,3.97665,3.97665,9,62,455.0,Dollar -True,92,4.66667,4.6649,4.6649,9,52,455.0,Dollar -True,32,4.16667,4.1732,4.1732,9,17,455.0,Dollar -True,31,4.5,4.27244,4.27244,9,14,455.0,Dollar -True,1349,3.77778,3.88439,3.88439,9,25,455.0,Pound -True,64,4.27778,4.24686,4.24686,9,10,455.0,Euro -False,21,4.05556,3.9787,3.9787,9,8,455.0,Dollar -True,2467,3.55556,3.86352,3.86352,9,47,455.0,Euro -False,61,4.22222,4.29336,4.29336,9,37,455.0,Euro -False,79,4.94444,4.93914,4.93914,9,12,455.0,Dollar -False,17,4.88889,4.89388,4.89388,9,13,455.0,Pound -True,62,4.61111,4.59179,4.59179,9,23,455.0,Pound -False,342,4.05556,3.84841,3.84841,9,61,455.0,Euro -True,71,4.72222,4.68038,4.68038,9,59,455.0,Pound -False,260,4.5,4.3331,4.3331,9,61,455.0,Dollar -True,68,3.11111,3.15465,3.15465,9,10,455.0,Pound -False,58,4.72222,4.66808,4.66808,9,31,800.0,Dollar -True,47,4.88889,4.85491,4.85491,9,36,455.0,Euro -False,599,4.05556,4.07344,4.07344,9,42,455.0,Euro -True,18,3.55556,3.52717,3.52717,9,9,455.0,Pound -False,33,4.16667,4.35646,4.35646,9,8,455.0,Pound -False,56,3.38889,3.47474,3.47474,9,8,455.0,Euro -True,2597,4.44444,4.81759,4.81759,9,20,455.0,Dollar -False,392,4.5,4.45765,4.45765,9,6,1600.0,Euro -True,28,3.16667,3.50844,3.50844,9,28,455.0,Pound -False,31,3.38889,3.23844,3.23844,9,72,455.0,Euro -True,46,3.88889,3.85184,3.85184,9,8,455.0,Pound -True,1416,4.38889,4.22837,4.22837,9,73,455.0,Dollar -False,357,4.44444,4.03226,4.03226,9,32,455.0,Pound -True,3665,4.05556,4.28139,4.28139,9,15,455.0,Euro -True,30,4.44444,4.36051,4.36051,9,26,455.0,Pound -False,46,4.61111,4.6511,4.6511,10,29,455.0,Euro -True,68,4.44444,4.35322,4.35322,10,9,455.0,Dollar -True,25,4.61111,4.52297,4.52297,9,25,455.0,Pound -False,19,4.27778,4.36071,4.36071,9,13,455.0,Euro -True,95,4.55556,4.4286,4.4286,9,33,455.0,Euro -False,42,3.94444,3.83758,3.83758,9,32,455.0,Dollar -True,152,3.94444,3.96933,3.96933,9,38,455.0,Dollar -True,5298,4.05556,4.06875,4.06875,9,93,455.0,Euro -True,92,3.88889,3.83849,3.83849,9,0,455.0,Pound -True,38,3.33333,3.34333,3.34333,9,5,455.0,Dollar -True,24,4.05556,4.25173,4.25173,9,0,800.0,Pound -True,65,4.5,4.52626,4.52626,9,56,455.0,Euro -False,38,4.88889,4.79649,4.79649,9,195,455.0,Pound -False,89,4.44444,4.61722,4.61722,9,26,455.0,Pound -True,1046,4.05556,3.80658,3.80658,9,40,455.0,Dollar -False,280,4.0,3.71667,3.71667,9,11,455.0,Euro -False,403,3.88889,3.74541,3.74541,9,9,455.0,Euro -True,120,3.88889,3.73174,3.73174,9,22,455.0,Euro -False,29,4.0,3.81321,3.81321,9,9,455.0,Euro -True,87,4.22222,4.35673,4.35673,9,0,455.0,Pound -True,1532,4.33333,4.16395,4.16395,9,10,700.0,Dollar -True,78,4.55556,4.65784,4.65784,9,16,455.0,Dollar -True,1127,4.66667,4.37583,4.37583,9,22,455.0,Dollar -False,2109,4.83333,4.76475,4.76475,9,11,455.0,Dollar -True,17,4.61111,4.58193,4.58193,9,6,455.0,Dollar -False,75,4.16667,3.76117,3.76117,9,0,2400.0,Euro -True,54,4.44444,4.49524,4.49524,10,20,455.0,Pound -True,649,4.55556,4.36295,4.36295,9,72,455.0,Euro -True,1325,4.38889,4.18284,4.18284,9,25,455.0,Pound -False,47,2.5,1.99213,1.99213,9,0,455.0,Pound -False,2669,4.33333,3.90163,3.90163,9,18,455.0,Euro -False,75,4.61111,4.49097,4.49097,9,70,455.0,Euro -True,54,3.38889,3.18989,3.18989,9,29,455.0,Pound -True,1330,4.33333,4.07206,4.07206,9,55,455.0,Dollar -True,43,4.0,3.98122,3.98122,9,18,455.0,Pound -True,146,4.05556,3.9327,3.9327,9,24,455.0,Pound -False,1729,3.83333,3.63925,3.63925,9,16,455.0,Dollar -True,757,4.55556,4.67086,4.67086,9,16,455.0,Dollar -False,34,4.27778,4.11532,4.11532,9,27,455.0,Dollar -False,1194,3.77778,3.36632,3.36632,9,100,455.0,Euro -True,46,3.77778,3.77564,3.77564,9,11,455.0,Euro -True,24,4.33333,4.39788,4.39788,9,8,455.0,Pound -False,422,4.44444,4.41995,4.41995,9,14,455.0,Pound -True,43,3.83333,3.8498,3.8498,9,35,455.0,Dollar -False,47,4.33333,4.34601,4.34601,9,17,2400.0,Euro -True,3374,4.16667,3.81307,3.81307,9,20,455.0,Euro -False,112,4.11111,4.25134,4.25134,9,14,455.0,Pound -False,1771,3.5,2.98507,2.98507,9,22,455.0,Dollar -True,60,4.55556,4.55169,4.55169,9,92,455.0,Euro -True,32,4.22222,4.15523,4.15523,9,9,455.0,Euro -False,34,3.66667,3.52409,3.52409,9,12,455.0,Pound -True,42,4.61111,4.61046,4.61046,9,30,455.0,Euro -True,41,3.44444,3.4493,3.4493,9,47,455.0,Euro -True,345,4.55556,4.54106,4.54106,9,14,455.0,Euro -False,82,3.94444,3.98449,3.98449,9,10,455.0,Dollar -False,60,3.27778,3.31065,3.31065,9,13,800.0,Dollar -True,46,3.77778,3.72883,3.72883,9,40,455.0,Euro -True,46,4.44444,4.52922,4.52922,10,18,455.0,Euro -True,4151,4.44444,4.4074,4.4074,9,26,455.0,Pound -True,102,4.16667,4.15661,4.15661,9,43,455.0,Dollar -True,100,3.94444,3.90259,3.90259,9,21,455.0,Dollar -True,20,4.33333,4.38964,4.38964,9,12,455.0,Dollar -False,88,4.88889,4.76785,4.76785,9,41,455.0,Dollar -False,70,4.27778,4.323,4.323,9,9,455.0,Pound -False,43,4.16667,4.02223,4.02223,9,19,455.0,Dollar -True,2112,4.55556,4.38805,4.38805,9,11,455.0,Euro -True,1187,4.77778,4.68055,4.68055,9,12,455.0,Euro -False,572,4.27778,4.5449,4.5449,9,24,455.0,Euro -False,307,4.44444,4.25734,4.25734,9,9,455.0,Dollar -True,125,4.77778,4.69645,4.69645,9,44,455.0,Dollar -True,1538,4.27778,4.33207,4.33207,9,121,455.0,Dollar -False,22,4.55556,4.49848,4.49848,9,27,455.0,Euro -False,23,4.5,4.6717,4.6717,9,6,455.0,Dollar -False,1673,4.22222,4.14636,4.14636,9,105,455.0,Dollar -True,88,4.44444,4.36364,4.36364,9,61,455.0,Dollar -False,194,4.27778,4.24339,4.24339,9,15,455.0,Dollar -True,40,4.22222,4.22129,4.22129,9,0,455.0,Euro -True,1598,4.33333,4.50211,4.50211,9,36,468.0,Euro -False,49,4.5,4.50674,4.50674,9,16,455.0,Euro -True,452,4.16667,4.11953,4.11953,9,12,455.0,Pound -False,48,4.33333,4.29176,4.29176,9,10,455.0,Dollar -True,1784,4.05556,4.42621,4.42621,9,6,455.0,Dollar -False,2174,4.16667,3.76621,3.76621,9,23,455.0,Pound -False,533,4.77778,4.70144,4.70144,9,37,455.0,Pound -False,197,4.11111,3.88566,3.88566,9,23,455.0,Pound -False,71,4.44444,4.60367,4.60367,9,8,455.0,Euro -False,1396,3.38889,2.89729,2.89729,9,8,455.0,Dollar -True,34,3.5,3.56928,3.56928,9,10,455.0,Dollar -False,702,4.44444,4.52368,4.52368,9,23,455.0,Euro -True,61,4.16667,4.34213,4.34213,9,60,455.0,Dollar -True,40,3.66667,3.57151,3.57151,9,9,455.0,Dollar -True,3441,4.22222,4.34324,4.34324,9,23,455.0,Pound -True,2407,3.61111,3.99667,3.99667,9,12,455.0,Dollar -True,29,4.44444,4.4555,4.4555,9,16,455.0,Euro -False,32,4.0,3.72842,3.72842,9,9,455.0,Pound -False,777,4.44444,4.414,4.414,9,9,455.0,Dollar -False,1903,4.11111,3.8374,3.8374,9,69,455.0,Dollar -True,60,3.5,3.44091,3.44091,9,0,455.0,Pound -True,6051,4.5,4.38662,4.38662,9,27,455.0,Pound -True,1141,4.11111,4.12879,4.12879,9,30,455.0,Dollar -False,29,4.22222,4.11575,4.11575,9,15,455.0,Pound -False,15,4.44444,4.42814,4.42814,9,9,455.0,Euro -False,65,4.94444,4.96419,4.96419,9,35,455.0,Euro -True,64,4.0,3.92566,3.92566,9,5,455.0,Pound -False,54,4.33333,4.26104,4.26104,9,44,455.0,Dollar -True,52,4.44444,4.36475,4.36475,9,28,455.0,Dollar -True,879,3.77778,3.74989,3.74989,9,0,455.0,Pound -False,3348,3.5,3.24167,3.24167,9,26,455.0,Euro -True,71,4.77778,4.71453,4.71453,9,12,455.0,Euro -False,77,4.83333,4.85155,4.85155,10,37,455.0,Pound -True,350,4.22222,4.65285,4.65285,9,7,455.0,Dollar -False,49,3.88889,3.97415,3.97415,9,10,455.0,Pound -False,31,4.5,4.45791,4.45791,9,9,455.0,Euro -True,236,3.72222,3.76974,3.76974,9,7,455.0,Euro -True,1092,4.61111,4.43231,4.43231,9,13,455.0,Pound -False,1430,4.38889,4.23332,4.23332,9,8,455.0,Dollar -False,1092,3.94444,4.25903,4.25903,9,5,455.0,Pound -False,58,4.5,4.39475,4.39475,9,9,455.0,Dollar -False,3523,4.11111,3.91595,3.91595,9,5,455.0,Euro -False,98,4.33333,4.20288,4.20288,9,360,468.0,Euro -True,329,4.72222,4.61324,4.61324,9,34,455.0,Pound -False,27,4.55556,4.02112,4.02112,9,29,455.0,Pound -True,24,4.16667,4.26048,4.26048,9,0,640.0,Euro -False,4343,3.77778,3.80575,3.80575,9,12,455.0,Pound -True,561,4.55556,4.55192,4.55192,9,23,455.0,Euro -False,557,4.66667,4.46877,4.46877,9,19,455.0,Euro -True,37,3.88889,3.94898,3.94898,9,12,455.0,Pound -True,1017,4.16667,3.97439,3.97439,9,11,455.0,Pound -False,64,4.77778,4.78169,4.78169,9,39,455.0,Euro -False,54,4.72222,4.72803,4.72803,9,34,455.0,Euro -True,832,3.88889,3.87231,3.87231,9,40,455.0,Euro -True,277,4.77778,4.76781,4.76781,9,28,455.0,Pound -True,114,3.75,3.76968,3.76968,8,17,455.0,Pound -True,285,4.375,4.29344,4.29344,8,52,455.0,Pound -True,1139,3.5,3.62117,3.62117,8,8,455.0,Euro -False,59,4.0,4.27064,4.27064,8,25,455.0,Dollar -False,1469,3.6875,3.63921,3.63921,8,22,455.0,Dollar -False,604,4.5,4.54424,4.54424,8,22,455.0,Dollar -False,43,3.1875,3.0137,3.0137,8,21,455.0,Euro -True,377,4.625,4.37704,4.37704,8,23,455.0,Euro -True,60,4.3125,4.06961,4.06961,8,14,1120.0,Euro -True,2824,3.5,3.84921,3.84921,8,9,455.0,Dollar -False,27,3.625,3.50991,3.50991,8,15,455.0,Pound -False,433,4.25,4.3686,4.3686,8,6,455.0,Dollar -False,62,4.125,4.12348,4.12348,8,13,455.0,Euro -False,54,3.75,3.85183,3.85183,8,25,455.0,Pound -True,40,3.9375,3.85143,3.85143,8,20,455.0,Dollar -True,4096,4.3125,4.67078,4.67078,8,31,455.0,Pound -True,878,3.8125,4.25209,4.25209,8,11,455.0,Euro -False,31,3.875,4.23906,4.23906,8,16,455.0,Dollar -False,53,4.6875,4.6875,4.6875,8,8,455.0,Euro -False,123,3.9375,3.55332,3.55332,8,73,455.0,Dollar -False,77,4.0,4.04234,4.04234,8,37,455.0,Euro -False,38,4.8125,4.84425,4.84425,8,9,455.0,Dollar -True,20,4.75,4.67938,4.67938,8,23,455.0,Pound -False,84,4.5,4.39154,4.39154,8,15,455.0,Pound -True,27,3.75,3.62335,3.62335,8,12,455.0,Euro -False,35,3.75,3.74332,3.74332,8,0,455.0,Pound -False,26,4.9375,4.93817,4.93817,8,0,3200.0,Dollar -False,4479,3.3125,3.40142,3.40142,8,30,455.0,Dollar -True,1533,4.5625,4.64125,4.64125,8,9,455.0,Pound -True,880,4.0,4.09506,4.09506,8,18,455.0,Euro -False,137,3.8125,3.96597,3.96597,8,14,455.0,Euro -True,1479,4.3125,4.21452,4.21452,8,16,455.0,Euro -False,76,3.9375,3.92086,3.92086,8,65,455.0,Dollar -False,13,4.25,4.20791,4.20791,8,19,455.0,Euro -False,50,3.8125,3.80055,3.80055,8,6,455.0,Euro -False,2123,4.0,4.11027,4.11027,8,11,455.0,Dollar -False,83,4.4375,4.29008,4.29008,8,6,455.0,Pound -False,24,4.4375,4.37039,4.37039,8,10,455.0,Euro -True,5310,3.8125,3.49666,3.49666,8,29,455.0,Pound -True,1031,3.5625,3.31768,3.31768,8,12,455.0,Pound -True,24,4.3125,4.34762,4.34762,8,10,455.0,Euro -True,92,3.6875,3.69724,3.69724,8,19,455.0,Pound -False,519,4.5625,4.50338,4.50338,8,14,455.0,Euro -False,18,4.0,3.95315,3.95315,8,34,455.0,Euro -True,24,4.4375,4.0167,4.0167,8,22,455.0,Dollar -True,167,4.3125,4.31697,4.31697,8,83,455.0,Euro -True,774,4.25,4.19447,4.19447,8,22,455.0,Pound -False,25,4.875,4.82133,4.82133,8,10,455.0,Pound -True,21,4.125,4.04237,4.04237,8,0,455.0,Dollar -False,1194,4.375,4.45282,4.45282,8,10,700.0,Euro -True,31,4.4375,4.33432,4.33432,8,20,1920.0,Euro -True,846,4.625,4.60706,4.60706,8,13,455.0,Euro -True,588,4.0,4.03262,4.03262,8,80,455.0,Pound -True,622,3.6875,3.39679,3.39679,8,13,455.0,Euro -False,1331,3.25,3.26645,3.26645,8,21,455.0,Dollar -False,1806,3.875,4.46348,4.46348,8,19,455.0,Dollar -True,65,4.3125,4.33785,4.33785,8,12,455.0,Pound -True,3048,3.75,3.21716,3.21716,8,16,455.0,Pound -True,3955,3.9375,3.98418,3.98418,8,10,455.0,Euro -False,46,3.625,3.56646,3.56646,8,55,455.0,Euro -False,988,3.0625,2.14414,2.14414,8,12,455.0,Euro -True,21,4.3125,4.32735,4.32735,8,5,455.0,Pound -False,2463,3.625,3.60156,3.60156,8,16,455.0,Dollar -True,915,4.5625,4.85517,4.85517,8,28,455.0,Euro -False,145,3.5625,3.42355,3.42355,8,11,455.0,Dollar -True,31,4.4375,4.39803,4.39803,8,11,455.0,Euro -False,66,3.6875,3.74217,3.74217,8,33,455.0,Euro -False,2775,4.3125,4.45592,4.45592,8,26,455.0,Euro -True,347,4.125,3.98466,3.98466,8,10,455.0,Pound -False,565,4.375,4.28209,4.28209,8,29,455.0,Pound -False,262,3.25,2.7728,2.7728,8,66,455.0,Euro -False,28,4.0625,4.09155,4.09155,8,16,455.0,Dollar -True,32,4.375,4.40204,4.40204,8,73,455.0,Pound -True,43,4.25,4.26091,4.26091,8,16,455.0,Euro -False,1025,4.375,4.51746,4.51746,8,13,455.0,Dollar -False,32,3.3125,3.54669,3.54669,8,8,455.0,Pound -False,1035,4.5,4.36125,4.36125,8,11,455.0,Dollar -False,55,4.6875,4.56233,4.56233,8,18,455.0,Euro -True,26,4.125,4.11566,4.11566,8,11,455.0,Pound -True,828,4.625,4.57217,4.57217,8,5,455.0,Euro -False,1081,4.375,3.87294,3.87294,8,40,455.0,Euro -True,2453,4.0,3.93608,3.93608,8,18,455.0,Euro -True,28,4.6875,4.59178,4.59178,8,19,455.0,Pound -False,1075,4.375,4.24308,4.24308,8,33,455.0,Euro -True,148,4.375,4.39553,4.39553,8,21,455.0,Euro -True,553,4.5625,4.51674,4.51674,8,8,455.0,Pound -False,26,4.125,4.14041,4.14041,8,19,455.0,Dollar -False,27,5.0,5.0,5.0,8,18,455.0,Pound -False,506,3.8125,3.77815,3.77815,8,30,455.0,Dollar -True,2290,3.75,3.18936,3.18936,8,20,455.0,Euro -True,31,4.0,4.06262,4.06262,8,7,1120.0,Dollar -False,5554,2.8125,2.70472,2.70472,8,18,455.0,Pound -True,1332,3.0625,2.70729,2.70729,8,7,455.0,Dollar -True,322,3.75,3.54867,3.54867,8,17,455.0,Pound -True,37,4.625,4.61305,4.61305,8,52,455.0,Euro -True,156,4.625,4.66588,4.66588,8,33,455.0,Pound -True,11,5.0,5.0,5.0,8,10,455.0,Euro -False,38,4.3125,4.13435,4.13435,8,22,720.0,Pound -True,31,4.75,4.67348,4.67348,8,22,455.0,Pound -False,9172,4.8125,4.75461,4.75461,13,15,455.0,Dollar -False,176,3.1875,3.34498,3.34498,8,18,455.0,Dollar -True,770,4.3125,4.4809,4.4809,8,18,455.0,Pound -False,52,3.75,3.45896,3.45896,8,23,455.0,Pound -False,29,3.25,3.24325,3.24325,8,12,468.0,Dollar -True,727,4.125,3.95702,3.95702,8,143,455.0,Dollar -False,55,3.75,3.71285,3.71285,8,15,455.0,Pound -True,47,3.8125,3.59866,3.59866,8,25,455.0,Euro -False,41,4.3125,4.34342,4.34342,8,13,455.0,Dollar -False,195,3.375,3.23229,3.23229,8,14,455.0,Euro -False,578,4.4375,4.30489,4.30489,8,12,455.0,Pound -False,55,4.4375,4.35102,4.35102,8,10,455.0,Pound -True,114,4.875,4.83649,4.83649,8,67,455.0,Euro -True,1023,3.0625,3.07725,3.07725,8,16,455.0,Pound -False,2620,3.125,2.91068,2.91068,8,21,455.0,Euro -False,35,4.0625,4.15674,4.15674,8,8,455.0,Pound -True,50,4.5625,4.4329,4.4329,8,7,455.0,Dollar -True,26,4.125,4.16673,4.16673,8,18,455.0,Dollar -True,180,4.5625,4.57731,4.57731,8,63,455.0,Pound -True,71,3.25,3.32553,3.32553,8,39,455.0,Euro -False,1892,4.25,4.0055,4.0055,8,25,455.0,Dollar -True,876,4.0625,4.43878,4.43878,8,11,455.0,Dollar -False,27,4.4375,4.48831,4.48831,8,21,455.0,Dollar -False,1807,3.9375,4.19723,4.19723,8,23,455.0,Dollar -False,1135,4.875,4.80936,4.80936,8,40,455.0,Euro -False,58,4.125,4.03868,4.03868,8,17,455.0,Dollar -True,1220,4.1875,3.98906,3.98906,8,25,455.0,Euro -False,22,4.125,4.16317,4.16317,8,13,455.0,Pound -True,1159,3.4375,3.55215,3.55215,8,27,455.0,Dollar -True,179,4.375,4.0283,4.0283,8,41,455.0,Euro -True,2007,4.0625,4.02971,4.02971,8,5,455.0,Dollar -True,1081,4.875,4.95314,4.95314,8,23,455.0,Pound -True,646,4.375,4.35059,4.35059,8,120,455.0,Dollar -False,940,4.1875,4.03735,4.03735,8,43,455.0,Euro -True,913,3.25,2.97844,2.97844,8,8,455.0,Euro -False,3421,3.5,3.39479,3.39479,8,19,455.0,Pound -True,832,4.375,4.79747,4.79747,8,24,455.0,Euro -True,1118,4.4375,4.45274,4.45274,8,32,455.0,Euro -False,23,4.4375,4.32722,4.32722,8,27,455.0,Dollar -False,59,4.1875,4.34931,4.34931,8,20,455.0,Pound -False,38,4.0625,3.95351,3.95351,8,21,455.0,Euro -True,162,3.8125,3.73429,3.73429,8,9,455.0,Pound -False,89,3.8125,3.86884,3.86884,8,31,455.0,Euro -False,34,4.5,4.40173,4.40173,8,17,455.0,Dollar -False,767,3.9375,3.85704,3.85704,8,22,455.0,Dollar -False,64,4.125,4.07134,4.07134,8,15,455.0,Euro -True,1991,3.8125,3.81839,3.81839,8,15,455.0,Dollar -True,39,4.0625,3.99836,3.99836,8,18,455.0,Dollar -False,4237,3.6875,3.91314,3.91314,8,49,455.0,Dollar -False,16,5.0,5.0,5.0,8,36,455.0,Dollar -False,1290,4.6875,4.74888,4.74888,8,22,455.0,Euro -False,674,4.3125,4.31027,4.31027,8,13,455.0,Pound -True,91,3.9375,3.90142,3.90142,8,29,455.0,Pound -False,35,4.625,4.55858,4.55858,8,17,455.0,Pound -True,22,3.75,3.69787,3.69787,9,0,455.0,Euro -False,26,4.1875,4.23986,4.23986,8,18,455.0,Dollar -False,4842,4.1875,4.34111,4.34111,8,21,455.0,Pound -True,18,4.4375,4.56402,4.56402,8,11,455.0,Euro -False,2809,4.125,4.46369,4.46369,8,13,455.0,Euro -True,23,3.375,3.4952,3.4952,8,12,455.0,Pound -True,656,3.8125,3.72285,3.72285,8,48,455.0,Pound -True,1298,4.125,4.14261,4.14261,8,5,455.0,Pound -True,126,4.625,4.60086,4.60086,8,22,455.0,Euro -True,55,4.875,4.83297,4.83297,14,85,455.0,Dollar -False,38,4.125,4.11041,4.11041,8,12,455.0,Euro -True,34,4.0625,3.99463,3.99463,8,13,455.0,Euro -True,610,4.125,4.3247,4.3247,8,19,455.0,Dollar -False,59,4.1875,4.1319,4.1319,8,28,455.0,Dollar -True,22,3.6875,3.71568,3.71568,8,18,455.0,Pound -False,37,3.6875,3.54308,3.54308,8,26,455.0,Pound -True,1044,4.25,4.19173,4.19173,8,12,455.0,Dollar -True,47,4.4375,4.35519,4.35519,8,16,455.0,Euro -True,1589,3.9375,3.95592,3.95592,8,15,455.0,Pound -False,41,3.5625,3.4804,3.4804,8,18,455.0,Pound -True,49,3.75,3.83553,3.83553,8,81,455.0,Euro -False,1195,4.5625,4.63,4.63,8,22,455.0,Pound -False,217,4.4375,4.39683,4.39683,8,23,455.0,Pound -False,20,4.625,4.63482,4.63482,8,10,455.0,Euro -True,3117,4.0625,3.92144,3.92144,8,105,455.0,Dollar -True,1722,3.9375,3.99808,3.99808,8,11,455.0,Euro -False,318,3.6875,3.59887,3.59887,8,15,455.0,Euro -True,2033,4.5625,4.55279,4.55279,8,13,455.0,Euro -True,100,4.6875,4.72677,4.72677,8,9,455.0,Pound -False,23,4.9375,4.88317,4.88317,8,47,455.0,Dollar -False,39,4.5,4.36174,4.36174,8,62,455.0,Dollar -True,1392,4.1875,4.36317,4.36317,8,6,455.0,Dollar -False,41,3.8125,3.85688,3.85688,8,12,455.0,Pound -False,659,4.3125,4.24553,4.24553,8,18,455.0,Pound -False,41,4.4375,4.39737,4.39737,8,11,455.0,Euro -False,32,4.1875,4.19208,4.19208,8,91,455.0,Euro -False,17,3.5625,3.50775,3.50775,8,6,455.0,Euro -False,62,3.625,3.61112,3.61112,8,0,455.0,Dollar -False,1223,4.125,4.12078,4.12078,8,14,455.0,Euro -True,19,4.1875,4.13498,4.13498,8,8,455.0,Dollar -True,2332,4.375,4.44719,4.44719,8,19,455.0,Pound -False,29,4.875,4.93631,4.93631,8,18,455.0,Pound -True,15,5.0,5.0,5.0,8,10,455.0,Dollar -False,2276,4.9375,4.87551,4.87551,8,19,455.0,Dollar -False,45,3.75,3.76139,3.76139,8,5,455.0,Pound -False,83,4.0,3.90875,3.90875,8,7,455.0,Dollar -False,542,4.75,4.6488,4.6488,8,40,455.0,Dollar -True,1909,4.5,4.47917,4.47917,8,25,455.0,Euro -False,1707,4.0625,4.13938,4.13938,8,16,455.0,Euro -False,71,4.125,4.01941,4.01941,8,6,455.0,Dollar -False,72,3.8125,3.68233,3.68233,8,9,455.0,Pound -False,588,4.625,4.43922,4.43922,8,11,455.0,Pound -False,46,4.3125,4.33226,4.33226,8,12,455.0,Pound -True,23,3.75,3.43227,3.43227,8,17,455.0,Euro -True,344,4.8125,4.86151,4.86151,8,6,455.0,Dollar -False,39,3.6875,3.55604,3.55604,8,17,455.0,Dollar -False,38,4.625,4.61694,4.61694,8,12,455.0,Pound -True,24,4.5,4.49284,4.49284,8,9,455.0,Pound -True,56,4.6875,4.66692,4.66692,8,6,455.0,Euro -False,1010,4.1875,4.05423,4.05423,8,19,455.0,Dollar -True,1326,4.0,3.75723,3.75723,8,32,1200.0,Dollar -False,50,4.0,3.88296,3.88296,8,0,455.0,Dollar -False,17,4.0,3.86804,3.86804,8,23,455.0,Dollar -False,21,4.8125,4.75487,4.75487,8,24,455.0,Dollar -True,855,4.3125,4.41323,4.41323,8,12,455.0,Pound -True,70,4.5,4.60803,4.60803,8,118,455.0,Pound -False,79,4.8125,4.84607,4.84607,8,25,455.0,Dollar -False,2455,4.0625,3.89131,3.89131,8,22,455.0,Euro -True,47,3.8125,3.63466,3.63466,8,12,455.0,Euro -True,1329,4.125,4.25799,4.25799,8,69,455.0,Pound -False,50,4.375,4.40422,4.40422,8,12,455.0,Euro -False,40,4.5625,4.549,4.549,8,9,455.0,Pound -False,3479,4.25,4.31494,4.31494,8,55,455.0,Euro -False,36,4.5,4.47405,4.47405,8,10,455.0,Pound -True,35,3.6875,3.67255,3.67255,8,21,455.0,Pound -True,138,4.42857,4.06918,4.06918,7,13,455.0,Euro -True,1554,3.21429,3.11735,3.11735,7,18,455.0,Pound -False,1835,4.28571,4.48469,4.48469,7,60,455.0,Euro -True,33,4.42857,4.39622,4.39622,7,8,455.0,Euro -False,16,4.07143,4.06045,4.06045,7,8,455.0,Dollar -True,920,4.35714,4.23277,4.23277,7,23,455.0,Dollar -False,88,3.78571,3.84633,3.84633,7,50,455.0,Dollar -True,1245,4.0,3.7399,3.7399,7,7,455.0,Pound -False,78,3.57143,3.62851,3.62851,7,26,455.0,Dollar -True,489,4.5,4.55605,4.55605,7,10,455.0,Dollar -False,53,4.21429,3.92771,3.92771,7,8,455.0,Pound -True,432,4.5,4.46721,4.46721,7,14,455.0,Pound -True,1317,3.64286,4.09814,4.09814,7,20,455.0,Euro -False,392,4.42857,4.35166,4.35166,7,24,455.0,Pound -True,1737,3.5,3.88286,3.88286,7,18,455.0,Euro -False,11,4.85714,4.87112,4.87112,7,41,455.0,Pound -True,1188,3.5,3.64123,3.64123,7,17,455.0,Pound -False,879,3.64286,3.43326,3.43326,7,20,455.0,Euro -True,27,4.0,3.98041,3.98041,7,10,455.0,Dollar -False,45,3.07143,2.94794,2.94794,7,32,455.0,Pound -True,36,3.71429,3.75249,3.75249,7,14,455.0,Euro -False,50,2.85714,2.65089,2.65089,7,29,455.0,Euro -True,21,3.78571,3.81198,3.81198,7,7,455.0,Dollar -True,1107,3.92857,3.77308,3.77308,7,19,455.0,Dollar -False,34,4.07143,4.12619,4.12619,7,25,455.0,Pound -True,25,4.57143,4.57225,4.57225,7,17,455.0,Pound -False,18,3.85714,3.7719,3.7719,7,10,455.0,Euro -False,551,4.42857,4.45559,4.45559,7,35,455.0,Euro -True,79,4.07143,4.06245,4.06245,7,132,455.0,Pound -True,3489,3.78571,3.7938,3.7938,7,14,455.0,Euro -False,6845,4.14286,4.37613,4.37613,7,11,455.0,Dollar -True,19,5.0,5.0,5.0,7,14,455.0,Euro -False,16,4.71429,4.55389,4.55389,7,61,455.0,Euro -False,19,4.07143,3.9999,3.9999,7,45,455.0,Pound -True,78,4.85714,4.8584,4.8584,8,5,455.0,Euro -False,80,4.5,4.3745,4.3745,7,22,455.0,Euro -False,332,4.78571,4.74165,4.74165,7,28,455.0,Dollar -True,246,3.71429,3.73924,3.73924,7,26,455.0,Dollar -False,228,4.78571,4.72629,4.72629,7,36,455.0,Dollar -False,127,4.42857,4.63583,4.63583,7,7,455.0,Dollar -False,1343,4.42857,4.47139,4.47139,7,18,455.0,Pound -True,55,5.0,5.0,5.0,7,21,455.0,Dollar -False,105,3.14286,2.5068,2.5068,7,15,455.0,Euro -True,271,3.64286,3.55337,3.55337,7,17,455.0,Dollar -False,1021,3.28571,3.4382,3.4382,7,35,455.0,Euro -True,828,3.92857,3.81127,3.81127,7,56,455.0,Dollar -False,549,4.85714,4.89828,4.89828,7,43,455.0,Euro -False,28,4.0,3.98447,3.98447,7,100,455.0,Euro -False,13,4.5,4.49416,4.49416,7,6,455.0,Pound -False,50,4.14286,4.20868,4.20868,7,102,455.0,Euro -True,3330,4.35714,4.25983,4.25983,7,25,455.0,Pound -False,50,3.35714,3.23437,3.23437,7,6,455.0,Dollar -False,72,4.35714,4.30317,4.30317,7,44,455.0,Pound -True,28,4.42857,4.43993,4.43993,7,12,455.0,Dollar -True,42,4.21429,4.10674,4.10674,7,17,455.0,Pound -False,11,4.35714,3.72796,3.72796,7,60,455.0,Pound -False,3706,3.07143,3.51492,3.51492,7,49,455.0,Pound -False,2248,3.92857,4.11458,4.11458,7,20,455.0,Pound -True,32,3.92857,3.94411,3.94411,7,10,455.0,Euro -True,829,3.85714,3.17644,3.17644,7,8,455.0,Dollar -True,1311,3.78571,3.90999,3.90999,7,15,455.0,Pound -True,840,4.42857,4.53679,4.53679,7,35,455.0,Dollar -True,21,3.92857,3.75376,3.75376,7,30,455.0,Dollar -False,1524,3.57143,3.98558,3.98558,7,35,455.0,Euro -False,2625,4.14286,4.61433,4.61433,7,10,455.0,Euro -False,40,4.71429,4.7286,4.7286,7,52,455.0,Pound -False,27,3.5,3.4592,3.4592,7,11,455.0,Euro -True,69,4.35714,4.54477,4.54477,7,109,455.0,Dollar -True,24,4.92857,4.93699,4.93699,7,45,455.0,Euro -True,48,4.5,4.51904,4.51904,7,14,455.0,Pound -False,96,2.64286,2.56392,2.56392,7,54,455.0,Pound -True,65,3.92857,3.8353,3.8353,7,29,455.0,Pound -False,1108,4.0,4.08165,4.08165,7,9,455.0,Dollar -False,1055,4.5,4.85313,4.85313,7,29,455.0,Dollar -False,1229,4.64286,4.57078,4.57078,7,7,455.0,Dollar -False,22,3.85714,3.87884,3.87884,7,14,1440.0,Dollar -True,44,4.64286,4.65888,4.65888,7,14,455.0,Pound -False,43,4.85714,4.87947,4.87947,7,22,455.0,Pound -True,1070,3.64286,3.20906,3.20906,7,19,455.0,Pound -True,30,4.14286,4.127,4.127,7,13,455.0,Euro -False,36,4.92857,4.92618,4.92618,7,28,455.0,Dollar -False,1430,3.85714,3.21027,3.21027,7,16,455.0,Pound -True,56,3.78571,3.88374,3.88374,7,18,455.0,Dollar -True,698,3.71429,3.95173,3.95173,7,10,455.0,Pound -True,136,4.28571,4.15953,4.15953,7,7,455.0,Euro -False,34,4.35714,4.37467,4.37467,7,10,455.0,Pound -False,27,5.0,5.0,5.0,7,21,455.0,Pound -True,33,4.35714,4.23681,4.23681,7,9,455.0,Euro -False,36,4.78571,4.76064,4.76064,7,7,455.0,Pound -False,16,4.07143,4.09702,4.09702,7,19,455.0,Pound -True,101,4.42857,4.40644,4.40644,7,32,455.0,Euro -True,353,3.64286,3.72362,3.72362,7,7,455.0,Dollar -False,22,4.57143,4.53005,4.53005,7,12,455.0,Euro -False,26,4.57143,4.47774,4.47774,7,8,455.0,Euro -True,59,3.07143,2.77802,2.77802,7,0,455.0,Dollar -False,340,4.07143,4.02773,4.02773,7,25,455.0,Pound -False,1131,4.71429,4.67625,4.67625,7,8,455.0,Pound -True,728,4.21429,4.22349,4.22349,7,18,455.0,Euro -False,1362,4.21429,4.31741,4.31741,7,171,455.0,Euro -True,1727,3.78571,3.82444,3.82444,7,23,455.0,Euro -True,529,3.92857,3.4348,3.4348,7,63,455.0,Pound -False,212,4.0,4.64152,4.64152,7,34,455.0,Pound -True,1718,4.21429,4.35765,4.35765,7,30,455.0,Euro -False,920,4.85714,4.85515,4.85515,7,13,455.0,Pound -False,46,3.78571,3.72932,3.72932,7,0,455.0,Euro -False,2588,4.21429,4.14193,4.14193,7,25,455.0,Dollar -True,1563,4.57143,4.48663,4.48663,7,22,455.0,Euro -False,1795,3.85714,4.20011,4.20011,7,20,455.0,Dollar -True,40,4.78571,4.75335,4.75335,7,0,455.0,Dollar -True,81,4.57143,4.62812,4.62812,8,37,455.0,Dollar -True,57,4.28571,4.15429,4.15429,8,39,455.0,Dollar -True,25,4.85714,4.85792,4.85792,7,17,455.0,Pound -True,72,3.78571,3.60972,3.60972,7,8,455.0,Euro -False,42,3.85714,3.76282,3.76282,7,45,455.0,Euro -True,20,4.07143,4.3803,4.3803,7,22,455.0,Pound -False,782,4.0,4.27545,4.27545,7,15,455.0,Pound -False,49,4.64286,4.659,4.659,7,15,455.0,Pound -False,1801,3.92857,4.14496,4.14496,7,12,455.0,Euro -False,601,4.14286,4.28745,4.28745,7,21,455.0,Dollar -True,55,3.92857,3.98274,3.98274,7,10,455.0,Pound -True,782,3.92857,4.36148,4.36148,7,24,455.0,Dollar -False,66,4.28571,4.34898,4.34898,7,8,455.0,Pound -True,448,4.42857,4.40724,4.40724,7,11,455.0,Euro -False,2077,4.0,4.02735,4.02735,7,11,455.0,Dollar -False,637,4.21429,4.3423,4.3423,7,16,455.0,Pound -True,45,4.85714,4.81955,4.81955,8,52,455.0,Euro -False,70,4.64286,4.59722,4.59722,7,8,455.0,Pound -False,40,4.42857,4.45362,4.45362,7,18,455.0,Dollar -False,483,4.78571,4.68865,4.68865,7,14,455.0,Pound -True,40,4.42857,4.4116,4.4116,7,9,455.0,Pound -False,240,4.64286,4.70284,4.70284,7,15,455.0,Euro -False,1288,3.78571,3.85084,3.85084,7,23,455.0,Dollar -False,54,4.42857,4.42993,4.42993,7,67,455.0,Euro -True,49,4.14286,4.16621,4.16621,7,32,455.0,Pound -False,949,4.28571,4.35465,4.35465,7,20,455.0,Euro -False,13,4.57143,4.57719,4.57719,7,33,2400.0,Pound -False,186,4.35714,4.28366,4.28366,7,10,455.0,Euro -False,16,3.57143,3.47944,3.47944,7,8,455.0,Pound -True,24,3.42857,3.39485,3.39485,7,71,455.0,Pound -False,49,4.42857,4.46017,4.46017,7,30,455.0,Dollar -True,2355,3.57143,4.00281,4.00281,7,6,468.0,Pound -True,55,4.21429,4.26087,4.26087,7,0,455.0,Euro -True,671,3.71429,3.96907,3.96907,7,14,455.0,Dollar -True,1906,3.5,3.5852,3.5852,7,7,455.0,Dollar -False,2065,4.5,4.69771,4.69771,7,19,455.0,Euro -False,474,4.57143,4.73759,4.73759,7,18,455.0,Euro -False,2352,3.78571,3.74549,3.74549,7,15,455.0,Euro -True,67,4.85714,4.90771,4.90771,7,29,455.0,Dollar -True,56,4.0,3.94732,3.94732,7,9,455.0,Euro -True,145,4.35714,4.38607,4.38607,7,16,455.0,Euro -False,67,4.64286,4.6771,4.6771,7,21,455.0,Pound -False,21,4.5,4.45359,4.45359,7,6,455.0,Pound -True,553,4.71429,4.73682,4.73682,7,29,455.0,Euro -False,1504,4.21429,4.43327,4.43327,7,16,455.0,Euro -False,81,3.14286,3.02418,3.02418,7,19,455.0,Euro -True,3367,3.42857,3.28547,3.28547,7,18,455.0,Pound -False,20,4.0,3.74469,3.74469,7,4,455.0,Euro -False,56,3.21429,3.37383,3.37383,7,0,455.0,Dollar -True,30,5.0,5.0,5.0,7,6,960.0,Dollar -False,2428,3.5,3.57686,3.57686,7,8,455.0,Euro -True,11,4.71429,4.77616,4.77616,7,11,1600.0,Euro -True,3937,4.21429,4.72369,4.72369,7,39,455.0,Pound -False,59,4.85714,4.86939,4.86939,8,32,455.0,Euro -False,36,4.92857,4.91046,4.91046,7,27,455.0,Dollar -False,26,5.0,5.0,5.0,7,19,455.0,Dollar -True,28,4.21429,4.14199,4.14199,7,15,455.0,Dollar -False,1264,3.21429,3.40861,3.40861,7,13,455.0,Euro -True,19,5.0,5.0,5.0,7,27,455.0,Dollar -False,5479,3.78571,3.09964,3.09964,7,22,455.0,Pound -False,1053,3.78571,3.64943,3.64943,7,16,455.0,Pound -False,40,3.71429,3.78732,3.78732,7,22,455.0,Euro -False,15,4.85714,4.83117,4.83117,7,21,1520.0,Pound -True,53,4.07143,4.21731,4.21731,7,10,455.0,Dollar -False,973,2.35714,3.05967,3.05967,7,16,455.0,Pound -True,75,4.57143,4.35229,4.35229,7,14,455.0,Euro -True,270,4.21429,4.35544,4.35544,7,51,455.0,Pound -True,71,4.07143,3.93079,3.93079,7,82,455.0,Dollar -True,483,1.85714,1.68629,1.68629,7,5,455.0,Dollar -False,50,4.64286,4.63468,4.63468,7,5,455.0,Euro -False,22,3.57143,3.67805,3.67805,7,12,455.0,Dollar -False,25,3.92857,4.04303,4.04303,7,6,455.0,Euro -False,538,4.21429,3.84598,3.84598,7,20,455.0,Dollar -False,689,3.64286,3.54581,3.54581,7,24,455.0,Euro -False,29,3.5,3.63776,3.63776,7,25,455.0,Euro -False,142,4.78571,4.64916,4.64916,7,15,455.0,Euro -True,45,4.21429,4.26538,4.26538,7,39,455.0,Dollar -True,101,4.64286,4.69239,4.69239,7,44,455.0,Pound -False,38,3.71429,3.59311,3.59311,7,40,455.0,Pound -True,1544,4.07143,3.96113,3.96113,7,9,455.0,Dollar -False,45,4.14286,4.06426,4.06426,7,11,455.0,Euro -True,23,3.35714,3.31374,3.31374,7,10,455.0,Dollar -True,39,3.21429,3.33998,3.33998,7,9,455.0,Euro -True,35,3.71429,3.53033,3.53033,7,31,2080.0,Dollar -False,31,4.21429,4.1629,4.1629,7,10,455.0,Euro -False,397,4.07143,3.98725,3.98725,7,23,455.0,Euro -True,25,4.14286,4.31014,4.31014,7,7,455.0,Euro -False,47,3.35714,3.11129,3.11129,7,32,455.0,Dollar -True,2830,3.92857,4.44131,4.44131,7,26,455.0,Dollar -False,35,4.21429,4.09595,4.09595,7,23,455.0,Dollar -True,23,4.14286,3.88479,3.88479,7,33,455.0,Dollar -True,90,3.64286,3.2393,3.2393,7,16,455.0,Pound -False,461,3.85714,3.67015,3.67015,7,13,455.0,Dollar -False,3353,3.42857,3.35529,3.35529,7,11,455.0,Euro -False,42,4.14286,3.86085,3.86085,7,19,455.0,Euro -True,314,3.71429,3.90842,3.90842,7,11,455.0,Pound -True,1290,3.71429,3.90003,3.90003,7,20,455.0,Euro -False,89,2.78571,2.62158,2.62158,7,17,455.0,Pound -False,15,3.64286,3.62585,3.62585,7,6,455.0,Euro -False,785,4.28571,4.46337,4.46337,7,25,455.0,Euro -False,855,3.57143,3.87296,3.87296,7,11,455.0,Pound -True,23,4.35714,4.37294,4.37294,7,12,455.0,Pound -True,20,3.78571,3.67998,3.67998,7,23,455.0,Pound -False,43,4.35714,4.31763,4.31763,7,9,455.0,Dollar -True,19,4.07143,3.94812,3.94812,7,6,455.0,Dollar -False,40,4.64286,4.68271,4.68271,7,33,455.0,Pound -False,39,3.92857,3.85694,3.85694,7,9,455.0,Dollar -False,28,4.42857,4.45846,4.45846,7,25,455.0,Dollar -True,27,4.71429,4.49899,4.49899,7,11,455.0,Pound -False,742,4.5,4.76292,4.76292,7,10,455.0,Dollar -True,1455,4.57143,4.67059,4.67059,7,16,455.0,Euro -True,41,4.42857,4.27141,4.27141,7,8,455.0,Dollar -True,117,3.35714,2.98285,2.98285,7,14,455.0,Dollar -False,1074,4.42857,4.43715,4.43715,7,45,455.0,Dollar -True,97,4.71429,4.69827,4.69827,7,13,455.0,Dollar -True,125,4.14286,4.14084,4.14084,7,37,455.0,Euro -False,775,4.28571,4.3708,4.3708,7,12,455.0,Pound -True,43,4.5,4.40614,4.40614,8,9,455.0,Euro -False,58,3.5,3.44841,3.44841,7,6,455.0,Dollar -False,6927,4.14286,3.73763,3.73763,7,18,455.0,Euro -False,21,4.5,4.45311,4.45311,7,39,455.0,Euro -False,665,4.21429,4.25601,4.25601,7,78,455.0,Euro -False,53,3.57143,3.53838,3.53838,7,8,455.0,Dollar -False,90,4.85714,4.81863,4.81863,7,40,468.0,Dollar -True,25,3.42857,2.91799,2.91799,7,24,455.0,Euro -True,31,3.14286,3.15809,3.15809,7,6,455.0,Euro -True,61,4.21429,4.1646,4.1646,7,25,455.0,Pound -True,67,2.78571,2.04316,2.04316,7,0,455.0,Dollar -True,1184,3.57143,3.94183,3.94183,7,93,455.0,Euro -True,1268,4.14286,3.84128,3.84128,7,12,455.0,Euro -True,1011,4.35714,4.57906,4.57906,7,6,455.0,Dollar -False,28,3.92857,3.8963,3.8963,7,0,455.0,Pound -False,1690,3.92857,3.65527,3.65527,7,10,455.0,Dollar -True,649,4.42857,4.38676,4.38676,7,32,455.0,Dollar -False,38,4.42857,4.44712,4.44712,7,59,455.0,Pound -True,60,4.64286,4.60991,4.60991,7,10,455.0,Pound -True,21,4.71429,4.69477,4.69477,7,46,455.0,Pound -True,26,4.71429,4.66287,4.66287,7,69,455.0,Pound -False,1951,3.78571,3.72006,3.72006,7,10,455.0,Pound -False,47,4.28571,4.27672,4.27672,7,28,455.0,Dollar -False,603,4.28571,3.47221,3.47221,7,31,455.0,Dollar -True,23,4.21429,4.35303,4.35303,7,48,1600.0,Euro -True,15,5.0,5.0,5.0,7,35,1600.0,Dollar -False,2939,4.0,3.83056,3.83056,7,12,455.0,Pound -False,21,4.28571,4.19211,4.19211,7,21,455.0,Pound -True,105,3.08333,3.69768,3.69768,6,15,455.0,Pound -True,301,4.5,4.72224,4.72224,6,13,455.0,Pound -True,82,4.0,3.75738,3.75738,6,18,455.0,Euro -False,121,3.33333,3.19157,3.19157,6,111,455.0,Euro -True,581,4.83333,4.80599,4.80599,6,6,455.0,Dollar -False,670,4.25,4.67599,4.67599,6,27,455.0,Euro -False,1016,4.41667,4.16208,4.16208,6,37,455.0,Euro -False,17,4.16667,4.18474,4.18474,6,12,455.0,Euro -False,168,4.75,4.62749,4.62749,6,12,455.0,Euro -True,68,4.41667,4.43961,4.43961,6,15,455.0,Pound -True,50,3.58333,3.51742,3.51742,6,27,455.0,Dollar -True,47,4.0,3.97696,3.97696,6,7,455.0,Euro -True,339,4.08333,4.25778,4.25778,6,24,455.0,Euro -True,114,3.33333,2.52453,2.52453,6,11,455.0,Euro -False,24,4.58333,4.67584,4.67584,6,10,455.0,Pound -False,2012,3.5,3.22933,3.22933,6,11,455.0,Pound -True,6309,3.91667,3.8194,3.8194,6,19,455.0,Euro -True,13,3.75,3.89479,3.89479,6,6,455.0,Euro -True,41,4.08333,4.24031,4.24031,6,30,455.0,Euro -False,52,4.33333,4.34922,4.34922,6,0,455.0,Euro -True,28,3.83333,3.66639,3.66639,6,13,455.0,Dollar -True,918,4.08333,4.31672,4.31672,6,11,455.0,Euro -False,1016,3.5,3.12873,3.12873,6,13,455.0,Dollar -True,3886,3.58333,3.68015,3.68015,6,27,455.0,Dollar -False,18,4.75,4.35838,4.35838,6,13,455.0,Pound -False,40,4.66667,4.55342,4.55342,6,35,455.0,Euro -True,88,4.41667,4.38282,4.38282,6,19,455.0,Pound -True,109,4.5,4.36542,4.36542,6,14,455.0,Pound -True,1152,3.0,3.45473,3.45473,6,7,455.0,Pound -False,379,2.83333,3.38485,3.38485,6,9,455.0,Pound -False,15,4.41667,4.40983,4.40983,6,10,455.0,Pound -False,20,5.0,5.0,5.0,6,30,455.0,Pound -False,60,4.83333,4.83072,4.83072,6,27,455.0,Euro -False,1535,4.08333,4.14274,4.14274,6,15,455.0,Pound -True,1209,4.08333,4.27362,4.27362,6,20,455.0,Dollar -True,953,3.58333,3.979,3.979,6,16,455.0,Dollar -True,40,3.91667,3.54546,3.54546,6,0,455.0,Dollar -True,24,4.83333,4.8717,4.8717,6,13,455.0,Pound -True,779,3.75,3.58573,3.58573,6,32,455.0,Dollar -True,106,3.41667,3.05821,3.05821,6,15,455.0,Euro -False,84,4.08333,4.11701,4.11701,6,20,455.0,Dollar -False,620,4.41667,4.03413,4.03413,6,14,455.0,Euro -True,45,3.33333,3.43723,3.43723,6,6,455.0,Dollar -False,50,3.58333,3.4513,3.4513,6,0,455.0,Pound -True,29,4.16667,4.13166,4.13166,6,6,455.0,Pound -True,34,3.25,2.77622,2.77622,6,0,455.0,Euro -True,25,4.25,4.32129,4.32129,6,36,455.0,Euro -False,31,3.41667,3.32914,3.32914,6,36,455.0,Euro -False,22,4.16667,4.16816,4.16816,6,41,455.0,Euro -True,29,4.58333,4.52091,4.52091,6,32,1680.0,Pound -False,46,4.41667,4.43754,4.43754,6,58,455.0,Pound -False,36,4.25,4.19976,4.19976,6,54,455.0,Euro -True,35,5.0,5.0,5.0,6,24,455.0,Dollar -False,238,4.08333,4.08606,4.08606,6,33,455.0,Dollar -False,374,3.58333,3.29718,3.29718,6,17,455.0,Dollar -True,1020,4.16667,4.3507,4.3507,6,50,455.0,Pound -True,31,4.5,4.52984,4.52984,6,17,800.0,Euro -False,818,3.41667,3.235,3.235,6,16,455.0,Euro -True,1073,4.41667,4.45447,4.45447,6,7,455.0,Dollar -False,560,3.91667,3.79655,3.79655,6,13,455.0,Dollar -True,797,4.5,4.30523,4.30523,6,19,455.0,Pound -False,66,4.41667,4.21043,4.21043,6,29,455.0,Pound -False,35,4.33333,4.36087,4.36087,6,17,455.0,Euro -True,187,4.0,4.17078,4.17078,6,19,455.0,Pound -True,36,4.0,3.17796,3.17796,6,14,455.0,Dollar -False,45,4.25,4.3192,4.3192,6,16,700.0,Euro -True,10,3.58333,3.32759,3.32759,6,11,455.0,Dollar -True,180,4.25,4.36248,4.36248,6,45,455.0,Dollar -False,38,2.83333,2.75019,2.75019,6,39,455.0,Pound -True,27,4.5,4.5895,4.5895,6,9,700.0,Euro -True,45,4.75,4.7524,4.7524,6,22,455.0,Euro -True,19,4.41667,4.19783,4.19783,6,35,455.0,Dollar -True,15,5.0,5.0,5.0,6,6,455.0,Pound -True,14,4.75,4.75434,4.75434,6,11,455.0,Pound -False,444,4.41667,4.23163,4.23163,6,20,455.0,Dollar -True,319,4.08333,3.96766,3.96766,6,9,455.0,Pound -True,113,4.16667,4.18554,4.18554,6,30,455.0,Dollar -True,1253,3.5,3.37879,3.37879,6,30,455.0,Dollar -True,2105,4.16667,4.00336,4.00336,6,11,455.0,Euro -False,148,4.16667,4.07623,4.07623,6,15,455.0,Euro -False,18,3.66667,3.67585,3.67585,6,19,455.0,Euro -True,34,4.25,4.05106,4.05106,6,35,455.0,Dollar -False,587,3.83333,3.83992,3.83992,6,11,455.0,Dollar -False,9,4.91667,4.85534,4.85534,6,8,960.0,Pound -True,676,4.16667,3.92141,3.92141,6,11,455.0,Euro -False,8,3.41667,3.60799,3.60799,6,8,455.0,Euro -True,30,2.41667,2.75663,2.75663,6,16,455.0,Pound -True,32,4.33333,4.37926,4.37926,6,31,455.0,Pound -True,45,4.66667,4.77371,4.77371,6,25,455.0,Euro -False,956,4.5,4.4151,4.4151,6,33,455.0,Euro -True,26,4.33333,4.26237,4.26237,6,60,455.0,Euro -True,39,4.25,4.21759,4.21759,6,47,455.0,Dollar -False,96,4.25,4.35475,4.35475,6,23,455.0,Dollar -True,690,3.0,2.37079,2.37079,6,12,455.0,Dollar -False,20,4.66667,4.60874,4.60874,6,27,455.0,Euro -True,2033,4.5,4.54868,4.54868,6,23,455.0,Dollar -True,18,4.16667,4.15193,4.15193,6,7,455.0,Euro -False,58,4.5,4.64317,4.64317,6,0,455.0,Dollar -True,25,3.91667,3.77622,3.77622,6,18,455.0,Pound -False,611,1.91667,1.36363,1.36363,6,28,455.0,Euro -True,28,4.5,4.49566,4.49566,6,7,455.0,Euro -False,13,4.5,4.49779,4.49779,6,20,455.0,Euro -True,27,4.25,4.38913,4.38913,6,18,700.0,Dollar -True,987,4.33333,4.39796,4.39796,6,42,455.0,Dollar -True,2081,3.91667,4.18855,4.18855,6,7,455.0,Dollar -True,9,3.58333,4.2833,4.2833,6,10,455.0,Euro -False,61,4.75,4.78874,4.78874,6,67,455.0,Dollar -False,12,4.5,4.49054,4.49054,6,7,455.0,Pound -False,51,3.66667,3.0576,3.0576,6,12,455.0,Dollar -True,17,4.0,3.88183,3.88183,6,33,455.0,Pound -True,496,3.83333,3.9678,3.9678,6,15,455.0,Euro -False,21,4.41667,4.37695,4.37695,6,7,455.0,Dollar -False,756,4.25,4.37396,4.37396,6,23,455.0,Dollar -False,59,4.83333,4.91719,4.91719,6,15,3200.0,Pound -False,630,4.0,3.95818,3.95818,6,78,455.0,Dollar -False,75,4.41667,4.35217,4.35217,6,27,455.0,Euro -False,751,4.58333,4.31151,4.31151,6,11,455.0,Euro -False,46,4.58333,4.48747,4.48747,6,154,455.0,Dollar -True,1505,4.83333,4.82904,4.82904,6,25,455.0,Euro -False,45,3.91667,3.80335,3.80335,6,23,455.0,Pound -True,2473,3.66667,3.56151,3.56151,6,61,455.0,Dollar -False,20,4.75,4.73626,4.73626,6,13,455.0,Pound -False,32,4.66667,4.68255,4.68255,6,9,455.0,Pound -True,65,3.5,3.62459,3.62459,6,9,455.0,Euro -False,1146,4.66667,4.61388,4.61388,6,7,455.0,Pound -False,40,4.41667,4.25603,4.25603,6,37,480.0,Euro -False,13,3.5,3.51124,3.51124,6,20,455.0,Pound -False,2261,3.91667,3.64858,3.64858,6,12,455.0,Pound -True,15,3.91667,3.99296,3.99296,6,9,455.0,Euro -True,1428,4.0,3.66525,3.66525,6,61,455.0,Dollar -False,17,4.25,4.21753,4.21753,6,16,455.0,Pound -True,29,3.25,3.59534,3.59534,6,7,455.0,Dollar -False,711,3.91667,4.25557,4.25557,6,10,455.0,Pound -False,28,4.58333,4.37968,4.37968,6,27,455.0,Pound -True,26,4.0,4.09505,4.09505,6,52,455.0,Euro -True,1474,4.0,3.79053,3.79053,6,32,455.0,Dollar -True,75,4.91667,4.92984,4.92984,6,26,455.0,Dollar -True,61,4.66667,4.5065,4.5065,6,28,455.0,Dollar -True,5814,3.66667,3.68958,3.68958,6,8,455.0,Euro -True,42,4.91667,4.87225,4.87225,6,16,455.0,Dollar -True,51,4.41667,4.48152,4.48152,6,265,455.0,Dollar -False,28,4.83333,4.89128,4.89128,6,16,455.0,Pound -False,61,4.75,4.6418,4.6418,6,313,455.0,Pound -True,12,4.08333,4.06258,4.06258,6,6,455.0,Pound -True,26,4.5,4.26542,4.26542,6,26,1440.0,Euro -False,16,4.83333,4.59226,4.59226,6,8,455.0,Euro -False,597,4.16667,4.20494,4.20494,7,33,455.0,Euro -True,868,3.91667,3.63813,3.63813,6,9,455.0,Euro -True,134,4.5,4.51676,4.51676,6,11,455.0,Dollar -False,727,3.16667,3.83115,3.83115,6,10,455.0,Pound -False,444,4.0,3.689,3.689,6,27,455.0,Dollar -True,943,4.75,4.72377,4.72377,6,25,455.0,Dollar -True,33,4.5,4.49293,4.49293,6,28,455.0,Pound -False,894,4.75,4.7852,4.7852,6,11,455.0,Pound -True,103,4.0,4.32127,4.32127,6,20,455.0,Euro -False,1027,3.83333,4.37388,4.37388,6,14,455.0,Euro -True,172,3.58333,3.2859,3.2859,6,13,455.0,Euro -False,405,4.08333,3.68685,3.68685,6,36,455.0,Euro -True,30,4.66667,4.59025,4.59025,6,40,455.0,Pound -False,1930,4.75,4.85679,4.85679,6,11,455.0,Dollar -False,16,4.75,4.60649,4.60649,6,24,455.0,Pound -True,40,3.75,3.56123,3.56123,6,19,455.0,Pound -True,97,4.0,3.98387,3.98387,6,43,455.0,Euro -True,21,3.16667,4.17994,4.17994,6,7,455.0,Dollar -False,14,3.25,3.19977,3.19977,6,7,455.0,Pound -True,13,4.91667,4.95823,4.95823,6,5,455.0,Dollar -True,85,3.5,3.54192,3.54192,6,0,455.0,Pound -True,15,3.83333,3.81727,3.81727,6,14,455.0,Pound -False,223,4.33333,4.29342,4.29342,6,7,455.0,Euro -True,48,4.5,4.51017,4.51017,6,19,455.0,Dollar -True,2318,4.08333,4.15933,4.15933,6,10,455.0,Euro -False,2315,3.66667,4.1911,4.1911,6,8,455.0,Euro -False,43,4.0,4.0384,4.0384,6,28,455.0,Pound -False,1497,4.16667,4.07853,4.07853,6,69,455.0,Pound -False,2700,3.41667,3.66489,3.66489,6,18,455.0,Dollar -True,33,4.33333,4.40516,4.40516,6,9,455.0,Euro -False,36,3.5,3.83761,3.83761,6,26,455.0,Euro -False,1896,3.41667,3.60245,3.60245,6,37,455.0,Pound -False,18,4.58333,4.4841,4.4841,6,15,455.0,Euro -False,56,3.75,3.61845,3.61845,6,28,455.0,Dollar -True,1760,4.6,4.59705,4.59705,6,17,455.0,Euro -False,35,3.75,3.88901,3.88901,6,13,455.0,Dollar -True,24,4.16667,4.03435,4.03435,6,54,455.0,Pound -False,1303,3.91667,3.70397,3.70397,6,33,455.0,Euro -False,55,4.58333,4.56688,4.56688,6,11,455.0,Euro -False,1289,3.83333,3.98319,3.98319,6,21,455.0,Pound -False,22,4.25,4.22411,4.22411,6,9,455.0,Pound -True,758,4.33333,4.30979,4.30979,6,16,455.0,Dollar -False,274,4.0,3.64087,3.64087,6,18,455.0,Dollar -True,58,4.33333,4.51617,4.51617,6,17,455.0,Euro -False,35,4.25,3.90241,3.90241,6,39,455.0,Pound -True,73,4.16667,4.10357,4.10357,6,101,455.0,Dollar -False,1762,2.91667,3.37403,3.37403,6,7,455.0,Dollar -False,1200,4.75,4.59369,4.59369,6,15,455.0,Dollar -True,303,3.83333,3.97094,3.97094,6,11,455.0,Euro -False,2231,4.08333,3.92369,3.92369,6,21,455.0,Dollar -True,15,3.75,3.614,3.614,6,12,455.0,Euro -True,35,5.0,5.0,5.0,6,0,455.0,Dollar -True,2477,4.91667,4.96092,4.96092,6,13,455.0,Dollar -False,29,4.33333,4.27262,4.27262,6,62,455.0,Pound -True,13,3.75,3.79864,3.79864,6,19,455.0,Euro -False,3694,5.0,5.0,5.0,6,24,455.0,Dollar -False,926,3.75,4.10754,4.10754,6,8,3200.0,Euro -False,672,4.5,4.31906,4.31906,6,10,700.0,Dollar -True,26,4.25,4.27654,4.27654,6,20,455.0,Euro -True,18,4.33333,4.22868,4.22868,6,5,700.0,Euro -True,10,4.75,4.7276,4.7276,6,15,455.0,Euro -True,1914,3.5,3.31665,3.31665,6,0,455.0,Euro -False,6417,2.5,2.87272,2.87272,6,39,455.0,Euro -False,743,3.58333,3.88499,3.88499,6,16,455.0,Euro -False,43,4.75,4.81182,4.81182,6,19,455.0,Euro -False,17,3.66667,3.76199,3.76199,6,31,455.0,Dollar -False,23,4.16667,3.88264,3.88264,6,6,455.0,Dollar -True,498,4.0,4.07958,4.07958,6,14,455.0,Dollar -False,611,3.33333,3.10284,3.10284,6,12,455.0,Dollar -False,23,4.5,4.56444,4.56444,6,22,455.0,Pound -True,2032,2.91667,2.08906,2.08906,6,8,455.0,Pound -True,120,4.75,4.76741,4.76741,6,60,455.0,Pound -False,2717,3.83333,3.59601,3.59601,6,17,455.0,Dollar -True,25,4.33333,4.33371,4.33371,6,11,455.0,Dollar -True,28,4.66667,4.58635,4.58635,6,13,455.0,Pound -False,298,3.25,2.32541,2.32541,6,46,455.0,Euro -False,21,4.5,4.68079,4.68079,6,58,468.0,Dollar -False,31,4.83333,4.83391,4.83391,6,7,455.0,Euro -False,14,3.66667,3.57544,3.57544,6,9,455.0,Euro -False,1568,4.41667,4.01315,4.01315,6,51,455.0,Euro -False,20,4.75,4.76392,4.76392,6,10,455.0,Pound -True,219,4.08333,4.67422,4.67422,6,28,455.0,Euro -False,1038,4.16667,3.7337,3.7337,6,5,455.0,Euro -False,505,4.75,4.73569,4.73569,6,19,455.0,Pound -False,1446,4.25,4.233,4.233,6,12,455.0,Euro -True,229,3.75,2.98442,2.98442,6,18,455.0,Pound -False,59,4.83333,4.82854,4.82854,6,25,455.0,Dollar -True,44,4.41667,4.30135,4.30135,6,12,455.0,Euro -True,666,4.58333,4.5851,4.5851,6,20,455.0,Euro -False,120,4.58333,4.58419,4.58419,6,17,455.0,Pound -True,34,3.91667,4.02809,4.02809,6,44,455.0,Euro -False,25,4.58333,4.55053,4.55053,6,44,455.0,Euro -False,21,4.75,4.68281,4.68281,6,11,455.0,Euro -False,19,4.33333,4.10132,4.10132,6,34,455.0,Pound -False,38,4.08333,4.12873,4.12873,6,14,455.0,Euro -True,20,4.25,4.15801,4.15801,6,12,455.0,Euro -False,33,4.08333,3.94132,3.94132,6,22,455.0,Pound -True,1021,4.16667,4.64689,4.64689,6,10,455.0,Euro -False,66,4.08333,4.02611,4.02611,6,0,455.0,Dollar -True,2915,3.33333,3.37833,3.37833,6,22,455.0,Dollar -False,21,3.16667,3.29077,3.29077,6,23,455.0,Euro -False,3453,4.0,4.05771,4.05771,6,15,455.0,Euro -False,40,4.33333,4.30415,4.30415,6,270,455.0,Dollar -False,13,4.83333,4.75817,4.75817,6,12,455.0,Pound -False,1878,4.66667,4.6406,4.6406,6,8,455.0,Pound -False,28,4.2,4.13031,4.13031,5,13,455.0,Dollar -False,110,5.0,5.0,5.0,5,24,455.0,Dollar -False,752,2.9,2.94495,2.94495,5,56,455.0,Dollar -False,1008,4.6,4.57143,4.57143,5,47,455.0,Dollar -True,1621,4.0,4.12092,4.12092,5,19,455.0,Euro -False,454,3.8,3.67956,3.67956,5,61,455.0,Euro -False,167,3.9,3.70543,3.70543,5,34,455.0,Pound -True,26,3.6,3.69225,3.69225,5,29,455.0,Pound -True,37,3.1,2.48956,2.48956,5,14,455.0,Pound -False,24,3.9,3.94722,3.94722,5,13,455.0,Pound -False,30,4.0,3.91441,3.91441,5,15,455.0,Euro -False,81,4.6,4.59927,4.59927,5,34,455.0,Pound -False,14,3.9,3.89443,3.89443,5,6,455.0,Dollar -False,11,4.0,3.88404,3.88404,5,10,455.0,Pound -True,82,3.5,3.69045,3.69045,5,22,455.0,Pound -True,13,3.7,3.78603,3.78603,5,8,455.0,Dollar -False,28,4.3,4.27809,4.27809,5,11,455.0,Pound -False,1194,3.5,3.41015,3.41015,5,14,455.0,Pound -False,40,4.6,4.46473,4.46473,5,92,455.0,Dollar -False,526,3.9,3.63543,3.63543,5,6,700.0,Dollar -True,19,4.5,4.50233,4.50233,5,12,455.0,Euro -False,62,3.3,3.30277,3.30277,5,27,455.0,Euro -False,3486,4.3,4.41391,4.41391,5,0,455.0,Pound -True,41,4.6,4.65281,4.65281,5,45,455.0,Dollar -True,80,4.0,4.01613,4.01613,5,17,455.0,Dollar -False,28,4.1,4.08061,4.08061,5,9,455.0,Euro -False,42,3.6,3.61381,3.61381,6,9,455.0,Pound -True,10,3.6,3.60643,3.60643,5,9,700.0,Dollar -True,15,3.5,3.45506,3.45506,5,10,455.0,Pound -False,31,4.7,4.74616,4.74616,5,38,455.0,Euro -False,23,3.9,3.68809,3.68809,5,20,455.0,Euro -True,49,4.4,4.14613,4.14613,5,0,455.0,Dollar -True,1008,3.5,3.1901,3.1901,5,23,455.0,Euro -False,13,3.4,3.42336,3.42336,5,7,1120.0,Dollar -False,16,4.5,4.2477,4.2477,5,21,455.0,Dollar -False,23,3.2,3.15871,3.15871,5,6,455.0,Euro -False,29,4.6,4.46357,4.46357,5,23,455.0,Dollar -False,15,4.6,4.39971,4.39971,5,19,455.0,Pound -False,71,4.0,3.36258,3.36258,5,71,455.0,Dollar -False,30,4.7,4.66515,4.66515,5,75,455.0,Euro -True,15,3.9,4.08296,4.08296,5,42,455.0,Euro -False,164,5.0,5.0,5.0,5,36,455.0,Pound -False,30,4.1,4.00183,4.00183,5,5,455.0,Euro -False,20,4.6,4.42093,4.42093,5,7,455.0,Dollar -True,1590,3.2,3.24598,3.24598,5,0,455.0,Pound -False,27,4.1,4.20428,4.20428,5,78,455.0,Dollar -True,29,3.2,3.17549,3.17549,5,38,455.0,Pound -False,8,4.0,4.03929,4.03929,5,13,455.0,Euro -False,33,2.8,2.97735,2.97735,5,21,455.0,Dollar -False,25,4.7,4.83686,4.83686,5,42,455.0,Dollar -True,25,4.0,3.92125,3.92125,5,5,455.0,Dollar -False,41,3.9,3.45975,3.45975,5,27,455.0,Euro -True,51,3.9,4.13854,4.13854,5,43,455.0,Euro -False,1584,3.3,3.42332,3.42332,5,10,455.0,Pound -True,26,4.3,4.20053,4.20053,5,16,455.0,Euro -False,39,4.7,4.60679,4.60679,5,0,455.0,Pound -True,23,4.4,4.10171,4.10171,5,18,455.0,Dollar -True,40,3.8,3.69214,3.69214,5,24,455.0,Euro -False,1799,3.9,3.81203,3.81203,5,19,455.0,Pound -True,1492,4.1,4.48165,4.48165,5,11,455.0,Pound -True,41,4.0,4.391,4.391,5,13,455.0,Pound -False,20,4.3,4.23422,4.23422,5,33,455.0,Dollar -False,13,4.5,4.63238,4.63238,5,22,455.0,Dollar -False,31,5.0,5.0,5.0,5,26,455.0,Dollar -True,53,4.7,4.74,4.74,5,0,455.0,Dollar -True,29,3.3,3.29837,3.29837,5,46,455.0,Pound -True,19,4.9,4.92441,4.92441,5,13,455.0,Pound -True,16,5.0,5.0,5.0,5,25,455.0,Euro -False,953,4.0,4.38267,4.38267,5,5,455.0,Dollar -False,1075,4.8,4.79225,4.79225,5,26,455.0,Dollar -False,8,4.7,4.67848,4.67848,5,6,455.0,Pound -False,6,5.0,5.0,5.0,5,9,455.0,Euro -True,114,4.6,4.50442,4.50442,5,21,455.0,Pound -False,40,4.6,4.78134,4.78134,5,8,455.0,Pound -True,2013,4.3,4.18384,4.18384,5,15,455.0,Euro -True,395,4.0,4.17598,4.17598,5,13,455.0,Euro -False,47,3.8,3.87587,3.87587,5,8,455.0,Euro -True,45,4.6,4.54718,4.54718,5,10,455.0,Euro -True,789,4.1,4.44472,4.44472,5,33,455.0,Pound -True,24,3.8,3.46397,3.46397,5,10,455.0,Euro -True,785,4.2,4.08598,4.08598,5,21,455.0,Euro -False,59,4.3,4.24214,4.24214,5,34,455.0,Euro -False,14,4.0,3.99517,3.99517,5,6,455.0,Pound -True,23,4.1,4.12663,4.12663,5,5,455.0,Pound -True,51,4.1,4.19664,4.19664,5,0,455.0,Euro -False,1272,4.1,4.0667,4.0667,5,26,455.0,Euro -False,23,4.2,4.06378,4.06378,5,0,455.0,Euro -False,34,4.7,4.64071,4.64071,5,14,455.0,Euro -True,13,4.2,4.19724,4.19724,5,12,455.0,Pound -True,1016,2.7,2.47884,2.47884,5,8,455.0,Dollar -True,536,4.0,4.18053,4.18053,5,18,455.0,Pound -False,25,3.3,3.18704,3.18704,5,7,455.0,Pound -False,17,2.6,2.672,2.672,5,7,455.0,Euro -False,27,3.7,3.49791,3.49791,5,14,455.0,Dollar -False,20,4.2,4.1788,4.1788,5,9,455.0,Pound -False,26,4.8,4.78182,4.78182,5,6,455.0,Dollar -False,375,4.3,3.94003,3.94003,5,9,455.0,Pound -True,28,4.9,4.87784,4.87784,5,15,455.0,Pound -True,630,3.9,3.46539,3.46539,5,59,455.0,Dollar -True,35,3.3,3.84215,3.84215,5,10,455.0,Dollar -True,49,4.0,3.95592,3.95592,5,42,455.0,Dollar -False,1764,3.8,3.77162,3.77162,5,37,455.0,Pound -False,18,4.1,4.75675,4.75675,5,5,455.0,Euro -True,28,4.5,4.82523,4.82523,5,8,455.0,Euro -True,32,3.6,3.74187,3.74187,5,23,455.0,Pound -False,2447,4.3,4.55086,4.55086,5,30,455.0,Euro -False,383,3.5,3.59444,3.59444,5,18,455.0,Euro -False,29,3.8,3.63059,3.63059,5,11,455.0,Euro -True,25,3.7,3.72048,3.72048,5,54,455.0,Euro -False,26,5.0,5.0,5.0,5,44,455.0,Dollar -True,22,4.6,4.59428,4.59428,5,11,455.0,Pound -True,37,4.8,4.78741,4.78741,5,7,455.0,Dollar -True,24,4.2,4.37659,4.37659,5,20,455.0,Euro -False,31,4.2,4.18609,4.18609,5,15,455.0,Dollar -False,37,4.5,4.43235,4.43235,5,7,455.0,Pound -True,56,2.7,2.41219,2.41219,5,10,455.0,Euro -True,10,3.7,4.23121,4.23121,5,7,455.0,Dollar -False,20,4.2,4.06845,4.06845,5,22,455.0,Pound -True,1618,4.8,4.69439,4.69439,5,15,455.0,Dollar -True,352,3.9,3.65551,3.65551,5,12,455.0,Pound -True,27,4.3,4.12291,4.12291,5,11,455.0,Euro -False,448,4.6,4.20262,4.20262,5,26,455.0,Euro -True,12,3.5,3.50615,3.50615,5,10,455.0,Pound -False,1021,4.0,4.02979,4.02979,5,22,455.0,Euro -True,34,4.4,4.42824,4.42824,5,17,455.0,Pound -False,4735,4.2,4.11751,4.11751,5,8,455.0,Dollar -False,24,4.5,4.47555,4.47555,5,25,455.0,Pound -True,1005,3.7,3.81708,3.81708,5,11,455.0,Pound -False,23,4.3,4.03407,4.03407,5,35,455.0,Dollar -False,28,3.7,3.79821,3.79821,5,8,455.0,Dollar -False,351,3.9,3.69602,3.69602,5,13,455.0,Euro -False,75,3.4,3.32754,3.32754,5,11,455.0,Dollar -True,21,4.1,3.97392,3.97392,5,10,455.0,Dollar -False,851,4.6,4.39748,4.39748,5,33,455.0,Euro -True,513,4.1,4.16392,4.16392,5,24,455.0,Dollar -False,47,4.5,4.68685,4.68685,5,19,455.0,Dollar -True,31,3.4,3.42956,3.42956,5,9,455.0,Dollar -True,29,3.6,3.60944,3.60944,5,67,455.0,Dollar -True,17,4.3,4.25186,4.25186,5,19,455.0,Pound -True,1007,4.4,4.72427,4.72427,5,36,455.0,Pound -False,8,2.4,2.44616,2.44616,5,21,455.0,Euro -False,898,4.5,4.88427,4.88427,5,5,455.0,Pound -False,2883,4.2,4.32225,4.32225,5,25,455.0,Pound -False,1753,3.1,3.33246,3.33246,5,32,455.0,Pound -True,334,4.8,4.73137,4.73137,5,11,455.0,Euro -True,23,4.1,4.16419,4.16419,5,18,455.0,Pound -False,36,3.3,2.88077,2.88077,5,15,455.0,Pound -True,975,3.5,3.6961,3.6961,5,20,455.0,Dollar -True,38,4.5,4.44795,4.44795,5,110,455.0,Pound -False,439,4.0,3.84585,3.84585,5,37,455.0,Pound -True,26,4.5,4.47385,4.47385,6,15,1520.0,Dollar -True,9,5.0,5.0,5.0,5,83,455.0,Dollar -False,1921,4.5,4.75897,4.75897,5,9,480.0,Euro -True,1340,3.9,3.73097,3.73097,5,41,455.0,Pound -False,86,1.8,2.17141,2.17141,5,5,455.0,Euro -False,1131,3.8,3.86948,3.86948,5,20,455.0,Dollar -False,649,3.7,3.3997,3.3997,5,11,455.0,Euro -False,1854,2.9,3.42281,3.42281,5,90,455.0,Pound -False,32,4.0,3.95181,3.95181,5,12,455.0,Pound -True,44,4.0,3.94829,3.94829,5,20,455.0,Euro -True,445,4.4,4.44454,4.44454,5,49,455.0,Pound -True,320,4.6,4.30694,4.30694,5,11,455.0,Dollar -False,280,4.1,3.85133,3.85133,5,13,455.0,Euro -True,791,4.1,4.02738,4.02738,5,61,455.0,Pound -False,20,4.2,4.34534,4.34534,5,35,455.0,Dollar -False,56,4.5,4.50799,4.50799,5,19,455.0,Pound -False,957,4.4,4.06799,4.06799,5,12,455.0,Euro -False,53,4.0,3.89058,3.89058,5,21,455.0,Euro -True,3330,4.2,3.99389,3.99389,5,49,455.0,Dollar -False,866,4.2,4.36282,4.36282,5,11,455.0,Euro -True,46,4.4,4.33784,4.33784,5,15,455.0,Pound -True,1768,4.6,4.35875,4.35875,5,8,455.0,Pound -False,18,4.0,3.8609,3.8609,5,12,455.0,Dollar -False,20,5.0,5.0,5.0,5,21,455.0,Euro -False,22,3.5,3.51026,3.51026,5,12,455.0,Dollar -True,34,3.9,3.92147,3.92147,8,17,1600.0,Dollar -False,131,3.5,3.68408,3.68408,5,0,455.0,Pound -True,19,4.6,4.58096,4.58096,5,9,455.0,Dollar -True,517,4.5,4.30305,4.30305,5,12,455.0,Pound -False,1512,3.9,3.74182,3.74182,5,9,455.0,Euro -False,154,4.5,4.20347,4.20347,5,18,455.0,Dollar -False,721,4.3,4.22103,4.22103,5,10,455.0,Dollar -False,23,4.3,4.14929,4.14929,5,27,455.0,Euro -True,25,5.0,5.0,5.0,5,60,455.0,Pound -False,718,4.7,4.8023,4.8023,5,18,455.0,Pound -True,20,4.4,4.43415,4.43415,5,17,455.0,Euro -False,34,4.7,4.76945,4.76945,5,47,455.0,Dollar -True,119,4.3,4.21116,4.21116,5,207,455.0,Euro -False,47,4.3,4.68853,4.68853,5,32,455.0,Dollar -True,1553,3.9,3.91547,3.91547,5,5,455.0,Euro -False,861,3.8,3.75186,3.75186,5,15,468.0,Euro -True,3015,4.3,4.21867,4.21867,5,45,455.0,Pound -True,111,5.0,5.0,5.0,5,7,455.0,Euro -False,18,3.8,3.77518,3.77518,5,79,455.0,Dollar -False,1241,4.2,4.05445,4.05445,5,28,455.0,Pound -True,14,4.7,4.64015,4.64015,5,10,455.0,Euro -False,27,4.7,4.6724,4.6724,5,40,455.0,Dollar -True,82,3.3,3.28304,3.28304,5,24,455.0,Dollar -False,45,3.8,3.69637,3.69637,5,11,455.0,Dollar -False,59,4.4,4.16772,4.16772,5,24,455.0,Euro -False,36,4.0,4.16342,4.16342,5,39,455.0,Dollar -True,28,4.3,4.39794,4.39794,5,10,455.0,Pound -True,18,3.6,3.77498,3.77498,5,7,455.0,Pound -True,13,3.2,2.84963,2.84963,5,19,455.0,Dollar -True,22,4.0,3.42431,3.42431,5,26,455.0,Euro -False,614,3.9,3.88425,3.88425,5,5,455.0,Euro -True,25,3.9,3.74116,3.74116,5,9,455.0,Pound -True,589,4.0,4.34745,4.34745,5,8,455.0,Dollar -False,41,4.3,4.35573,4.35573,5,28,455.0,Euro -False,58,4.6,4.57887,4.57887,5,15,455.0,Dollar -False,25,4.1,4.31521,4.31521,5,11,455.0,Dollar -False,14,3.3,3.55948,3.55948,5,10,455.0,Euro -False,649,4.4,4.3379,4.3379,5,78,455.0,Dollar -False,1022,4.8,4.66382,4.66382,5,32,455.0,Pound -False,28,4.2,4.19751,4.19751,5,9,455.0,Dollar -False,20,3.9,3.87941,3.87941,5,6,455.0,Dollar -False,799,4.6,4.49135,4.49135,5,11,455.0,Euro -False,325,4.2,4.15795,4.15795,5,14,455.0,Euro -True,626,3.7,3.56059,3.56059,5,22,455.0,Dollar -False,171,4.4,4.11266,4.11266,5,54,455.0,Pound -False,935,4.4,3.90439,3.90439,5,12,455.0,Pound -False,1996,3.6,3.48188,3.48188,5,12,455.0,Euro -True,23,4.0,3.92896,3.92896,5,13,455.0,Pound -False,353,4.8,4.5367,4.5367,5,22,455.0,Euro -False,21,4.9,4.89214,4.89214,5,32,455.0,Dollar -True,1830,4.0,4.28679,4.28679,5,32,455.0,Euro -False,102,3.1,3.06473,3.06473,5,41,455.0,Pound -True,15,3.8,3.80228,3.80228,5,17,455.0,Dollar -False,23,4.2,4.29334,4.29334,5,15,455.0,Dollar -True,473,3.2,3.25016,3.25016,5,12,455.0,Dollar -True,636,4.9,4.91171,4.91171,5,7,455.0,Pound -True,533,4.7,4.71871,4.71871,5,10,455.0,Dollar -True,43,4.6,4.53103,4.53103,5,19,455.0,Euro -True,16,3.9,3.87938,3.87938,5,25,455.0,Dollar -False,2061,3.7,4.01322,4.01322,5,16,455.0,Euro -True,24,4.3,4.26539,4.26539,5,20,455.0,Dollar -True,82,4.7,4.73521,4.73521,6,51,455.0,Pound -False,11,4.0,4.36647,4.36647,5,16,455.0,Pound -False,24,3.9,3.9977,3.9977,5,16,455.0,Dollar -False,40,4.1,3.75101,3.75101,5,10,455.0,Dollar -False,27,3.5,3.50415,3.50415,5,16,455.0,Pound -True,1002,4.2,4.12669,4.12669,5,12,455.0,Dollar -False,34,4.7,4.73117,4.73117,5,9,455.0,Euro -True,1003,4.1,4.45154,4.45154,5,8,455.0,Pound -True,12,4.4,3.90572,3.90572,5,43,455.0,Pound -True,64,5.0,5.0,5.0,5,59,800.0,Dollar -False,58,4.6,4.78622,4.78622,5,9,455.0,Euro -True,11,4.6,4.58987,4.58987,5,13,455.0,Dollar -True,1424,4.1,3.71012,3.71012,5,29,455.0,Pound -True,22,4.0,3.98473,3.98473,5,10,455.0,Pound -True,41,4.9,4.91369,4.91369,5,26,455.0,Pound -False,20,4.1,4.02559,4.02559,5,12,480.0,Pound -False,24,4.7,4.5073,4.5073,5,10,455.0,Pound -True,831,4.0,3.83168,3.83168,5,8,455.0,Euro -False,26,2.5,2.73651,2.73651,5,0,455.0,Dollar -False,11,4.4,4.35523,4.35523,5,10,455.0,Euro -False,32,4.4,4.31082,4.31082,5,16,455.0,Dollar -True,1290,4.6,4.58665,4.58665,5,30,455.0,Euro -False,40,3.4,3.43307,3.43307,5,41,455.0,Euro -False,226,3.9,3.91376,3.91376,5,21,455.0,Euro -True,22,4.3,4.12669,4.12669,5,12,455.0,Pound -False,21,3.9,3.8357,3.8357,5,15,455.0,Euro -False,38,4.7,4.77164,4.77164,5,15,455.0,Dollar -True,12,4.4,4.49532,4.49532,5,6,455.0,Pound -False,569,4.6,4.66811,4.66811,5,16,455.0,Pound -True,27,4.2,4.27762,4.27762,5,27,2800.0,Euro -True,17,4.7,4.76467,4.76467,5,24,455.0,Dollar -False,20,4.2,4.20331,4.20331,5,11,455.0,Pound -True,20,4.8,4.79622,4.79622,5,8,3200.0,Dollar -True,31,4.5,4.48459,4.48459,5,10,455.0,Pound -False,33,4.8,4.65953,4.65953,5,55,455.0,Dollar -False,31,4.8,4.82019,4.82019,5,25,455.0,Dollar -False,9,3.1,3.10161,3.10161,5,11,455.0,Pound -True,15,4.5,4.57726,4.57726,5,61,455.0,Euro -False,77,4.7,4.80757,4.80757,5,66,455.0,Euro -True,22,4.5,4.48792,4.48792,5,6,455.0,Euro -True,14,4.5,4.48239,4.48239,5,5,3200.0,Dollar -True,17,4.5,4.47191,4.47191,5,10,455.0,Dollar -True,14,4.8,4.98336,4.98336,5,26,455.0,Dollar -False,52,4.4,4.33699,4.33699,5,79,455.0,Euro -False,28,4.2,4.16579,4.16579,5,30,455.0,Euro -False,26,4.3,4.29707,4.29707,5,0,455.0,Dollar -True,8,5.0,5.0,5.0,5,17,455.0,Dollar -True,1075,3.5,3.81203,3.81203,5,30,455.0,Euro -True,72,3.75,3.73431,3.73431,4,13,455.0,Pound -True,1009,3.5,3.73175,3.73175,4,138,455.0,Euro -True,56,5.0,5.0,5.0,4,11,455.0,Pound -True,1158,4.0,3.84416,3.84416,4,63,455.0,Pound -False,36,3.125,3.21664,3.21664,4,11,455.0,Dollar -False,32,4.75,4.74131,4.74131,4,59,455.0,Dollar -True,540,4.0,3.11504,3.11504,4,18,455.0,Dollar -False,22,4.0,4.24058,4.24058,4,43,455.0,Dollar -True,56,4.0,4.12461,4.12461,4,43,455.0,Pound -False,11,3.5,3.50875,3.50875,4,17,455.0,Dollar -True,10,2.25,2.45894,2.45894,4,11,455.0,Pound -True,25,3.75,4.12156,4.12156,4,5,455.0,Dollar -True,8,2.625,2.61847,2.61847,4,5,455.0,Dollar -True,14,3.0,2.95668,2.95668,4,18,455.0,Dollar -True,318,3.75,3.02953,3.02953,4,10,455.0,Euro -False,17,3.0,2.90514,2.90514,4,9,455.0,Pound -False,21,4.375,4.17623,4.17623,4,8,455.0,Pound -False,13,4.0,3.50866,3.50866,4,7,455.0,Pound -True,60,4.625,4.67889,4.67889,4,21,455.0,Pound -False,83,2.75,2.74373,2.74373,4,38,455.0,Pound -True,29,4.75,4.9274,4.9274,4,15,455.0,Pound -False,21,4.25,4.23787,4.23787,4,0,455.0,Pound -True,8,4.0,4.06851,4.06851,4,16,455.0,Dollar -True,26,3.875,3.90052,3.90052,4,9,455.0,Dollar -True,14,3.625,3.30085,3.30085,4,36,455.0,Dollar -True,12,5.0,5.0,5.0,4,11,455.0,Dollar -False,21,5.0,5.0,5.0,4,45,455.0,Dollar -True,14,4.375,4.47719,4.47719,4,21,1440.0,Euro -False,15,4.375,4.37446,4.37446,4,9,455.0,Pound -False,41,4.0,4.03051,4.03051,4,66,455.0,Dollar -False,47,4.75,4.82912,4.82912,4,74,455.0,Dollar -False,26,4.25,3.90762,3.90762,5,19,455.0,Euro -True,821,4.0,4.5153,4.5153,4,69,455.0,Pound -False,16,4.125,4.28485,4.28485,4,9,455.0,Pound -True,14,5.0,5.0,5.0,4,16,455.0,Dollar -True,11,5.0,5.0,5.0,4,10,455.0,Pound -False,3911,4.375,4.46771,4.46771,5,19,455.0,Euro -False,15,4.75,4.79422,4.79422,4,22,455.0,Dollar -True,235,3.625,2.90943,2.90943,4,17,455.0,Pound -False,446,3.75,3.99604,3.99604,4,12,455.0,Pound -False,149,4.5,4.1564,4.1564,4,8,455.0,Dollar -True,79,4.125,4.14076,4.14076,4,22,455.0,Dollar -True,10,4.125,4.00066,4.00066,4,8,455.0,Euro -True,42,3.125,2.51594,2.51594,4,78,455.0,Dollar -True,1126,3.75,3.63388,3.63388,4,18,455.0,Euro -False,15,3.75,3.91965,3.91965,4,15,455.0,Euro -False,47,4.375,4.48527,4.48527,4,13,800.0,Dollar -True,1727,3.5,3.55987,3.55987,4,45,455.0,Euro -False,544,4.5,4.5219,4.5219,4,13,455.0,Pound -True,513,4.0,3.51377,3.51377,4,11,455.0,Pound -False,288,4.875,4.84741,4.84741,4,10,455.0,Dollar -True,14,4.25,4.20176,4.20176,4,10,455.0,Pound -True,44,3.75,3.56347,3.56347,4,17,455.0,Dollar -False,50,4.375,4.3378,4.3378,4,11,455.0,Pound -False,28,4.375,4.47476,4.47476,4,0,455.0,Dollar -True,18,4.0,3.97736,3.97736,4,13,455.0,Pound -True,1032,4.5,4.5941,4.5941,4,43,455.0,Dollar -False,26,4.25,3.81646,3.81646,4,7,455.0,Dollar -False,24,3.875,3.8335,3.8335,4,44,455.0,Pound -False,20,3.25,3.10441,3.10441,4,5,455.0,Dollar -False,26,4.0,4.15102,4.15102,4,0,455.0,Dollar -True,14,3.75,3.6006,3.6006,4,16,455.0,Dollar -True,29,5.0,5.0,5.0,4,16,455.0,Pound -True,11,3.375,3.46694,3.46694,4,26,455.0,Dollar -True,25,4.625,4.5822,4.5822,4,5,455.0,Dollar -True,23,4.0,4.20583,4.20583,4,0,455.0,Euro -True,1267,4.5,4.67446,4.67446,4,27,455.0,Euro -False,8,4.375,4.39973,4.39973,4,11,455.0,Pound -True,25,3.125,3.15897,3.15897,4,6,455.0,Pound -False,870,4.625,4.50312,4.50312,4,58,455.0,Euro -True,9,5.0,5.0,5.0,6,45,455.0,Euro -True,797,3.75,3.44086,3.44086,4,20,455.0,Euro -True,33,3.25,3.21174,3.21174,4,22,455.0,Dollar -True,1248,4.125,4.4617,4.4617,4,0,455.0,Euro -False,35,4.0,4.10855,4.10855,4,43,455.0,Dollar -True,16,4.5,4.52358,4.52358,4,18,455.0,Euro -False,20,3.375,3.35,3.35,4,20,455.0,Pound -True,23,4.0,3.97938,3.97938,4,62,455.0,Dollar -False,27,4.75,4.70258,4.70258,4,13,455.0,Dollar -False,15,5.0,5.0,5.0,4,10,455.0,Dollar -False,9,4.25,4.25809,4.25809,4,16,455.0,Euro -True,13,4.75,4.75971,4.75971,4,12,720.0,Pound -False,23,4.375,4.48962,4.48962,4,5,455.0,Pound -True,15,4.375,4.36977,4.36977,4,60,455.0,Dollar -True,1010,5.0,5.0,5.0,4,5,455.0,Pound -True,63,4.5,4.4682,4.4682,4,31,455.0,Euro -False,374,3.375,3.36278,3.36278,4,23,455.0,Pound -True,65,5.0,5.0,5.0,4,12,455.0,Dollar -False,181,4.25,4.54647,4.54647,4,23,455.0,Dollar -True,17,4.375,4.3317,4.3317,4,16,455.0,Euro -False,972,4.625,4.60765,4.60765,4,29,455.0,Euro -False,13,3.0,3.1608,3.1608,4,6,455.0,Dollar -False,40,3.75,3.55416,3.55416,4,25,455.0,Dollar -False,1008,4.5,4.66453,4.66453,4,12,455.0,Dollar -True,15,3.25,3.36104,3.36104,4,6,455.0,Pound -True,1593,4.0,4.21451,4.21451,4,5,455.0,Euro -False,36,3.0,3.00349,3.00349,5,14,455.0,Pound -False,34,3.875,4.47471,4.47471,4,6,455.0,Euro -True,25,3.625,4.25302,4.25302,4,54,455.0,Euro -True,32,4.25,3.6873,3.6873,4,11,455.0,Dollar -False,1127,4.125,3.70228,3.70228,4,23,455.0,Euro -True,3442,2.875,2.95963,2.95963,4,49,455.0,Pound -False,1005,3.75,4.04978,4.04978,4,11,800.0,Euro -True,40,4.875,4.8617,4.8617,4,9,455.0,Euro -True,17,4.5,4.4726,4.4726,4,12,455.0,Pound -False,533,4.5,4.39348,4.39348,4,17,455.0,Pound -True,34,4.25,4.08805,4.08805,4,26,455.0,Euro -False,7,3.375,3.52168,3.52168,4,7,455.0,Dollar -False,28,3.75,3.4817,3.4817,4,35,455.0,Pound -True,21,4.375,4.4226,4.4226,4,14,455.0,Dollar -True,27,3.125,2.72681,2.72681,4,0,455.0,Pound -False,937,3.875,4.00639,4.00639,4,20,455.0,Dollar -False,33,3.0,2.67224,2.67224,4,0,455.0,Pound -False,1453,2.25,1.85539,1.85539,4,0,455.0,Pound -True,1515,4.0,4.01044,4.01044,4,67,455.0,Pound -True,12,4.125,3.64224,3.64224,4,0,455.0,Dollar -True,11,4.75,4.70161,4.70161,4,6,455.0,Pound -False,59,2.875,2.18068,2.18068,4,35,640.0,Dollar -False,22,4.75,4.75172,4.75172,4,28,455.0,Pound -True,27,4.25,4.16247,4.16247,4,38,455.0,Pound -False,14,3.5,3.28638,3.28638,4,18,455.0,Dollar -True,10,3.875,3.94426,3.94426,4,10,455.0,Pound -True,57,5.0,5.0,5.0,4,8,455.0,Pound -False,2168,4.375,4.52543,4.52543,4,37,455.0,Dollar -True,612,3.25,2.92695,2.92695,4,10,455.0,Pound -True,26,4.5,4.41661,4.41661,4,78,455.0,Euro -False,18,4.5,4.56177,4.56177,4,17,455.0,Euro -False,13,4.5,4.46393,4.46393,4,13,455.0,Dollar -True,813,4.0,4.32564,4.32564,4,30,455.0,Dollar -True,29,5.0,5.0,5.0,7,38,455.0,Pound -False,484,5.0,5.0,5.0,4,37,455.0,Pound -False,24,4.75,4.71948,4.71948,4,16,455.0,Dollar -True,9,3.75,3.81009,3.81009,4,9,455.0,Pound -False,28,5.0,5.0,5.0,4,43,455.0,Euro -True,12,4.875,4.86372,4.86372,4,15,455.0,Dollar -False,600,4.625,4.6576,4.6576,4,11,455.0,Dollar -False,15,5.0,5.0,5.0,4,13,455.0,Pound -False,17,4.25,4.31741,4.31741,4,15,455.0,Dollar -False,425,2.875,2.94948,2.94948,4,25,455.0,Euro -True,74,4.625,4.33158,4.33158,4,18,455.0,Dollar -False,710,4.25,4.34226,4.34226,4,24,455.0,Pound -True,1043,3.25,2.52677,2.52677,4,53,455.0,Euro -False,57,4.75,4.72622,4.72622,4,11,455.0,Pound -True,10,3.75,3.60656,3.60656,4,33,455.0,Euro -True,151,4.625,4.34086,4.34086,4,27,455.0,Dollar -False,33,3.875,4.05839,4.05839,4,5,700.0,Pound -True,26,3.75,3.81141,3.81141,4,92,455.0,Dollar -True,675,3.75,3.54313,3.54313,4,24,455.0,Euro -True,30,4.0,3.87343,3.87343,4,8,455.0,Euro -False,68,4.25,3.85096,3.85096,4,35,455.0,Dollar -True,70,4.375,4.2115,4.2115,4,22,455.0,Dollar -True,44,4.125,4.13204,4.13204,4,8,455.0,Pound -False,651,3.125,3.52033,3.52033,4,22,455.0,Euro -True,1700,4.25,4.03417,4.03417,4,12,455.0,Dollar -False,1288,4.25,3.35029,3.35029,4,31,455.0,Dollar -True,999,3.5,3.50857,3.50857,4,8,455.0,Dollar -False,7,5.0,5.0,5.0,4,46,455.0,Dollar -False,16,3.625,3.66911,3.66911,4,7,455.0,Euro -False,207,4.25,4.34066,4.34066,4,12,455.0,Dollar -False,22,4.375,4.35468,4.35468,4,29,455.0,Pound -False,18,4.5,4.31316,4.31316,4,5,455.0,Dollar -False,49,4.5,4.3849,4.3849,4,66,455.0,Euro -False,46,3.75,3.22405,3.22405,4,14,455.0,Pound -True,27,4.875,4.90781,4.90781,4,24,455.0,Euro -False,12,4.75,4.69434,4.69434,4,19,2000.0,Dollar -True,26,4.25,4.28619,4.28619,4,7,455.0,Pound -True,48,4.375,4.3556,4.3556,4,20,455.0,Euro -False,12,3.875,3.8756,3.8756,4,5,455.0,Euro -False,31,4.875,4.84797,4.84797,4,5,455.0,Pound -False,21,2.625,2.47641,2.47641,4,8,455.0,Euro -False,660,4.5,4.48211,4.48211,4,25,455.0,Pound -True,1024,3.375,3.21112,3.21112,4,16,455.0,Pound -False,1501,2.625,2.61162,2.61162,4,6,455.0,Pound -False,23,2.0,1.51139,1.51139,4,15,455.0,Dollar -True,11,4.625,4.62412,4.62412,4,7,455.0,Pound -False,23,4.875,4.86425,4.86425,4,14,455.0,Euro -False,14,3.875,3.83588,3.83588,4,13,455.0,Pound -False,34,5.0,5.0,5.0,4,68,455.0,Pound -False,24,4.125,4.15213,4.15213,4,30,455.0,Euro -True,1441,4.75,4.88016,4.88016,4,23,455.0,Pound -False,1181,3.375,3.02224,3.02224,4,21,455.0,Dollar -True,640,4.75,4.7532,4.7532,4,49,455.0,Pound -False,30,2.375,2.10139,2.10139,4,16,455.0,Dollar -False,23,4.0,3.96926,3.96926,4,9,455.0,Dollar -True,15,4.25,3.91518,3.91518,4,41,455.0,Euro -False,23,4.0,3.87975,3.87975,4,18,455.0,Pound -False,198,4.0,4.0783,4.0783,4,8,455.0,Pound -True,37,2.875,2.84106,2.84106,4,10,455.0,Euro -False,453,4.625,4.66216,4.66216,4,11,455.0,Euro -True,19,4.75,4.70927,4.70927,4,37,455.0,Euro -True,3861,4.75,4.69269,4.69269,4,14,455.0,Pound -False,38,4.125,4.17801,4.17801,4,10,455.0,Dollar -False,20,4.875,4.87189,4.87189,4,11,455.0,Pound -True,556,4.25,4.39974,4.39974,4,27,455.0,Euro -False,633,3.375,3.35727,3.35727,4,13,455.0,Dollar -True,30,4.375,4.29341,4.29341,4,45,455.0,Euro -True,35,4.375,4.15859,4.15859,4,21,455.0,Euro -True,66,4.125,3.90196,3.90196,4,14,455.0,Pound -True,26,3.875,3.96569,3.96569,4,17,455.0,Pound -False,12,3.125,3.40701,3.40701,4,8,455.0,Pound -True,23,4.75,4.81686,4.81686,4,10,455.0,Dollar -False,45,4.875,4.88945,4.88945,4,17,455.0,Dollar -True,19,5.0,5.0,5.0,4,26,468.0,Dollar -False,6,3.125,3.26579,3.26579,4,32,455.0,Dollar -False,13,3.5,3.70487,3.70487,4,14,455.0,Dollar -False,313,4.875,4.92985,4.92985,4,30,455.0,Euro -True,886,4.25,4.22392,4.22392,4,6,455.0,Dollar -False,7,4.0,4.00005,4.00005,5,8,455.0,Euro -True,207,3.625,3.24536,3.24536,4,11,455.0,Pound -True,10,5.0,5.0,5.0,4,17,455.0,Euro -False,10,5.0,5.0,5.0,4,35,455.0,Dollar -False,10,2.75,2.80788,2.80788,4,23,455.0,Dollar -True,1028,5.0,5.0,5.0,4,24,455.0,Euro -True,211,3.0,2.43072,2.43072,4,15,455.0,Dollar -False,2341,3.625,3.27221,3.27221,4,27,455.0,Dollar -False,181,3.75,3.53107,3.53107,4,63,455.0,Pound -False,18,4.0,4.4627,4.4627,4,7,455.0,Dollar -True,17,4.125,4.09327,4.09327,4,10,455.0,Euro -True,980,4.125,4.62657,4.62657,4,20,455.0,Euro -True,69,3.375,3.4326,3.4326,4,14,455.0,Euro -True,30,4.125,4.00358,4.00358,4,24,455.0,Dollar -False,6,4.125,4.12816,4.12816,4,14,455.0,Euro -True,36,4.125,4.10345,4.10345,4,15,455.0,Dollar -True,75,4.625,4.50243,4.50243,4,15,3200.0,Pound -True,26,4.125,4.16944,4.16944,4,20,455.0,Pound -True,1055,5.0,5.0,5.0,4,17,455.0,Dollar -True,79,4.375,4.34679,4.34679,4,16,455.0,Dollar -True,16,3.25,2.81497,2.81497,4,16,455.0,Euro -False,18,3.875,3.75303,3.75303,4,16,455.0,Pound -False,23,2.0,1.91086,1.91086,4,16,455.0,Euro -False,17,3.25,3.25838,3.25838,4,17,455.0,Euro -True,28,3.875,4.62682,4.62682,4,10,455.0,Dollar -False,23,3.5,3.5744,3.5744,4,16,455.0,Dollar -False,21,4.75,4.67364,4.67364,4,64,455.0,Dollar -False,1543,3.5,3.13896,3.13896,4,87,455.0,Dollar -True,1006,3.375,3.15581,3.15581,4,33,455.0,Dollar -False,25,4.0,3.80992,3.80992,5,17,455.0,Pound -True,14,2.75,3.35167,3.35167,4,13,455.0,Dollar -False,130,4.0,3.79714,3.79714,4,14,455.0,Euro -True,12,4.75,4.83491,4.83491,4,15,455.0,Pound -True,30,4.5,4.01095,4.01095,4,15,455.0,Pound -True,735,3.375,3.46638,3.46638,4,17,455.0,Euro -True,8,4.0,3.13317,3.13317,4,7,455.0,Pound -False,28,4.5,4.44737,4.44737,4,0,455.0,Pound -False,17,4.25,4.37001,4.37001,4,13,455.0,Euro -True,12,4.25,4.20545,4.20545,4,16,455.0,Dollar -True,37,3.625,3.09971,3.09971,4,47,455.0,Euro -True,11,3.625,3.52003,3.52003,4,8,455.0,Dollar -True,49,3.625,4.35133,4.35133,4,29,455.0,Euro -False,2782,4.75,4.46975,4.46975,4,14,455.0,Dollar -True,804,3.875,3.29294,3.29294,4,74,455.0,Pound -True,58,3.625,3.52521,3.52521,4,49,455.0,Euro -True,417,4.375,4.45175,4.45175,4,15,455.0,Euro -True,9,4.875,4.9055,4.9055,4,12,455.0,Euro -True,2172,3.0,2.5573,2.5573,4,22,455.0,Pound -True,4,4.5,4.51928,4.51928,4,26,455.0,Pound -False,18,5.0,5.0,5.0,4,11,455.0,Dollar -False,10,4.875,4.86954,4.86954,4,13,455.0,Euro -False,75,4.625,4.53425,4.53425,4,24,455.0,Euro -True,68,4.375,3.93683,3.93683,4,60,455.0,Euro -False,29,4.0,4.21251,4.21251,4,36,455.0,Pound -False,9,3.5,3.52447,3.52447,4,53,455.0,Euro -False,2540,4.5,4.62574,4.62574,4,30,455.0,Euro -False,9,4.25,4.26367,4.26367,4,16,455.0,Pound -False,487,3.875,4.48404,4.48404,4,17,455.0,Pound -False,1864,3.375,3.42958,3.42958,4,12,455.0,Euro -False,5,5.0,5.0,5.0,4,6,455.0,Pound -False,8,3.75,3.70791,3.70791,4,11,455.0,Dollar -True,375,2.25,2.10604,2.10604,4,14,455.0,Pound -True,45,3.75,3.81345,3.81345,4,42,455.0,Euro -False,15,3.75,3.85648,3.85648,4,29,455.0,Dollar -False,72,4.0,4.17416,4.17416,4,68,455.0,Euro -True,23,3.875,3.99319,3.99319,4,25,455.0,Euro -False,88,4.5,4.40577,4.40577,4,15,455.0,Dollar -True,81,4.125,4.17785,4.17785,4,151,455.0,Euro -True,12,3.375,3.49986,3.49986,4,9,455.0,Pound -True,95,4.625,4.48837,4.48837,4,20,455.0,Euro -True,10,3.5,3.02507,3.02507,4,0,640.0,Dollar -False,9,4.375,4.40633,4.40633,4,48,455.0,Dollar -True,13,3.375,3.60551,3.60551,4,15,455.0,Pound -False,19,4.75,4.69983,4.69983,4,13,455.0,Pound -False,19,4.0,4.08524,4.08524,4,7,455.0,Dollar -False,310,4.875,4.7577,4.7577,4,28,455.0,Dollar -True,193,4.375,4.34402,4.34402,4,37,455.0,Dollar -False,10,4.125,3.95878,3.95878,4,9,455.0,Euro -False,37,4.5,4.48685,4.48685,4,23,455.0,Euro -True,25,4.75,4.73631,4.73631,4,28,455.0,Pound -True,37,4.0,4.14212,4.14212,4,25,455.0,Dollar -True,391,2.5,1.48962,1.48962,4,20,700.0,Dollar -False,18,4.375,4.38662,4.38662,4,22,455.0,Euro -False,12,3.5,3.72847,3.72847,4,13,455.0,Pound -True,27,3.125,3.38827,3.38827,4,7,455.0,Euro -False,632,4.25,4.21042,4.21042,4,78,455.0,Euro -False,147,4.875,4.83916,4.83916,4,7,455.0,Pound -False,23,4.75,4.6824,4.6824,4,31,455.0,Euro -False,19,3.375,3.45045,3.45045,4,12,455.0,Euro -False,1108,3.25,2.62374,2.62374,4,30,455.0,Pound -True,11,4.625,4.60995,4.60995,4,8,700.0,Pound -True,16,4.0,3.99753,3.99753,4,70,455.0,Dollar -False,781,4.125,4.23782,4.23782,4,13,455.0,Pound -False,18,4.125,4.10342,4.10342,4,0,455.0,Pound -True,789,3.5,3.73962,3.73962,4,8,455.0,Euro -False,31,3.5,3.08774,3.08774,6,0,455.0,Pound -False,12,4.625,4.65696,4.65696,4,8,455.0,Pound -True,15,3.75,3.44617,3.44617,4,11,455.0,Dollar -False,10,4.375,4.37214,4.37214,4,23,455.0,Euro -False,123,4.625,4.28967,4.28967,4,11,455.0,Pound -True,1310,4.375,4.4895,4.4895,4,28,455.0,Euro -True,20,4.5,4.56424,4.56424,4,20,455.0,Pound -True,15,4.25,4.21293,4.21293,4,0,455.0,Pound -False,13,4.875,4.90841,4.90841,4,13,455.0,Euro -True,191,4.5,4.50311,4.50311,4,72,455.0,Dollar -False,375,4.0,3.92559,3.92559,4,44,455.0,Dollar -True,17,4.625,4.73106,4.73106,4,18,455.0,Euro -True,1109,3.125,2.69092,2.69092,4,14,455.0,Pound -False,255,4.0,3.88024,3.88024,3,16,455.0,Pound -True,27,4.5,4.41477,4.41477,3,26,455.0,Euro -True,7,4.5,4.16,4.16,3,8,455.0,Pound -False,8,4.33333,4.35204,4.35204,3,10,455.0,Dollar -True,24,4.0,4.06283,4.06283,3,44,455.0,Dollar -True,33,2.33333,2.2569,2.2569,3,16,455.0,Dollar -True,34,4.5,4.37877,4.37877,3,5,455.0,Dollar -False,26,4.16667,4.20392,4.20392,3,27,455.0,Pound -False,25,5.0,5.0,5.0,3,19,455.0,Dollar -True,7,3.33333,3.06198,3.06198,3,25,455.0,Pound -False,63,4.83333,4.77575,4.77575,3,36,455.0,Pound -False,12,4.66667,4.68589,4.68589,3,25,455.0,Dollar -False,12,4.16667,4.19498,4.19498,3,25,455.0,Dollar -False,18,5.0,5.0,5.0,3,27,455.0,Euro -True,53,3.16667,3.18048,3.18048,3,33,455.0,Euro -False,19,3.5,3.48028,3.48028,3,21,455.0,Euro -False,51,3.66667,3.83422,3.83422,3,71,455.0,Euro -True,970,4.33333,4.33058,4.33058,3,16,455.0,Pound -False,136,5.0,5.0,5.0,3,55,455.0,Pound -True,12,3.83333,3.82313,3.82313,3,6,455.0,Euro -False,21,4.66667,4.62325,4.62325,3,14,455.0,Euro -True,11,3.33333,3.29097,3.29097,3,14,455.0,Euro -True,68,3.5,3.27448,3.27448,3,14,455.0,Euro -False,14,3.66667,3.66457,3.66457,3,33,455.0,Euro -False,19,4.33333,4.29259,4.29259,3,6,455.0,Euro -False,11,3.83333,3.81333,3.81333,3,29,455.0,Euro -False,583,4.66667,4.60008,4.60008,3,14,455.0,Dollar -True,6310,4.0,3.9635,3.9635,3,55,455.0,Euro -False,8,4.5,4.46837,4.46837,3,27,455.0,Pound -False,202,3.66667,3.72648,3.72648,3,24,455.0,Dollar -False,25,4.16667,4.24068,4.24068,3,62,455.0,Dollar -True,11,4.5,4.50505,4.50505,3,17,455.0,Dollar -True,768,4.16667,4.12076,4.12076,3,22,455.0,Pound -True,50,2.83333,2.39713,2.39713,3,0,455.0,Euro -True,10,4.16667,4.16295,4.16295,3,17,455.0,Euro -False,13,4.16667,4.20303,4.20303,3,15,455.0,Pound -False,31,4.0,3.9745,3.9745,3,27,640.0,Dollar -False,8,4.0,4.1119,4.1119,3,23,700.0,Euro -False,931,4.0,4.10188,4.10188,3,10,455.0,Dollar -False,87,4.66667,4.57402,4.57402,3,86,455.0,Euro -False,27,5.0,5.0,5.0,4,15,455.0,Pound -True,8,4.16667,4.18858,4.18858,3,18,455.0,Dollar -True,31,5.0,5.0,5.0,3,5,455.0,Pound -False,12,4.83333,4.76368,4.76368,3,5,455.0,Pound -False,14,5.0,5.0,5.0,3,35,455.0,Euro -False,17,2.83333,3.24803,3.24803,3,13,455.0,Euro -True,17,2.0,2.03989,2.03989,3,15,455.0,Pound -True,9,3.66667,4.60363,4.60363,3,10,455.0,Dollar -True,36,3.5,3.59184,3.59184,3,74,455.0,Euro -False,6,4.5,4.5161,4.5161,3,19,455.0,Dollar -False,502,5.0,5.0,5.0,3,6,455.0,Euro -True,414,4.83333,4.83271,4.83271,3,12,455.0,Pound -False,4836,3.33333,3.31193,3.31193,3,11,455.0,Euro -True,61,4.5,4.39497,4.39497,5,44,455.0,Euro -False,14,4.0,3.7403,3.7403,3,10,455.0,Pound -True,6,4.16667,4.11038,4.11038,3,26,455.0,Euro -False,103,2.33333,1.80663,1.80663,3,17,455.0,Euro -True,311,4.66667,4.68967,4.68967,3,18,455.0,Pound -True,175,2.33333,1.23494,1.23494,3,52,455.0,Pound -True,130,3.5,3.43944,3.43944,3,8,455.0,Dollar -True,53,3.66667,3.70554,3.70554,3,19,455.0,Euro -False,1120,4.5,4.48914,4.48914,3,22,455.0,Pound -True,33,4.33333,4.26262,4.26262,3,197,455.0,Dollar -False,30,3.83333,3.05618,3.05618,3,70,455.0,Euro -True,11,4.66667,4.6323,4.6323,3,76,455.0,Dollar -False,6,4.5,4.61735,4.61735,3,37,455.0,Pound -False,5,4.66667,4.70082,4.70082,3,66,455.0,Euro -True,39,4.16667,4.36481,4.36481,3,23,455.0,Euro -True,54,3.5,3.03073,3.03073,3,0,455.0,Pound -True,1593,3.66667,3.86322,3.86322,3,28,455.0,Euro -True,20,4.5,4.54859,4.54859,3,17,455.0,Pound -False,340,4.33333,4.47984,4.47984,3,23,455.0,Dollar -True,1130,4.66667,4.63867,4.63867,3,15,455.0,Dollar -True,16,3.66667,3.59718,3.59718,3,8,455.0,Euro -True,12,3.33333,3.2716,3.2716,3,9,455.0,Dollar -True,36,3.83333,3.88299,3.88299,3,23,455.0,Euro -False,32,4.16667,4.07336,4.07336,3,214,3200.0,Pound -True,222,4.33333,4.07862,4.07862,3,12,455.0,Dollar -False,20,3.83333,3.65211,3.65211,3,7,455.0,Pound -False,16,3.33333,3.66176,3.66176,3,8,455.0,Pound -False,33,4.16667,4.38415,4.38415,3,20,455.0,Pound -True,22,3.83333,3.92316,3.92316,3,21,455.0,Dollar -False,15,2.5,2.49425,2.49425,3,9,700.0,Pound -True,18,2.83333,2.83051,2.83051,3,9,455.0,Euro -True,15,4.5,4.28113,4.28113,3,21,455.0,Dollar -True,23,4.16667,4.35721,4.35721,3,13,455.0,Dollar -False,983,4.83333,4.95586,4.95586,3,34,455.0,Dollar -False,5,4.0,3.58018,3.58018,3,5,455.0,Pound -False,22,3.83333,3.82559,3.82559,3,72,455.0,Pound -True,5,4.33333,4.3838,4.3838,3,19,455.0,Euro -True,10,4.5,4.10864,4.10864,3,12,455.0,Euro -False,28,3.33333,3.27991,3.27991,3,9,455.0,Pound -False,1053,2.5,2.09998,2.09998,3,17,455.0,Dollar -True,20,3.66667,3.68769,3.68769,3,35,455.0,Pound -True,7,2.66667,2.66715,2.66715,3,15,455.0,Pound -True,21,3.83333,3.73446,3.73446,3,12,455.0,Dollar -True,11,4.5,4.53339,4.53339,3,21,455.0,Pound -False,35,5.0,5.0,5.0,3,23,455.0,Dollar -True,7,4.83333,4.83705,4.83705,3,26,455.0,Pound -False,13,4.5,4.52585,4.52585,3,27,455.0,Pound -True,412,4.33333,4.56203,4.56203,3,28,455.0,Euro -True,17,4.33333,4.34025,4.34025,3,0,455.0,Pound -False,93,4.5,4.49961,4.49961,3,29,455.0,Euro -True,557,3.66667,3.2872,3.2872,3,5,455.0,Dollar -True,11,5.0,5.0,5.0,3,116,455.0,Euro -False,10,4.5,4.59459,4.59459,3,8,455.0,Euro -False,4150,4.33333,4.6008,4.6008,3,12,455.0,Pound -False,6,5.0,5.0,5.0,3,20,455.0,Dollar -False,118,4.83333,4.93331,4.93331,3,17,455.0,Pound -True,31,3.83333,3.76258,3.76258,3,22,455.0,Pound -True,80,4.16667,3.92926,3.92926,3,19,455.0,Pound -True,40,5.0,5.0,5.0,3,15,455.0,Pound -False,11,3.66667,3.6576,3.6576,3,22,455.0,Euro -False,544,3.66667,4.36858,4.36858,3,43,455.0,Pound -False,96,4.5,4.28719,4.28719,3,58,455.0,Euro -False,18,4.5,4.4162,4.4162,3,17,455.0,Pound -False,17,4.0,3.99655,3.99655,3,29,455.0,Pound -False,7,1.66667,1.90323,1.90323,3,6,455.0,Euro -True,66,5.0,5.0,5.0,3,31,455.0,Dollar -True,15,2.33333,2.27765,2.27765,3,10,455.0,Pound -True,1816,3.83333,4.28506,4.28506,3,21,455.0,Dollar -True,1150,4.16667,4.26625,4.26625,3,11,455.0,Dollar -False,41,4.83333,4.82398,4.82398,3,7,455.0,Dollar -False,24,4.5,4.50041,4.50041,3,33,455.0,Euro -False,7,4.83333,4.8249,4.8249,3,12,455.0,Pound -False,23,4.33333,3.97397,3.97397,3,57,455.0,Dollar -False,28,4.16667,4.0641,4.0641,3,0,455.0,Euro -True,30,4.0,4.08132,4.08132,3,62,455.0,Dollar -False,13,3.83333,3.60673,3.60673,3,20,455.0,Pound -False,28,3.0,3.08333,3.08333,3,0,455.0,Pound -True,19,3.83333,3.82375,3.82375,3,9,455.0,Euro -True,13,4.16667,4.23214,4.23214,3,19,455.0,Dollar -True,15,5.0,5.0,5.0,3,10,455.0,Euro -True,21,4.83333,4.74666,4.74666,3,12,455.0,Pound -True,6,3.83333,4.19906,4.19906,3,12,455.0,Dollar -True,2556,3.66667,3.9902,3.9902,3,14,455.0,Dollar -False,37,3.5,3.54751,3.54751,3,16,455.0,Dollar -True,1447,2.5,2.06837,2.06837,3,18,455.0,Pound -False,9,2.0,2.09584,2.09584,3,7,455.0,Euro -False,23,4.33333,4.37297,4.37297,3,7,455.0,Euro -True,29,4.5,4.5114,4.5114,3,28,455.0,Euro -False,281,4.83333,4.80665,4.80665,3,80,455.0,Dollar -False,2606,4.0,3.33752,3.33752,3,34,455.0,Dollar -False,7,3.83333,3.70449,3.70449,3,13,455.0,Pound -False,2256,3.5,3.92902,3.92902,3,12,455.0,Dollar -False,28,3.83333,3.83743,3.83743,3,23,455.0,Pound -True,6,4.83333,4.84938,4.84938,3,6,455.0,Euro -False,10,2.33333,2.26772,2.26772,3,6,455.0,Euro -False,48,3.16667,3.38101,3.38101,3,10,455.0,Pound -False,18,4.0,3.92873,3.92873,3,0,455.0,Dollar -True,1223,3.5,3.34757,3.34757,3,17,455.0,Pound -False,16,3.83333,3.87884,3.87884,3,24,455.0,Pound -True,10,3.66667,3.66281,3.66281,3,20,455.0,Euro -True,8,4.83333,4.81719,4.81719,3,16,455.0,Dollar -False,15,4.33333,4.21095,4.21095,3,28,455.0,Pound -False,14,3.33333,3.07094,3.07094,3,18,455.0,Dollar -False,1049,4.5,4.32356,4.32356,3,11,455.0,Euro -False,547,5.0,5.0,5.0,3,12,455.0,Pound -False,81,4.16667,4.17074,4.17074,3,45,455.0,Pound -True,24,2.66667,2.75134,2.75134,3,10,455.0,Dollar -True,6,4.5,4.48511,4.48511,3,56,455.0,Dollar -False,29,3.5,3.10651,3.10651,3,0,455.0,Pound -False,15,3.83333,3.85844,3.85844,3,11,455.0,Euro -False,13,4.33333,4.38507,4.38507,3,8,455.0,Euro -False,24,4.66667,4.66034,4.66034,3,35,455.0,Pound -False,1582,4.0,3.81315,3.81315,3,12,455.0,Pound -False,9,3.33333,3.43178,3.43178,3,11,455.0,Euro -True,382,5.0,5.0,5.0,3,13,455.0,Dollar -False,39,4.0,4.0499,4.0499,3,24,455.0,Pound -False,10,4.16667,4.2052,4.2052,3,6,455.0,Pound -True,1007,2.66667,2.10952,2.10952,3,40,455.0,Euro -True,6,3.33333,3.21133,3.21133,3,8,455.0,Euro -False,30,4.0,3.66165,3.66165,3,0,455.0,Dollar -False,28,3.5,3.51522,3.51522,3,34,455.0,Pound -False,963,4.5,4.34025,4.34025,3,5,455.0,Euro -False,12,4.83333,4.82719,4.82719,3,13,455.0,Dollar -True,10,4.33333,4.31779,4.31779,3,7,455.0,Euro -True,63,5.0,5.0,5.0,3,5,455.0,Pound -False,12,3.83333,3.82606,3.82606,3,5,455.0,Dollar -False,25,3.16667,2.84437,2.84437,3,24,455.0,Dollar -True,35,4.16667,4.1879,4.1879,3,42,455.0,Dollar -False,15,3.66667,3.72142,3.72142,3,0,455.0,Euro -True,3,5.0,5.0,5.0,3,34,455.0,Euro -False,9,5.0,5.0,5.0,3,8,455.0,Dollar -True,882,3.0,2.65222,2.65222,3,11,455.0,Dollar -False,3042,4.83333,4.91006,4.91006,3,25,455.0,Pound -True,4,4.33333,3.81115,3.81115,3,17,455.0,Pound -True,6183,3.5,3.48836,3.48836,3,27,455.0,Dollar -True,23,1.66667,1.63001,1.63001,3,13,455.0,Euro -True,3,3.5,3.08148,3.08148,3,16,455.0,Pound -True,11,3.5,3.50986,3.50986,3,26,455.0,Pound -False,5,4.66667,4.63377,4.63377,3,8,455.0,Dollar -True,13,3.0,2.89183,2.89183,3,37,455.0,Pound -False,7,5.0,5.0,5.0,3,12,455.0,Euro -False,13,4.16667,4.2615,4.2615,3,7,455.0,Pound -False,5,3.5,3.72397,3.72397,3,9,455.0,Dollar -False,30,4.83333,4.92803,4.92803,3,12,455.0,Pound -False,240,4.66667,4.66965,4.66965,3,5,455.0,Pound -False,964,3.5,3.4002,3.4002,3,35,455.0,Euro -True,780,3.5,3.49241,3.49241,3,11,455.0,Pound -False,501,3.83333,2.59828,2.59828,3,17,455.0,Pound -False,22,4.5,4.09046,4.09046,3,12,455.0,Euro -False,622,3.66667,3.55651,3.55651,3,78,455.0,Dollar -True,29,4.0,3.87725,3.87725,3,16,455.0,Pound -False,724,3.0,1.93635,1.93635,3,38,455.0,Euro -False,786,4.66667,4.64235,4.64235,3,23,455.0,Dollar -False,18,4.83333,4.8104,4.8104,3,15,455.0,Dollar -False,190,4.0,3.93788,3.93788,3,37,455.0,Euro -True,8,5.0,5.0,5.0,3,49,455.0,Dollar -False,862,4.5,4.40372,4.40372,3,7,455.0,Pound -True,10,4.16667,4.03799,4.03799,3,21,455.0,Dollar -True,22,4.33333,4.27632,4.27632,3,10,455.0,Pound -True,14,3.66667,3.50224,3.50224,3,13,455.0,Pound -True,151,4.83333,4.82906,4.82906,3,16,455.0,Pound -True,14,4.33333,4.41675,4.41675,3,12,455.0,Dollar -True,1143,2.83333,3.3039,3.3039,3,22,455.0,Dollar -True,10,4.83333,4.86237,4.86237,3,25,455.0,Euro -True,21,3.83333,3.56705,3.56705,3,5,455.0,Pound -True,11,1.0,1.0,1.0,3,20,1200.0,Pound -True,16,3.66667,3.2978,3.2978,3,9,455.0,Euro -True,6,3.83333,3.96168,3.96168,3,6,455.0,Pound -False,6,5.0,5.0,5.0,3,25,455.0,Pound -False,30,3.66667,3.66316,3.66316,3,0,455.0,Pound -False,9,4.33333,3.96468,3.96468,3,5,455.0,Dollar -True,7,4.66667,4.51567,4.51567,3,6,455.0,Pound -False,7,4.0,4.1764,4.1764,3,70,455.0,Pound -False,10,2.66667,2.85141,2.85141,3,8,455.0,Pound -False,16,5.0,5.0,5.0,4,13,455.0,Dollar -False,162,2.0,1.82965,1.82965,3,11,455.0,Euro -True,11,4.0,3.93085,3.93085,3,8,455.0,Euro -False,9,4.33333,4.37592,4.37592,3,10,455.0,Dollar -True,14,4.16667,4.21957,4.21957,3,8,455.0,Dollar -False,4,4.16667,4.19849,4.19849,3,9,455.0,Euro -False,101,4.66667,4.64329,4.64329,3,9,455.0,Euro -True,371,4.83333,4.86128,4.86128,3,19,455.0,Euro -True,1780,3.83333,3.42176,3.42176,3,23,455.0,Dollar -False,5,4.16667,4.28804,4.28804,3,13,455.0,Dollar -True,3,5.0,5.0,5.0,3,20,455.0,Pound -True,6,4.83333,4.81654,4.81654,3,25,455.0,Euro -True,13,4.5,4.46144,4.46144,3,14,455.0,Pound -True,9,4.83333,4.81737,4.81737,3,26,455.0,Euro -True,3289,2.66667,2.58002,2.58002,3,18,455.0,Pound -False,550,4.0,4.2496,4.2496,3,6,455.0,Dollar -True,96,3.33333,2.87283,2.87283,3,0,455.0,Euro -False,24,4.83333,4.6877,4.6877,3,25,455.0,Euro -True,9,4.66667,4.63755,4.63755,3,7,455.0,Euro -True,74,4.5,4.52676,4.52676,3,46,960.0,Euro -False,44,4.0,4.08035,4.08035,3,13,455.0,Pound -True,43,3.5,3.58698,3.58698,3,11,455.0,Dollar -True,250,4.33333,4.34874,4.34874,3,17,455.0,Pound -False,372,4.66667,4.73505,4.73505,3,44,455.0,Dollar -True,20,4.5,4.31763,4.31763,3,27,455.0,Euro -False,18,4.0,3.90774,3.90774,3,13,455.0,Pound -False,12,4.16667,4.16332,4.16332,3,18,455.0,Dollar -False,90,4.83333,4.89238,4.89238,3,31,455.0,Euro -False,16,4.33333,4.07945,4.07945,3,54,455.0,Pound -True,10,4.5,4.54052,4.54052,3,10,455.0,Dollar -False,32,4.0,4.22017,4.22017,3,18,455.0,Pound -True,899,3.16667,2.94206,2.94206,3,13,455.0,Dollar -False,12,2.16667,2.41886,2.41886,3,12,455.0,Pound -False,12,2.66667,2.91897,2.91897,3,12,455.0,Pound -False,29,4.16667,4.17866,4.17866,3,30,455.0,Pound -True,28,4.83333,4.87521,4.87521,3,42,455.0,Pound -True,18,4.83333,4.82995,4.82995,3,11,455.0,Pound -False,21,3.83333,3.48249,3.48249,3,10,455.0,Dollar -True,26,3.83333,4.61748,4.61748,3,17,455.0,Dollar -True,20,4.16667,4.5282,4.5282,3,25,455.0,Euro -False,30,4.5,4.33421,4.33421,3,69,455.0,Euro -False,27,4.16667,4.14601,4.14601,3,6,455.0,Euro -True,15,3.16667,3.673,3.673,3,0,455.0,Pound -True,16,4.33333,4.22042,4.22042,3,59,455.0,Pound -True,60,5.0,5.0,5.0,3,18,455.0,Dollar -True,11,4.33333,4.60479,4.60479,3,5,455.0,Pound -True,116,4.66667,4.63019,4.63019,3,46,455.0,Euro -False,14,3.66667,4.67611,4.67611,3,10,455.0,Dollar -False,275,5.0,5.0,5.0,3,7,455.0,Dollar -False,13,4.5,4.56275,4.56275,3,17,455.0,Pound -False,19,4.33333,4.49935,4.49935,3,12,455.0,Dollar -False,1129,3.5,3.4352,3.4352,3,35,455.0,Pound -True,9,2.16667,2.16014,2.16014,3,26,455.0,Euro -True,1017,4.16667,3.88844,3.88844,3,5,455.0,Euro -True,1716,3.66667,3.52632,3.52632,3,7,455.0,Euro -True,14,5.0,5.0,5.0,3,5,455.0,Pound -True,110481,4.42734,4.43113,4.43113,20613,97,455.0,Dollar -True,65759,4.54934,4.53125,4.53125,20538,37,455.0,Pound -False,35528,3.82857,3.86513,3.86513,15719,123,455.0,Pound -False,42080,3.61321,3.76274,3.76274,12109,87,455.0,Euro -True,40145,4.43291,4.4312,4.4312,8476,71,455.0,Pound -False,29703,4.5,4.50282,4.50282,4201,27,455.0,Dollar -True,13898,1.65,1.82614,1.82614,4048,22,455.0,Pound -False,15715,4.39457,4.40441,4.40441,3566,86,481.0,Pound -False,24677,4.42126,4.35514,4.35514,3158,32,455.0,Euro -False,14864,4.22061,4.12986,4.12986,2896,45,488.0,Dollar -True,17713,4.39583,4.38228,4.38228,2488,636,468.0,Pound -True,16131,4.40273,4.35318,4.35318,2430,72,455.0,Dollar -True,19323,4.41798,4.36966,4.36966,2411,131,455.0,Euro -True,20372,4.49686,4.46504,4.46504,2399,123,455.0,Pound -False,49882,4.54327,4.53819,4.53819,2120,74,455.0,Pound -False,13922,4.50966,4.53386,4.53386,2114,30,455.0,Dollar -False,9292,4.38,4.33453,4.33453,2059,89,455.0,Euro -True,19607,4.51389,4.45429,4.45429,1793,160,455.0,Dollar -True,33093,4.37048,4.322,4.322,1761,167,455.0,Pound -True,6616,4.27425,4.27192,4.27192,1534,58,552.0,Pound -False,5568,4.72453,4.75703,4.75703,1452,43,455.0,Euro -False,6424,3.65,3.77331,3.77331,1404,32,455.0,Pound -False,5574,4.06478,4.00721,4.00721,1259,84,481.0,Euro -False,15469,4.45192,4.43139,4.43139,1249,115,481.0,Pound -True,4649,4.48815,4.53793,4.53793,1249,22,455.0,Dollar -True,5288,4.36042,4.35591,4.35591,1233,47,494.0,Dollar -False,5826,4.52632,4.5449,4.5449,1224,63,455.0,Dollar -False,59852,4.42397,4.38314,4.38314,1056,124,455.0,Euro -False,3317,4.48815,4.4913,4.4913,1029,70,468.0,Pound -True,4100,4.50649,4.6036,4.6036,953,20,455.0,Euro -False,6783,4.03226,4.00602,4.00602,843,34,455.0,Euro -False,3128,4.47391,4.47948,4.47948,816,80,455.0,Euro -True,7085,4.3022,4.32282,4.32282,807,63,455.0,Euro -True,3273,4.27647,4.25814,4.25814,800,52,455.0,Dollar -True,3746,3.94937,3.92227,3.92227,754,23,455.0,Euro -False,4228,4.23611,4.20959,4.20959,724,84,455.0,Pound -True,45746,4.31818,4.60499,4.60499,718,109,455.0,Pound -False,3484,4.62319,4.61425,4.61425,687,26,455.0,Pound -True,3430,4.78571,4.81586,4.81586,682,27,455.0,Pound -True,4402,4.34211,4.31121,4.31121,679,59,468.0,Pound -False,2008,4.67816,4.33264,4.33264,655,57,494.0,Dollar -True,3584,4.65753,4.35698,4.35698,650,43,455.0,Dollar -False,18718,4.17647,4.22793,4.22793,643,19,455.0,Pound -True,35573,4.16154,4.15529,4.15529,631,29,455.0,Euro -True,6129,4.55319,4.56345,4.56345,614,326,455.0,Euro -False,3531,4.64651,4.65541,4.65541,617,39,455.0,Dollar -True,3280,4.67857,4.63529,4.63529,603,79,455.0,Pound -True,3569,3.63636,3.89769,3.89769,574,44,455.0,Euro -False,3957,4.44304,4.49689,4.49689,572,75,455.0,Pound -True,30211,4.30426,4.28141,4.28141,567,212,455.0,Pound -False,3772,4.27632,4.24053,4.24053,566,10,488.0,Pound -False,4471,4.26458,4.27802,4.27802,565,58,455.0,Pound -False,3980,4.42105,4.31924,4.31924,564,18,455.0,Euro -False,30595,4.41129,4.35961,4.35961,536,139,455.0,Dollar -True,3163,4.42,4.41648,4.41648,533,34,455.0,Dollar -False,14167,4.704,4.69045,4.69045,526,71,455.0,Pound -True,9135,4.625,4.62063,4.62063,524,44,455.0,Dollar -True,2387,4.23485,4.20616,4.20616,521,58,455.0,Pound -False,4134,4.50917,4.50718,4.50718,498,41,455.0,Pound -True,1833,4.17763,4.00492,4.00492,490,83,455.0,Euro -False,4094,4.33333,4.32925,4.32925,480,63,455.0,Euro -True,4799,4.46154,4.42733,4.42733,470,55,455.0,Euro -False,1732,4.30469,4.27983,4.27983,461,107,455.0,Dollar -True,1826,4.06053,4.07333,4.07333,459,99,455.0,Dollar -True,2300,4.53279,4.52018,4.52018,446,9,468.0,Euro -False,2190,4.12791,3.94628,3.94628,441,84,455.0,Euro -False,29361,4.36207,4.33929,4.33929,431,26,455.0,Pound -False,1812,3.55,3.5182,3.5182,410,20,455.0,Pound -False,5918,4.25806,4.31103,4.31103,410,50,468.0,Pound -True,7315,4.19828,3.99693,3.99693,407,40,455.0,Dollar -False,1914,4.13208,4.10649,4.10649,400,36,488.0,Pound -False,4821,4.4,4.40243,4.40243,396,17,455.0,Euro -True,1369,4.74419,4.31684,4.31684,389,28,455.0,Pound -True,2505,4.37234,4.36677,4.36677,380,61,455.0,Dollar -False,2254,4.76471,4.56611,4.56611,377,68,455.0,Dollar -True,1569,4.15,4.09105,4.09105,360,53,455.0,Pound -True,2705,4.49111,4.48177,4.48177,362,80,455.0,Pound -True,4407,4.125,4.13282,4.13282,355,66,455.0,Euro -False,2391,4.38043,4.21433,4.21433,342,59,455.0,Dollar -True,43459,3.85526,3.93681,3.93681,342,11,455.0,Dollar -True,1095,3.97872,3.907,3.907,339,61,455.0,Dollar -True,1345,4.33333,4.33397,4.33397,338,22,455.0,Euro -False,3255,4.53804,4.55202,4.55202,337,383,455.0,Dollar -True,2941,4.35,4.13787,4.13787,333,18,455.0,Pound -False,2094,4.3,4.27281,4.27281,328,80,455.0,Euro -True,4119,4.30769,4.31858,4.31858,326,48,455.0,Euro -True,7062,4.1,4.12543,4.12543,320,40,455.0,Euro -True,1785,4.59211,4.19776,4.19776,320,25,455.0,Euro -False,1824,3.98148,4.00663,4.00663,316,35,455.0,Euro -False,1212,4.31944,4.31998,4.31998,314,17,455.0,Dollar -False,936,3.25,3.27428,3.27428,302,5,455.0,Dollar -False,2180,3.88235,4.01221,4.01221,300,21,455.0,Euro -False,1303,4.5303,4.52553,4.52553,294,96,455.0,Dollar -True,924,4.55785,4.54318,4.54318,286,24,455.0,Euro -False,1715,4.32979,4.36646,4.36646,286,75,462.0,Pound -True,2107,4.16667,4.25548,4.25548,285,72,455.0,Pound -False,1253,4.60526,4.63054,4.63054,283,25,455.0,Pound -False,883,4.22789,4.18041,4.18041,280,23,455.0,Pound -False,3463,4.25833,4.31675,4.31675,278,117,455.0,Euro -True,3500,4.54762,4.5385,4.5385,273,114,455.0,Pound -True,4755,4.3,4.25813,4.25813,272,19,455.0,Pound -False,3663,4.64516,4.61849,4.61849,272,11,455.0,Pound -False,1884,4.32857,4.3298,4.3298,264,31,455.0,Dollar -False,30853,4.45139,4.53158,4.53158,258,386,455.0,Euro -False,1542,4.05,4.21282,4.21282,256,11,455.0,Euro -True,9549,4.45,4.68147,4.68147,253,55,455.0,Euro -True,1665,4.35,4.34091,4.34091,248,17,455.0,Pound -False,1794,4.42,4.40223,4.40223,244,57,455.0,Euro -True,3108,4.59589,4.58349,4.58349,244,35,481.0,Pound -False,1177,3.55,3.60552,3.60552,239,34,455.0,Euro -True,2728,4.47087,4.45442,4.45442,239,84,455.0,Pound -False,1035,4.61842,4.61998,4.61998,238,25,455.0,Pound -False,1138,4.30189,4.25991,4.25991,238,10,455.0,Dollar -False,803,4.52041,4.49936,4.49936,237,99,2640.0,Dollar -False,1693,4.5,4.52122,4.52122,235,21,455.0,Euro -False,929,4.91667,4.88932,4.88932,226,16,455.0,Euro -False,1173,4.57692,4.56211,4.56211,226,57,455.0,Euro -False,823,4.01087,4.05995,4.05995,225,11,455.0,Pound -False,1498,4.09091,4.02671,4.02671,223,66,455.0,Euro -False,1907,4.35,4.17488,4.17488,224,62,455.0,Pound -True,834,4.7069,4.69332,4.69332,223,16,455.0,Pound -True,12524,4.05,3.92497,3.92497,218,19,455.0,Euro -False,3087,4.75,4.80175,4.80175,218,157,462.0,Euro -True,3058,4.13924,4.09562,4.09562,216,11,455.0,Euro -False,2472,4.14545,4.11537,4.11537,214,101,455.0,Euro -True,9296,4.12667,4.26987,4.26987,214,34,455.0,Dollar -True,2094,4.125,4.10134,4.10134,212,37,455.0,Pound -True,1857,4.28571,4.29575,4.29575,211,34,455.0,Euro -False,14434,4.06667,4.0353,4.0353,210,63,455.0,Dollar -False,12421,3.92439,3.95752,3.95752,205,15,455.0,Pound -True,865,4.37324,4.39247,4.39247,204,22,455.0,Dollar -True,1773,4.75123,4.74566,4.74566,207,38,455.0,Dollar -True,1027,4.36207,4.38866,4.38866,204,188,455.0,Pound -True,873,3.8,3.81352,3.81352,198,69,455.0,Pound -True,4161,4.52174,4.51063,4.51063,196,79,455.0,Euro -True,2005,3.85,3.74424,3.74424,194,33,455.0,Euro -True,3637,4.0,4.1467,4.1467,191,19,455.0,Dollar -False,1846,4.35,4.24817,4.24817,190,37,455.0,Euro -False,763,4.3375,4.30351,4.30351,190,91,2800.0,Euro -True,2243,4.81429,4.78057,4.78057,189,45,455.0,Euro -False,687,4.25,4.24463,4.24463,189,30,455.0,Euro -False,13850,4.19712,4.23888,4.23888,182,22,455.0,Dollar -True,1446,4.17105,4.16394,4.16394,181,22,455.0,Dollar -True,1863,4.19118,4.31876,4.31876,174,7,455.0,Pound -True,819,4.19492,4.21031,4.21031,174,61,455.0,Pound -True,1022,4.22183,4.23413,4.23413,174,74,455.0,Dollar -True,15024,3.25,2.81457,2.81457,169,19,455.0,Pound -True,1747,4.32258,4.31728,4.31728,168,89,455.0,Euro -False,710,4.57692,4.55988,4.55988,167,81,462.0,Euro -True,8348,4.13636,3.77517,3.77517,166,13,455.0,Dollar -False,628,4.46032,4.43197,4.43197,164,22,455.0,Dollar -True,3552,4.58511,4.42448,4.42448,161,61,481.0,Pound -False,11406,3.35,3.91376,3.91376,160,37,455.0,Euro -True,1213,4.45312,4.29078,4.29078,158,61,455.0,Pound -False,15085,4.19048,4.16429,4.16429,156,17,455.0,Pound -True,722,3.25,3.33156,3.33156,155,28,455.0,Pound -False,10405,3.75,4.18712,4.18712,154,14,455.0,Dollar -True,24012,3.45,3.65585,3.65585,153,21,455.0,Dollar -True,4963,3.35,3.02863,3.02863,152,8,455.0,Pound -False,1090,4.22222,4.24088,4.24088,152,36,462.0,Pound -True,1891,4.40625,4.42278,4.42278,151,57,455.0,Euro -True,913,4.52778,4.36507,4.36507,149,14,481.0,Pound -False,1399,4.45,4.5769,4.5769,148,157,455.0,Dollar -True,11693,4.09507,3.96322,3.96322,147,35,455.0,Pound -True,3481,4.2,4.12414,4.12414,145,24,455.0,Dollar -False,7667,4.55,4.63011,4.63011,144,14,455.0,Pound -True,1042,4.59615,4.42865,4.42865,142,64,455.0,Pound -True,314,4.25,4.24644,4.24644,141,10,455.0,Euro -True,412,3.9,4.23943,4.23943,140,13,481.0,Pound -True,1035,3.7,3.59522,3.59522,137,13,455.0,Dollar -True,432,4.07407,4.07779,4.07779,137,41,455.0,Dollar -False,4821,4.15789,4.27567,4.27567,137,14,455.0,Euro -False,4710,4.45,4.45853,4.45853,136,37,455.0,Pound -True,2278,3.8,3.84403,3.84403,136,20,455.0,Pound -False,1124,4.5,4.11612,4.11612,135,57,455.0,Dollar -False,1038,4.35,4.35426,4.35426,135,56,455.0,Dollar -True,478,4.08333,4.05957,4.05957,134,13,455.0,Dollar -True,2019,4.6068,4.59027,4.59027,135,186,455.0,Euro -True,2848,3.8,3.80322,3.80322,133,51,462.0,Euro -False,2533,3.9,4.14524,4.14524,131,8,455.0,Dollar -False,2259,4.19767,4.09036,4.09036,130,7,455.0,Euro -False,3393,4.0,3.94355,3.94355,130,12,455.0,Pound -True,586,3.85,3.94934,3.94934,126,75,455.0,Euro -False,2598,4.50649,4.49902,4.49902,125,304,455.0,Euro -False,21733,3.7,3.76764,3.76764,122,22,455.0,Dollar -True,693,4.45455,4.4865,4.4865,121,32,455.0,Euro -True,1811,4.59722,4.58466,4.58466,121,18,455.0,Pound -False,516,4.35,4.30575,4.30575,119,15,455.0,Dollar -False,661,4.41176,4.1488,4.1488,119,11,455.0,Dollar -False,1126,4.5,4.20616,4.20616,118,84,462.0,Euro -True,1787,4.46154,4.47227,4.47227,117,13,455.0,Dollar -True,696,4.0,4.06362,4.06362,117,16,455.0,Pound -True,2028,4.15625,3.78534,3.78534,116,95,455.0,Dollar -False,5622,4.08333,3.9461,3.9461,114,16,455.0,Euro -True,11707,4.30909,4.27291,4.27291,117,13,455.0,Pound -True,345,4.55,4.56172,4.56172,113,5,700.0,Euro -True,654,4.3,4.24538,4.24538,113,27,3200.0,Euro -False,14081,3.91667,3.71626,3.71626,116,43,455.0,Dollar -True,14308,3.86111,3.88534,3.88534,111,9,455.0,Pound -False,2230,4.04268,3.97131,3.97131,109,13,455.0,Dollar -True,443,4.45556,4.45862,4.45862,111,59,455.0,Euro -True,817,4.22727,4.18681,4.18681,108,36,455.0,Euro -False,4804,3.26923,3.27226,3.27226,109,41,455.0,Euro -True,3466,4.47917,4.43334,4.43334,108,43,455.0,Dollar -True,576,3.7,3.86213,3.86213,106,37,455.0,Dollar -False,1040,3.97059,3.87628,3.87628,105,59,468.0,Euro -False,727,4.15,4.14377,4.14377,105,71,455.0,Euro -True,12100,4.05319,4.17912,4.17912,107,15,455.0,Pound -True,3998,4.45,4.45524,4.45524,105,76,455.0,Euro -False,534,4.66,4.65381,4.65381,105,15,455.0,Dollar -False,5015,4.5,4.43276,4.43276,104,12,455.0,Pound -False,8817,4.15,4.17218,4.17218,103,37,455.0,Dollar -False,22867,4.30556,4.40903,4.40903,102,27,455.0,Dollar -True,450,4.9,4.73799,4.73799,102,27,455.0,Euro -False,4891,4.5,4.55359,4.55359,101,16,455.0,Pound -False,9200,4.2,4.30874,4.30874,100,24,455.0,Pound -True,11629,3.95,3.66546,3.66546,98,51,455.0,Dollar -True,433,4.6,4.58032,4.58032,99,59,455.0,Dollar -True,9131,4.5,4.42415,4.42415,98,22,455.0,Euro -False,9571,4.14189,4.21405,4.21405,96,22,455.0,Dollar -False,10446,4.35,4.44463,4.44463,95,25,455.0,Pound -False,3189,4.46,4.2818,4.2818,95,54,455.0,Euro -True,1406,4.55,4.49741,4.49741,94,107,455.0,Dollar -False,19990,4.25926,4.46681,4.46681,93,149,455.0,Pound -True,4101,3.65,3.42014,3.42014,91,46,455.0,Dollar -True,514,4.4,4.25999,4.25999,91,71,455.0,Euro -True,12239,4.2234,4.2521,4.2521,91,8,455.0,Euro -False,4965,4.14286,4.03156,4.03156,90,87,455.0,Pound -False,274,4.37879,4.47231,4.47231,90,14,455.0,Dollar -False,4171,3.71429,3.58625,3.58625,90,6,455.0,Pound -False,284,4.3,4.24719,4.24719,90,12,455.0,Pound -False,414,3.85,3.63176,3.63176,90,69,455.0,Euro -False,321,4.15,4.16976,4.16976,88,12,455.0,Dollar -True,362,4.35,4.33408,4.33408,87,10,455.0,Euro -True,17636,4.31667,4.33301,4.33301,87,65,455.0,Pound -False,5991,4.10345,3.98217,3.98217,88,35,455.0,Dollar -True,383,2.85,2.79828,2.79828,87,7,455.0,Pound -False,12408,4.27778,4.23703,4.23703,87,81,455.0,Euro -True,3507,4.34783,4.30168,4.30168,85,125,455.0,Euro -True,2802,4.7,4.70635,4.70635,85,29,455.0,Euro -False,3199,4.25,4.26598,4.26598,84,40,455.0,Euro -False,455,4.36842,4.35401,4.35401,84,20,455.0,Dollar -True,1562,4.15,4.1356,4.1356,84,12,455.0,Dollar -False,612,4.0,3.89239,3.89239,84,33,455.0,Pound -False,2225,4.1,4.07347,4.07347,84,57,455.0,Euro -False,1563,4.33951,4.15426,4.15426,84,81,455.0,Dollar -False,24579,3.88889,4.05945,4.05945,82,129,455.0,Dollar -False,316,4.75,4.4382,4.4382,82,14,455.0,Euro -False,7665,4.6087,4.57441,4.57441,81,20,2400.0,Pound -False,3435,3.95,4.19819,4.19819,80,9,455.0,Dollar -True,553,3.45,3.37903,3.37903,79,19,455.0,Dollar -True,231,4.59375,4.55493,4.55493,79,56,3200.0,Pound -False,986,4.35,4.25724,4.25724,78,121,455.0,Euro -True,250,4.38333,4.38467,4.38467,77,25,3200.0,Dollar -True,1045,4.36842,4.15839,4.15839,77,61,455.0,Pound -True,3007,4.5,4.53533,4.53533,78,23,2400.0,Euro -False,15013,4.20833,4.13313,4.13313,76,10,455.0,Euro -False,4007,4.1,4.13747,4.13747,76,5,455.0,Dollar -False,205,3.6,3.38353,3.38353,75,14,455.0,Dollar -True,385,4.25,4.15094,4.15094,76,75,455.0,Euro -False,707,4.46429,4.33136,4.33136,73,60,455.0,Dollar -False,756,4.2,4.12625,4.12625,73,12,455.0,Euro -True,1537,4.1,4.1218,4.1218,73,48,455.0,Euro -False,328,3.91667,4.01168,4.01168,72,25,455.0,Dollar -False,626,4.05,3.98217,3.98217,72,57,455.0,Euro -True,248,4.175,4.16587,4.16587,71,75,455.0,Pound -False,445,4.15,4.15774,4.15774,71,40,455.0,Pound -False,3189,4.25,4.181,4.181,69,56,455.0,Euro -True,436,3.75,3.64797,3.64797,69,21,455.0,Pound -True,4817,4.55,4.42448,4.42448,69,122,455.0,Dollar -False,477,4.1,4.03158,4.03158,69,184,455.0,Dollar -True,264,4.17308,4.1798,4.1798,68,24,455.0,Euro -True,322,4.36,4.29338,4.29338,69,27,455.0,Euro -True,1663,4.85,4.87217,4.87217,67,23,455.0,Dollar -False,2148,4.75,4.73937,4.73937,67,9,455.0,Pound -True,3201,4.7,4.62845,4.62845,67,19,1600.0,Pound -True,6901,4.06818,4.07215,4.07215,67,156,455.0,Pound -True,12347,3.69355,3.76065,3.76065,66,24,455.0,Dollar -False,9062,3.8,3.75038,3.75038,66,32,455.0,Euro -True,812,4.55,4.49319,4.49319,66,75,455.0,Dollar -True,4056,3.6,3.47859,3.47859,66,28,455.0,Euro -True,2226,4.13636,3.89924,3.89924,66,87,455.0,Euro -False,573,4.3,4.27605,4.27605,66,59,455.0,Euro -True,2311,4.0,4.39354,4.39354,65,12,455.0,Euro -True,7952,3.6,3.62654,3.62654,64,89,455.0,Dollar -False,9595,4.1,4.13567,4.13567,64,18,455.0,Pound -True,302,4.4,4.31515,4.31515,64,188,455.0,Dollar -True,6461,4.5,4.43694,4.43694,64,77,455.0,Dollar -False,165,4.41803,4.37791,4.37791,67,16,455.0,Euro -False,1202,2.9,2.90524,2.90524,64,6,455.0,Pound -True,4088,4.45455,4.45021,4.45021,65,167,455.0,Dollar -True,385,3.45,3.3779,3.3779,63,37,455.0,Dollar -False,214,4.6,4.58543,4.58543,63,93,455.0,Dollar -False,1234,4.78571,4.75781,4.75781,63,37,455.0,Pound -False,11595,3.6,3.15926,3.15926,62,34,455.0,Dollar -False,267,3.78125,3.78146,3.78146,62,94,455.0,Euro -False,793,4.57143,4.6451,4.6451,62,9,455.0,Pound -False,1297,4.4,4.41531,4.41531,62,79,455.0,Euro -False,542,3.7,3.45782,3.45782,61,42,455.0,Dollar -False,1583,4.5,4.46906,4.46906,61,87,455.0,Dollar -True,384,4.0,4.00988,4.00988,61,50,455.0,Pound -True,7491,3.65,3.84449,3.84449,60,113,455.0,Euro -True,466,4.5,4.6297,4.6297,60,24,455.0,Euro -False,3638,4.2,4.36432,4.36432,60,34,455.0,Euro -False,543,4.25,3.51424,3.51424,60,37,455.0,Pound -True,17385,3.96667,4.07122,4.07122,59,93,455.0,Dollar -True,2062,3.95,3.96438,3.96438,59,15,455.0,Pound -True,158,3.91667,3.9983,3.9983,59,140,455.0,Euro -False,175,4.03333,4.03576,4.03576,58,30,455.0,Pound -False,11032,4.2,4.17498,4.17498,58,25,455.0,Euro -False,225,3.95,3.86408,3.86408,58,43,455.0,Dollar -False,2264,4.5,4.46594,4.46594,58,45,455.0,Pound -False,204,4.5,4.48496,4.48496,58,107,3200.0,Euro -True,265,4.8,4.84687,4.84687,57,10,455.0,Euro -False,232,4.2,4.20712,4.20712,57,32,455.0,Euro -True,5884,3.8,3.51619,3.51619,57,22,455.0,Pound -False,17365,3.90179,3.72163,3.72163,56,23,455.0,Dollar -False,1286,4.58824,4.63695,4.63695,57,18,455.0,Euro -False,1696,3.1,3.08613,3.08613,56,6,455.0,Euro -False,198,4.65,4.61128,4.61128,56,23,455.0,Dollar -True,2320,4.75,4.73037,4.73037,55,47,455.0,Euro -False,4092,4.35,4.36127,4.36127,55,35,455.0,Pound -False,2351,4.85,4.80998,4.80998,55,26,455.0,Pound -True,114,4.2,4.28152,4.28152,54,57,455.0,Dollar -True,3272,4.7,4.7584,4.7584,54,15,455.0,Dollar -False,12417,3.45,3.3725,3.3725,54,38,455.0,Pound -True,6203,3.65,3.6926,3.6926,54,68,455.0,Dollar -True,1354,4.3,4.34568,4.34568,54,115,455.0,Dollar -True,4431,4.31132,4.39086,4.39086,53,14,455.0,Dollar -True,2089,2.8,3.03441,3.03441,52,51,455.0,Euro -True,2014,4.05,4.1023,4.1023,49,35,455.0,Dollar -False,197,4.05,3.96949,3.96949,49,10,455.0,Pound -False,646,4.4,3.94977,3.94977,49,10,455.0,Euro -False,286,3.95,4.05226,4.05226,49,48,481.0,Pound -False,4410,4.05,4.23699,4.23699,49,8,455.0,Dollar -True,3285,3.4,3.01271,3.01271,49,66,455.0,Pound -False,2112,4.15,4.09779,4.09779,48,16,455.0,Euro -True,3908,4.54545,4.49709,4.49709,48,29,455.0,Euro -False,3382,4.45,4.49607,4.49607,48,231,455.0,Pound -True,368,4.5,4.50268,4.50268,48,35,455.0,Pound -True,2926,4.05,3.77282,3.77282,48,29,455.0,Pound -True,191,3.75,3.73573,3.73573,49,18,455.0,Euro -False,4218,3.40625,3.10458,3.10458,47,15,455.0,Dollar -True,254,4.09375,4.10873,4.10873,47,54,455.0,Euro -False,415,4.5,4.55227,4.55227,47,49,468.0,Euro -False,240,3.35,3.33348,3.33348,47,53,468.0,Euro -False,131,3.65,3.68477,3.68477,47,21,455.0,Pound -True,450,4.05,3.97205,3.97205,47,87,455.0,Euro -False,195,3.7,3.79015,3.79015,47,37,455.0,Euro -True,205,3.65,3.61897,3.61897,46,44,455.0,Euro -True,206,4.43478,4.44964,4.44964,46,49,455.0,Dollar -False,219,4.5,4.49928,4.49928,47,149,455.0,Dollar -False,279,3.65,3.55283,3.55283,46,19,455.0,Pound -False,503,4.15,4.17732,4.17732,46,18,455.0,Pound -True,7445,4.65789,4.47924,4.47924,45,20,800.0,Pound -False,256,4.5,4.49756,4.49756,45,64,455.0,Euro -True,4724,4.4,3.94247,3.94247,45,30,1600.0,Dollar -True,185,3.6,3.74025,3.74025,45,43,455.0,Dollar -True,228,4.5,4.51293,4.51293,44,25,455.0,Dollar -True,2580,3.85,3.85991,3.85991,44,42,455.0,Pound -False,127,4.7,4.67316,4.67316,44,6,455.0,Pound -False,1092,4.3,4.24905,4.24905,44,55,455.0,Euro -True,1510,4.25,4.12287,4.12287,44,44,455.0,Pound -False,145,4.30952,4.39646,4.39646,43,24,455.0,Euro -True,4253,4.09259,4.26677,4.26677,43,11,455.0,Dollar -True,5478,3.7,3.76882,3.76882,43,47,455.0,Euro -False,6226,4.12791,4.33169,4.33169,43,14,455.0,Pound -True,1673,4.45,4.44229,4.44229,43,208,455.0,Dollar -True,1320,4.0,3.98967,3.98967,43,22,455.0,Euro -True,13307,4.33333,4.55999,4.55999,43,27,455.0,Dollar -True,3157,4.0,4.23413,4.23413,42,61,455.0,Euro -False,711,3.0,2.99428,2.99428,42,38,455.0,Pound -False,235,4.5,4.50129,4.50129,42,31,455.0,Euro -True,7902,2.75,2.55273,2.55273,42,10,455.0,Pound -False,5161,4.14286,4.25419,4.25419,42,17,455.0,Dollar -False,181,4.15,4.14321,4.14321,42,38,455.0,Dollar -False,316,3.9878,3.95725,3.95725,41,46,455.0,Pound -True,157,4.5,4.51825,4.51825,41,24,455.0,Euro -True,152,4.7,4.72221,4.72221,41,33,455.0,Euro -False,3249,4.1,4.26983,4.26983,41,30,455.0,Euro -False,813,4.5,4.55107,4.55107,41,78,455.0,Euro -True,199,3.45,3.69749,3.69749,41,46,455.0,Euro -True,4265,4.1625,4.43174,4.43174,40,12,455.0,Dollar -True,2257,4.2,4.40396,4.40396,40,5,455.0,Euro -True,5539,3.4,3.837,3.837,40,9,455.0,Dollar -True,613,3.83333,3.88895,3.88895,40,7,455.0,Dollar -False,282,4.2,4.18845,4.18845,39,21,455.0,Pound -False,1080,4.05,4.03714,4.03714,39,9,455.0,Pound -False,6284,3.85,4.02577,4.02577,39,63,455.0,Pound -False,217,4.05,4.34557,4.34557,39,10,455.0,Pound -False,4918,4.46154,4.6008,4.6008,38,23,455.0,Euro -False,15764,4.13462,3.9689,3.9689,38,31,455.0,Dollar -True,1375,3.75,3.68475,3.68475,38,16,455.0,Euro -False,1565,3.5,3.60717,3.60717,38,13,455.0,Dollar -False,140,3.85,4.08759,4.08759,38,11,455.0,Euro -True,293,3.5,3.53432,3.53432,38,0,455.0,Pound -False,100,4.2,4.1568,4.1568,38,13,455.0,Pound -False,1230,3.75,3.61822,3.61822,38,15,455.0,Dollar -False,277,4.25,4.24395,4.24395,37,23,455.0,Euro -False,14624,4.07692,4.04344,4.04344,37,149,455.0,Pound -False,115,4.34091,4.33922,4.33922,37,191,455.0,Pound -True,291,4.4,4.44695,4.44695,37,25,455.0,Pound -False,6120,4.5,4.63495,4.63495,37,14,455.0,Pound -False,1951,4.26923,4.32686,4.32686,37,101,455.0,Dollar -True,9648,3.93056,3.89366,3.89366,36,189,455.0,Euro -False,10571,4.05,3.7392,3.7392,36,108,455.0,Pound -False,5712,3.2,2.52021,2.52021,36,37,455.0,Dollar -True,112,4.3,4.2937,4.2937,36,27,455.0,Pound -False,211,4.55,4.53824,4.53824,35,10,455.0,Dollar -False,141,4.15,4.13576,4.13576,35,15,700.0,Euro -True,304,4.70833,4.66846,4.66846,35,17,455.0,Euro -True,1581,4.15,4.15537,4.15537,35,10,455.0,Pound -False,194,3.15,3.13,3.13,35,24,455.0,Dollar -True,4167,4.0,3.95876,3.95876,35,13,455.0,Euro -True,76,4.02941,4.02868,4.02868,35,8,455.0,Pound -True,1230,3.5,3.48478,3.48478,35,23,455.0,Euro -True,232,3.8,3.73956,3.73956,34,26,455.0,Euro -False,68,4.51471,4.46611,4.46611,35,13,455.0,Dollar -False,9429,3.75,4.23654,4.23654,34,8,455.0,Euro -True,2341,4.2,4.24397,4.24397,34,12,455.0,Euro -False,1038,4.35,4.34357,4.34357,34,40,455.0,Dollar -False,228,4.17742,4.32688,4.32688,34,17,455.0,Dollar -False,139,4.8125,4.78291,4.78291,34,204,455.0,Pound -False,201,4.63636,4.59111,4.59111,33,54,455.0,Dollar -True,3274,3.95,4.03107,4.03107,33,20,455.0,Pound -False,141,4.15,4.20892,4.20892,33,160,455.0,Pound -False,90,4.72727,4.7451,4.7451,33,17,2000.0,Euro -True,512,3.35,3.24064,3.24064,33,18,455.0,Pound -True,1434,4.0,3.71435,3.71435,33,22,455.0,Dollar -False,2522,3.95,3.37502,3.37502,33,11,455.0,Pound -True,81,4.1875,4.31044,4.31044,33,54,455.0,Pound -False,779,4.5,4.47918,4.47918,33,19,455.0,Dollar -True,96,3.7,3.63834,3.63834,32,18,455.0,Euro -False,460,4.64062,4.62267,4.62267,33,74,455.0,Dollar -False,111,4.5,4.48686,4.48686,32,44,455.0,Pound -True,6539,4.6,4.57851,4.57851,32,40,455.0,Euro -True,186,4.25,4.40165,4.40165,32,20,455.0,Pound -False,6206,3.3,2.94105,2.94105,32,13,455.0,Dollar -True,1106,4.15,4.25644,4.25644,31,176,455.0,Dollar -False,1234,4.6,4.68104,4.68104,31,8,455.0,Dollar -False,140,4.45,4.36852,4.36852,31,30,455.0,Pound -False,98,3.6,3.69489,3.69489,31,13,455.0,Pound -False,137,4.65,4.65261,4.65261,31,43,455.0,Dollar -True,1857,4.15,4.13264,4.13264,31,97,455.0,Dollar -False,1008,4.05,4.03884,4.03884,31,7,455.0,Euro -False,1034,3.05,3.00731,3.00731,31,81,455.0,Pound -True,152,4.55,4.58172,4.58172,30,39,455.0,Euro -False,2191,4.2,4.25773,4.25773,30,13,455.0,Dollar -True,229,4.45,4.45733,4.45733,30,18,455.0,Pound -True,808,4.2,4.22928,4.22928,30,186,455.0,Pound -True,11901,4.5,4.47903,4.47903,30,28,455.0,Euro -False,199,4.3,4.35811,4.35811,29,6,455.0,Pound -False,193,4.2,4.51147,4.51147,29,18,455.0,Dollar -False,805,4.1,4.11325,4.11325,29,6,455.0,Dollar -False,214,2.9,2.90146,2.90146,29,42,455.0,Pound -False,103,4.3,4.2632,4.2632,29,9,455.0,Euro -True,126,4.91667,4.91183,4.91183,29,54,455.0,Euro -False,917,4.4,4.3552,4.3552,29,17,455.0,Dollar -False,105,3.5,3.52897,3.52897,29,23,455.0,Pound -False,839,3.8,3.56021,3.56021,29,29,455.0,Dollar -False,208,4.66667,4.6486,4.6486,30,16,455.0,Dollar -False,1432,4.45,4.48318,4.48318,29,9,455.0,Euro -False,741,4.3,4.16346,4.16346,29,54,455.0,Pound -True,83,4.19231,4.20073,4.20073,29,32,455.0,Euro -True,151,3.75,3.73089,3.73089,29,7,455.0,Euro -False,783,4.27273,4.26049,4.26049,29,20,455.0,Euro -False,1124,3.0,2.95285,2.95285,29,50,455.0,Pound -True,1805,4.35,4.37582,4.37582,29,20,455.0,Euro -True,3715,4.6,4.48814,4.48814,29,31,455.0,Euro -False,531,4.4,4.32857,4.32857,28,181,455.0,Dollar -False,153,4.53333,4.58245,4.58245,28,24,455.0,Euro -True,124,3.95,3.86292,3.86292,28,39,455.0,Pound -True,170,3.6,3.7252,3.7252,29,21,455.0,Euro -True,183,2.75,2.87113,2.87113,28,84,455.0,Euro -False,2245,3.5,3.66269,3.66269,28,8,455.0,Pound -True,100,4.0,4.10388,4.10388,28,45,455.0,Pound -False,3794,3.95,4.2978,4.2978,28,8,455.0,Pound -False,332,3.8,3.69599,3.69599,27,70,455.0,Pound -True,196,4.5,4.42849,4.42849,27,9,455.0,Dollar -True,107,3.7,3.50284,3.50284,27,14,455.0,Euro -False,147,3.0,3.12802,3.12802,27,20,455.0,Pound -True,143,4.65,4.67002,4.67002,27,21,455.0,Euro -False,154,4.1,4.11995,4.11995,27,45,455.0,Euro -True,583,4.3,4.25608,4.25608,27,48,455.0,Dollar -False,177,4.3,4.25613,4.25613,27,25,455.0,Dollar -False,5310,4.42593,4.49075,4.49075,27,34,455.0,Pound -False,904,4.55,4.50829,4.50829,27,12,455.0,Euro -True,146,3.7,3.69983,3.69983,27,6,455.0,Dollar -True,70,3.55,3.71016,3.71016,26,10,455.0,Euro -False,855,4.1,4.134,4.134,26,20,455.0,Dollar -True,1538,4.2,4.22001,4.22001,26,53,455.0,Dollar -True,355,3.85,3.81762,3.81762,25,53,455.0,Dollar -False,358,3.75,3.65977,3.65977,25,30,455.0,Euro -False,104,4.25,4.22009,4.22009,25,26,455.0,Dollar -True,2945,4.05,4.30302,4.30302,25,34,455.0,Euro -False,842,3.8,3.78837,3.78837,25,18,640.0,Pound -False,3335,4.4,4.37921,4.37921,25,15,455.0,Dollar -False,95,4.55882,4.58073,4.58073,25,54,455.0,Pound -True,119,3.9,3.87018,3.87018,25,40,455.0,Pound -False,114,4.25,4.29361,4.29361,25,9,455.0,Euro -True,66,4.10714,4.12359,4.12359,25,24,520.0,Pound -True,2738,3.9,3.8414,3.8414,25,39,455.0,Euro -False,1053,4.5,4.51158,4.51158,25,9,455.0,Pound -True,142,4.7,4.73281,4.73281,24,13,455.0,Pound -True,90,4.3,4.07208,4.07208,24,37,3200.0,Dollar -False,989,4.65,4.63916,4.63916,24,33,455.0,Euro -False,91,3.7,3.61195,3.61195,24,44,455.0,Pound -False,3469,4.5,4.33541,4.33541,24,14,455.0,Euro -False,2017,4.4,4.30397,4.30397,24,22,455.0,Dollar -True,5008,4.05,4.18828,4.18828,24,28,455.0,Dollar -False,3021,3.85,4.25098,4.25098,24,47,455.0,Dollar -False,6671,3.3,3.31548,3.31548,24,8,455.0,Dollar -False,7021,4.2,4.18301,4.18301,24,26,455.0,Pound -False,916,4.15,4.10015,4.10015,25,17,455.0,Pound -True,139,4.6,4.31573,4.31573,24,31,455.0,Dollar -True,306,4.1,3.97105,3.97105,24,43,455.0,Dollar -False,15601,4.53571,4.65874,4.65874,24,72,455.0,Dollar -False,886,4.4,4.37469,4.37469,24,33,700.0,Pound -True,1228,4.35,4.49188,4.49188,24,9,455.0,Euro -False,94,3.65,3.68241,3.68241,23,23,455.0,Pound -False,531,3.95,3.52201,3.52201,23,20,455.0,Euro -False,13560,3.95,4.29407,4.29407,23,184,455.0,Dollar -False,2321,4.05,3.9206,3.9206,23,24,455.0,Pound -True,107,3.95,3.84314,3.84314,23,13,455.0,Pound -False,2086,4.35,4.21587,4.21587,23,38,455.0,Dollar -True,569,4.7,4.66713,4.66713,23,23,455.0,Euro -False,108,4.45652,4.47708,4.47708,24,33,455.0,Dollar -False,13152,4.2,4.00758,4.00758,23,169,455.0,Dollar -True,897,4.3,4.25214,4.25214,23,37,455.0,Pound -True,156,3.55,3.56818,3.56818,23,21,700.0,Dollar -True,88,4.35,4.4525,4.4525,24,86,2240.0,Dollar -False,2962,3.8,3.93606,3.93606,23,39,455.0,Dollar -False,1064,4.25,4.45213,4.45213,23,16,455.0,Pound -True,370,4.75,4.73728,4.73728,23,7,455.0,Dollar -True,8736,4.5,4.59382,4.59382,22,36,455.0,Euro -False,226,4.1,3.92076,3.92076,22,21,455.0,Pound -True,203,3.95,3.80837,3.80837,22,10,455.0,Dollar -False,846,4.45,4.44945,4.44945,22,159,455.0,Dollar -False,65,4.28571,4.30264,4.30264,22,16,455.0,Dollar -True,109,4.4,4.42223,4.42223,22,16,455.0,Dollar -True,1614,3.35,2.90595,2.90595,22,55,455.0,Euro -False,94,4.55,4.53748,4.53748,22,15,455.0,Dollar -False,827,3.7,3.79008,3.79008,22,5,455.0,Dollar -False,1693,4.1,4.09236,4.09236,22,20,455.0,Dollar -True,123,4.8,4.81165,4.81165,21,33,455.0,Pound -True,174,3.95,3.99477,3.99477,21,14,455.0,Dollar -True,103,4.15,4.14482,4.14482,21,14,455.0,Pound -True,95,3.25,2.98507,2.98507,21,14,455.0,Dollar -True,109,4.3,4.26308,4.26308,21,17,700.0,Dollar -False,281,3.3,3.2239,3.2239,21,7,455.0,Dollar -True,59,4.1,3.8469,3.8469,21,32,455.0,Euro -True,66,5.0,5.0,5.0,21,80,455.0,Dollar -False,2561,3.15,2.42101,2.42101,21,6,455.0,Pound -True,1797,4.1,4.10345,4.10345,21,20,455.0,Pound -False,436,3.55,3.55936,3.55936,21,14,455.0,Pound -True,1400,3.55,3.60673,3.60673,21,10,455.0,Euro -True,1160,3.9,3.53042,3.53042,21,23,455.0,Dollar -False,1091,4.2,4.12418,4.12418,20,14,455.0,Euro -False,7419,4.25,4.20941,4.20941,20,13,455.0,Pound -True,162,4.8,4.81494,4.81494,20,24,455.0,Pound -False,133,4.3,4.23099,4.23099,20,64,455.0,Dollar -True,713,4.40909,4.15802,4.15802,20,10,455.0,Dollar -False,2308,4.3,4.41237,4.41237,20,10,455.0,Pound -True,83,4.45,4.42908,4.42908,20,10,455.0,Dollar -False,337,4.225,4.19485,4.19485,20,46,455.0,Pound -False,143,4.5,4.53546,4.53546,20,49,455.0,Dollar -False,1437,3.55,3.54681,3.54681,20,7,455.0,Dollar -False,344,4.35,4.29564,4.29564,20,15,455.0,Pound -True,3766,3.4,3.36224,3.36224,20,25,455.0,Euro -True,131,4.25,4.23548,4.23548,20,14,455.0,Dollar -False,211,4.15,4.29459,4.29459,20,15,455.0,Euro -False,3069,3.8,3.81849,3.81849,20,26,455.0,Dollar -True,4219,4.35,4.29178,4.29178,20,110,455.0,Euro -True,58,4.65,4.66887,4.66887,20,27,455.0,Euro -False,2298,3.95,4.21007,4.21007,19,27,455.0,Pound -False,378,2.6,2.6643,2.6643,19,19,455.0,Euro -False,1143,3.8,3.80344,3.80344,19,23,455.0,Dollar -True,72,3.85,3.87373,3.87373,19,32,455.0,Euro -True,1117,3.55,3.33799,3.33799,19,20,455.0,Pound -True,138,3.95,3.93106,3.93106,19,29,455.0,Dollar -True,100,4.4,4.39433,4.39433,19,43,455.0,Dollar -False,921,4.05,3.79971,3.79971,19,44,455.0,Pound -True,95,3.05,2.97019,2.97019,19,16,455.0,Euro -False,459,4.05,3.92654,3.92654,19,14,455.0,Euro -True,1340,2.75,2.40058,2.40058,19,6,455.0,Pound -True,1040,3.6,3.6515,3.6515,19,7,455.0,Dollar -False,106,4.84211,4.83012,4.83012,21,9,455.0,Dollar -True,1171,4.4,4.43235,4.43235,19,9,455.0,Pound -True,3967,4.55,4.47713,4.47713,19,29,455.0,Pound -True,3463,4.25,4.55409,4.55409,19,17,455.0,Dollar -False,2198,3.9,4.2574,4.2574,19,19,455.0,Pound -False,87,4.35,4.24288,4.24288,19,27,455.0,Pound -True,161,4.05,4.04984,4.04984,18,57,455.0,Pound -True,1570,3.7,3.58193,3.58193,18,7,455.0,Dollar -True,1163,4.0,4.12369,4.12369,18,12,455.0,Pound -True,102,3.7,3.64052,3.64052,18,187,455.0,Dollar -False,112,4.5,4.51769,4.51769,18,52,455.0,Euro -False,1155,4.35,4.29983,4.29983,18,23,455.0,Euro -True,62,3.9375,3.96854,3.96854,18,25,455.0,Pound -False,264,4.1,4.06642,4.06642,18,30,455.0,Euro -True,107,4.4,4.4473,4.4473,18,21,455.0,Pound -False,66,4.5,4.50266,4.50266,18,13,455.0,Pound -False,65,4.35,4.37227,4.37227,18,50,455.0,Euro -False,1406,3.85,3.95203,3.95203,18,6,455.0,Euro -False,140,4.45,4.48187,4.48187,18,37,455.0,Euro -True,239,3.85,3.61462,3.61462,18,58,455.0,Pound -False,91,4.45,4.40893,4.40893,18,15,455.0,Euro -True,775,4.6,4.67294,4.67294,18,20,455.0,Pound -True,72,4.5,4.47087,4.47087,18,58,455.0,Dollar -False,42,4.5,4.47802,4.47802,18,6,455.0,Euro -False,2603,4.65,4.61138,4.61138,18,13,455.0,Pound -False,69,3.1,2.92784,2.92784,18,40,455.0,Pound -False,60,4.4,4.447,4.447,17,26,455.0,Euro -True,100,4.35,4.36373,4.36373,17,45,455.0,Pound -False,89,4.91176,4.93481,4.93481,17,56,455.0,Dollar -True,53,4.25,4.04838,4.04838,17,22,455.0,Euro -False,1192,4.5,4.29659,4.29659,17,6,455.0,Euro -True,111,4.0,3.99317,3.99317,17,0,455.0,Pound -True,69,4.3,4.25877,4.25877,17,82,455.0,Dollar -True,136,4.55,4.61459,4.61459,17,33,1600.0,Euro -True,2499,2.75,2.77911,2.77911,17,22,455.0,Dollar -True,63,4.31818,4.32078,4.32078,17,68,455.0,Pound -True,484,4.85,4.89629,4.89629,17,20,455.0,Pound -True,53,4.6,4.59535,4.59535,17,12,455.0,Pound -False,123,4.0,4.03811,4.03811,17,12,455.0,Euro -False,86,3.75,3.55751,3.55751,17,17,455.0,Euro -False,1548,3.9,3.8212,3.8212,17,11,455.0,Euro -True,904,4.55882,4.43606,4.43606,17,22,455.0,Euro -True,3196,4.17647,3.97079,3.97079,17,79,455.0,Euro -True,60,3.95,4.0885,4.0885,17,22,455.0,Dollar -False,64,4.15,4.18741,4.18741,16,11,455.0,Euro -False,73,4.2,4.08304,4.08304,16,33,455.0,Pound -False,289,4.25,4.07463,4.07463,16,0,455.0,Dollar -False,55,3.3,3.58596,3.58596,16,26,455.0,Pound -True,42,4.8,4.7821,4.7821,16,40,1760.0,Euro -False,123,3.65,3.65325,3.65325,16,7,455.0,Dollar -False,1562,3.45,3.11397,3.11397,16,5,455.0,Dollar -True,3022,3.7,3.35699,3.35699,16,28,455.0,Euro -False,1879,4.65,4.5282,4.5282,16,23,455.0,Dollar -True,86,3.25,3.19079,3.19079,16,30,455.0,Dollar -False,2691,4.1,4.17146,4.17146,16,29,455.0,Dollar -True,93,4.55,4.45783,4.45783,16,23,455.0,Pound -True,53,3.95,4.00056,4.00056,16,13,455.0,Euro -True,77,2.55,2.55055,2.55055,16,12,455.0,Euro -True,144,3.95,3.81431,3.81431,16,6,455.0,Euro -True,152,3.9,3.94302,3.94302,16,21,455.0,Euro -False,324,3.6,3.58463,3.58463,16,49,455.0,Dollar -True,67,3.2,3.54109,3.54109,16,56,455.0,Dollar -False,135,3.85,3.69424,3.69424,16,21,455.0,Dollar -True,2095,4.23333,4.34763,4.34763,15,22,455.0,Euro -True,1009,4.4,4.4392,4.4392,15,22,455.0,Dollar -False,319,4.5,4.46083,4.46083,15,33,455.0,Euro -False,51,4.76667,4.86583,4.86583,16,10,455.0,Pound -True,40,4.1,4.11345,4.11345,15,8,455.0,Euro -False,110,4.25,4.33729,4.33729,15,30,3200.0,Pound -True,64,4.5,4.51844,4.51844,16,8,455.0,Pound -False,862,4.73333,4.69949,4.69949,15,13,455.0,Dollar -True,200,4.1,4.16814,4.16814,15,7,455.0,Pound -False,38,5.0,5.0,5.0,15,19,455.0,Euro -True,751,4.6,4.41769,4.41769,15,25,455.0,Euro -True,2034,4.5,4.24358,4.24358,15,12,455.0,Pound -True,105,4.53333,4.50303,4.50303,15,35,455.0,Euro -True,2722,3.85,3.66854,3.66854,15,11,455.0,Euro -True,128,4.4,4.37521,4.37521,15,6,455.0,Euro -False,798,4.35,4.33242,4.33242,15,15,455.0,Dollar -True,406,4.7,4.81396,4.81396,15,12,455.0,Pound -False,28,3.9,3.70097,3.70097,15,12,455.0,Pound -False,1554,3.9,3.67265,3.67265,14,159,455.0,Dollar -False,633,3.3,3.16067,3.16067,14,31,455.0,Dollar -False,1091,3.95,4.10285,4.10285,14,16,455.0,Euro -False,49,4.15,3.86632,3.86632,14,27,455.0,Pound -False,1190,4.32143,4.2223,4.2223,14,22,455.0,Dollar -False,1555,4.15,4.00373,4.00373,14,36,455.0,Euro -False,254,3.35,3.42197,3.42197,14,17,455.0,Dollar -False,76,4.05,4.02345,4.02345,14,26,455.0,Euro -False,507,4.10714,4.19139,4.19139,14,71,455.0,Dollar -True,101,3.8,3.92042,3.92042,14,0,455.0,Dollar -False,64,3.95,3.8883,3.8883,14,5,455.0,Euro -True,42,4.4,4.37201,4.37201,14,21,455.0,Dollar -False,1228,3.8,3.97781,3.97781,14,11,455.0,Pound -True,136,4.1,3.9733,3.9733,14,8,455.0,Euro -False,554,3.85,3.54368,3.54368,14,15,455.0,Dollar -True,1606,3.92857,4.17235,4.17235,14,8,455.0,Dollar -False,794,4.71429,4.82193,4.82193,14,36,455.0,Euro -False,757,4.5,4.47939,4.47939,13,25,455.0,Euro -True,91,4.3,4.30099,4.30099,13,18,455.0,Pound -False,63,3.8,3.95878,3.95878,13,17,455.0,Dollar -True,79,4.5,4.43985,4.43985,13,26,455.0,Euro -False,4185,2.5,2.5643,2.5643,13,11,468.0,Dollar -False,1596,4.4,4.48897,4.48897,13,7,455.0,Pound -True,31,3.95,3.77146,3.77146,13,19,455.0,Pound -True,96,4.30769,4.261,4.261,13,44,455.0,Pound -False,1326,3.4,3.82445,3.82445,13,15,455.0,Euro -False,529,3.9,3.08328,3.08328,13,13,455.0,Pound -False,97,4.05,3.96872,3.96872,13,40,455.0,Pound -True,39,4.96154,4.95967,4.95967,14,53,455.0,Euro -True,2709,4.0,4.22253,4.22253,13,13,455.0,Euro -True,3710,2.8,2.82315,2.82315,13,48,455.0,Pound -False,329,3.6,4.00234,4.00234,13,0,455.0,Euro -True,100,3.35,3.62894,3.62894,13,12,455.0,Euro -True,33,4.57692,4.42549,4.42549,13,11,455.0,Pound -True,644,3.75,3.6804,3.6804,13,41,455.0,Euro -False,55,4.0,3.80517,3.80517,13,31,455.0,Pound -False,1206,4.65,4.66365,4.66365,14,101,455.0,Dollar -True,1673,3.9,4.02849,4.02849,13,32,455.0,Pound -False,287,3.75,3.75101,3.75101,13,24,455.0,Dollar -False,2270,4.15,4.27296,4.27296,12,15,455.0,Pound -False,2027,3.65,3.48853,3.48853,12,43,455.0,Euro -True,674,4.0,3.96518,3.96518,12,24,455.0,Pound -True,649,4.25,4.34159,4.34159,12,9,455.0,Dollar -False,55,4.7,4.90564,4.90564,13,25,455.0,Pound -True,4906,3.3,3.43342,3.43342,12,16,455.0,Dollar -False,81,3.65,3.5021,3.5021,12,0,455.0,Euro -True,4598,3.55,3.2483,3.2483,12,12,455.0,Euro -False,41,3.55,3.40093,3.40093,12,5,455.0,Dollar -True,968,4.5,4.31248,4.31248,12,14,455.0,Dollar -False,102,4.1,4.10427,4.10427,12,10,455.0,Euro -False,3937,4.5,4.5507,4.5507,12,39,455.0,Euro -False,125,3.1,3.22334,3.22334,12,12,455.0,Pound -True,85,3.35,3.57988,3.57988,12,7,960.0,Dollar -True,78,4.0,3.87612,3.87612,12,28,455.0,Dollar -True,1534,4.5,4.40096,4.40096,12,17,455.0,Pound -False,79,4.1,4.17584,4.17584,12,20,455.0,Dollar -True,61,4.8,4.78071,4.78071,12,25,455.0,Euro -True,83,4.83333,4.73362,4.73362,12,57,455.0,Pound -True,335,4.5,4.46401,4.46401,12,36,455.0,Euro -True,1051,4.65,4.57956,4.57956,12,17,700.0,Dollar -True,288,4.8,4.85841,4.85841,12,58,455.0,Euro -False,1193,4.8,4.76734,4.76734,12,21,455.0,Dollar -True,1114,4.4,4.28875,4.28875,12,10,455.0,Dollar -False,7492,3.15,3.17404,3.17404,12,13,455.0,Euro -False,52,4.55,4.50324,4.50324,12,72,455.0,Pound -False,68,4.55,4.50917,4.50917,12,36,455.0,Euro -False,45,4.25,4.23634,4.23634,12,58,700.0,Euro -True,65,4.68182,4.67631,4.67631,11,40,455.0,Pound -True,1256,4.05,4.00516,4.00516,11,45,455.0,Dollar -True,889,3.65,4.29435,4.29435,11,11,455.0,Pound -True,3191,3.1,3.03036,3.03036,11,25,455.0,Euro -False,67,4.3,4.35044,4.35044,11,45,455.0,Euro -True,66,4.45,4.40246,4.40246,11,32,455.0,Pound -False,536,4.63636,4.687,4.687,11,55,455.0,Euro -True,147,3.7,3.36074,3.36074,11,0,455.0,Dollar -False,713,3.9,3.1199,3.1199,11,15,455.0,Euro -True,1102,4.1,4.14834,4.14834,11,7,455.0,Dollar -True,43,4.2,3.72775,3.72775,11,26,455.0,Pound -True,29,4.8,4.83676,4.83676,11,15,455.0,Dollar -True,288,3.1,3.29456,3.29456,11,6,455.0,Euro -False,1201,4.05,3.92075,3.92075,11,8,455.0,Dollar -False,30,4.85,4.78124,4.78124,11,22,455.0,Pound -True,40,3.55,3.78524,3.78524,11,12,455.0,Euro -True,45,3.9,3.69393,3.69393,11,14,455.0,Pound -False,72,4.05,4.20499,4.20499,11,5,455.0,Euro -False,2403,3.8,4.00939,4.00939,11,14,455.0,Pound -True,54,4.55,4.55033,4.55033,11,11,700.0,Euro -False,67,4.45,4.31081,4.31081,11,49,455.0,Pound -True,155,4.5,4.4864,4.4864,11,9,455.0,Dollar -True,2025,3.75,3.40589,3.40589,11,30,455.0,Dollar -True,34,3.7,3.66305,3.66305,10,25,455.0,Dollar -True,103,3.9,3.89699,3.89699,10,18,455.0,Dollar -True,115,4.25,4.21256,4.21256,10,19,455.0,Dollar -False,1867,4.4,4.24299,4.24299,10,20,455.0,Pound -True,457,4.35,4.35995,4.35995,10,26,455.0,Pound -False,51,4.55,4.48128,4.48128,10,15,455.0,Dollar -True,94,4.15,4.16397,4.16397,10,89,455.0,Euro -True,37,2.9,3.06509,3.06509,10,39,455.0,Pound -False,21,2.75,2.65927,2.65927,10,10,455.0,Euro -False,42,4.2,4.2225,4.2225,10,18,455.0,Dollar -False,253,4.25,4.19678,4.19678,10,6,455.0,Euro -False,39,4.3,4.2224,4.2224,10,35,455.0,Euro -False,63,3.7,3.73543,3.73543,10,30,1440.0,Euro -True,40,4.9,4.89795,4.89795,10,5,455.0,Dollar -False,578,4.3,4.35898,4.35898,10,15,455.0,Dollar -True,4538,3.7,3.58383,3.58383,10,90,455.0,Euro -True,613,3.25,3.22505,3.22505,10,9,455.0,Dollar -False,40,4.25,4.18428,4.18428,10,5,455.0,Euro -False,46,4.5,4.46382,4.46382,10,13,455.0,Pound -True,40,4.7,4.61548,4.61548,10,42,455.0,Dollar -False,15,3.95,4.23945,4.23945,10,7,455.0,Dollar -True,126,4.35,4.37313,4.37313,10,6,455.0,Euro -True,1443,4.95,4.95822,4.95822,10,74,455.0,Dollar -False,478,4.2,4.20468,4.20468,10,22,455.0,Dollar -False,490,5.0,5.0,5.0,10,16,455.0,Euro -False,28,3.55,3.56205,3.56205,10,38,455.0,Euro -True,1680,2.7,2.98311,2.98311,10,8,455.0,Pound -True,42,4.25,4.34987,4.34987,10,78,455.0,Dollar -True,234,3.85,3.70378,3.70378,10,12,455.0,Pound -False,55,4.6,4.57971,4.57971,10,16,455.0,Euro -False,34,4.0,3.92996,3.92996,10,25,455.0,Euro -True,59,4.55,4.47277,4.47277,10,25,455.0,Pound -True,705,4.38889,4.41094,4.41094,10,29,455.0,Euro -False,1031,4.2,4.19912,4.19912,10,72,455.0,Dollar -False,49,4.55,4.55889,4.55889,10,63,455.0,Euro -False,6684,4.5,4.57451,4.57451,11,20,455.0,Euro -False,26,4.35,4.3899,4.3899,10,32,455.0,Dollar -True,1688,3.6,3.64144,3.64144,10,5,455.0,Dollar -True,1276,4.1,4.02252,4.02252,10,16,455.0,Euro -True,2745,4.55,4.41971,4.41971,10,79,455.0,Dollar -False,22,3.65,3.86828,3.86828,10,12,455.0,Pound -False,704,4.55,4.59596,4.59596,10,17,455.0,Dollar -False,77,4.95,4.95908,4.95908,10,138,455.0,Pound -False,47,4.65,4.56849,4.56849,10,19,455.0,Euro -False,136,4.1,4.09551,4.09551,10,0,455.0,Euro -False,2547,4.35,4.39638,4.39638,10,9,455.0,Pound -False,99,3.8,3.31265,3.31265,10,8,455.0,Dollar -False,108,3.45,3.04126,3.04126,10,25,455.0,Pound -False,1942,4.25,4.16368,4.16368,10,21,455.0,Pound -True,520,4.05556,3.64209,3.64209,9,15,455.0,Euro -False,29,3.77778,3.70258,3.70258,9,53,455.0,Pound -False,59,4.22222,4.15427,4.15427,9,20,455.0,Euro -False,3586,4.55556,4.68987,4.68987,9,70,455.0,Euro -False,1324,3.72222,3.92509,3.92509,9,51,455.0,Dollar -True,41,4.66667,4.60661,4.60661,9,17,700.0,Pound -True,638,4.27778,4.17759,4.17759,9,37,455.0,Pound -True,41,3.88889,3.81859,3.81859,9,20,455.0,Pound -True,45,4.5,4.51916,4.51916,9,41,455.0,Dollar -False,38,4.5,4.5516,4.5516,9,13,455.0,Pound -True,133,4.72222,4.7105,4.7105,9,15,455.0,Euro -False,61,4.27778,4.3052,4.3052,9,17,455.0,Dollar -False,1332,4.38889,4.36821,4.36821,9,34,455.0,Dollar -True,26,4.44444,4.0432,4.0432,9,18,480.0,Pound -True,27,4.22222,3.72,3.72,9,68,455.0,Euro -True,181,4.11111,3.94732,3.94732,9,40,455.0,Dollar -True,283,4.33333,4.15613,4.15613,9,26,455.0,Pound -False,24,4.66667,4.59407,4.59407,9,34,455.0,Dollar -False,36,4.66667,4.66114,4.66114,9,103,1600.0,Dollar -False,42,4.66667,4.83746,4.83746,9,55,455.0,Euro -False,42,4.16667,4.12187,4.12187,9,25,455.0,Pound -False,560,4.38889,4.33392,4.33392,9,12,455.0,Dollar -True,691,3.38889,3.50043,3.50043,9,25,455.0,Pound -False,24,4.0,4.08592,4.08592,9,28,455.0,Pound -False,1545,4.55556,4.78815,4.78815,9,10,455.0,Dollar -True,1001,4.27778,4.44731,4.44731,9,15,455.0,Pound -True,2259,4.27778,4.51077,4.51077,10,35,455.0,Euro -True,55,3.83333,3.76932,3.76932,9,9,455.0,Pound -True,111,3.94444,3.97205,3.97205,9,7,455.0,Pound -True,84,4.5,4.54064,4.54064,9,19,455.0,Dollar -True,37,4.94444,4.88841,4.88841,9,22,455.0,Euro -True,23,3.83333,3.80905,3.80905,9,75,455.0,Euro -True,21,4.33333,3.74258,3.74258,9,31,455.0,Dollar -False,79,4.16667,4.07607,4.07607,9,18,455.0,Euro -False,105,4.72222,4.73874,4.73874,9,10,455.0,Dollar -True,64,3.55556,3.76173,3.76173,9,34,455.0,Dollar -False,708,3.72222,3.12061,3.12061,9,17,455.0,Pound -False,1278,4.66667,4.50591,4.50591,9,9,455.0,Euro -True,973,3.55556,3.60065,3.60065,9,21,455.0,Dollar -False,1123,4.16667,4.1,4.1,9,42,455.0,Dollar -False,1860,4.0,4.22382,4.22382,9,14,455.0,Pound -False,23,4.6875,4.60034,4.60034,8,26,455.0,Pound -False,29,4.25,4.09287,4.09287,8,7,455.0,Pound -False,62,3.6875,3.72792,3.72792,8,36,455.0,Dollar -False,72,4.75,4.78243,4.78243,8,23,455.0,Euro -True,49,4.375,4.2779,4.2779,8,39,455.0,Euro -True,40,3.6875,3.39625,3.39625,8,0,455.0,Euro -True,18,3.9375,3.15562,3.15562,8,8,3200.0,Dollar -True,1371,4.0,3.56034,3.56034,8,36,455.0,Euro -True,15,4.75,4.7961,4.7961,8,10,455.0,Pound -True,1683,4.375,4.73498,4.73498,8,11,455.0,Euro -True,32,4.6875,4.68632,4.68632,8,44,455.0,Pound -False,39,4.625,4.57307,4.57307,8,12,455.0,Pound -True,46,3.5,4.00387,4.00387,8,16,455.0,Euro -False,1156,4.5,4.55888,4.55888,8,105,455.0,Pound -True,761,3.375,3.20247,3.20247,8,5,455.0,Euro -True,41,4.8125,4.9068,4.9068,8,88,3200.0,Euro -False,132,3.9375,3.95966,3.95966,8,36,455.0,Pound -True,12658,4.5,4.45921,4.45921,8,148,455.0,Dollar -True,21,4.75,4.68364,4.68364,8,27,455.0,Pound -True,48,3.75,3.70518,3.70518,8,25,455.0,Dollar -True,92,4.1875,4.3378,4.3378,8,31,455.0,Dollar -False,29,3.875,3.87513,3.87513,8,18,455.0,Euro -True,31,4.625,4.63079,4.63079,8,21,455.0,Pound -True,79,3.8125,3.80555,3.80555,8,0,455.0,Dollar -False,68,4.25,4.30629,4.30629,8,14,455.0,Dollar -False,76,3.75,3.73526,3.73526,8,0,455.0,Pound -True,33,3.625,3.705,3.705,8,21,455.0,Pound -False,154,4.75,4.70156,4.70156,8,68,455.0,Pound -True,844,3.8125,3.38634,3.38634,8,7,455.0,Pound -True,1096,4.75,4.79973,4.79973,8,42,455.0,Pound -False,66,4.0625,4.13294,4.13294,8,14,455.0,Euro -False,55,3.5,3.23204,3.23204,7,6,455.0,Dollar -False,21,4.14286,4.06581,4.06581,7,9,455.0,Dollar -False,36,3.78571,3.62458,3.62458,7,10,640.0,Dollar -False,467,4.21429,4.04282,4.04282,7,101,455.0,Pound -True,426,3.85714,3.94942,3.94942,7,12,455.0,Pound -True,712,4.28571,4.26351,4.26351,7,18,455.0,Dollar -False,90,3.07143,3.03173,3.03173,7,54,455.0,Pound -True,924,4.35714,4.40502,4.40502,7,18,455.0,Dollar -True,16,4.28571,4.26038,4.26038,7,20,455.0,Pound -True,44,4.14286,3.98804,3.98804,7,0,480.0,Pound -True,1199,4.07143,4.05661,4.05661,7,16,455.0,Pound -False,40,4.57143,4.48854,4.48854,7,16,455.0,Pound -True,30,4.35714,4.39593,4.39593,7,95,455.0,Dollar -True,2435,3.42857,3.73034,3.73034,7,12,455.0,Pound -True,19,4.5,4.52734,4.52734,7,19,455.0,Euro -True,20,4.42857,4.41038,4.41038,7,29,455.0,Euro -False,518,4.42857,4.38742,4.38742,7,7,455.0,Euro -False,23,4.5,4.46518,4.46518,7,14,455.0,Euro -False,263,3.78571,3.46736,3.46736,7,40,455.0,Pound -False,28,4.64286,4.6197,4.6197,7,33,455.0,Pound -True,55,3.5,3.69706,3.69706,7,17,455.0,Euro -False,51,4.35714,4.42964,4.42964,7,5,455.0,Euro -False,23,3.92857,4.00477,4.00477,7,12,455.0,Euro -True,64,3.57143,3.41189,3.41189,7,8,455.0,Dollar -True,96,4.14286,4.02359,4.02359,8,72,455.0,Pound -True,48,3.28571,3.39472,3.39472,7,48,455.0,Pound -False,33,2.71429,2.83498,2.83498,7,18,455.0,Dollar -True,38,3.78571,3.59524,3.59524,7,13,455.0,Pound -True,41,3.92857,3.92102,3.92102,7,41,455.0,Pound -False,47,3.57143,3.58486,3.58486,7,19,455.0,Dollar -True,12,4.71429,4.70108,4.70108,7,11,455.0,Dollar -True,29,4.57143,4.5719,4.5719,7,22,455.0,Pound -False,9,5.0,5.0,5.0,7,39,455.0,Euro -True,5160,3.64286,3.68837,3.68837,8,44,455.0,Euro -False,33,2.78571,2.71866,2.71866,7,7,455.0,Pound -False,42,4.57143,4.44758,4.44758,7,25,455.0,Dollar -False,47,5.0,5.0,5.0,7,20,455.0,Euro -False,19,3.64286,3.78009,3.78009,7,40,2960.0,Euro -True,54,4.14286,4.02786,4.02786,7,52,455.0,Euro -False,751,4.14286,4.21432,4.21432,7,15,455.0,Euro -True,527,4.28571,4.00587,4.00587,7,25,455.0,Pound -True,36,4.41667,4.3241,4.3241,6,11,455.0,Dollar -True,21,3.66667,3.63247,3.63247,6,35,455.0,Pound -False,13,4.0,3.87965,3.87965,6,10,455.0,Dollar -True,647,4.08333,4.22253,4.22253,6,20,455.0,Dollar -True,860,2.75,3.34079,3.34079,6,16,455.0,Euro -False,25,3.83333,3.85887,3.85887,6,17,455.0,Dollar -False,338,3.25,2.89046,2.89046,6,72,455.0,Euro -True,212,5.0,5.0,5.0,6,6,455.0,Euro -True,1077,3.5,3.44609,3.44609,6,24,455.0,Euro -False,23,4.33333,4.34897,4.34897,6,50,455.0,Euro -True,27,3.25,3.09291,3.09291,6,0,455.0,Pound -False,302,3.91667,4.33887,4.33887,6,41,455.0,Dollar -True,40,4.33333,4.33067,4.33067,6,19,455.0,Euro -True,14,3.58333,3.27962,3.27962,6,18,455.0,Dollar -False,37,4.0,3.97199,3.97199,6,7,455.0,Pound -True,1032,3.0,3.36697,3.36697,6,35,455.0,Pound -False,838,2.16667,1.35133,1.35133,6,15,455.0,Pound -False,21,5.0,5.0,5.0,6,57,455.0,Pound -False,132,4.41667,4.35287,4.35287,6,11,455.0,Pound -True,26,4.0,3.87322,3.87322,6,10,455.0,Pound -False,987,3.66667,3.667,3.667,6,22,455.0,Euro -False,38,4.16667,4.26129,4.26129,6,23,455.0,Pound -False,443,4.0,4.00746,4.00746,6,13,455.0,Pound -True,232,4.5,4.36499,4.36499,6,68,455.0,Pound -False,22,4.25,4.43013,4.43013,6,29,455.0,Dollar -True,33,4.75,4.78771,4.78771,7,19,455.0,Dollar -True,26,3.5,3.18423,3.18423,6,23,455.0,Dollar -True,43,4.66667,4.69334,4.69334,6,21,455.0,Pound -False,36,5.0,5.0,5.0,6,33,455.0,Pound -True,30,4.5,4.59413,4.59413,6,40,455.0,Dollar -True,667,4.08333,4.05176,4.05176,6,10,455.0,Pound -True,22,4.5,4.47295,4.47295,6,29,455.0,Pound -False,1209,4.33333,4.06257,4.06257,6,48,455.0,Dollar -False,22,4.5,4.53265,4.53265,6,39,455.0,Pound -False,19,3.66667,4.07843,4.07843,6,6,455.0,Euro -True,142,3.58333,3.58243,3.58243,6,32,455.0,Euro -False,22,4.25,4.0547,4.0547,6,11,455.0,Pound -True,89,4.41667,4.27597,4.27597,6,33,455.0,Dollar -False,25,4.83333,4.84979,4.84979,6,11,455.0,Dollar -True,1153,4.08333,3.72411,3.72411,6,17,455.0,Dollar -True,64,3.41667,3.44502,3.44502,6,8,455.0,Pound -False,56,4.08333,4.07598,4.07598,6,11,455.0,Dollar -False,12,3.33333,3.3141,3.3141,6,10,455.0,Euro -False,27,3.41667,3.43195,3.43195,6,14,455.0,Euro -False,37,4.75,4.76191,4.76191,6,15,455.0,Euro -True,1012,4.08333,4.27631,4.27631,6,14,455.0,Euro -False,33,3.91667,3.82744,3.82744,6,19,455.0,Pound -True,752,4.4,4.38282,4.38282,6,19,455.0,Dollar -False,14,4.41667,4.39354,4.39354,6,10,455.0,Pound -True,44,4.5,4.47274,4.47274,6,7,455.0,Dollar -False,141,3.91667,3.69408,3.69408,6,50,455.0,Dollar -True,1016,4.08333,4.26585,4.26585,6,8,455.0,Dollar -True,17,1.91667,1.98663,1.98663,6,9,455.0,Euro -False,28,4.66667,4.57438,4.57438,6,31,455.0,Euro -True,35,3.83333,3.78536,3.78536,6,17,455.0,Pound -True,41,4.0,3.52269,3.52269,6,5,455.0,Pound -True,357,4.0,4.01488,4.01488,6,26,455.0,Pound -False,398,3.33333,3.46884,3.46884,6,11,455.0,Pound -False,8,1.66667,1.77701,1.77701,6,0,455.0,Dollar -True,19,3.58333,3.46121,3.46121,6,5,455.0,Euro -True,36,4.5,4.40726,4.40726,6,43,455.0,Dollar -True,1001,4.1,4.07793,4.07793,5,11,455.0,Pound -False,27,4.2,3.9454,3.9454,5,33,455.0,Euro -True,46,4.7,4.5161,4.5161,5,6,455.0,Euro -True,520,4.3,4.25661,4.25661,6,5,455.0,Dollar -False,40,4.3,4.18657,4.18657,5,29,455.0,Euro -True,43,4.6,4.579,4.579,5,64,455.0,Euro -False,53,3.3,3.16046,3.16046,5,26,455.0,Euro -True,31,3.8,3.78619,3.78619,5,20,455.0,Pound -False,1103,3.7,3.85819,3.85819,5,21,455.0,Euro -False,37,2.3,2.31593,2.31593,5,9,455.0,Dollar -True,33,4.2,4.22303,4.22303,5,75,455.0,Pound -True,40,3.7,3.57644,3.57644,5,18,455.0,Euro -False,26,3.4,3.39275,3.39275,5,10,455.0,Pound -True,36,4.7,4.71174,4.71174,5,12,455.0,Euro -False,14,3.3,3.51445,3.51445,5,7,455.0,Dollar -True,14,4.8,4.79463,4.79463,5,12,455.0,Dollar -True,20,4.8,4.76294,4.76294,5,17,455.0,Pound -False,18,4.6,4.58458,4.58458,5,9,455.0,Pound -False,1431,3.2,3.09166,3.09166,5,6,800.0,Euro -False,27,5.0,5.0,5.0,5,15,455.0,Pound -False,833,3.9,4.06826,4.06826,5,9,455.0,Pound -True,948,3.8,3.70513,3.70513,5,8,455.0,Pound -True,28,3.9,3.90492,3.90492,5,15,455.0,Dollar -False,361,5.0,5.0,5.0,5,49,455.0,Dollar -False,30,4.6,4.6396,4.6396,5,7,455.0,Euro -True,562,3.7,3.66643,3.66643,5,15,455.0,Euro -False,13,3.4,3.36498,3.36498,5,9,455.0,Pound -True,7,4.6,4.60728,4.60728,5,9,455.0,Pound -True,50,4.7,4.58486,4.58486,5,61,481.0,Dollar -True,21,3.8,3.93041,3.93041,5,6,455.0,Pound -False,16,3.2,3.57078,3.57078,5,35,455.0,Euro -True,9,2.0,2.23671,2.23671,5,17,455.0,Dollar -True,1288,4.5,4.60258,4.60258,5,11,455.0,Pound -False,14,4.1,4.07875,4.07875,5,20,455.0,Dollar -True,17,3.7,3.73063,3.73063,5,60,455.0,Pound -False,777,2.9,2.79359,2.79359,5,15,455.0,Dollar -True,33,3.4,3.11149,3.11149,5,39,455.0,Pound -False,33,4.3,4.41463,4.41463,5,19,455.0,Euro -True,1461,3.5,3.13363,3.13363,5,15,455.0,Pound -False,596,3.8,3.79112,3.79112,5,14,468.0,Pound -False,1162,3.3,3.26966,3.26966,5,41,455.0,Pound -True,44,5.0,5.0,5.0,6,27,455.0,Dollar -True,28,4.4,4.33377,4.33377,5,14,455.0,Euro -True,21,4.2,4.21227,4.21227,5,23,455.0,Dollar -False,11,4.8,4.76703,4.76703,5,26,455.0,Pound -True,27,3.5,3.5462,3.5462,5,9,455.0,Euro -False,143,4.8,4.80164,4.80164,5,34,455.0,Euro -False,214,2.6,2.52437,2.52437,5,8,455.0,Dollar -False,41,3.6,3.90727,3.90727,5,32,455.0,Dollar -False,48,4.4,4.83441,4.83441,5,15,455.0,Pound -False,29,4.3,4.28124,4.28124,5,9,455.0,Dollar -True,22,2.8,2.50613,2.50613,6,0,455.0,Euro -True,21,4.7,4.69361,4.69361,5,56,455.0,Pound -False,35,4.8,4.76667,4.76667,5,8,455.0,Pound -True,183,3.8,3.73117,3.73117,5,5,455.0,Euro -False,683,4.6,4.57277,4.57277,5,24,455.0,Dollar -False,1383,3.9,3.78818,3.78818,5,12,455.0,Euro -False,12,4.5,4.55672,4.55672,5,7,455.0,Pound -True,57,4.4,4.33506,4.33506,5,7,455.0,Euro -True,481,4.0,4.05579,4.05579,5,0,455.0,Pound -True,46,3.8,3.84578,3.84578,5,19,455.0,Pound -False,34,2.8,2.99068,2.99068,5,43,455.0,Dollar -False,572,4.6,4.64351,4.64351,5,24,455.0,Dollar -True,13,3.5,3.46527,3.46527,4,8,455.0,Dollar -False,28,3.25,3.20318,3.20318,4,17,455.0,Pound -True,30,4.625,4.63126,4.63126,4,9,455.0,Euro -False,36,3.75,4.49193,4.49193,4,0,455.0,Dollar -False,33,4.125,4.18623,4.18623,4,27,455.0,Dollar -False,26,4.5,4.54461,4.54461,4,18,455.0,Pound -False,31,4.625,4.61985,4.61985,4,10,455.0,Pound -True,1345,4.5,4.50779,4.50779,4,43,455.0,Euro -True,1836,2.875,3.03947,3.03947,4,14,455.0,Euro -False,33,4.0,3.65027,3.65027,4,18,455.0,Pound -True,19,4.125,4.7023,4.7023,4,11,455.0,Dollar -True,18,5.0,5.0,5.0,5,68,455.0,Pound -False,52,3.75,4.02979,4.02979,4,16,455.0,Dollar -False,14,3.5,3.51058,3.51058,4,38,455.0,Dollar -True,16,4.0,3.69633,3.69633,4,26,455.0,Pound -True,15,4.125,3.97428,3.97428,4,24,455.0,Dollar -True,25,4.375,4.39245,4.39245,4,38,455.0,Euro -True,34,4.875,4.96438,4.96438,4,51,455.0,Dollar -True,1024,4.125,4.05162,4.05162,4,53,455.0,Dollar -True,535,4.625,4.52194,4.52194,4,10,455.0,Euro -True,39,4.875,4.90653,4.90653,4,25,455.0,Pound -True,29,3.75,3.50511,3.50511,4,9,455.0,Dollar -True,14,3.5,3.63937,3.63937,4,21,1600.0,Dollar -True,19,4.75,4.73134,4.73134,4,18,455.0,Dollar -True,22,4.25,4.1429,4.1429,4,0,455.0,Pound -True,162,4.75,4.62467,4.62467,4,7,455.0,Pound -True,52,4.625,4.68964,4.68964,4,34,455.0,Dollar -True,515,4.625,4.49893,4.49893,4,8,455.0,Pound -True,286,4.5,4.5,4.5,4,31,455.0,Euro -True,768,4.25,3.8189,3.8189,4,10,455.0,Dollar -True,11,3.625,3.42648,3.42648,4,26,455.0,Dollar -False,21,2.875,2.88382,2.88382,4,13,1440.0,Pound -False,24,3.75,3.74866,3.74866,4,37,455.0,Euro -True,24,4.5,4.34419,4.34419,4,14,455.0,Euro -False,16,4.25,3.97911,3.97911,4,23,455.0,Pound -False,22,4.25,4.22481,4.22481,4,11,455.0,Euro -True,11,4.625,4.65248,4.65248,4,12,455.0,Euro -True,1223,4.125,3.99069,3.99069,4,16,455.0,Euro -False,37,3.875,3.78003,3.78003,4,22,455.0,Pound -True,737,3.75,4.56355,4.56355,4,20,455.0,Pound -True,38,4.5,4.28196,4.28196,4,14,455.0,Euro -True,1195,3.625,3.81959,3.81959,4,0,455.0,Euro -False,8,4.375,4.49684,4.49684,4,21,455.0,Pound -True,440,3.125,3.15152,3.15152,4,16,455.0,Euro -True,633,4.375,4.29127,4.29127,4,23,455.0,Pound -True,890,3.75,3.82202,3.82202,4,15,455.0,Dollar -False,404,2.375,2.59974,2.59974,4,18,455.0,Dollar -False,19,4.875,4.85894,4.85894,4,21,455.0,Euro -True,679,3.25,3.25575,3.25575,4,9,455.0,Pound -False,137,4.875,4.85763,4.85763,4,178,455.0,Dollar -True,64,3.375,3.34921,3.34921,4,0,455.0,Euro -True,14,4.0,4.03329,4.03329,4,15,455.0,Pound -False,12,4.0,4.06818,4.06818,4,17,455.0,Dollar -False,1469,3.875,4.3106,4.3106,4,8,455.0,Dollar -True,32,4.75,4.88246,4.88246,4,5,455.0,Euro -True,6,4.875,4.86226,4.86226,4,22,455.0,Euro -True,29,4.5,4.41097,4.41097,4,13,455.0,Pound -False,1511,3.875,4.35145,4.35145,4,26,455.0,Dollar -True,1027,4.25,4.60909,4.60909,4,40,455.0,Dollar -True,56,4.375,4.23424,4.23424,4,5,455.0,Pound -True,1006,4.25,4.1282,4.1282,4,41,455.0,Pound -False,2001,2.875,2.57497,2.57497,4,17,455.0,Euro -False,291,4.125,3.81964,3.81964,4,25,455.0,Dollar -True,84,4.0,3.86864,3.86864,3,21,455.0,Euro -False,963,3.0,2.78019,2.78019,3,27,455.0,Dollar -True,14,3.83333,3.9636,3.9636,3,14,455.0,Dollar -True,4,3.5,3.31256,3.31256,3,5,455.0,Euro -False,209,3.66667,3.64305,3.64305,3,15,455.0,Euro -True,4,5.0,5.0,5.0,3,38,455.0,Dollar -False,1999,3.66667,3.88288,3.88288,3,40,455.0,Euro -False,9,4.0,4.24564,4.24564,3,12,455.0,Pound -False,28,5.0,5.0,5.0,3,25,455.0,Pound -True,1034,3.66667,4.28588,4.28588,3,15,455.0,Pound -False,20,4.83333,4.89381,4.89381,3,0,455.0,Pound -True,25,4.83333,4.77821,4.77821,4,14,455.0,Euro -True,181,4.5,4.47193,4.47193,3,30,455.0,Dollar -False,12,3.5,3.07993,3.07993,3,10,455.0,Dollar -True,11,4.33333,4.39213,4.39213,3,11,455.0,Dollar -True,389,4.0,3.92857,3.92857,3,12,455.0,Pound -True,1933,4.83333,4.9,4.9,3,11,455.0,Euro -False,1075,3.66667,4.01932,4.01932,3,5,455.0,Dollar -False,22,4.66667,4.87703,4.87703,3,33,455.0,Pound -True,11,4.83333,4.8239,4.8239,3,6,455.0,Euro -True,12,4.16667,3.42499,3.42499,3,8,455.0,Pound -True,32,4.0,4.12161,4.12161,3,26,455.0,Euro -True,13,3.83333,3.85393,3.85393,3,14,455.0,Dollar -False,123,5.0,5.0,5.0,3,13,455.0,Euro -True,18,3.33333,3.42683,3.42683,3,18,455.0,Euro -False,3564,4.0,3.85569,3.85569,3,36,455.0,Pound -False,11,4.33333,4.37842,4.37842,3,9,455.0,Euro -False,665,3.0,3.75496,3.75496,3,9,455.0,Dollar -False,87,4.33333,3.93812,3.93812,3,0,455.0,Pound -False,780,3.0,3.93226,3.93226,3,16,455.0,Pound -True,15,3.66667,3.64417,3.64417,3,16,455.0,Dollar -False,43,4.33333,4.1821,4.1821,3,5,455.0,Pound -True,10,4.0,3.79547,3.79547,3,9,455.0,Euro -False,12,3.66667,3.47227,3.47227,3,38,455.0,Dollar -False,141,4.33333,4.06494,4.06494,3,10,455.0,Pound -False,29,3.5,3.31255,3.31255,3,0,455.0,Dollar -False,8,5.0,5.0,5.0,3,25,455.0,Euro -True,11,4.33333,3.9437,3.9437,3,6,455.0,Pound -False,27,2.33333,2.72043,2.72043,3,0,455.0,Dollar -False,5,5.0,5.0,5.0,3,9,700.0,Euro -True,9,3.33333,3.03658,3.03658,3,53,455.0,Dollar -False,21,4.16667,3.60935,3.60935,3,17,455.0,Dollar -True,57,3.83333,3.93916,3.93916,3,18,455.0,Dollar -False,9,3.0,3.08088,3.08088,3,11,455.0,Dollar -True,26,4.33333,4.26137,4.26137,3,45,455.0,Euro -False,7,4.5,4.06128,4.06128,3,22,455.0,Dollar -False,22,4.66667,4.71493,4.71493,3,59,455.0,Pound -False,6,4.0,4.00447,4.00447,3,11,455.0,Dollar -True,15,4.83333,4.82916,4.82916,3,10,455.0,Euro -False,753,3.5,3.93208,3.93208,3,20,455.0,Euro -False,513,3.0,3.41811,3.41811,3,25,455.0,Euro -True,32,5.0,5.0,5.0,3,14,455.0,Pound -True,34,4.33333,4.342,4.342,3,23,455.0,Dollar -False,31,3.66667,4.36689,4.36689,3,13,800.0,Euro -True,11,3.5,3.98302,3.98302,3,10,455.0,Pound -True,7,4.16667,4.11357,4.11357,3,8,455.0,Euro -False,6,4.66667,4.63498,4.63498,3,8,455.0,Euro -True,7,3.33333,3.33879,3.33879,3,13,455.0,Euro -True,14,4.33333,4.28045,4.28045,3,13,455.0,Dollar -False,14,4.16667,4.01879,4.01879,3,83,455.0,Pound -True,9,4.16667,4.15187,4.15187,3,17,455.0,Euro -False,76,3.83333,3.9127,3.9127,3,0,455.0,Pound -False,12,4.16667,4.18527,4.18527,3,76,455.0,Euro -False,18,4.66667,4.60203,4.60203,3,15,455.0,Dollar -True,26,2.66667,2.64398,2.64398,3,6,455.0,Euro -True,76,4.0,4.0,4.0,3,21,455.0,Pound -True,131,4.66667,4.3682,4.3682,3,14,455.0,Euro -False,838,1.0,1.0,1.0,3,18,455.0,Pound -True,23,1.75,1.85714,1.85714,2,0,455.0,Euro -True,2,3.5,3.5,3.5,2,10,455.0,Euro -True,9,4.0,4.375,4.375,2,17,455.0,Dollar -True,12,3.0,2.51943,2.51943,2,7,455.0,Dollar -True,11,4.25,4.20588,4.20588,2,25,455.0,Pound -False,3,4.25,4.38117,4.38117,2,11,455.0,Pound -False,8,3.0,1.47059,1.47059,2,37,700.0,Pound -True,9,5.0,5.0,5.0,2,5,455.0,Dollar -False,17,3.0,3.04839,3.04839,2,0,800.0,Euro -False,57,4.25,4.05645,4.05645,2,0,455.0,Pound -False,17,3.5,3.5,3.5,2,10,455.0,Euro -False,400,4.0,3.37037,3.37037,2,9,455.0,Euro -True,5,4.5,4.42553,4.42553,2,8,455.0,Euro -True,3,3.5,3.5,3.5,2,12,455.0,Euro -True,10,4.25,4.2649,4.2649,2,41,455.0,Euro -True,7,3.0,2.88235,2.88235,2,0,455.0,Dollar -False,269,3.5,3.06087,3.06087,2,48,455.0,Pound -True,6,4.75,4.73034,4.73034,2,57,455.0,Dollar -True,5,5.0,5.0,5.0,2,17,455.0,Dollar -False,1818,3.25,2.59854,2.59854,2,16,455.0,Euro -True,13,3.5,3.52028,3.52028,2,49,455.0,Pound -True,9,4.0,4.0,4.0,2,10,455.0,Euro -False,208,4.5,4.52688,4.52688,2,10,455.0,Dollar -True,3,3.0,3.0,3.0,2,44,455.0,Dollar -True,34,4.75,4.77778,4.77778,2,0,455.0,Euro -False,381,4.5,4.65625,4.65625,2,23,455.0,Pound -True,13,5.0,5.0,5.0,2,15,455.0,Dollar -True,2056,4.0,4.0,4.0,2,31,455.0,Euro -True,2,2.25,2.23318,2.23318,2,14,455.0,Dollar -False,15,3.5,3.56637,3.56637,2,0,455.0,Pound -False,2,4.75,4.73566,4.73566,2,31,455.0,Euro -True,11,3.75,3.3742,3.3742,2,10,455.0,Pound -False,855,3.25,3.09295,3.09295,2,23,455.0,Pound -False,271,4.25,4.275,4.275,2,14,455.0,Euro -False,266,5.0,5.0,5.0,2,22,455.0,Dollar -False,20,5.0,5.0,5.0,2,42,455.0,Pound -True,7,5.0,5.0,5.0,2,8,455.0,Euro -True,10,4.0,3.9813,3.9813,2,8,455.0,Pound -True,8,3.25,3.12121,3.12121,2,32,455.0,Pound -True,648,4.25,4.40625,4.40625,2,57,455.0,Pound -True,8,4.25,4.19915,4.19915,2,18,455.0,Pound -False,111,4.0,3.96067,3.96067,2,10,455.0,Dollar -False,1010,3.75,3.71,3.71,2,9,455.0,Euro -False,38,5.0,5.0,5.0,2,0,455.0,Dollar -True,17,4.5,4.5,4.5,2,8,455.0,Dollar -True,11,4.5,4.5211,4.5211,2,26,455.0,Euro -False,23,4.5,4.48908,4.48908,2,13,455.0,Euro -False,6,4.0,4.26677,4.26677,2,9,455.0,Pound -False,28,5.0,5.0,5.0,2,36,455.0,Dollar -True,17,5.0,5.0,5.0,2,20,455.0,Pound -False,3,3.0,2.82332,2.82332,2,16,455.0,Dollar -True,11,3.5,3.75564,3.75564,2,8,455.0,Euro -True,778,4.75,4.79121,4.79121,2,41,455.0,Euro -True,1912,2.5,1.76471,1.76471,2,0,455.0,Dollar -True,18,4.75,4.7931,4.7931,2,0,455.0,Euro -True,7,5.0,5.0,5.0,2,12,480.0,Pound -True,1901,2.75,2.50735,2.50735,2,28,455.0,Dollar -True,14,4.75,4.80664,4.80664,2,10,455.0,Pound -False,7,5.0,5.0,5.0,2,11,720.0,Pound -False,17,4.5,4.51724,4.51724,2,17,455.0,Dollar -False,3378,3.5,4.45098,4.45098,2,39,455.0,Pound -True,5,2.75,3.05882,3.05882,2,11,455.0,Pound -True,6,5.0,5.0,5.0,2,45,455.0,Pound -True,17,4.0,3.94333,3.94333,2,25,455.0,Pound -True,7,3.5,3.06867,3.06867,2,29,455.0,Dollar -True,10,4.25,4.24749,4.24749,2,9,455.0,Dollar -False,2700,4.5,4.19565,4.19565,2,148,455.0,Pound -False,9,2.5,2.5,2.5,2,24,455.0,Euro -False,14,4.0,3.9375,3.9375,2,132,455.0,Euro -True,11,2.5,2.49451,2.49451,2,12,455.0,Dollar -False,25,5.0,5.0,5.0,2,20,455.0,Pound -True,18,3.0,2.98485,2.98485,2,8,455.0,Dollar -True,3,2.75,2.78229,2.78229,2,10,455.0,Dollar -False,30,4.25,4.2623,4.2623,2,10,2640.0,Euro -True,22,3.5,3.75829,3.75829,2,130,560.0,Dollar -False,13,5.0,5.0,5.0,2,44,700.0,Dollar -True,1013,3.5,3.5,3.5,2,23,455.0,Euro -True,11,4.0,3.5,3.5,2,0,455.0,Pound -True,17,4.25,4.30189,4.30189,2,9,455.0,Dollar -False,7,3.5,3.46457,3.46457,2,7,455.0,Dollar -False,1005,4.25,4.24849,4.24849,2,6,455.0,Pound -True,12,4.5,4.5,4.5,2,10,455.0,Euro -False,2,5.0,5.0,5.0,2,18,455.0,Pound -True,313,4.5,4.4898,4.4898,2,5,455.0,Dollar -False,9,3.0,2.88925,2.88925,2,16,455.0,Pound -False,7,3.25,3.26103,3.26103,3,11,455.0,Dollar -True,22,4.0,3.98611,3.98611,2,36,455.0,Pound -False,14,3.5,3.56544,3.56544,2,30,455.0,Euro -False,14,3.75,3.66321,3.66321,2,18,455.0,Euro -True,19,4.5,4.5,4.5,2,41,455.0,Dollar -True,17,4.0,3.11765,3.11765,3,0,455.0,Euro -True,22,3.75,3.14103,3.14103,2,18,455.0,Euro -False,11,2.75,2.69558,2.69558,2,9,455.0,Euro -False,59,5.0,5.0,5.0,2,27,455.0,Pound -True,24,3.0,3.00314,3.00314,2,13,455.0,Dollar -True,34,4.75,4.80029,4.80029,2,27,455.0,Dollar -False,10,3.5,3.48432,3.48432,2,37,455.0,Dollar -True,920,5.0,5.0,5.0,2,50,455.0,Pound -True,23,5.0,5.0,5.0,2,11,455.0,Euro -False,12,4.25,3.94335,3.94335,2,33,455.0,Euro -True,9,5.0,5.0,5.0,2,8,455.0,Pound -False,11,4.0,4.0,4.0,2,82,455.0,Dollar -True,6,4.0,4.0,4.0,2,23,455.0,Dollar -True,8,5.0,5.0,5.0,2,19,455.0,Dollar -False,29,4.75,4.65075,4.65075,2,7,455.0,Euro -True,15,4.0,4.0036,4.0036,2,11,455.0,Pound -True,6,5.0,5.0,5.0,2,16,455.0,Pound -False,5,4.5,4.4306,4.4306,2,7,455.0,Dollar -False,15,4.5,4.43561,4.43561,2,48,455.0,Euro -False,7,3.25,3.23054,3.23054,2,7,455.0,Euro -True,1432,4.0,4.0,4.0,2,24,455.0,Dollar -True,17,3.25,3.28846,3.28846,2,18,455.0,Euro -True,22,5.0,5.0,5.0,2,14,455.0,Pound -False,4,3.75,3.725,3.725,2,0,455.0,Pound -True,11,4.5,4.57143,4.57143,2,9,455.0,Pound -True,19,4.75,4.85366,4.85366,2,0,455.0,Dollar -False,344,4.5,4.73684,4.73684,2,7,455.0,Pound -False,7,3.5,3.20722,3.20722,2,12,455.0,Euro -True,3262,4.5,4.7033,4.7033,2,42,455.0,Euro -False,8,3.0,3.57391,3.57391,2,6,455.0,Euro -False,10,4.75,4.7352,4.7352,2,16,455.0,Dollar -False,10,5.0,5.0,5.0,2,16,455.0,Euro -False,9,3.25,3.25832,3.25832,2,8,455.0,Euro -True,1291,4.0,4.0,4.0,2,13,455.0,Dollar -True,7,5.0,5.0,5.0,2,34,455.0,Euro -True,8,5.0,5.0,5.0,2,41,455.0,Dollar -True,32,5.0,5.0,5.0,2,5,455.0,Dollar -False,1364,2.75,1.38954,1.38954,2,14,455.0,Euro -True,8,3.5,3.4878,3.4878,2,7,455.0,Pound -True,13,3.5,3.16256,3.16256,2,8,455.0,Euro -False,765,2.0,2.54472,2.54472,2,19,455.0,Euro -False,18,4.5,4.49327,4.49327,2,12,455.0,Euro -True,9,4.75,4.625,4.625,2,0,455.0,Pound -False,5,5.0,5.0,5.0,2,0,455.0,Euro -True,15,4.5,4.5,4.5,2,8,455.0,Dollar -True,1376,4.25,4.07372,4.07372,2,13,455.0,Pound -True,21,2.75,2.7636,2.7636,2,10,455.0,Dollar -True,13,4.5,4.5,4.5,2,18,455.0,Dollar -True,36,3.0,3.0,3.0,1,0,455.0,Dollar -False,1462,2.0,2.0,2.0,1,21,455.0,Dollar -False,1084,3.0,3.0,3.0,1,17,455.0,Euro -False,8,4.5,4.5,4.5,1,19,455.0,Pound -False,19,5.0,5.0,5.0,1,8,455.0,Dollar -False,24,4.0,4.0,4.0,1,37,455.0,Euro -False,4,5.0,5.0,5.0,1,17,455.0,Euro -True,6,5.0,5.0,5.0,1,22,455.0,Pound -True,4,5.0,5.0,5.0,1,11,455.0,Dollar -False,7,5.0,5.0,5.0,1,214,455.0,Pound -False,7,3.5,3.5,3.5,1,67,455.0,Dollar -False,5,5.0,5.0,5.0,1,16,455.0,Euro -True,765,4.0,4.0,4.0,1,18,455.0,Dollar -False,5,1.0,1.0,1.0,1,6,455.0,Dollar -True,18,4.5,4.5,4.5,1,0,455.0,Pound -False,16,1.0,1.0,1.0,1,27,455.0,Euro -False,2031,2.5,2.5,2.5,1,151,455.0,Euro -False,3,5.0,5.0,5.0,1,5,455.0,Euro -False,2,3.5,3.5,3.5,1,12,455.0,Euro -True,3,5.0,5.0,5.0,1,0,455.0,Euro -True,5,4.0,4.0,4.0,1,5,455.0,Dollar -False,2,3.0,3.0,3.0,1,7,455.0,Euro -False,2,5.0,5.0,5.0,1,6,455.0,Dollar -False,580,4.0,4.0,4.0,1,6,455.0,Dollar -False,7,4.0,4.0,4.0,1,7,1520.0,Euro -True,12,2.5,2.5,2.5,1,40,455.0,Pound -True,62,2.0,2.0,2.0,1,27,455.0,Euro -True,12,4.0,4.0,4.0,1,66,455.0,Pound -False,161,4.5,4.5,4.5,1,11,455.0,Pound -True,1130,4.5,4.5,4.5,1,8,455.0,Euro -True,0,3.0,3.0,3.0,1,12,455.0,Euro -False,7,5.0,5.0,5.0,1,13,455.0,Pound -True,89,4.0,4.0,4.0,1,6,455.0,Pound -False,1,5.0,5.0,5.0,1,18,455.0,Euro -True,135,1.0,1.0,1.0,1,11,455.0,Dollar -False,3,4.5,4.5,4.5,1,8,455.0,Dollar -False,4,4.0,4.0,4.0,1,6,455.0,Euro -False,3,4.0,4.0,4.0,1,7,455.0,Dollar -True,5173,5.0,5.0,5.0,1,34,455.0,Euro -True,8,5.0,5.0,5.0,1,7,455.0,Pound -False,7,5.0,5.0,5.0,1,23,455.0,Pound -True,27,4.5,4.5,4.5,1,65,455.0,Dollar -True,9,0.5,0.5,0.5,1,15,455.0,Euro -True,8,4.0,4.0,4.0,1,6,455.0,Euro -False,7,4.0,4.0,4.0,1,34,455.0,Pound -True,1409,4.5,4.5,4.5,1,30,455.0,Pound -False,11,5.0,5.0,5.0,1,5,455.0,Dollar -True,15,4.5,4.5,4.5,1,60,455.0,Pound -False,39,3.5,3.5,3.5,1,5,455.0,Pound -True,22,4.5,4.5,4.5,1,0,455.0,Pound -True,54,5.0,5.0,5.0,1,0,455.0,Euro -False,8,1.0,1.0,1.0,1,15,455.0,Dollar -False,3,5.0,5.0,5.0,1,9,455.0,Pound -True,1,3.0,3.0,3.0,1,24,455.0,Euro -True,650,5.0,5.0,5.0,1,18,455.0,Dollar -True,14,3.5,3.5,3.5,1,15,455.0,Pound -False,22,4.0,4.0,4.0,1,23,455.0,Euro -False,834,3.5,3.5,3.5,1,10,455.0,Dollar -False,709,4.0,4.0,4.0,1,8,455.0,Euro -True,4809,1.5,1.5,1.5,1,31,455.0,Pound -False,113,5.0,5.0,5.0,1,5,455.0,Euro -True,1,3.5,3.5,3.5,1,15,700.0,Euro -True,6,5.0,5.0,5.0,1,20,455.0,Pound -True,5,5.0,5.0,5.0,1,44,455.0,Euro -True,31,5.0,5.0,5.0,1,29,455.0,Euro -True,2,3.5,3.5,3.5,1,6,455.0,Dollar -True,13,4.0,4.0,4.0,1,15,455.0,Dollar -False,8,4.5,4.5,4.5,1,5,455.0,Pound -True,4,2.0,2.0,2.0,1,9,455.0,Pound -False,3,5.0,5.0,5.0,1,16,455.0,Euro -True,366,3.0,3.0,3.0,1,69,455.0,Pound -False,21,5.0,5.0,5.0,1,90,455.0,Pound -True,1,5.0,5.0,5.0,1,11,455.0,Pound -True,8,4.0,4.0,4.0,1,9,455.0,Euro -False,5,4.5,4.5,4.5,1,13,455.0,Pound -True,6,5.0,5.0,5.0,1,15,455.0,Euro -False,5,4.0,4.0,4.0,1,14,455.0,Euro -False,4,1.5,1.5,1.5,1,6,455.0,Dollar -False,15,4.0,4.0,4.0,1,34,455.0,Euro -False,6,4.0,4.0,4.0,1,6,480.0,Pound -False,5198,5.0,5.0,5.0,1,54,455.0,Euro -True,2,1.0,1.0,1.0,1,5,455.0,Pound -True,337,3.5,3.5,3.5,1,10,455.0,Dollar -False,2,3.0,3.0,3.0,1,5,455.0,Euro -False,14,2.0,2.0,2.0,1,11,455.0,Dollar -True,73,5.0,5.0,5.0,1,66,455.0,Euro -False,7,3.5,3.5,3.5,1,11,455.0,Pound -False,20,0.5,0.5,0.5,1,26,455.0,Pound -False,10,4.0,4.0,4.0,1,9,455.0,Dollar -True,9,4.0,4.0,4.0,1,15,455.0,Euro -False,10,4.0,4.0,4.0,1,13,455.0,Pound -True,214,3.0,3.0,3.0,1,5,455.0,Pound -True,25,5.0,5.0,5.0,1,28,455.0,Dollar -False,15,3.0,3.0,3.0,1,22,455.0,Dollar -True,377,2.0,2.0,2.0,1,27,455.0,Euro -True,12,3.5,3.5,3.5,1,17,455.0,Pound -False,17,5.0,5.0,5.0,1,34,455.0,Euro -True,13,3.0,3.0,3.0,1,16,455.0,Pound -False,1862,3.5,3.5,3.5,1,47,455.0,Dollar -False,15,1.0,1.0,1.0,1,12,455.0,Pound -True,10,3.0,3.0,3.0,1,295,455.0,Pound -False,5,3.5,3.5,3.5,1,7,455.0,Dollar -True,26,5.0,5.0,5.0,1,0,455.0,Euro -False,6,5.0,5.0,5.0,1,29,455.0,Pound -True,2,1.0,1.0,1.0,1,15,700.0,Dollar -False,4,1.0,1.0,1.0,1,18,455.0,Dollar -True,14,5.0,5.0,5.0,1,55,455.0,Euro -False,36,1.0,1.0,1.0,1,62,455.0,Dollar -False,19,1.5,1.5,1.5,1,197,455.0,Euro -False,11,5.0,5.0,5.0,1,11,455.0,Dollar -False,4,4.5,4.5,4.5,1,12,455.0,Dollar -False,1,4.0,4.0,4.0,1,19,455.0,Euro -False,9,5.0,5.0,5.0,1,18,455.0,Pound -False,14,3.5,3.5,3.5,1,0,455.0,Dollar -True,2,4.0,4.0,4.0,1,20,700.0,Dollar -True,181,5.0,5.0,5.0,1,16,455.0,Euro -False,182,1.0,1.0,1.0,1,56,455.0,Pound -False,8,3.0,3.0,3.0,1,16,455.0,Pound -True,30,4.0,4.0,4.0,1,0,480.0,Pound -True,15,5.0,5.0,5.0,1,16,455.0,Pound -False,9,3.5,3.5,3.5,1,0,455.0,Dollar -True,8,4.5,4.5,4.5,1,10,455.0,Euro -False,2,5.0,5.0,5.0,1,12,455.0,Euro -False,6,2.0,2.0,2.0,1,6,455.0,Dollar -True,5,4.5,4.5,4.5,1,51,455.0,Euro -True,11,3.0,3.0,3.0,1,13,455.0,Euro -True,29,1.0,1.0,1.0,1,11,455.0,Euro -True,2,5.0,5.0,5.0,1,11,455.0,Dollar -True,11,5.0,5.0,5.0,1,15,455.0,Dollar -False,9,4.0,4.0,4.0,1,28,455.0,Euro -True,249,4.5,4.5,4.5,1,27,455.0,Dollar -False,6,3.5,3.5,3.5,1,16,455.0,Pound -True,525,3.0,3.0,3.0,1,54,455.0,Euro -False,660,4.0,4.0,4.0,1,10,455.0,Pound -False,535,1.0,1.0,1.0,1,0,455.0,Pound -True,14,5.0,5.0,5.0,1,19,455.0,Dollar -True,43,3.0,3.0,3.0,1,28,455.0,Euro -True,19,5.0,5.0,5.0,1,21,455.0,Dollar -True,4,5.0,5.0,5.0,1,12,455.0,Euro -False,1,5.0,5.0,5.0,1,42,455.0,Dollar -True,5,4.0,4.0,4.0,1,5,455.0,Euro -False,26,1.0,1.0,1.0,1,62,455.0,Euro -False,2,1.0,1.0,1.0,1,7,455.0,Euro -True,139,3.0,3.0,3.0,1,6,455.0,Pound -True,5,2.5,2.5,2.5,1,12,455.0,Dollar -True,13,2.0,2.0,2.0,1,8,455.0,Pound -True,5,5.0,5.0,5.0,1,5,455.0,Pound -True,36,1.0,1.0,1.0,1,8,455.0,Euro -False,2,2.5,2.5,2.5,1,7,455.0,Pound -False,25,4.5,4.5,4.5,1,40,455.0,Dollar -True,13,5.0,5.0,5.0,1,19,455.0,Dollar -False,489,3.5,3.5,3.5,1,11,455.0,Dollar -False,23,4.5,4.5,4.5,1,17,455.0,Dollar -False,5,5.0,5.0,5.0,1,0,455.0,Euro -False,12,2.5,2.5,2.5,1,7,455.0,Euro -True,3,4.0,4.0,4.0,1,11,455.0,Pound -True,3,4.0,4.0,4.0,1,20,455.0,Pound -False,11,5.0,5.0,5.0,1,37,455.0,Euro -True,3,5.0,5.0,5.0,1,23,800.0,Euro -False,14,5.0,5.0,5.0,1,28,455.0,Pound -True,7,1.5,1.5,1.5,1,0,455.0,Euro -False,5,3.5,3.5,3.5,1,9,455.0,Euro -False,1,5.0,5.0,5.0,1,11,455.0,Dollar -False,5,1.0,1.0,1.0,1,7,455.0,Pound -True,2,3.0,3.0,3.0,1,5,455.0,Pound -True,1,5.0,5.0,5.0,1,60,455.0,Pound -False,3,5.0,5.0,5.0,1,13,455.0,Dollar -False,5,5.0,5.0,5.0,1,44,455.0,Euro -False,6,1.0,1.0,1.0,1,0,455.0,Euro -True,4,3.0,3.0,3.0,1,8,455.0,Pound -True,3,4.0,4.0,4.0,1,33,455.0,Pound -False,26,3.5,3.5,3.5,1,23,455.0,Pound -True,26,4.0,4.0,4.0,1,18,455.0,Euro -True,4,5.0,5.0,5.0,1,17,455.0,Euro -False,177,4.0,4.0,4.0,1,6,455.0,Dollar -True,8,1.0,1.0,1.0,1,8,455.0,Pound -True,15,4.5,4.5,4.5,1,0,455.0,Dollar -False,7,5.0,5.0,5.0,1,9,455.0,Dollar -True,18,2.5,2.5,2.5,1,21,455.0,Pound -False,14,5.0,5.0,5.0,1,67,455.0,Dollar -False,13,5.0,5.0,5.0,1,8,455.0,Euro -False,6,3.5,3.5,3.5,1,8,455.0,Dollar -True,7,3.0,3.0,3.0,1,12,455.0,Dollar -False,13,5.0,5.0,5.0,1,12,455.0,Pound -False,5,0.0,0.0,0.0,0,18,455.0,Pound -False,3,0.0,0.0,0.0,0,39,455.0,Pound -False,11,0.0,0.0,0.0,0,0,455.0,Dollar -False,17,0.0,0.0,0.0,0,0,455.0,Pound -False,1,0.0,0.0,0.0,0,12,455.0,Euro -False,1,0.0,0.0,0.0,0,14,455.0,Euro -False,0,0.0,0.0,0.0,0,19,455.0,Dollar -True,5,0.0,0.0,0.0,0,33,455.0,Dollar -False,1,0.0,0.0,0.0,0,6,455.0,Euro -False,158,0.0,0.0,0.0,0,5,455.0,Euro -False,757,0.0,0.0,0.0,0,19,455.0,Euro -False,0,0.0,0.0,0.0,0,19,455.0,Euro -True,1,0.0,0.0,0.0,0,9,455.0,Dollar -True,0,0.0,0.0,0.0,0,7,455.0,Euro -True,44,0.0,0.0,0.0,0,7,455.0,Euro -True,293,0.0,0.0,0.0,0,5,455.0,Dollar -False,0,0.0,0.0,0.0,0,5,2000.0,Dollar -False,1,0.0,0.0,0.0,0,12,455.0,Dollar -False,3,0.0,0.0,0.0,0,13,455.0,Euro -True,3,0.0,0.0,0.0,0,12,455.0,Euro -False,1,0.0,0.0,0.0,0,13,455.0,Pound -True,1,0.0,0.0,0.0,0,5,455.0,Pound -False,3,0.0,0.0,0.0,0,30,455.0,Dollar -False,2,0.0,0.0,0.0,0,73,455.0,Pound -False,9,0.0,0.0,0.0,0,102,455.0,Euro -False,9,0.0,0.0,0.0,0,12,455.0,Pound -True,4,0.0,0.0,0.0,0,11,455.0,Euro -False,2,0.0,0.0,0.0,0,14,455.0,Euro -True,1,0.0,0.0,0.0,0,39,455.0,Pound -False,2,0.0,0.0,0.0,0,8,455.0,Dollar -False,1,0.0,0.0,0.0,0,10,455.0,Dollar -True,1,0.0,0.0,0.0,0,0,455.0,Pound -True,18,0.0,0.0,0.0,0,23,455.0,Pound -False,3,0.0,0.0,0.0,0,19,455.0,Pound -True,1,0.0,0.0,0.0,0,21,455.0,Dollar -False,0,0.0,0.0,0.0,0,8,455.0,Dollar -False,2,0.0,0.0,0.0,0,0,480.0,Dollar -True,26,0.0,0.0,0.0,0,197,455.0,Euro -False,365,0.0,0.0,0.0,0,26,455.0,Dollar -True,17,0.0,0.0,0.0,0,10,455.0,Pound -True,0,0.0,0.0,0.0,0,10,455.0,Euro -False,1,0.0,0.0,0.0,0,12,455.0,Euro -False,1,0.0,0.0,0.0,0,8,455.0,Dollar -False,4,0.0,0.0,0.0,0,12,455.0,Pound -True,29,0.0,0.0,0.0,0,20,455.0,Pound -True,3,0.0,0.0,0.0,0,21,455.0,Dollar -True,1,0.0,0.0,0.0,0,16,455.0,Dollar -True,0,0.0,0.0,0.0,0,8,455.0,Dollar -True,1,0.0,0.0,0.0,0,29,455.0,Euro -False,1,0.0,0.0,0.0,0,8,455.0,Euro -True,8,0.0,0.0,0.0,0,9,455.0,Pound -True,1,0.0,0.0,0.0,0,5,455.0,Dollar -True,2,0.0,0.0,0.0,0,0,455.0,Pound -False,2,0.0,0.0,0.0,0,16,455.0,Pound -False,17,0.0,0.0,0.0,0,7,455.0,Pound -True,11,0.0,0.0,0.0,0,13,455.0,Dollar -True,0,0.0,0.0,0.0,0,19,455.0,Pound -True,0,0.0,0.0,0.0,0,8,455.0,Pound -False,1,0.0,0.0,0.0,0,5,455.0,Pound -True,0,0.0,0.0,0.0,0,0,455.0,Dollar -False,10,0.0,0.0,0.0,0,0,455.0,Pound -True,618,0.0,0.0,0.0,0,31,455.0,Dollar -False,0,0.0,0.0,0.0,0,44,455.0,Dollar -True,0,0.0,0.0,0.0,0,10,455.0,Dollar -False,10,0.0,0.0,0.0,0,0,455.0,Pound -False,4,0.0,0.0,0.0,0,0,455.0,Dollar -False,15,0.0,0.0,0.0,0,144,455.0,Pound -False,4,0.0,0.0,0.0,0,16,455.0,Euro -True,2,0.0,0.0,0.0,0,6,455.0,Pound -False,0,0.0,0.0,0.0,0,5,455.0,Pound -True,3,0.0,0.0,0.0,0,6,455.0,Dollar -False,26,0.0,0.0,0.0,0,38,455.0,Pound -False,4,0.0,0.0,0.0,0,5,455.0,Dollar -False,512,0.0,0.0,0.0,0,15,455.0,Euro -True,3,0.0,0.0,0.0,0,10,455.0,Euro -True,0,0.0,0.0,0.0,0,11,455.0,Pound -True,1,0.0,0.0,0.0,0,15,455.0,Dollar -False,9,0.0,0.0,0.0,0,12,455.0,Pound -False,8,0.0,0.0,0.0,0,14,455.0,Pound -False,2,0.0,0.0,0.0,0,15,455.0,Euro -True,545,0.0,0.0,0.0,0,10,455.0,Pound -True,0,0.0,0.0,0.0,0,5,455.0,Dollar -False,5,0.0,0.0,0.0,0,9,455.0,Euro -False,2,0.0,0.0,0.0,0,12,455.0,Dollar -True,37,0.0,0.0,0.0,0,10,455.0,Dollar -False,22,0.0,0.0,0.0,0,6,455.0,Pound -True,25,0.0,0.0,0.0,0,14,455.0,Pound -False,8,0.0,0.0,0.0,0,43,455.0,Euro -True,12,0.0,0.0,0.0,0,9,455.0,Dollar -True,1,0.0,0.0,0.0,0,42,455.0,Pound -False,1,0.0,0.0,0.0,0,40,455.0,Dollar -True,1,0.0,0.0,0.0,0,0,455.0,Euro -False,0,0.0,0.0,0.0,0,25,455.0,Euro -True,6,0.0,0.0,0.0,0,34,455.0,Euro -True,0,0.0,0.0,0.0,0,58,455.0,Euro -True,0,0.0,0.0,0.0,0,0,455.0,Euro -False,0,0.0,0.0,0.0,0,0,455.0,Dollar -False,45,0.0,0.0,0.0,0,11,455.0,Euro -True,0,0.0,0.0,0.0,0,10,455.0,Euro -False,2,0.0,0.0,0.0,0,20,455.0,Euro -False,1,0.0,0.0,0.0,0,14,455.0,Pound -False,5,4.0,4.0,4.0,1,56,455.0,Pound -True,26,0.0,0.0,0.0,0,61,455.0,Euro -True,1,0.0,0.0,0.0,0,9,455.0,Pound -True,0,0.0,0.0,0.0,0,8,455.0,Dollar -True,0,0.0,0.0,0.0,0,6,455.0,Dollar -False,4,0.0,0.0,0.0,0,28,455.0,Euro -False,6,5.0,5.0,5.0,2,11,455.0,Pound -False,2,0.0,0.0,0.0,0,14,455.0,Dollar -True,2,0.0,0.0,0.0,0,9,455.0,Euro -True,2475,0.0,0.0,0.0,0,19,455.0,Euro -True,0,0.0,0.0,0.0,0,5,455.0,Pound -True,0,0.0,0.0,0.0,0,0,455.0,Pound -True,101,0.0,0.0,0.0,0,34,455.0,Dollar -False,1,0.0,0.0,0.0,0,7,455.0,Dollar -False,1,0.0,0.0,0.0,0,0,455.0,Pound -False,0,0.0,0.0,0.0,0,10,455.0,Euro -False,4,0.0,0.0,0.0,0,7,455.0,Pound -False,2,0.0,0.0,0.0,0,6,455.0,Pound -False,3,0.0,0.0,0.0,0,8,455.0,Pound -True,7,0.0,0.0,0.0,0,100,455.0,Dollar -True,1,0.0,0.0,0.0,0,5,455.0,Pound -True,2,0.0,0.0,0.0,0,19,455.0,Pound -False,3,0.0,0.0,0.0,0,35,455.0,Pound -False,0,0.0,0.0,0.0,0,7,455.0,Pound -True,3,0.0,0.0,0.0,0,8,455.0,Euro -True,13,0.0,0.0,0.0,0,14,455.0,Dollar -True,1,0.0,0.0,0.0,0,9,455.0,Euro -False,3,0.0,0.0,0.0,0,13,455.0,Euro -True,720,0.0,0.0,0.0,0,18,455.0,Euro -False,870,0.0,0.0,0.0,0,5,455.0,Pound -False,1,0.0,0.0,0.0,0,17,455.0,Pound -False,7,0.0,0.0,0.0,0,11,455.0,Euro -True,14,0.0,0.0,0.0,0,7,455.0,Euro -True,5,0.0,0.0,0.0,0,31,700.0,Dollar -False,3,0.0,0.0,0.0,0,12,455.0,Pound -True,0,0.0,0.0,0.0,0,5,455.0,Dollar -False,0,0.0,0.0,0.0,0,10,455.0,Dollar -True,1,0.0,0.0,0.0,0,16,455.0,Euro -False,5,0.0,0.0,0.0,0,31,455.0,Euro -False,1031,0.0,0.0,0.0,0,29,455.0,Euro -True,5,0.0,0.0,0.0,0,11,455.0,Euro -False,7,0.0,0.0,0.0,0,10,455.0,Dollar -False,4,0.0,0.0,0.0,0,6,455.0,Pound -True,3,0.0,0.0,0.0,0,28,455.0,Pound -True,0,0.0,0.0,0.0,0,4,455.0,Pound -True,0,0.0,0.0,0.0,0,5,455.0,Euro -False,0,0.0,0.0,0.0,0,28,455.0,Dollar -True,6,0.0,0.0,0.0,0,25,455.0,Dollar -True,0,0.0,0.0,0.0,0,16,455.0,Euro -False,5,0.0,0.0,0.0,0,8,455.0,Euro -True,0,0.0,0.0,0.0,0,0,455.0,Pound -True,0,0.0,0.0,0.0,0,38,455.0,Euro -False,4,0.0,0.0,0.0,0,11,455.0,Pound -False,1,0.0,0.0,0.0,0,6,455.0,Euro -False,6,0.0,0.0,0.0,0,22,455.0,Pound -True,0,0.0,0.0,0.0,0,5,455.0,Pound -False,7,0.0,0.0,0.0,0,23,455.0,Euro -False,2,0.0,0.0,0.0,0,20,455.0,Pound -True,9,0.0,0.0,0.0,0,14,455.0,Dollar -True,3,0.0,0.0,0.0,0,37,455.0,Dollar -False,0,0.0,0.0,0.0,0,31,455.0,Pound -True,1,0.0,0.0,0.0,0,11,455.0,Pound -False,0,0.0,0.0,0.0,0,9,455.0,Euro -True,0,0.0,0.0,0.0,0,108,455.0,Pound -False,4,0.0,0.0,0.0,0,0,455.0,Pound -True,3,0.0,0.0,0.0,0,13,455.0,Pound -True,3,0.0,0.0,0.0,0,11,455.0,Pound -False,1,0.0,0.0,0.0,0,6,455.0,Dollar -False,1,0.0,0.0,0.0,0,5,455.0,Euro -False,6,0.0,0.0,0.0,0,12,455.0,Pound -True,8,0.0,0.0,0.0,0,21,455.0,Dollar -True,4,0.0,0.0,0.0,0,17,455.0,Euro -False,6,0.0,0.0,0.0,0,8,455.0,Pound -True,2,0.0,0.0,0.0,0,15,455.0,Dollar -False,2,0.0,0.0,0.0,0,11,455.0,Dollar -False,3,0.0,0.0,0.0,0,25,455.0,Pound -False,0,0.0,0.0,0.0,0,7,1600.0,Dollar -False,0,0.0,0.0,0.0,0,10,455.0,Dollar -True,2,0.0,0.0,0.0,0,10,455.0,Pound -True,1,0.0,0.0,0.0,0,9,700.0,Euro -True,0,0.0,0.0,0.0,0,10,455.0,Pound -True,3,0.0,0.0,0.0,0,8,455.0,Euro -False,5,0.0,0.0,0.0,0,7,455.0,Euro -False,0,0.0,0.0,0.0,0,0,455.0,Dollar -False,22,0.0,0.0,0.0,0,181,455.0,Euro -True,3,0.0,0.0,0.0,0,5,455.0,Dollar -False,724,0.0,0.0,0.0,0,17,455.0,Pound -False,3,0.0,0.0,0.0,0,16,455.0,Pound -True,2,0.0,0.0,0.0,0,61,455.0,Pound -False,2,0.0,0.0,0.0,0,50,455.0,Dollar -True,2,0.0,0.0,0.0,0,38,455.0,Euro -True,3,0.0,0.0,0.0,0,5,455.0,Pound -True,0,0.0,0.0,0.0,0,0,455.0,Pound -False,1275,0.0,0.0,0.0,0,56,455.0,Pound -False,1,0.0,0.0,0.0,0,6,455.0,Pound -False,1,0.0,0.0,0.0,0,9,455.0,Euro -False,5,0.0,0.0,0.0,0,9,455.0,Pound -True,0,0.0,0.0,0.0,0,17,455.0,Euro -False,4,0.0,0.0,0.0,0,76,455.0,Euro -True,23,0.0,0.0,0.0,0,15,455.0,Pound -False,2,0.0,0.0,0.0,0,7,455.0,Euro -False,229,0.0,0.0,0.0,0,16,455.0,Dollar -True,5,0.0,0.0,0.0,0,5,455.0,Pound -True,1,0.0,0.0,0.0,0,5,455.0,Dollar -False,1,0.0,0.0,0.0,0,7,455.0,Dollar -True,8,0.0,0.0,0.0,0,61,455.0,Euro -False,1,0.0,0.0,0.0,0,11,455.0,Dollar -True,2,0.0,0.0,0.0,0,8,455.0,Dollar -False,4,0.0,0.0,0.0,0,16,455.0,Pound -False,0,0.0,0.0,0.0,0,11,455.0,Pound -False,1,0.0,0.0,0.0,0,10,1600.0,Euro -False,1,0.0,0.0,0.0,0,0,455.0,Euro -False,0,0.0,0.0,0.0,0,11,455.0,Euro -True,0,0.0,0.0,0.0,0,5,455.0,Pound -True,0,0.0,0.0,0.0,0,23,455.0,Pound -False,0,0.0,0.0,0.0,0,70,455.0,Euro -False,1,0.0,0.0,0.0,0,31,455.0,Dollar -False,5,0.0,0.0,0.0,0,25,455.0,Euro -True,1,0.0,0.0,0.0,0,10,455.0,Pound -True,2,0.0,0.0,0.0,0,7,455.0,Dollar -False,1,0.0,0.0,0.0,0,5,455.0,Dollar -False,22,0.0,0.0,0.0,0,7,455.0,Dollar -True,0,0.0,0.0,0.0,0,0,455.0,Euro -True,0,0.0,0.0,0.0,0,0,455.0,Dollar -True,2,0.0,0.0,0.0,0,34,455.0,Dollar -True,1,0.0,0.0,0.0,0,5,455.0,Euro -True,5,0.0,0.0,0.0,0,81,455.0,Dollar -False,4,0.0,0.0,0.0,0,52,455.0,Euro -False,2,0.0,0.0,0.0,0,9,455.0,Pound -False,13,0.0,0.0,0.0,0,8,455.0,Euro -True,0,0.0,0.0,0.0,0,32,455.0,Dollar -False,1,0.0,0.0,0.0,0,39,455.0,Dollar -False,5,0.0,0.0,0.0,0,5,455.0,Euro -True,6,0.0,0.0,0.0,0,10,455.0,Dollar -True,1,0.0,0.0,0.0,0,11,455.0,Euro -False,3,0.0,0.0,0.0,0,23,455.0,Dollar -False,0,0.0,0.0,0.0,0,11,455.0,Pound -True,1,0.0,0.0,0.0,0,10,455.0,Euro -True,2,0.0,0.0,0.0,0,25,455.0,Dollar -True,6,0.0,0.0,0.0,0,17,455.0,Euro -True,4910,0.0,0.0,0.0,0,144,455.0,Pound -True,1,0.0,0.0,0.0,0,6,1040.0,Pound -True,3,0.0,0.0,0.0,0,15,455.0,Dollar -False,2,0.0,0.0,0.0,0,8,455.0,Pound -False,5,0.0,0.0,0.0,0,20,455.0,Pound -True,10,0.0,0.0,0.0,0,13,455.0,Euro -True,0,0.0,0.0,0.0,0,6,455.0,Pound -False,1,0.0,0.0,0.0,0,17,700.0,Euro -False,1,0.0,0.0,0.0,0,9,455.0,Pound -False,5,0.0,0.0,0.0,0,7,455.0,Pound -False,7,0.0,0.0,0.0,0,9,455.0,Pound -True,7,0.0,0.0,0.0,0,61,455.0,Dollar -False,3,0.0,0.0,0.0,0,19,455.0,Euro -True,4,0.0,0.0,0.0,0,56,455.0,Dollar -False,2,0.0,0.0,0.0,0,8,700.0,Dollar -False,11,0.0,0.0,0.0,0,0,455.0,Dollar -False,1,0.0,0.0,0.0,0,14,455.0,Dollar -True,0,0.0,0.0,0.0,0,0,455.0,Dollar -False,3,0.0,0.0,0.0,0,5,455.0,Euro -True,2,0.0,0.0,0.0,0,9,455.0,Dollar -True,5,0.0,0.0,0.0,0,0,455.0,Pound -True,0,0.0,0.0,0.0,0,14,455.0,Pound -True,389,0.0,0.0,0.0,0,5,455.0,Pound -True,0,0.0,0.0,0.0,0,6,455.0,Pound -False,4,0.0,0.0,0.0,0,6,455.0,Euro -True,2,0.0,0.0,0.0,0,8,455.0,Euro -False,0,0.0,0.0,0.0,0,32,455.0,Pound -False,137,0.0,0.0,0.0,0,13,455.0,Dollar -False,1,0.0,0.0,0.0,0,34,455.0,Dollar -False,1,0.0,0.0,0.0,0,9,455.0,Pound -True,1,0.0,0.0,0.0,0,9,455.0,Dollar -True,4,0.0,0.0,0.0,0,0,455.0,Pound -False,0,0.0,0.0,0.0,0,20,455.0,Pound -True,0,0.0,0.0,0.0,0,34,455.0,Pound -False,0,0.0,0.0,0.0,0,5,455.0,Dollar -True,10,0.0,0.0,0.0,0,7,455.0,Euro -False,154,0.0,0.0,0.0,0,38,455.0,Euro -False,0,0.0,0.0,0.0,0,12,2880.0,Dollar -True,8,0.0,0.0,0.0,0,102,455.0,Pound -False,0,0.0,0.0,0.0,0,7,455.0,Pound -False,0,0.0,0.0,0.0,0,15,455.0,Dollar -True,7,0.0,0.0,0.0,0,13,455.0,Pound -False,2,0.0,0.0,0.0,0,11,455.0,Pound -False,0,0.0,0.0,0.0,0,47,455.0,Euro -False,0,0.0,0.0,0.0,0,40,455.0,Pound -False,0,0.0,0.0,0.0,0,18,455.0,Dollar -False,0,0.0,0.0,0.0,0,28,1600.0,Euro -False,0,0.0,0.0,0.0,0,32,455.0,Pound -False,10,0.0,0.0,0.0,0,18,455.0,Pound -False,306,0.0,0.0,0.0,0,5,455.0,Pound -True,4,0.0,0.0,0.0,0,9,455.0,Euro -False,489,0.0,0.0,0.0,0,16,455.0,Pound -True,2,0.0,0.0,0.0,0,10,455.0,Pound -True,2,0.0,0.0,0.0,0,8,455.0,Euro -True,0,0.0,0.0,0.0,0,8,455.0,Dollar -True,14,0.0,0.0,0.0,0,25,455.0,Dollar -False,0,0.0,0.0,0.0,0,9,455.0,Dollar -False,2,0.0,0.0,0.0,0,6,455.0,Pound -False,3,0.0,0.0,0.0,0,5,455.0,Euro -False,0,0.0,0.0,0.0,0,5,455.0,Euro -False,1,0.0,0.0,0.0,0,7,455.0,Euro -True,1,0.0,0.0,0.0,0,10,560.0,Euro -False,0,0.0,0.0,0.0,0,65,455.0,Pound -True,15,0.0,0.0,0.0,0,0,455.0,Pound -False,13,0.0,0.0,0.0,0,102,455.0,Dollar -True,0,0.0,0.0,0.0,0,5,455.0,Pound -True,0,0.0,0.0,0.0,0,20,960.0,Dollar -True,1,0.0,0.0,0.0,0,25,455.0,Dollar -True,1,0.0,0.0,0.0,0,0,455.0,Euro -False,0,0.0,0.0,0.0,0,12,455.0,Euro -False,0,0.0,0.0,0.0,0,11,455.0,Euro -True,9,0.0,0.0,0.0,0,25,455.0,Dollar -False,2,0.0,0.0,0.0,0,10,455.0,Pound -False,0,0.0,0.0,0.0,0,10,455.0,Dollar -True,1,0.0,0.0,0.0,0,23,455.0,Pound -True,5,0.0,0.0,0.0,0,7,455.0,Euro -False,0,0.0,0.0,0.0,0,15,455.0,Euro -True,146,0.0,0.0,0.0,0,5,455.0,Dollar -True,0,0.0,0.0,0.0,0,12,455.0,Dollar -True,4,0.0,0.0,0.0,0,17,455.0,Dollar -True,0,0.0,0.0,0.0,0,66,455.0,Pound -False,0,0.0,0.0,0.0,0,20,455.0,Pound -True,2,0.0,0.0,0.0,0,454,455.0,Euro -True,0,0.0,0.0,0.0,0,5,455.0,Dollar -True,0,0.0,0.0,0.0,0,6,455.0,Pound -True,6,0.0,0.0,0.0,0,0,455.0,Euro -True,5,0.0,0.0,0.0,0,18,455.0,Dollar -True,2,0.0,0.0,0.0,0,6,455.0,Dollar -True,4,0.0,0.0,0.0,0,28,455.0,Pound -False,592,0.0,0.0,0.0,0,12,455.0,Dollar -True,1,0.0,0.0,0.0,0,12,455.0,Euro -True,3,0.0,0.0,0.0,0,52,455.0,Euro -True,9,0.0,0.0,0.0,0,11,455.0,Euro -False,3521,0.0,0.0,0.0,0,24,455.0,Dollar -True,1,0.0,0.0,0.0,0,11,455.0,Dollar -True,1,0.0,0.0,0.0,0,21,455.0,Dollar -False,11,0.0,0.0,0.0,0,23,455.0,Euro -True,1,0.0,0.0,0.0,0,12,455.0,Euro -True,3,0.0,0.0,0.0,0,45,455.0,Pound -False,2,0.0,0.0,0.0,0,0,455.0,Euro -True,1,0.0,0.0,0.0,0,36,455.0,Pound -True,1,0.0,0.0,0.0,0,12,455.0,Euro -True,2,0.0,0.0,0.0,0,9,455.0,Pound -False,0,0.0,0.0,0.0,0,15,455.0,Euro -False,295,0.0,0.0,0.0,0,16,455.0,Pound -False,7,0.0,0.0,0.0,0,10,455.0,Euro -True,346,0.0,0.0,0.0,0,11,455.0,Pound -True,1,0.0,0.0,0.0,0,6,455.0,Pound -False,397,0.0,0.0,0.0,0,23,455.0,Dollar -False,0,0.0,0.0,0.0,0,0,455.0,Euro -False,2,0.0,0.0,0.0,0,17,455.0,Pound -True,464,0.0,0.0,0.0,0,27,455.0,Euro -False,22947,4.66913,4.66759,4.66759,6413,129,455.0,Dollar -False,23731,4.57774,4.56428,4.56428,6368,48,455.0,Euro -False,14318,4.66531,4.66821,4.66821,5329,37,455.0,Pound -True,14436,4.67377,4.68149,4.68149,4554,59,455.0,Pound -False,9372,4.50475,4.51351,4.51351,3340,42,455.0,Pound -True,12179,4.69635,4.67697,4.67697,3224,33,455.0,Euro -False,9721,4.68299,4.67966,4.67966,2983,62,455.0,Dollar -False,6486,4.43443,4.45765,4.45765,2183,49,455.0,Dollar -False,13359,3.88462,3.86512,3.86512,2141,14,455.0,Dollar -False,7502,4.62027,4.61334,4.61334,1842,109,455.0,Dollar -True,6185,4.53514,4.5365,4.5365,1790,97,455.0,Dollar -False,4955,4.42414,4.41962,4.41962,1416,201,455.0,Dollar -True,4855,4.59714,4.58767,4.58767,1340,43,455.0,Dollar -False,3864,4.67347,4.65234,4.65234,1238,36,455.0,Pound -False,12493,4.23529,4.12235,4.12235,1137,8,455.0,Dollar -True,3635,4.61557,4.60556,4.60556,1033,76,2160.0,Euro -False,5505,4.3615,4.38754,4.38754,1029,45,455.0,Pound -False,2640,4.68613,4.69384,4.69384,1018,12,455.0,Dollar -False,2569,4.19935,4.21054,4.21054,997,67,3200.0,Dollar -False,4744,3.94444,3.98121,3.98121,993,14,455.0,Pound -False,2689,4.57235,4.58957,4.58957,942,27,455.0,Euro -True,3817,4.60504,4.62575,4.62575,895,53,455.0,Euro -True,2830,4.6773,4.66512,4.66512,899,83,455.0,Euro -True,2734,4.57558,4.58796,4.58796,886,18,455.0,Euro -False,2777,4.23333,4.23152,4.23152,784,70,455.0,Pound -True,2918,4.54114,4.53378,4.53378,781,30,455.0,Dollar -True,4432,4.29167,4.28939,4.28939,775,53,455.0,Pound -False,2318,4.28632,4.30858,4.30858,768,28,455.0,Euro -False,3148,4.17045,4.17994,4.17994,755,50,455.0,Euro -True,1980,4.37847,4.37546,4.37546,751,26,455.0,Pound -True,1094,4.58483,4.57455,4.57455,716,40,700.0,Euro -False,1771,4.67486,4.6865,4.6865,716,11,455.0,Euro -False,3172,4.5493,4.55196,4.55196,711,59,455.0,Euro -False,2810,4.72727,4.73143,4.73143,696,49,455.0,Dollar -False,4435,4.14754,4.26866,4.26866,696,55,455.0,Pound -True,19657,4.34722,4.44309,4.44309,665,19,455.0,Dollar -True,16804,4.03846,4.14592,4.14592,623,36,455.0,Euro -True,3732,4.2554,4.27367,4.27367,618,36,455.0,Pound -False,5410,4.70513,4.68402,4.68402,600,51,455.0,Pound -False,1994,4.2375,4.17568,4.17568,595,61,455.0,Euro -False,2267,4.63235,4.61211,4.61211,562,39,455.0,Euro -True,2203,4.40083,4.44311,4.44311,561,184,455.0,Dollar -True,2850,4.3484,4.36834,4.36834,551,70,455.0,Pound -True,9453,4.05,4.21769,4.21769,542,33,455.0,Pound -True,2139,4.20732,4.25556,4.25556,512,39,455.0,Pound -False,2356,4.58442,4.55499,4.55499,483,71,455.0,Pound -False,1262,4.75105,4.74676,4.74676,484,20,455.0,Euro -True,2470,4.58333,4.65996,4.65996,473,32,455.0,Pound -True,1552,4.45496,4.44444,4.44444,472,92,455.0,Dollar -True,6260,4.44118,4.38839,4.38839,454,18,455.0,Dollar -False,1651,4.26087,4.26508,4.26508,443,51,455.0,Pound -True,1829,4.5,4.52319,4.52319,435,16,455.0,Pound -False,1445,4.43269,4.42894,4.42894,415,50,455.0,Pound -False,1972,4.53889,4.50728,4.50728,415,39,455.0,Dollar -False,1502,4.53659,4.52241,4.52241,407,49,455.0,Euro -False,2603,4.45312,4.36747,4.36747,407,37,455.0,Euro -False,2675,4.21569,4.22424,4.22424,401,45,455.0,Dollar -True,844,4.43421,4.39164,4.39164,374,49,3200.0,Dollar -False,1058,4.39167,4.43723,4.43723,369,34,455.0,Euro -True,1499,4.51754,4.52979,4.52979,365,14,455.0,Dollar -True,6718,3.78125,3.61347,3.61347,364,23,455.0,Dollar -False,1792,4.29412,4.24628,4.24628,361,21,455.0,Pound -False,1031,4.41176,4.31002,4.31002,355,37,1200.0,Dollar -False,2292,4.08333,4.0598,4.0598,347,30,455.0,Euro -False,2129,4.29474,4.34602,4.34602,343,41,455.0,Euro -True,5522,3.58696,3.72794,3.72794,341,34,455.0,Dollar -False,1365,4.5,4.51859,4.51859,338,19,455.0,Pound -False,1651,4.37838,4.42729,4.42729,331,40,455.0,Euro -True,11014,4.02326,4.14024,4.14024,318,21,455.0,Dollar -False,729,4.40476,4.43761,4.43761,313,20,455.0,Pound -False,1268,4.2,4.27305,4.27305,300,16,455.0,Pound -False,1535,4.42797,4.4193,4.4193,297,47,455.0,Euro -False,1861,3.94737,3.90384,3.90384,290,96,455.0,Pound -True,1083,4.0,3.95073,3.95073,281,18,455.0,Euro -False,1034,4.01852,4.02685,4.02685,276,30,455.0,Euro -False,911,4.51667,4.54542,4.54542,272,13,455.0,Euro -False,1034,3.95312,4.02727,4.02727,267,20,455.0,Euro -True,1560,4.30435,4.29167,4.29167,267,47,455.0,Pound -True,1195,4.51724,4.4527,4.4527,257,17,455.0,Pound -True,1099,4.69277,4.66137,4.66137,253,67,455.0,Dollar -True,1008,4.53431,4.57349,4.57349,252,11,455.0,Pound -True,967,4.67241,4.66403,4.66403,251,26,455.0,Pound -False,6244,3.55,3.23487,3.23487,249,54,455.0,Pound -True,3806,3.15,3.20773,3.20773,247,23,455.0,Pound -False,8769,3.45,3.40185,3.40185,246,47,455.0,Pound -False,1755,4.32,4.33666,4.33666,244,56,455.0,Euro -True,688,4.23684,4.13198,4.13198,243,85,2160.0,Euro -False,1350,3.75,3.70662,3.70662,241,40,455.0,Euro -False,812,4.56667,4.58874,4.58874,232,20,455.0,Pound -False,814,4.43333,4.42205,4.42205,230,36,455.0,Pound -False,1101,4.2234,4.17568,4.17568,229,29,455.0,Pound -True,1048,4.39474,4.45109,4.45109,229,21,455.0,Pound -False,3549,3.71875,3.68085,3.68085,226,26,455.0,Dollar -False,2212,4.49286,4.5008,4.5008,225,35,455.0,Dollar -False,889,4.1,4.09685,4.09685,225,32,455.0,Euro -True,1190,4.11538,4.11406,4.11406,225,43,455.0,Dollar -False,833,4.55,4.5397,4.5397,224,21,455.0,Euro -True,1193,4.61765,4.59861,4.59861,217,50,455.0,Dollar -True,939,4.66667,4.62239,4.62239,216,72,455.0,Pound -True,1105,4.54878,4.56573,4.56573,212,20,455.0,Pound -False,4333,4.04348,4.08655,4.08655,209,18,468.0,Dollar -False,596,4.19444,4.11553,4.11553,202,30,455.0,Pound -False,6119,4.35,4.30888,4.30888,199,7,455.0,Dollar -True,840,4.61538,4.58363,4.58363,197,30,455.0,Euro -False,993,4.5,4.52178,4.52178,197,34,455.0,Dollar -True,475,4.35,4.41781,4.41781,190,29,455.0,Euro -False,716,3.8,3.47923,3.47923,188,48,455.0,Euro -True,724,4.2381,4.32423,4.32423,187,27,455.0,Pound -True,964,4.41176,4.39311,4.39311,186,28,455.0,Pound -True,842,4.39241,4.40086,4.40086,186,48,455.0,Dollar -True,1069,4.5625,4.5534,4.5534,185,27,455.0,Dollar -True,583,4.56329,4.58332,4.58332,183,45,455.0,Dollar -True,8392,4.45745,4.45383,4.45383,179,57,455.0,Euro -False,734,4.5,4.53496,4.53496,179,38,455.0,Dollar -False,597,4.47443,4.49273,4.49273,177,40,700.0,Pound -False,964,4.54167,4.55747,4.55747,173,16,455.0,Pound -True,627,4.28788,4.26859,4.26859,173,223,2560.0,Dollar -True,963,4.11111,4.12302,4.12302,173,32,455.0,Euro -True,556,4.21429,4.24356,4.24356,173,50,455.0,Euro -False,3757,3.5625,3.38601,3.38601,172,39,455.0,Euro -True,571,4.16667,4.13377,4.13377,171,31,455.0,Euro -True,390,3.8125,3.79653,3.79653,169,14,455.0,Dollar -False,516,4.69048,4.63954,4.63954,168,78,455.0,Dollar -False,2262,4.07143,4.12338,4.12338,168,35,455.0,Pound -False,599,4.60484,4.60277,4.60277,163,47,455.0,Dollar -True,841,3.85714,3.66205,3.66205,160,33,455.0,Euro -False,600,3.96667,3.92444,3.92444,158,86,455.0,Dollar -False,407,4.55714,4.6353,4.6353,153,15,455.0,Dollar -False,595,4.4125,4.44646,4.44646,152,67,455.0,Pound -True,520,4.04839,4.13952,4.13952,151,83,720.0,Euro -True,1044,4.2,4.37009,4.37009,150,36,455.0,Dollar -False,831,4.09524,4.10025,4.10025,148,25,455.0,Euro -True,2057,3.85,4.02563,4.02563,147,33,455.0,Euro -True,554,4.60714,4.64716,4.64716,146,327,455.0,Pound -False,878,4.36364,4.38216,4.38216,142,33,455.0,Pound -False,449,4.45,4.56124,4.56124,142,21,455.0,Dollar -False,658,4.5,4.47443,4.47443,142,11,455.0,Pound -True,367,4.25,4.30366,4.30366,139,80,455.0,Pound -True,1309,4.48611,4.50097,4.50097,139,30,455.0,Dollar -False,712,4.0,4.00282,4.00282,138,28,455.0,Euro -True,505,4.58824,4.55648,4.55648,137,14,455.0,Euro -False,1116,4.39474,4.44132,4.44132,137,9,455.0,Dollar -False,403,4.44737,4.44711,4.44711,137,59,455.0,Pound -True,1070,4.54082,4.58429,4.58429,138,33,455.0,Dollar -False,739,3.95,3.9105,3.9105,135,44,455.0,Euro -False,1305,4.31818,4.31391,4.31391,135,51,455.0,Dollar -True,400,4.23529,4.29834,4.29834,133,59,455.0,Dollar -True,540,4.25,4.21007,4.21007,133,36,455.0,Dollar -False,956,4.42857,4.42627,4.42627,133,71,455.0,Euro -False,607,3.7,3.91652,3.91652,132,32,455.0,Euro -False,504,4.33333,4.30811,4.30811,131,23,3200.0,Pound -True,283,4.1,4.10727,4.10727,130,16,455.0,Dollar -True,620,4.46667,4.53044,4.53044,129,11,455.0,Pound -False,1208,3.6,3.46798,3.46798,128,9,455.0,Dollar -True,873,4.3,4.32542,4.32542,128,50,455.0,Euro -False,1275,3.65,3.71179,3.71179,127,53,455.0,Pound -True,674,3.25,3.4529,3.4529,126,15,455.0,Euro -False,338,3.89394,4.09072,4.09072,125,60,455.0,Euro -False,345,4.25,4.20897,4.20897,122,29,455.0,Dollar -False,897,4.09524,4.06447,4.06447,122,43,455.0,Pound -True,901,4.26,4.34582,4.34582,122,30,455.0,Pound -True,372,4.28378,4.30291,4.30291,122,37,455.0,Pound -True,2345,4.35,4.52929,4.52929,121,11,468.0,Pound -True,5016,3.55,3.49537,3.49537,119,21,455.0,Pound -False,1100,4.25,4.1073,4.1073,118,17,455.0,Pound -True,2389,4.3,4.24521,4.24521,116,23,455.0,Pound -True,666,4.27451,4.31924,4.31924,115,32,455.0,Pound -False,379,4.66438,4.649,4.649,113,37,455.0,Dollar -True,438,3.92857,3.96857,3.96857,112,13,455.0,Pound -True,672,3.9,3.85663,3.85663,111,100,455.0,Dollar -True,670,4.52273,4.47248,4.47248,109,25,455.0,Dollar -False,759,3.97059,3.62914,3.62914,108,65,455.0,Euro -True,419,4.11765,4.01707,4.01707,107,36,455.0,Dollar -False,505,4.4,4.46604,4.46604,107,41,455.0,Euro -False,324,4.13333,4.23507,4.23507,107,13,880.0,Pound -True,319,3.78571,3.85084,3.85084,107,7,455.0,Pound -False,348,4.1,4.14807,4.14807,105,20,455.0,Euro -True,535,3.75,3.77939,3.77939,105,50,455.0,Dollar -False,369,3.95455,4.18403,4.18403,105,37,455.0,Euro -True,513,3.91667,3.97343,3.97343,104,143,462.0,Euro -False,3556,3.77083,3.8221,3.8221,104,21,455.0,Dollar -False,294,4.23529,4.20207,4.20207,102,14,455.0,Pound -True,311,4.0,3.90795,3.90795,101,63,455.0,Dollar -True,344,4.55263,4.53719,4.53719,101,53,3200.0,Pound -False,364,4.43478,4.43526,4.43526,101,15,455.0,Pound -False,554,4.1,4.09899,4.09899,100,24,455.0,Euro -False,1117,4.32143,4.42856,4.42856,100,41,455.0,Euro -False,570,4.625,4.53411,4.53411,100,65,455.0,Euro -True,331,4.5,4.43218,4.43218,99,15,455.0,Euro -False,515,4.6,4.61486,4.61486,99,15,455.0,Dollar -True,609,4.42105,4.42924,4.42924,99,33,455.0,Dollar -False,314,4.44737,4.44706,4.44706,98,31,455.0,Dollar -False,430,3.5,3.54715,3.54715,97,20,455.0,Dollar -False,285,4.40625,4.37665,4.37665,97,10,455.0,Dollar -True,409,4.61538,4.68213,4.68213,97,96,455.0,Dollar -False,470,4.5,4.53519,4.53519,94,16,455.0,Euro -False,656,4.09091,4.08542,4.08542,94,17,455.0,Dollar -False,398,4.33333,4.28971,4.28971,94,11,640.0,Dollar -False,1096,4.08333,4.07082,4.07082,93,38,455.0,Euro -True,760,4.47059,4.46277,4.46277,92,96,455.0,Dollar -True,707,3.8,3.77818,3.77818,92,28,455.0,Dollar -False,311,4.35,4.29676,4.29676,92,19,455.0,Euro -True,554,4.45,4.45318,4.45318,91,16,455.0,Dollar -False,274,4.19048,4.20206,4.20206,90,18,455.0,Dollar -False,271,5.0,5.0,5.0,90,27,455.0,Dollar -False,431,3.6,3.70259,3.70259,89,24,455.0,Euro -False,533,4.3,4.3076,4.3076,88,46,455.0,Euro -True,281,4.48,4.40578,4.40578,87,31,455.0,Pound -True,361,4.0,4.0243,4.0243,86,170,455.0,Pound -True,233,4.15,4.01592,4.01592,86,25,455.0,Euro -True,482,4.30435,4.2856,4.2856,85,112,455.0,Euro -False,1792,4.4,4.50888,4.50888,86,83,455.0,Pound -False,361,3.71429,3.65731,3.65731,84,18,455.0,Dollar -False,337,3.97619,4.11965,4.11965,84,50,455.0,Euro -False,192,4.35,4.33052,4.33052,82,26,455.0,Pound -True,743,3.2,3.21789,3.21789,82,30,455.0,Euro -True,501,4.86066,4.82514,4.82514,81,66,455.0,Pound -False,680,3.55,3.49727,3.49727,79,20,455.0,Euro -True,220,4.2,4.21688,4.21688,79,36,455.0,Pound -True,311,3.85,3.77031,3.77031,79,71,455.0,Dollar -True,284,4.05,4.12318,4.12318,79,49,455.0,Pound -False,1740,4.5,4.49148,4.49148,78,22,455.0,Euro -False,412,4.31667,4.27641,4.27641,78,83,455.0,Dollar -True,368,4.52597,4.50604,4.50604,80,13,1600.0,Dollar -True,299,3.95238,3.93766,3.93766,76,70,455.0,Dollar -False,226,4.45,4.3998,4.3998,74,10,3200.0,Euro -False,445,4.4,4.39157,4.39157,74,11,455.0,Dollar -True,781,3.65,3.55159,3.55159,72,16,455.0,Euro -True,328,4.15,4.03845,4.03845,71,32,455.0,Dollar -True,575,3.95,3.90542,3.90542,71,18,455.0,Pound -False,373,3.85294,3.87542,3.87542,71,27,455.0,Dollar -False,638,4.5,4.48132,4.48132,70,21,455.0,Pound -True,398,4.45833,4.42734,4.42734,69,51,455.0,Pound -True,296,4.15,4.25295,4.25295,69,14,455.0,Dollar -False,208,3.55,3.3908,3.3908,69,29,455.0,Dollar -True,369,4.7,4.71104,4.71104,67,14,455.0,Euro -False,203,3.3,3.41775,3.41775,66,11,455.0,Euro -True,1009,3.95,3.69725,3.69725,66,39,455.0,Euro -True,248,3.55,3.59864,3.59864,65,15,455.0,Pound -True,503,4.3,4.328,4.328,65,54,455.0,Euro -True,375,4.5,4.47681,4.47681,65,36,455.0,Dollar -True,320,3.8,4.06621,4.06621,65,22,455.0,Pound -False,265,3.9,3.95984,3.95984,65,77,455.0,Dollar -True,245,4.55,4.55844,4.55844,64,69,474.0,Dollar -False,174,4.55556,4.56246,4.56246,64,23,455.0,Pound -False,308,4.1,4.08901,4.08901,63,10,455.0,Pound -False,874,4.55,4.4894,4.4894,63,29,455.0,Pound -False,407,4.39286,4.31165,4.31165,63,39,455.0,Pound -True,278,4.6,4.5903,4.5903,63,90,3040.0,Dollar -True,529,4.05,3.91044,3.91044,62,43,455.0,Euro -False,378,4.1,3.83566,3.83566,62,112,455.0,Pound -False,6213,3.7,4.06775,4.06775,61,13,455.0,Euro -False,165,4.35,4.35368,4.35368,61,38,455.0,Euro -True,306,4.35,4.30944,4.30944,61,42,455.0,Dollar -True,394,4.9,4.91805,4.91805,61,13,455.0,Dollar -False,1007,4.45,4.42586,4.42586,60,21,455.0,Euro -False,171,4.375,4.3736,4.3736,60,24,455.0,Dollar -False,406,4.45,4.53731,4.53731,60,24,455.0,Euro -True,2201,4.38983,4.41393,4.41393,60,35,455.0,Euro -False,301,4.35,4.13664,4.13664,60,21,455.0,Pound -True,183,4.4,4.45298,4.45298,59,5,560.0,Dollar -True,180,4.28947,4.28485,4.28485,59,29,455.0,Euro -True,228,4.6,4.5616,4.5616,59,26,455.0,Euro -True,532,4.15,4.16668,4.16668,59,31,455.0,Pound -False,160,4.07692,3.96904,3.96904,59,27,455.0,Dollar -False,354,3.31818,3.27315,3.27315,58,80,455.0,Pound -False,221,3.9,3.96211,3.96211,58,28,455.0,Dollar -False,1089,4.41667,4.40286,4.40286,58,9,455.0,Euro -True,299,4.05,3.72097,3.72097,58,22,455.0,Pound -True,440,3.65,3.56049,3.56049,58,17,455.0,Euro -True,582,4.05,4.02195,4.02195,58,23,455.0,Pound -True,209,3.78571,3.65766,3.65766,58,39,455.0,Euro -True,185,4.3,4.21529,4.21529,57,111,455.0,Dollar -True,218,4.15,4.12178,4.12178,57,46,455.0,Dollar -True,178,4.48214,4.45297,4.45297,56,23,640.0,Pound -True,2449,2.7,2.0428,2.0428,56,47,455.0,Euro -False,284,3.9,3.97374,3.97374,56,15,455.0,Euro -True,458,4.59375,4.62661,4.62661,55,16,480.0,Pound -False,610,3.8,3.96599,3.96599,55,52,455.0,Dollar -False,372,4.5,4.46236,4.46236,55,37,455.0,Pound -False,180,4.5625,4.50036,4.50036,54,23,455.0,Pound -False,411,4.88889,4.86944,4.86944,55,52,455.0,Pound -False,405,3.4,3.42993,3.42993,54,29,455.0,Dollar -True,156,4.61765,4.55284,4.55284,54,37,455.0,Dollar -True,165,3.61111,3.36917,3.36917,53,43,455.0,Dollar -True,416,4.0,3.96598,3.96598,53,55,455.0,Euro -True,224,4.2,4.15679,4.15679,52,27,455.0,Pound -False,121,3.9,3.92914,3.92914,51,35,455.0,Pound -False,920,3.7,3.69555,3.69555,51,8,455.0,Pound -False,932,4.34211,4.49558,4.49558,51,14,455.0,Dollar -False,179,4.54,4.46597,4.46597,50,31,455.0,Dollar -False,122,3.95,3.93431,3.93431,50,9,455.0,Euro -False,1118,3.95,3.85874,3.85874,50,32,455.0,Pound -False,448,4.62245,4.55671,4.55671,50,51,455.0,Dollar -True,414,4.53061,4.49478,4.49478,49,58,455.0,Euro -False,151,4.62903,4.63427,4.63427,49,16,455.0,Euro -False,258,4.5,4.49196,4.49196,50,74,455.0,Euro -True,196,3.9,3.82752,3.82752,48,26,455.0,Dollar -False,159,4.7,4.68826,4.68826,48,19,455.0,Pound -True,148,4.15,4.13065,4.13065,48,19,455.0,Dollar -False,198,4.4,4.40858,4.40858,48,86,455.0,Pound -False,348,3.8,3.90528,3.90528,48,25,455.0,Dollar -False,522,3.45,3.44862,3.44862,47,14,455.0,Pound -False,359,4.5,4.53483,4.53483,47,20,455.0,Pound -True,247,4.1,4.10886,4.10886,47,15,455.0,Dollar -False,251,4.2,4.7442,4.7442,47,82,455.0,Pound -False,171,4.2,4.37516,4.37516,46,15,455.0,Pound -True,1521,4.6,4.68833,4.68833,45,5,455.0,Dollar -True,1245,4.75,4.76837,4.76837,45,9,455.0,Euro -True,125,3.55,3.54472,3.54472,45,27,455.0,Euro -True,117,3.65,3.71938,3.71938,45,34,455.0,Pound -False,289,4.5,4.4289,4.4289,45,69,455.0,Dollar -True,147,4.3,4.1216,4.1216,45,16,455.0,Euro -False,277,4.83333,4.82608,4.82608,44,76,455.0,Euro -True,556,4.54167,4.79213,4.79213,44,11,455.0,Dollar -False,313,4.6,4.63315,4.63315,44,25,455.0,Dollar -True,237,3.75,3.69544,3.69544,43,18,455.0,Dollar -True,206,4.05,4.02196,4.02196,43,92,455.0,Pound -False,137,4.75862,4.81295,4.81295,43,41,455.0,Pound -False,292,4.15,4.3192,4.3192,42,60,455.0,Pound -False,213,4.75,4.72885,4.72885,42,16,455.0,Dollar -False,280,3.9,3.90514,3.90514,42,12,640.0,Dollar -False,330,3.9,3.98231,3.98231,42,16,455.0,Pound -False,218,4.31944,4.28765,4.28765,41,86,455.0,Pound -False,148,4.78049,4.7829,4.7829,41,24,455.0,Euro -True,125,4.95455,4.96283,4.96283,41,33,455.0,Dollar -False,263,4.69737,4.66728,4.66728,44,41,455.0,Euro -True,408,4.45,4.52327,4.52327,41,38,455.0,Dollar -True,624,3.45,3.34056,3.34056,41,27,455.0,Euro -False,333,3.6,3.64983,3.64983,41,14,455.0,Euro -True,183,3.55,3.54414,3.54414,41,15,455.0,Pound -True,353,4.1,4.1022,4.1022,41,16,455.0,Euro -False,94,4.33333,4.3173,4.3173,40,5,2240.0,Dollar -False,11512,4.3,4.26211,4.26211,40,6,455.0,Dollar -False,76,4.48718,4.47216,4.47216,40,47,455.0,Euro -False,143,3.8,3.79164,3.79164,39,59,455.0,Dollar -False,231,4.1,4.08858,4.08858,39,29,455.0,Pound -True,1107,4.0,3.7462,3.7462,39,11,455.0,Pound -False,108,4.7,4.70078,4.70078,40,41,455.0,Dollar -False,247,4.90909,4.89197,4.89197,39,24,455.0,Pound -True,220,4.3,4.3044,4.3044,39,43,455.0,Euro -False,3619,4.39474,4.46048,4.46048,44,8,455.0,Pound -False,3354,3.94737,3.89299,3.89299,38,16,455.0,Euro -True,131,4.0,3.96122,3.96122,38,25,455.0,Dollar -False,128,4.05,4.09218,4.09218,37,26,455.0,Dollar -False,203,4.53125,4.51107,4.51107,37,55,455.0,Dollar -False,1182,3.75,3.5811,3.5811,37,18,455.0,Pound -True,132,4.6,4.59159,4.59159,37,12,960.0,Euro -False,117,4.3,4.25585,4.25585,37,24,455.0,Dollar -False,427,4.4,4.42493,4.42493,37,45,455.0,Euro -True,304,4.78378,4.75266,4.75266,37,73,455.0,Pound -True,95,4.20833,4.105,4.105,37,55,455.0,Euro -False,325,4.2,4.1875,4.1875,37,20,455.0,Dollar -False,1256,4.25,3.96126,3.96126,37,80,455.0,Dollar -False,194,3.6,3.66981,3.66981,36,13,455.0,Pound -True,147,3.6,3.58761,3.58761,36,30,455.0,Pound -False,822,3.8,3.71294,3.71294,36,14,455.0,Euro -False,281,4.05,4.19555,4.19555,35,37,455.0,Pound -False,206,4.7,4.6879,4.6879,35,42,455.0,Dollar -True,123,4.70833,4.71992,4.71992,35,50,455.0,Dollar -True,103,4.15,4.11207,4.11207,34,17,455.0,Dollar -True,228,4.15,4.22254,4.22254,34,11,455.0,Euro -True,315,3.85,3.85202,3.85202,34,28,455.0,Dollar -True,96,4.5,4.4841,4.4841,34,23,455.0,Pound -False,86,4.35,4.40197,4.40197,34,14,455.0,Dollar -True,163,4.25,4.27899,4.27899,34,41,455.0,Pound -True,182,4.55,4.5208,4.5208,34,19,455.0,Euro -False,235,3.95,3.83304,3.83304,34,37,455.0,Euro -False,322,4.875,4.84695,4.84695,34,106,455.0,Dollar -False,5228,4.05,4.12105,4.12105,34,27,455.0,Euro -False,382,4.65,4.65811,4.65811,33,32,455.0,Dollar -True,108,4.15909,4.0924,4.0924,33,38,455.0,Dollar -False,224,4.0,3.94188,3.94188,33,14,455.0,Dollar -False,173,3.45,3.31605,3.31605,33,13,455.0,Euro -False,368,4.6,4.62283,4.62283,33,12,455.0,Dollar -True,238,4.04167,4.0241,4.0241,33,59,455.0,Dollar -False,130,4.25,4.55759,4.55759,33,160,455.0,Pound -True,223,4.45,4.39796,4.39796,33,52,455.0,Dollar -True,299,3.65,3.59124,3.59124,33,27,455.0,Euro -True,1569,4.2,4.04881,4.04881,33,5,455.0,Euro -True,106,4.33333,4.25832,4.25832,33,8,1200.0,Pound -False,150,3.27273,3.14325,3.14325,33,11,455.0,Pound -False,446,4.4,4.34559,4.34559,32,22,455.0,Dollar -False,135,4.75,4.76013,4.76013,32,45,455.0,Euro -True,151,4.3,4.11469,4.11469,32,18,455.0,Pound -False,469,4.3,4.3643,4.3643,32,63,455.0,Euro -True,555,4.19643,4.23933,4.23933,32,25,455.0,Pound -False,65,4.0,4.00284,4.00284,31,47,455.0,Pound -True,1210,3.45,3.27303,3.27303,31,12,455.0,Euro -True,1000,4.55,4.47251,4.47251,31,35,455.0,Euro -False,113,4.2,4.15056,4.15056,32,262,455.0,Dollar -True,125,3.85,3.78608,3.78608,31,11,455.0,Euro -True,128,4.75,4.83178,4.83178,30,56,455.0,Pound -False,523,4.15,4.26823,4.26823,30,17,455.0,Dollar -False,139,4.75,4.76442,4.76442,30,25,455.0,Dollar -False,130,4.11111,3.92691,3.92691,30,14,455.0,Dollar -False,155,4.2,4.19563,4.19563,30,12,455.0,Pound -False,76,4.05,4.2164,4.2164,30,6,455.0,Euro -True,159,4.1,4.1459,4.1459,29,56,455.0,Euro -False,320,3.95,3.93423,3.93423,29,16,455.0,Euro -False,306,4.66667,4.59051,4.59051,29,8,455.0,Dollar -False,84,3.6,3.6232,3.6232,29,22,455.0,Pound -False,79,4.05,3.943,3.943,28,42,455.0,Dollar -True,965,3.45,3.39315,3.39315,28,21,455.0,Dollar -False,112,4.84211,4.78834,4.78834,28,8,700.0,Euro -True,118,3.9,3.48218,3.48218,28,22,3200.0,Euro -False,735,3.85,3.65473,3.65473,28,27,455.0,Pound -True,117,4.70588,4.70565,4.70565,28,12,455.0,Dollar -False,97,4.61538,4.59979,4.59979,28,10,455.0,Pound -False,307,4.87037,4.84666,4.84666,27,43,455.0,Dollar -False,796,4.53704,4.53474,4.53474,27,21,455.0,Pound -True,112,4.5,4.4836,4.4836,27,27,455.0,Pound -False,98,4.51852,4.36685,4.36685,27,29,455.0,Dollar -True,71,3.55,3.46208,3.46208,27,5,455.0,Pound -True,74,3.85,3.82701,3.82701,27,15,455.0,Dollar -True,63,4.41667,4.49747,4.49747,26,45,455.0,Euro -False,223,3.6,3.6197,3.6197,26,93,455.0,Dollar -True,254,4.64286,4.62637,4.62637,26,63,455.0,Euro -True,178,3.95,4.18735,4.18735,26,33,455.0,Pound -False,3903,4.28846,4.21047,4.21047,35,18,455.0,Pound -True,687,4.55,4.70297,4.70297,26,10,455.0,Pound -False,119,4.35,4.4304,4.4304,26,15,455.0,Dollar -False,251,4.5,4.51189,4.51189,26,51,455.0,Dollar -False,101,4.7,4.64453,4.64453,26,130,800.0,Dollar -True,341,3.75,3.75673,3.75673,25,21,455.0,Pound -True,96,3.8,3.86471,3.86471,25,18,455.0,Euro -False,95,3.6,3.50505,3.50505,25,12,455.0,Pound -True,76,3.6,3.86112,3.86112,25,9,455.0,Euro -False,626,4.3,4.14109,4.14109,25,15,455.0,Euro -False,131,4.0,4.02418,4.02418,24,31,455.0,Dollar -False,86,3.85,3.87428,3.87428,24,9,455.0,Euro -False,99,2.9,2.73803,2.73803,24,15,455.0,Euro -True,129,4.35,4.45602,4.45602,24,26,455.0,Pound -False,123,3.75,3.36965,3.36965,24,18,455.0,Dollar -False,562,4.1,4.08693,4.08693,24,22,455.0,Euro -False,131,4.63636,4.71594,4.71594,24,19,455.0,Dollar -True,233,4.45238,4.46581,4.46581,24,66,455.0,Pound -False,99,3.75,3.7873,3.7873,24,89,455.0,Dollar -False,148,3.55,3.57715,3.57715,24,21,455.0,Pound -False,156,4.6,4.60014,4.60014,24,9,455.0,Pound -True,77,4.6,4.64474,4.64474,24,36,1040.0,Dollar -False,468,4.25,4.30723,4.30723,24,11,455.0,Euro -True,113,4.35,4.4517,4.4517,24,19,455.0,Euro -True,84,3.8,4.05367,4.05367,23,14,455.0,Dollar -False,111,4.1,4.15133,4.15133,23,9,455.0,Euro -False,100,3.7,3.70361,3.70361,23,9,455.0,Pound -False,72,3.9,3.88147,3.88147,23,22,455.0,Pound -False,310,3.88889,3.95588,3.95588,23,49,455.0,Pound -True,3431,4.52174,4.39962,4.39962,28,6,455.0,Pound -True,70,3.5,3.52614,3.52614,23,22,455.0,Pound -False,97,3.9,3.84466,3.84466,22,5,455.0,Dollar -True,102,4.6,4.59304,4.59304,22,10,455.0,Euro -False,94,4.25,4.31881,4.31881,22,34,455.0,Pound -False,215,4.2,4.20957,4.20957,22,55,455.0,Dollar -False,224,3.95,4.11168,4.11168,22,50,455.0,Euro -True,55,3.45,3.32818,3.32818,22,25,3200.0,Pound -False,60,4.54167,4.50943,4.50943,23,5,455.0,Pound -True,109,4.85,4.85887,4.85887,22,16,455.0,Pound -True,63,4.2,4.2585,4.2585,22,21,455.0,Dollar -True,91,4.59524,4.53863,4.53863,22,29,455.0,Dollar -False,88,4.5,4.60068,4.60068,22,39,455.0,Euro -False,56,3.95,3.98696,3.98696,22,17,455.0,Pound -True,135,4.04545,4.06409,4.06409,23,107,455.0,Euro -True,113,2.95,2.89383,2.89383,22,21,455.0,Pound -True,79,3.3,3.24354,3.24354,22,24,455.0,Pound -False,95,4.2,4.22575,4.22575,21,10,455.0,Pound -False,71,3.95,3.95385,3.95385,21,28,455.0,Pound -True,148,3.7,3.7143,3.7143,21,16,455.0,Dollar -False,609,3.85,4.1033,4.1033,21,6,455.0,Euro -False,83,4.8,4.78804,4.78804,21,15,455.0,Dollar -True,53,4.23333,4.22953,4.22953,21,13,455.0,Pound -False,65,3.8,3.82395,3.82395,21,18,455.0,Dollar -False,73,4.2,4.08578,4.08578,21,23,455.0,Euro -True,106,3.75,3.46392,3.46392,21,9,455.0,Pound -False,59,4.8,4.85079,4.85079,21,6,455.0,Dollar -False,69,3.05,3.06304,3.06304,20,9,455.0,Euro -False,106,4.8,4.78475,4.78475,20,160,455.0,Dollar -True,92,3.85,3.8444,3.8444,20,18,455.0,Euro -False,156,3.85,3.86165,3.86165,20,32,455.0,Euro -False,70,3.85,3.83798,3.83798,20,15,455.0,Pound -False,57,3.6,3.6097,3.6097,20,14,455.0,Pound -False,69,4.65,4.65586,4.65586,21,14,455.0,Dollar -False,83,3.63636,3.60533,3.60533,20,28,455.0,Dollar -True,100,4.3,4.34328,4.34328,20,16,455.0,Pound -True,99,3.55,3.49593,3.49593,20,13,455.0,Pound -True,42,3.8,3.85741,3.85741,20,15,455.0,Dollar -False,78,4.55263,4.62149,4.62149,19,61,455.0,Euro -True,71,3.65,3.79879,3.79879,19,14,455.0,Dollar -False,46,4.20833,4.20583,4.20583,19,59,455.0,Euro -False,173,3.95,3.90499,3.90499,19,75,455.0,Dollar -False,170,4.76316,4.7715,4.7715,19,38,455.0,Pound -True,73,4.4,4.38705,4.38705,19,14,455.0,Euro -False,85,3.0,2.90589,2.90589,19,11,455.0,Dollar -False,75,4.1,4.17318,4.17318,19,32,455.0,Dollar -False,68,4.2,4.20279,4.20279,19,5,455.0,Pound -False,71,3.55,3.84056,3.84056,19,6,455.0,Euro -True,62,3.55,3.53875,3.53875,19,27,455.0,Euro -False,182,4.52632,4.57412,4.57412,19,36,455.0,Dollar -True,50,2.5,2.45557,2.45557,19,10,455.0,Pound -False,69,4.3,4.31485,4.31485,19,85,455.0,Pound -True,51,4.5,4.52028,4.52028,18,14,455.0,Dollar -True,55,4.03846,4.02414,4.02414,18,25,455.0,Pound -False,138,3.95,3.83833,3.83833,18,15,455.0,Dollar -True,257,4.63889,4.66547,4.66547,20,25,455.0,Euro -True,57,4.47222,4.51039,4.51039,18,58,455.0,Pound -True,72,4.21875,4.19498,4.19498,18,76,455.0,Dollar -False,71,3.75,3.8119,3.8119,18,45,455.0,Euro -True,144,4.0,3.9162,3.9162,18,6,1040.0,Euro -True,240,4.3,4.33095,4.33095,18,24,455.0,Euro -False,45,4.8,4.78535,4.78535,18,40,1360.0,Euro -True,716,3.75,4.17878,4.17878,17,10,455.0,Dollar -False,406,3.31818,3.47467,3.47467,17,10,455.0,Dollar -True,113,3.65,3.60452,3.60452,17,5,455.0,Dollar -False,353,4.15,4.36302,4.36302,17,85,455.0,Euro -False,52,3.4,3.38496,3.38496,17,7,455.0,Euro -True,38,4.05,3.97207,3.97207,17,7,3200.0,Dollar -True,42,4.625,4.3713,4.3713,17,22,455.0,Pound -True,85,4.35294,4.35171,4.35171,17,77,455.0,Pound -False,162,3.4,3.38125,3.38125,17,10,455.0,Pound -True,105,4.33333,4.3291,4.3291,17,34,455.0,Pound -True,441,3.75,3.3395,3.3395,17,130,455.0,Euro -True,95,4.6,4.48225,4.48225,17,43,455.0,Euro -True,187,3.4,3.26726,3.26726,17,17,455.0,Euro -False,47,4.2,4.17935,4.17935,17,32,455.0,Dollar -False,60,4.78571,4.7251,4.7251,17,45,455.0,Pound -True,181,3.95,4.0295,4.0295,17,42,455.0,Pound -False,196,4.15,4.16092,4.16092,17,17,455.0,Dollar -False,51,3.5,3.52034,3.52034,17,28,455.0,Dollar -True,42,3.95,3.9767,3.9767,17,10,455.0,Dollar -False,192,4.2,3.95054,3.95054,17,22,455.0,Dollar -False,44,4.5,4.49542,4.49542,17,30,455.0,Euro -False,399,4.2,4.1432,4.1432,17,61,455.0,Pound -False,60,2.6,2.49837,2.49837,16,6,455.0,Euro -True,99,4.3,4.19712,4.19712,16,102,455.0,Euro -True,52,3.8,3.71328,3.71328,16,5,455.0,Pound -True,483,4.3,4.25606,4.25606,16,27,2400.0,Dollar -True,34,4.1,4.04638,4.04638,16,6,455.0,Dollar -False,54,4.72727,4.77366,4.77366,16,12,455.0,Euro -True,55,4.5,4.48996,4.48996,16,15,455.0,Dollar -True,60,3.9,3.90008,3.90008,16,10,455.0,Pound -True,1468,3.6,3.46876,3.46876,16,5,455.0,Euro -True,341,3.35,3.53415,3.53415,16,66,455.0,Euro -False,92,4.65,4.59929,4.59929,15,21,455.0,Euro -False,47,4.0,3.9292,3.9292,15,18,455.0,Pound -True,33,3.9,3.92225,3.92225,15,22,455.0,Pound -True,66,4.1,4.01853,4.01853,15,16,455.0,Pound -True,63,4.3,4.32294,4.32294,15,6,455.0,Pound -False,72,4.05,4.07725,4.07725,15,61,455.0,Pound -False,54,4.05,4.02335,4.02335,15,17,455.0,Pound -True,73,4.25,4.07132,4.07132,15,27,455.0,Euro -True,60,3.85,3.84111,3.84111,15,15,455.0,Pound -True,99,4.45,4.44193,4.44193,15,25,455.0,Euro -True,195,4.1,4.09493,4.09493,15,15,455.0,Dollar -False,62,3.1,3.36515,3.36515,15,13,455.0,Pound -True,105,4.25,4.31834,4.31834,15,31,455.0,Dollar -False,92,4.35,4.35711,4.35711,15,24,455.0,Pound -True,429,4.35,4.14644,4.14644,15,6,455.0,Dollar -False,74,4.55,4.55579,4.55579,15,16,455.0,Dollar -False,450,4.85,4.89253,4.89253,15,220,455.0,Pound -True,249,4.05,4.24627,4.24627,15,8,455.0,Euro -False,69,4.4,4.41413,4.41413,15,15,1440.0,Dollar -False,92,3.65,3.70119,3.70119,14,32,455.0,Euro -False,71,1.75,1.80633,1.80633,14,17,455.0,Dollar -True,58,4.3,4.33658,4.33658,14,27,455.0,Euro -False,71,3.65,3.75936,3.75936,14,17,455.0,Pound -False,64,3.8,3.82527,3.82527,14,27,455.0,Euro -True,69,4.35,4.30105,4.30105,14,33,455.0,Euro -True,23,4.45,4.40646,4.40646,14,6,3200.0,Pound -False,49,4.45,4.46344,4.46344,14,22,455.0,Pound -True,101,4.35,4.25357,4.25357,14,7,640.0,Dollar -False,84,2.95,2.98984,2.98984,14,25,455.0,Dollar -False,104,3.25,3.07712,3.07712,14,12,455.0,Pound -True,56,3.55,3.43157,3.43157,14,8,455.0,Euro -False,83,4.3,4.36761,4.36761,14,29,455.0,Dollar -False,72,4.05,4.02746,4.02746,14,23,455.0,Euro -False,75,4.7,4.72376,4.72376,14,12,455.0,Euro -False,49,4.4,4.39932,4.39932,14,38,455.0,Euro -True,83,4.4,4.33731,4.33731,14,23,455.0,Pound -True,84,4.75,4.75115,4.75115,14,13,455.0,Dollar -True,64,4.9,4.91542,4.91542,14,14,455.0,Euro -False,323,4.5,4.41342,4.41342,14,7,455.0,Euro -True,36,4.75,4.71507,4.71507,13,14,455.0,Dollar -False,52,4.0,3.90997,3.90997,13,14,455.0,Euro -False,65,3.25,3.62112,3.62112,13,69,455.0,Euro -True,33,4.85,4.83983,4.83983,13,11,455.0,Dollar -True,50,4.35,4.31563,4.31563,13,22,455.0,Dollar -True,102,4.1,4.0511,4.0511,13,19,455.0,Euro -True,75,3.3,3.30925,3.30925,13,31,455.0,Pound -True,252,3.45,2.8211,2.8211,13,25,455.0,Euro -False,23,4.35,4.36903,4.36903,13,16,455.0,Pound -False,30,4.65,4.64823,4.64823,13,10,455.0,Euro -False,60,4.40909,4.43533,4.43533,13,39,455.0,Euro -False,74,4.05,3.98023,3.98023,13,13,455.0,Dollar -True,133,4.73077,4.65756,4.65756,13,109,455.0,Dollar -False,347,4.15,3.96182,3.96182,13,10,455.0,Euro -True,433,4.2,4.24213,4.24213,13,6,455.0,Dollar -False,35,4.0,4.37817,4.37817,13,12,455.0,Pound -False,35,4.25,4.52558,4.52558,13,28,455.0,Euro -False,193,4.4,4.4588,4.4588,12,478,455.0,Dollar -True,79,4.9,4.90196,4.90196,12,14,455.0,Dollar -True,159,4.1,4.09647,4.09647,12,28,455.0,Dollar -False,62,3.9,3.86839,3.86839,12,20,455.0,Pound -False,397,2.9,2.7973,2.7973,12,11,455.0,Euro -True,30,3.2,3.09603,3.09603,12,9,455.0,Euro -False,13,5.0,5.0,5.0,12,6,700.0,Pound -True,43,3.5,3.57304,3.57304,12,49,455.0,Euro -False,79,4.6,4.54981,4.54981,12,193,488.0,Dollar -False,126,3.55,3.45789,3.45789,12,12,455.0,Euro -True,60,4.25,4.24464,4.24464,12,15,455.0,Euro -True,31,4.9,4.90101,4.90101,12,37,1120.0,Dollar -True,545,4.25,4.30481,4.30481,12,61,455.0,Euro -True,72,2.95,2.76029,2.76029,12,33,455.0,Pound -True,36,4.95833,4.94078,4.94078,12,129,455.0,Euro -False,83,3.6,3.56627,3.56627,12,9,455.0,Euro -False,66,4.7,4.73606,4.73606,12,7,455.0,Dollar -True,33,4.15,4.18088,4.18088,12,20,455.0,Euro -True,75,4.85,4.84323,4.84323,12,13,455.0,Euro -False,79,3.25,3.23049,3.23049,12,8,455.0,Euro -True,43,3.6,3.59955,3.59955,12,8,455.0,Pound -True,39,4.4,4.43763,4.43763,12,5,455.0,Pound -False,56,3.85,3.70184,3.70184,12,48,455.0,Pound -True,66,3.9,3.71832,3.71832,12,17,455.0,Dollar -False,208,4.65,4.77173,4.77173,12,8,455.0,Dollar -False,89,4.05,4.07003,4.07003,12,33,455.0,Euro -False,47,5.0,5.0,5.0,11,25,455.0,Dollar -True,56,4.55,4.49148,4.49148,11,9,640.0,Pound -True,157,4.0,3.8472,3.8472,11,27,455.0,Pound -False,35,3.15,3.29111,3.29111,11,27,455.0,Euro -False,91,3.8,3.82198,3.82198,11,25,455.0,Dollar -False,408,3.27273,3.40348,3.40348,11,6,455.0,Dollar -False,159,4.0,3.99887,3.99887,11,51,455.0,Pound -True,35,4.25,4.05653,4.05653,11,19,455.0,Pound -False,61,4.05,3.8178,3.8178,11,14,455.0,Dollar -False,46,4.75,4.7282,4.7282,11,36,455.0,Pound -True,63,4.2,4.06555,4.06555,11,18,455.0,Pound -True,79,3.6,3.63575,3.63575,11,6,455.0,Dollar -True,74,4.95455,4.96033,4.96033,11,62,455.0,Pound -True,45,3.75,3.68338,3.68338,11,11,640.0,Pound -False,42,4.1,4.06359,4.06359,11,36,455.0,Dollar -False,41,4.4,4.46555,4.46555,11,21,455.0,Dollar -False,90,3.95,3.68941,3.68941,11,15,455.0,Pound -True,85,3.95,3.99804,3.99804,11,13,455.0,Dollar -True,94,4.25,4.25502,4.25502,11,29,455.0,Euro -True,22,3.55,3.54574,3.54574,11,9,455.0,Euro -False,61,4.55,4.48718,4.48718,11,6,455.0,Euro -True,45,4.85,4.83033,4.83033,11,12,1200.0,Euro -False,132,3.7,3.71853,3.71853,11,9,455.0,Pound -False,40,3.8,3.8955,3.8955,11,7,455.0,Pound -True,38,4.6,4.58547,4.58547,10,17,455.0,Euro -False,68,4.5,4.51733,4.51733,10,22,455.0,Dollar -True,21,3.85,3.77602,3.77602,10,22,3200.0,Euro -False,75,4.1,4.10081,4.10081,10,59,455.0,Dollar -False,28,4.45,4.11558,4.11558,10,9,455.0,Dollar -False,518,4.1,4.26186,4.26186,10,18,455.0,Pound -False,76,4.5,4.77562,4.77562,10,16,455.0,Dollar -True,49,4.2,4.21667,4.21667,10,10,455.0,Dollar -False,34,4.35,4.13491,4.13491,10,34,455.0,Euro -False,57,3.25,3.40704,3.40704,10,29,455.0,Euro -False,249,4.25,4.25055,4.25055,10,25,455.0,Euro -False,787,3.8,4.15887,4.15887,10,8,455.0,Euro -True,33,4.22222,4.21423,4.21423,10,28,455.0,Euro -True,44,3.85,3.7091,3.7091,10,6,455.0,Dollar -False,239,3.5,3.66899,3.66899,10,27,455.0,Dollar -False,50,4.75,4.68054,4.68054,10,66,455.0,Dollar -False,29,4.35,4.37588,4.37588,10,16,455.0,Pound -False,61,4.2,4.2001,4.2001,10,28,455.0,Euro -True,22,4.3,4.28081,4.28081,10,24,455.0,Pound -True,65,4.4,4.36521,4.36521,10,25,455.0,Pound -True,22,3.7,3.85698,3.85698,11,9,455.0,Dollar -True,295,3.15,3.23884,3.23884,10,53,455.0,Pound -False,30,2.55,2.2385,2.2385,10,39,455.0,Pound -True,49,4.3,4.21278,4.21278,10,14,455.0,Pound -True,79,4.2,4.07443,4.07443,10,29,1760.0,Euro -False,77,4.05,4.14858,4.14858,10,18,455.0,Dollar -False,29,4.55556,4.57691,4.57691,10,23,455.0,Euro -True,43,4.35,4.10136,4.10136,10,18,455.0,Euro -False,109,3.55,3.53636,3.53636,10,9,455.0,Dollar -True,50,4.45,4.34199,4.34199,10,7,455.0,Dollar -False,26,3.8,3.76976,3.76976,10,6,455.0,Pound -False,245,4.83333,4.8141,4.8141,9,24,455.0,Dollar -True,19,4.38889,4.54576,4.54576,9,14,455.0,Euro -True,20,3.72222,3.678,3.678,9,10,455.0,Pound -True,43,4.0,4.12133,4.12133,9,29,455.0,Pound -True,1222,4.0,4.25757,4.25757,9,37,455.0,Dollar -True,935,4.66667,4.7714,4.7714,9,38,455.0,Euro -False,18,4.77778,4.67853,4.67853,9,22,455.0,Euro -True,63,3.05556,2.9144,2.9144,9,30,455.0,Dollar -False,20,4.22222,4.33648,4.33648,9,6,455.0,Pound -False,19,4.11111,4.2581,4.2581,9,13,455.0,Pound -True,48,4.0,3.88701,3.88701,9,14,455.0,Euro -True,31,3.83333,3.7898,3.7898,9,11,455.0,Euro -False,31,3.88889,3.6621,3.6621,9,16,455.0,Dollar -True,23,4.22222,4.32232,4.32232,9,10,455.0,Dollar -True,60,3.33333,3.18731,3.18731,9,25,455.0,Dollar -False,34,4.22222,4.54157,4.54157,9,15,455.0,Euro -False,21,4.55556,4.57578,4.57578,9,11,800.0,Euro -True,205,4.0,3.95588,3.95588,9,17,455.0,Pound -True,62,3.33333,2.10813,2.10813,9,23,455.0,Euro -False,36,4.05556,4.07555,4.07555,9,14,455.0,Pound -True,29,4.61111,4.70818,4.70818,9,33,455.0,Euro -False,20,3.94444,3.86227,3.86227,9,8,455.0,Dollar -True,19,4.38889,4.10525,4.10525,9,27,455.0,Euro -False,36,4.16667,4.22146,4.22146,9,8,455.0,Pound -True,285,3.38889,3.64141,3.64141,9,14,455.0,Dollar -True,34,4.55556,4.52982,4.52982,9,68,455.0,Dollar -False,31,3.75,3.55613,3.55613,8,16,3200.0,Euro -True,46,4.5,4.40909,4.40909,8,74,455.0,Euro -True,17,4.5625,4.56663,4.56663,8,23,455.0,Dollar -True,18,4.75,4.7418,4.7418,8,22,3120.0,Pound -False,12,4.25,3.78951,3.78951,8,30,3200.0,Euro -False,26,4.4375,4.34674,4.34674,8,17,960.0,Euro -True,22,4.1875,4.35999,4.35999,8,51,455.0,Pound -True,20,3.625,3.55431,3.55431,8,28,455.0,Dollar -True,35,3.9375,3.91081,3.91081,8,21,455.0,Dollar -True,37,4.5625,4.47694,4.47694,8,62,455.0,Pound -True,27,4.1875,4.04036,4.04036,8,23,1440.0,Euro -False,37,4.8125,4.74329,4.74329,8,33,455.0,Euro -True,18,4.125,3.98942,3.98942,8,9,455.0,Euro -False,83,4.0,3.98123,3.98123,8,13,455.0,Dollar -False,20,4.0,3.968,3.968,8,16,455.0,Euro -True,24,3.625,3.70397,3.70397,8,14,480.0,Euro -True,15,4.8125,4.74689,4.74689,8,14,455.0,Euro -False,16,4.875,4.73209,4.73209,8,18,455.0,Euro -True,23,3.625,3.75003,3.75003,8,23,455.0,Pound -False,44,4.1875,4.36873,4.36873,8,47,455.0,Pound -False,45,4.3125,4.01188,4.01188,8,12,455.0,Pound -True,94,4.3125,4.63092,4.63092,8,33,455.0,Dollar -False,114,3.9375,3.78585,3.78585,8,44,455.0,Dollar -True,30,3.25,2.98283,2.98283,8,11,455.0,Pound -False,19,4.4375,4.21927,4.21927,8,24,455.0,Pound -False,100,4.4375,4.36982,4.36982,8,20,455.0,Euro -False,43,4.5625,4.55214,4.55214,8,18,455.0,Euro -True,23,4.5625,4.54963,4.54963,8,14,455.0,Pound -False,27,3.25,3.41303,3.41303,8,5,455.0,Pound -False,23,4.0625,3.9293,3.9293,8,20,455.0,Pound -False,22,4.71429,4.76067,4.76067,7,13,455.0,Euro -False,33,4.0,4.10403,4.10403,7,10,455.0,Euro -True,24,3.71429,3.79203,3.79203,7,24,455.0,Euro -True,57,4.64286,4.56691,4.56691,7,12,455.0,Pound -True,19,4.07143,4.01408,4.01408,7,15,455.0,Dollar -False,13,4.14286,3.93949,3.93949,7,25,455.0,Dollar -True,20,3.5,3.58469,3.58469,7,39,455.0,Pound -False,23,3.92857,3.60748,3.60748,7,6,455.0,Dollar -True,99,4.35714,4.31891,4.31891,7,5,455.0,Euro -True,23,4.57143,4.57099,4.57099,7,11,455.0,Euro -False,18,4.35714,4.29936,4.29936,7,15,2080.0,Pound -True,139,3.57143,3.94488,3.94488,7,11,700.0,Pound -True,44,5.0,5.0,5.0,7,10,455.0,Euro -False,374,4.85714,4.90227,4.90227,7,20,455.0,Dollar -False,38,4.64286,4.72664,4.72664,7,58,3040.0,Pound -True,17,2.64286,2.79656,2.79656,7,26,455.0,Pound -True,38,4.28571,4.26022,4.26022,7,16,455.0,Pound -True,19,4.28571,4.17074,4.17074,7,14,455.0,Pound -True,9,3.5,3.44444,3.44444,7,13,455.0,Pound -False,30,4.85714,4.77288,4.77288,7,20,455.0,Pound -False,30,3.28571,3.30696,3.30696,7,8,455.0,Euro -False,25,3.78571,3.52258,3.52258,7,5,455.0,Dollar -False,29,4.0,4.00457,4.00457,7,35,455.0,Euro -True,126,4.42857,4.34802,4.34802,7,12,455.0,Pound -False,33,3.14286,3.1971,3.1971,7,16,455.0,Pound -True,47,3.78571,3.90365,3.90365,7,20,455.0,Euro -False,51,3.85714,3.99922,3.99922,7,102,455.0,Pound -True,16,3.57143,3.68471,3.68471,7,5,455.0,Pound -True,20,4.83333,4.83928,4.83928,6,18,455.0,Pound -False,30,3.91667,3.96048,3.96048,6,59,455.0,Dollar -True,22,4.08333,4.33257,4.33257,6,19,1760.0,Euro -False,17,3.16667,3.35896,3.35896,6,11,455.0,Euro -True,14,4.0,4.1564,4.1564,6,16,455.0,Pound -False,21,4.41667,4.48861,4.48861,6,26,455.0,Pound -True,37,3.91667,3.93133,3.93133,6,7,455.0,Euro -False,28,4.33333,4.31527,4.31527,6,95,455.0,Dollar -False,53,4.25,4.23589,4.23589,6,14,455.0,Pound -False,165,3.91667,4.11507,4.11507,6,8,455.0,Euro -False,34,4.0,4.02017,4.02017,6,13,640.0,Dollar -True,35,4.16667,4.11922,4.11922,6,19,455.0,Pound -True,27,3.66667,3.52805,3.52805,6,6,455.0,Pound -True,14,3.91667,3.86634,3.86634,6,11,455.0,Euro -False,50,4.08333,4.10461,4.10461,6,18,455.0,Dollar -False,71,3.5,3.21736,3.21736,6,50,455.0,Dollar -True,23,3.83333,3.87981,3.87981,6,5,455.0,Euro -True,17,4.41667,4.4463,4.4463,6,7,455.0,Euro -True,346,4.58333,4.36806,4.36806,6,19,455.0,Dollar -True,37,4.66667,4.63005,4.63005,6,22,455.0,Euro -True,19,4.33333,4.10792,4.10792,6,6,455.0,Euro -False,54,3.16667,3.17353,3.17353,6,51,455.0,Pound -False,32,3.66667,3.41209,3.41209,6,11,455.0,Dollar -True,44,4.75,4.81674,4.81674,6,33,455.0,Pound -False,19,4.33333,4.34699,4.34699,6,13,3200.0,Pound -True,14,4.58333,4.59433,4.59433,6,9,455.0,Euro -False,17,4.58333,4.64216,4.64216,6,19,455.0,Dollar -False,38,4.66667,4.72237,4.72237,6,13,455.0,Euro -True,66,4.75,4.72253,4.72253,6,9,455.0,Pound -True,51,3.83333,3.62821,3.62821,6,9,455.0,Euro -True,169,4.16667,4.14625,4.14625,6,19,455.0,Euro -False,50,3.33333,3.2133,3.2133,6,51,455.0,Dollar -True,150,4.58333,4.43007,4.43007,6,5,455.0,Dollar -False,25,4.91667,4.92976,4.92976,6,16,455.0,Pound -False,26,4.58333,4.72012,4.72012,6,10,2320.0,Euro -False,30,4.83333,4.607,4.607,6,63,455.0,Dollar -True,258,4.58333,4.38442,4.38442,6,23,455.0,Dollar -True,36,4.16667,4.02374,4.02374,6,27,455.0,Dollar -True,23,4.08333,4.13233,4.13233,6,27,455.0,Pound -False,30,4.5,4.50296,4.50296,6,31,455.0,Euro -False,20,4.83333,4.76853,4.76853,6,37,3200.0,Euro -False,16,4.33333,4.2932,4.2932,6,12,2400.0,Euro -True,65,4.66667,4.57769,4.57769,6,13,455.0,Pound -True,64,3.83333,3.85343,3.85343,6,18,455.0,Pound -True,18,3.83333,3.88912,3.88912,6,9,455.0,Euro -False,19,3.75,3.65945,3.65945,6,10,455.0,Euro -False,51,4.0,3.91981,3.91981,5,33,455.0,Dollar -True,37,3.6,3.70539,3.70539,5,31,455.0,Dollar -False,25,4.4,4.36123,4.36123,5,9,455.0,Euro -True,1402,4.2,4.37787,4.37787,5,80,455.0,Pound -False,36,4.3,4.4102,4.4102,5,18,455.0,Pound -True,27,4.6,4.71798,4.71798,6,28,455.0,Dollar -True,27,3.4,3.40112,3.40112,5,7,455.0,Dollar -False,44,4.5,4.62722,4.62722,5,94,455.0,Euro -False,20,4.6,4.62705,4.62705,5,7,455.0,Pound -False,13,4.1,4.08399,4.08399,5,14,455.0,Pound -False,50,4.6,4.46191,4.46191,5,48,455.0,Euro -True,11,4.5,4.531,4.531,5,12,455.0,Euro -True,41,3.8,4.13545,4.13545,5,25,455.0,Pound -True,20,4.4,4.40854,4.40854,5,36,640.0,Dollar -False,21,4.7,4.60055,4.60055,5,74,455.0,Pound -False,20,4.4,4.35786,4.35786,5,9,455.0,Euro -True,28,3.5,3.83543,3.83543,5,14,455.0,Dollar -True,22,4.4,4.43198,4.43198,5,25,455.0,Euro -True,22,3.8,3.82778,3.82778,5,10,455.0,Dollar -True,35,4.8,4.79398,4.79398,5,7,455.0,Pound -False,11,3.6,3.40888,3.40888,5,11,455.0,Euro -False,18,4.6,4.52232,4.52232,5,27,455.0,Pound -True,25,4.6,4.56105,4.56105,5,36,455.0,Euro -True,22,4.6,4.49474,4.49474,5,32,455.0,Pound -True,25,4.1,3.95986,3.95986,5,7,455.0,Pound -True,35,4.3,4.08999,4.08999,5,8,455.0,Pound -True,63,4.3,4.35638,4.35638,5,72,455.0,Dollar -True,91,3.8,3.55603,3.55603,5,11,455.0,Dollar -False,406,3.3,3.34854,3.34854,5,27,455.0,Pound -True,30,4.8,4.78975,4.78975,5,5,455.0,Euro -True,18,4.4,4.37311,4.37311,5,153,455.0,Pound -False,14,4.2,4.24557,4.24557,5,18,455.0,Euro -False,32,4.0,4.30598,4.30598,5,22,455.0,Euro -True,17,2.9,2.91537,2.91537,5,6,455.0,Dollar -True,1055,4.8,4.82943,4.82943,5,48,455.0,Euro -True,96,4.7,4.46078,4.46078,5,22,455.0,Euro -True,45,4.4,4.43824,4.43824,5,19,700.0,Euro -True,62,3.7,3.58585,3.58585,5,68,455.0,Pound -False,191,4.8,4.79961,4.79961,5,34,468.0,Euro -False,37,4.1,4.10486,4.10486,5,5,455.0,Euro -True,32,4.6,4.67408,4.67408,5,6,455.0,Pound -True,26,4.5,4.35589,4.35589,5,7,455.0,Pound -False,18,3.3,3.42283,3.42283,5,98,455.0,Pound -True,19,4.7,4.66705,4.66705,5,13,455.0,Dollar -True,30,3.7,3.84221,3.84221,5,9,455.0,Pound -True,14,4.2,4.10689,4.10689,5,7,455.0,Dollar -True,7,4.8,4.6421,4.6421,5,25,455.0,Euro -False,28,4.0,4.18646,4.18646,5,7,455.0,Dollar -False,30,4.1,3.97129,3.97129,5,41,455.0,Dollar -False,25,4.1,4.55617,4.55617,5,21,455.0,Pound -False,21,3.6,3.58798,3.58798,5,33,455.0,Dollar -True,14,4.125,4.06593,4.06593,4,63,455.0,Euro -True,96,4.5,4.27571,4.27571,4,9,455.0,Euro -True,13,3.125,3.34446,3.34446,4,22,455.0,Pound -False,32,4.875,4.84657,4.84657,4,0,1040.0,Pound -True,695,4.375,4.79451,4.79451,4,17,640.0,Pound -True,54,4.75,4.66043,4.66043,4,11,455.0,Pound -True,17,4.25,4.23645,4.23645,4,16,455.0,Euro -False,16,4.0,4.17286,4.17286,4,13,455.0,Dollar -True,11,3.25,3.16272,3.16272,4,5,455.0,Pound -False,59,3.25,3.26382,3.26382,4,9,455.0,Euro -True,70,2.75,2.72407,2.72407,4,36,455.0,Dollar -False,24,3.75,3.729,3.729,4,19,455.0,Pound -True,15,4.625,4.63323,4.63323,4,8,455.0,Pound -False,22,4.875,4.86951,4.86951,4,5,700.0,Pound -False,523,4.75,4.77717,4.77717,4,60,455.0,Euro -True,15,3.625,3.69398,3.69398,4,9,455.0,Dollar -False,21,3.25,3.22209,3.22209,4,11,455.0,Pound -False,22,3.5,3.50156,3.50156,4,13,455.0,Euro -False,129,3.875,3.71837,3.71837,4,20,455.0,Pound -True,17,4.5,4.24546,4.24546,4,27,455.0,Dollar -True,14,4.75,4.71139,4.71139,4,48,455.0,Pound -False,9,4.125,3.99536,3.99536,4,20,455.0,Euro -True,190,4.625,4.64062,4.64062,4,15,455.0,Pound -True,23,5.0,5.0,5.0,4,30,455.0,Euro -False,14,3.33333,3.61187,3.61187,4,18,455.0,Dollar -False,76,4.875,4.85577,4.85577,4,12,455.0,Euro -False,497,5.0,5.0,5.0,4,48,455.0,Pound -True,6,4.0,4.04741,4.04741,4,10,455.0,Pound -True,27,3.625,3.40756,3.40756,4,41,455.0,Pound -False,20,2.5,2.413,2.413,4,7,455.0,Euro -True,16,5.0,5.0,5.0,4,14,455.0,Euro -False,14,4.5,4.52874,4.52874,4,25,455.0,Pound -True,21,4.25,4.26989,4.26989,4,12,455.0,Euro -False,6,4.625,4.58165,4.58165,4,22,455.0,Pound -False,10,3.25,3.09731,3.09731,4,21,455.0,Euro -False,15,4.625,4.54307,4.54307,4,10,455.0,Dollar -True,33,5.0,5.0,5.0,4,18,455.0,Pound -True,30,3.875,4.49541,4.49541,4,42,455.0,Pound -True,21,4.625,4.68111,4.68111,4,65,455.0,Euro -True,26,4.625,4.71239,4.71239,4,10,455.0,Dollar -True,13,4.875,4.89746,4.89746,4,8,455.0,Dollar -True,10,4.375,4.36524,4.36524,4,17,455.0,Pound -False,6,5.0,5.0,5.0,4,14,880.0,Dollar -False,41,3.875,3.75611,3.75611,4,24,455.0,Euro -False,4,1.0,1.0,1.0,4,17,455.0,Dollar -False,12,4.375,4.38561,4.38561,4,6,455.0,Euro -False,13,4.5,4.54378,4.54378,4,5,455.0,Euro -True,14,5.0,5.0,5.0,4,16,455.0,Dollar -True,5,4.75,4.71324,4.71324,4,42,455.0,Dollar -False,23,4.625,4.64761,4.64761,4,34,455.0,Dollar -True,17,4.75,4.7847,4.7847,4,18,455.0,Pound -False,27,4.875,4.94431,4.94431,4,38,455.0,Dollar -True,15,4.0,2.98353,2.98353,4,24,455.0,Euro -False,50,4.5,4.47571,4.47571,4,10,455.0,Pound -True,5,4.5,4.53069,4.53069,4,8,455.0,Euro -True,24,3.625,3.85629,3.85629,4,5,455.0,Pound -False,140,4.25,4.36653,4.36653,4,21,455.0,Dollar -False,9,3.875,3.77762,3.77762,4,57,455.0,Pound -False,7,2.875,2.91029,2.91029,4,10,455.0,Pound -True,15,4.625,4.27025,4.27025,4,12,455.0,Dollar -True,10,2.875,2.8066,2.8066,4,12,455.0,Pound -False,17,4.625,4.57643,4.57643,4,98,455.0,Pound -True,22,4.875,4.82003,4.82003,4,16,455.0,Euro -True,11,4.375,4.53822,4.53822,4,21,455.0,Euro -True,10,3.125,3.33695,3.33695,4,6,455.0,Euro -True,67,3.875,3.92271,3.92271,4,18,455.0,Euro -True,19,3.875,4.21117,4.21117,4,37,455.0,Pound -False,18,4.25,4.1555,4.1555,4,30,455.0,Dollar -False,12,4.5,4.4658,4.4658,4,9,455.0,Euro -False,10,3.75,3.65265,3.65265,4,9,455.0,Euro -False,109,4.25,4.17106,4.17106,4,13,455.0,Euro -True,8,2.33333,2.13667,2.13667,3,28,455.0,Dollar -True,34,3.66667,3.67409,3.67409,3,25,455.0,Euro -False,91,4.33333,4.08883,4.08883,3,5,455.0,Dollar -True,10,4.0,4.16696,4.16696,3,27,455.0,Dollar -True,18,3.66667,3.71946,3.71946,3,14,455.0,Dollar -False,9,4.33333,4.08286,4.08286,3,21,455.0,Pound -False,8,3.83333,3.76378,3.76378,3,21,455.0,Dollar -True,10,4.16667,4.25071,4.25071,3,8,455.0,Euro -False,42,5.0,5.0,5.0,3,17,455.0,Dollar -False,12,4.33333,4.51265,4.51265,3,13,455.0,Pound -False,5,4.5,4.43781,4.43781,3,14,455.0,Dollar -False,12,4.16667,4.08155,4.08155,3,18,455.0,Dollar -True,48,2.33333,2.28232,2.28232,3,63,455.0,Euro -False,3,4.66667,4.60497,4.60497,3,14,455.0,Pound -False,22,3.83333,3.93285,3.93285,3,9,455.0,Pound -True,130,3.83333,3.10158,3.10158,3,15,455.0,Pound -False,9,5.0,5.0,5.0,3,12,455.0,Dollar -True,14,3.83333,4.44036,4.44036,3,28,455.0,Dollar -False,31,3.0,3.11177,3.11177,3,15,455.0,Pound -True,17,5.0,5.0,5.0,3,26,455.0,Dollar -False,24,4.83333,4.83075,4.83075,3,8,455.0,Euro -True,8,5.0,5.0,5.0,3,18,2400.0,Dollar -True,33,4.16667,4.17241,4.17241,3,53,455.0,Dollar -True,17,4.66667,4.7939,4.7939,3,10,455.0,Dollar -True,7,3.66667,3.68338,3.68338,3,6,455.0,Dollar -False,11,3.66667,3.39965,3.39965,3,25,455.0,Pound -True,9,3.5,3.5,3.5,3,8,455.0,Euro -False,7,2.33333,2.44183,2.44183,3,35,700.0,Euro -True,21,3.33333,3.38924,3.38924,3,119,1040.0,Dollar -True,12,4.33333,4.39053,4.39053,3,15,455.0,Euro -True,7,5.0,5.0,5.0,3,8,455.0,Pound -False,19,3.66667,3.69353,3.69353,3,13,455.0,Pound -True,6,4.33333,4.44341,4.44341,3,14,455.0,Pound -True,8,5.0,5.0,5.0,3,30,455.0,Pound -True,7,2.5,2.18565,2.18565,3,13,455.0,Euro -True,142,4.33333,4.20055,4.20055,3,11,455.0,Euro -False,29,3.16667,3.14551,3.14551,3,15,455.0,Dollar -False,20,3.16667,2.93079,2.93079,3,13,455.0,Dollar -False,12,3.66667,3.60004,3.60004,3,6,455.0,Euro -False,59,4.33333,4.39527,4.39527,3,11,455.0,Euro -True,9,4.33333,4.39015,4.39015,3,49,455.0,Euro -True,13,4.0,4.01131,4.01131,3,29,455.0,Dollar -False,12,3.5,3.47809,3.47809,3,22,1440.0,Pound -True,6,4.0,4.16072,4.16072,3,14,455.0,Euro -True,228,3.16667,3.68284,3.68284,3,18,468.0,Euro -True,14,2.0,2.04929,2.04929,3,13,455.0,Pound -True,8,4.33333,4.37745,4.37745,3,27,455.0,Euro -False,11,4.66667,4.61351,4.61351,3,5,455.0,Pound -True,14,4.5,4.49612,4.49612,3,8,455.0,Pound -True,19,3.0,3.11902,3.11902,3,33,455.0,Dollar -False,22,4.66667,4.71287,4.71287,3,23,455.0,Pound -True,12,4.33333,4.53453,4.53453,3,6,455.0,Euro -True,20,4.66667,4.66955,4.66955,3,9,640.0,Euro -True,28,4.83333,4.92864,4.92864,3,7,455.0,Dollar -True,37,4.66667,4.73456,4.73456,3,16,455.0,Euro -False,23,3.16667,3.24519,3.24519,3,18,455.0,Euro -False,19,4.0,3.93553,3.93553,3,5,455.0,Euro -True,22,4.5,4.46274,4.46274,3,5,455.0,Euro -False,67,4.0,4.04524,4.04524,3,38,455.0,Pound -False,20,4.0,4.0,4.0,2,12,455.0,Euro -False,14,3.0,3.0,3.0,2,30,455.0,Pound -True,30,2.25,2.26316,2.26316,2,15,455.0,Dollar -False,79,3.5,4.17895,4.17895,2,0,455.0,Pound -True,142,4.25,4.30303,4.30303,2,24,455.0,Dollar -True,3,5.0,5.0,5.0,2,31,455.0,Pound -True,5,3.0,4.38931,4.38931,2,0,455.0,Dollar -True,10,3.75,3.74723,3.74723,2,8,455.0,Euro -False,9,4.25,4.24719,4.24719,2,5,455.0,Pound -True,7,4.75,4.75,4.75,2,9,455.0,Dollar -True,17,3.75,3.78233,3.78233,2,22,455.0,Pound -False,13,4.25,4.35955,4.35955,2,250,455.0,Dollar -False,16,4.5,4.70833,4.70833,2,5,455.0,Pound -True,223,4.75,4.60471,4.60471,2,8,455.0,Euro -True,15,5.0,5.0,5.0,2,5,455.0,Euro -False,13,3.5,3.40727,3.40727,2,11,455.0,Dollar -True,54,4.0,3.87035,3.87035,2,8,455.0,Euro -False,7,3.5,3.52117,3.52117,2,5,455.0,Dollar -False,5,4.25,4.67626,4.67626,2,5,455.0,Dollar -False,16,3.0,3.02632,3.02632,2,0,880.0,Euro -True,10,2.25,2.59091,2.59091,2,17,455.0,Dollar -False,21,4.75,4.77407,4.77407,2,64,455.0,Pound -True,14,4.75,4.76389,4.76389,2,24,455.0,Pound -False,6,4.25,4.19403,4.19403,2,17,455.0,Euro -True,6,4.25,4.31994,4.31994,2,0,455.0,Pound -True,10,3.0,2.80531,2.80531,2,19,455.0,Dollar -False,21,3.0,3.0,3.0,2,21,455.0,Dollar -True,22,4.0,4.55963,4.55963,2,14,455.0,Pound -False,3,4.0,4.02857,4.02857,2,8,455.0,Dollar -False,0,2.75,3.19403,3.19403,2,0,455.0,Dollar -False,7,4.0,4.0,4.0,2,15,455.0,Euro -False,8,3.75,3.15217,3.15217,2,35,455.0,Pound -False,8,4.25,4.38235,4.38235,2,28,455.0,Euro -True,7,4.5,4.45714,4.45714,2,80,455.0,Euro -True,4,5.0,5.0,5.0,2,9,455.0,Euro -False,5,3.5,3.41463,3.41463,2,15,455.0,Dollar -True,168,5.0,5.0,5.0,2,14,455.0,Dollar -False,10,4.5,4.4684,4.4684,2,10,455.0,Pound -True,3,1.25,1.17992,1.17992,2,10,455.0,Pound -True,12,5.0,5.0,5.0,2,16,455.0,Dollar -False,7,4.0,4.00629,4.00629,2,10,455.0,Dollar -False,10,5.0,5.0,5.0,2,19,455.0,Pound -False,5,1.75,1.88068,1.88068,2,8,455.0,Pound -True,2,4.75,4.76866,4.76866,2,10,455.0,Dollar -True,9,4.0,3.93264,3.93264,2,7,455.0,Pound -True,4,3.75,3.74088,3.74088,2,10,455.0,Euro -False,22,5.0,5.0,5.0,2,5,455.0,Pound -True,36,3.5,3.59047,3.59047,2,33,455.0,Euro -True,31,5.0,5.0,5.0,2,6,455.0,Euro -False,8,5.0,5.0,5.0,2,17,455.0,Dollar -False,5,3.0,3.17647,3.17647,2,18,455.0,Pound -False,4,4.5,4.52941,4.52941,2,40,455.0,Euro -True,9,2.5,2.48607,2.48607,2,5,455.0,Euro -False,8,5.0,5.0,5.0,2,17,455.0,Dollar -False,48,3.75,3.68182,3.68182,2,10,455.0,Dollar -False,6,5.0,5.0,5.0,2,25,455.0,Dollar -True,12,4.25,4.2852,4.2852,2,28,455.0,Pound -True,10,4.0,3.77095,3.77095,2,10,455.0,Dollar -False,3,4.25,4.25,4.25,2,32,455.0,Dollar -True,11,1.25,1.23108,1.23108,2,5,455.0,Pound -False,11,4.25,4.30488,4.30488,2,18,455.0,Dollar -True,90,5.0,5.0,5.0,2,19,455.0,Euro -True,3,4.25,4.21016,4.21016,2,23,455.0,Dollar -False,8,5.0,5.0,5.0,2,79,455.0,Euro -True,6,5.0,5.0,5.0,2,9,455.0,Euro -True,11,5.0,5.0,5.0,2,7,455.0,Dollar -True,33,4.25,4.24242,4.24242,2,92,455.0,Euro -True,6,5.0,5.0,5.0,2,22,455.0,Euro -True,191,2.75,2.57143,2.57143,2,18,455.0,Dollar -True,18,4.5,4.42908,4.42908,2,25,455.0,Dollar -True,38,2.75,2.68473,2.68473,2,5,455.0,Pound -False,31,4.5,4.31496,4.31496,2,54,455.0,Pound -True,12,4.75,4.87037,4.87037,2,36,455.0,Euro -True,8,3.75,3.76866,3.76866,2,14,455.0,Pound -True,123,2.0,2.17355,2.17355,2,10,455.0,Dollar -True,5,4.5,4.5,4.5,2,32,455.0,Euro -False,14,4.0,4.0,4.0,2,9,455.0,Pound -False,195,4.75,4.61111,4.61111,2,22,455.0,Pound -True,5,5.0,5.0,5.0,2,30,455.0,Dollar -True,9,2.5,2.56115,2.56115,2,10,455.0,Pound -False,4,5.0,5.0,5.0,2,5,455.0,Pound -True,7,2.75,2.71348,2.71348,2,27,455.0,Dollar -True,22,5.0,5.0,5.0,2,10,455.0,Dollar -False,17,4.5,4.48256,4.48256,2,17,3200.0,Pound -True,19,5.0,5.0,5.0,2,9,455.0,Pound -True,8,4.0,4.09677,4.09677,2,13,455.0,Pound -False,17,5.0,5.0,5.0,2,56,455.0,Euro -True,5,4.75,4.75073,4.75073,2,71,3200.0,Pound -False,23,4.75,4.75024,4.75024,2,8,455.0,Pound -False,19,5.0,5.0,5.0,2,19,455.0,Pound -False,15,3.0,3.6,3.6,2,8,455.0,Pound -False,20,3.75,3.59155,3.59155,2,5,455.0,Pound -False,11,4.5,4.49442,4.49442,2,28,455.0,Euro -False,21,3.5,3.5,3.5,1,24,455.0,Pound -True,8,3.5,3.5,3.5,1,112,455.0,Euro -False,50,3.5,3.5,3.5,1,10,455.0,Pound -False,2,1.0,1.0,1.0,1,17,455.0,Pound -True,8,5.0,5.0,5.0,1,16,455.0,Pound -True,7,5.0,5.0,5.0,1,20,455.0,Euro -False,3,4.0,4.0,4.0,1,11,455.0,Pound -False,3,5.0,5.0,5.0,1,18,455.0,Pound -True,2,3.0,3.0,3.0,1,20,960.0,Euro -False,1,4.0,4.0,4.0,1,10,455.0,Dollar -True,1,5.0,5.0,5.0,1,7,455.0,Dollar -True,4,5.0,5.0,5.0,1,22,455.0,Euro -True,4,2.5,2.5,2.5,1,5,455.0,Euro -True,133,2.5,2.5,2.5,1,30,455.0,Euro -True,11,4.5,4.5,4.5,1,7,455.0,Euro -True,47,5.0,5.0,5.0,1,41,455.0,Pound -False,4,4.0,4.0,4.0,1,17,455.0,Pound -True,2,2.5,2.5,2.5,1,15,455.0,Pound -True,8,5.0,5.0,5.0,1,84,455.0,Pound -False,5,4.5,4.5,4.5,1,64,455.0,Pound -True,6,3.0,3.0,3.0,1,7,455.0,Pound -False,5,5.0,5.0,5.0,1,16,455.0,Dollar -True,5,4.5,4.5,4.5,1,30,455.0,Dollar -False,3,2.5,2.5,2.5,1,10,455.0,Pound -True,15,5.0,5.0,5.0,1,35,455.0,Euro -True,9,2.0,2.0,2.0,1,18,455.0,Euro -False,3,3.5,3.5,3.5,1,8,455.0,Dollar -False,1,3.0,3.0,3.0,1,19,455.0,Dollar -True,2,4.0,4.0,4.0,1,94,455.0,Pound -False,5,3.0,3.0,3.0,1,17,455.0,Pound -False,4,5.0,5.0,5.0,1,15,480.0,Pound -False,10,3.5,3.5,3.5,1,29,455.0,Dollar -True,1,1.0,1.0,1.0,1,6,455.0,Dollar -True,1,5.0,5.0,5.0,1,35,3120.0,Pound -True,2,5.0,5.0,5.0,1,11,455.0,Pound -False,6,5.0,5.0,5.0,1,30,455.0,Euro -True,124,4.5,4.5,4.5,1,10,455.0,Euro -False,1,1.0,1.0,1.0,1,9,455.0,Dollar -False,4,5.0,5.0,5.0,1,49,455.0,Dollar -False,3,4.5,4.5,4.5,1,11,455.0,Dollar -False,9,2.0,2.0,2.0,1,25,455.0,Dollar -True,9,3.5,3.5,3.5,1,5,455.0,Dollar -False,18,5.0,5.0,5.0,1,6,1280.0,Pound -True,8,3.0,3.0,3.0,1,9,455.0,Pound -False,8,3.0,3.0,3.0,1,9,455.0,Euro -False,2,1.0,1.0,1.0,1,5,455.0,Pound -True,6,3.0,3.0,3.0,1,12,455.0,Dollar -False,1,4.0,4.0,4.0,1,7,455.0,Dollar -False,4,4.0,4.0,4.0,1,21,455.0,Euro -True,2,5.0,5.0,5.0,1,13,455.0,Pound -True,5,5.0,5.0,5.0,1,7,455.0,Pound -False,4,5.0,5.0,5.0,1,9,700.0,Dollar -False,7,4.5,4.5,4.5,1,9,455.0,Dollar -True,28,4.5,4.5,4.5,1,11,455.0,Pound -False,4,5.0,5.0,5.0,1,31,455.0,Dollar -False,5,4.0,4.0,4.0,1,9,455.0,Euro -False,6,3.0,3.0,3.0,1,10,455.0,Dollar -False,4,5.0,5.0,5.0,1,9,455.0,Pound -False,9,2.0,2.0,2.0,1,16,455.0,Pound -False,3,3.0,3.0,3.0,1,7,800.0,Pound -False,4,4.5,4.5,4.5,1,6,455.0,Pound -False,2,4.0,4.0,4.0,1,6,700.0,Pound -True,42,3.5,3.5,3.5,1,28,455.0,Euro -False,2,3.0,3.0,3.0,1,8,455.0,Pound -True,3,3.0,3.0,3.0,1,6,455.0,Dollar -False,9,3.0,3.0,3.0,1,12,455.0,Euro -True,4,5.0,5.0,5.0,1,102,455.0,Dollar -False,4,4.5,4.5,4.5,1,13,455.0,Euro -False,3,3.0,3.0,3.0,1,32,455.0,Pound -True,2,3.5,3.5,3.5,1,15,455.0,Dollar -True,6,5.0,5.0,5.0,1,5,455.0,Dollar -True,6,5.0,5.0,5.0,1,24,455.0,Dollar -False,11,5.0,5.0,5.0,1,14,455.0,Euro -False,2,5.0,5.0,5.0,1,9,455.0,Dollar -True,184,4.0,4.0,4.0,1,28,455.0,Pound -True,21,5.0,5.0,5.0,1,34,455.0,Dollar -True,7,3.5,3.5,3.5,1,24,455.0,Pound -False,278,5.0,5.0,5.0,1,41,455.0,Pound -False,16,5.0,5.0,5.0,1,57,455.0,Pound -True,39,4.0,4.0,4.0,1,28,455.0,Dollar -True,10,4.0,4.0,4.0,1,16,455.0,Dollar -True,3,3.0,3.0,3.0,1,27,455.0,Dollar -True,6,4.0,4.0,4.0,1,10,455.0,Dollar -False,3,1.0,1.0,1.0,1,49,455.0,Pound -True,10,5.0,5.0,5.0,1,5,455.0,Pound -True,6,4.0,4.0,4.0,1,22,700.0,Dollar -False,5,5.0,5.0,5.0,1,16,455.0,Euro -False,14,3.5,3.5,3.5,1,16,455.0,Dollar -False,7,3.0,3.0,3.0,1,27,455.0,Euro -True,869,4.0,4.0,4.0,1,26,455.0,Euro -True,1,3.0,3.0,3.0,1,10,455.0,Dollar -True,10,5.0,5.0,5.0,1,97,455.0,Euro -True,2,4.5,4.5,4.5,1,21,455.0,Dollar -False,2,4.0,4.0,4.0,1,33,455.0,Pound -True,8,5.0,5.0,5.0,1,46,455.0,Dollar -False,5,5.0,5.0,5.0,1,14,455.0,Euro -True,8,3.5,3.5,3.5,1,21,455.0,Dollar -False,72,5.0,5.0,5.0,1,27,455.0,Euro -False,18,3.5,3.5,3.5,1,23,455.0,Dollar -True,4,5.0,5.0,5.0,1,17,455.0,Euro -True,6,3.5,3.5,3.5,1,13,455.0,Pound -True,2,4.5,4.5,4.5,1,4,455.0,Dollar -True,9,3.0,3.0,3.0,1,9,455.0,Pound -True,36,3.0,3.0,3.0,1,7,455.0,Pound -True,10,3.0,3.0,3.0,1,21,455.0,Euro -False,22,5.0,5.0,5.0,1,6,455.0,Pound -False,3,3.0,3.0,3.0,1,26,455.0,Euro -False,7,5.0,5.0,5.0,1,15,455.0,Euro -True,3,3.0,3.0,3.0,1,15,480.0,Pound -True,2,5.0,5.0,5.0,1,12,455.0,Dollar -True,38,5.0,5.0,5.0,1,11,455.0,Dollar -False,1,5.0,5.0,5.0,1,19,455.0,Euro -False,6,5.0,5.0,5.0,1,10,455.0,Euro -False,10,2.5,2.5,2.5,1,19,455.0,Euro -True,8,5.0,5.0,5.0,1,9,455.0,Dollar -True,14,3.5,3.5,3.5,1,8,455.0,Euro -False,1,4.5,4.5,4.5,1,24,455.0,Euro -True,18,3.0,3.0,3.0,1,10,455.0,Euro -True,1,5.0,5.0,5.0,1,8,455.0,Euro -False,9,3.5,3.5,3.5,1,10,455.0,Dollar -False,9,3.0,3.0,3.0,1,7,455.0,Pound -True,122,5.0,5.0,5.0,1,20,455.0,Pound -False,0,0.0,0.0,0.0,0,19,455.0,Dollar -False,3,0.0,0.0,0.0,0,10,455.0,Dollar -False,0,0.0,0.0,0.0,0,8,455.0,Pound -True,2,0.0,0.0,0.0,0,6,455.0,Euro -True,6,0.0,0.0,0.0,0,9,455.0,Euro -False,0,0.0,0.0,0.0,0,7,455.0,Euro -True,3,0.0,0.0,0.0,0,14,455.0,Euro -False,0,0.0,0.0,0.0,0,5,455.0,Dollar -False,0,0.0,0.0,0.0,0,7,455.0,Pound -True,0,0.0,0.0,0.0,0,10,455.0,Euro -True,0,0.0,0.0,0.0,0,7,455.0,Dollar -True,14,0.0,0.0,0.0,0,15,455.0,Euro -True,4,0.0,0.0,0.0,0,6,455.0,Pound -True,3,0.0,0.0,0.0,0,19,455.0,Euro -True,2,0.0,0.0,0.0,0,31,455.0,Pound -False,24,0.0,0.0,0.0,0,36,455.0,Dollar -True,5,0.0,0.0,0.0,0,48,455.0,Dollar -True,1,0.0,0.0,0.0,0,18,455.0,Dollar -True,2,0.0,0.0,0.0,0,5,455.0,Pound -True,16,0.0,0.0,0.0,0,30,455.0,Dollar -False,2,0.0,0.0,0.0,0,20,1200.0,Pound -True,2,0.0,0.0,0.0,0,48,455.0,Pound -True,39,0.0,0.0,0.0,0,22,455.0,Dollar -False,7,0.0,0.0,0.0,0,6,455.0,Pound -True,6,0.0,0.0,0.0,0,14,455.0,Pound -False,1,0.0,0.0,0.0,0,12,455.0,Euro -False,0,0.0,0.0,0.0,0,7,455.0,Pound -False,0,0.0,0.0,0.0,0,11,455.0,Euro -False,0,0.0,0.0,0.0,0,6,640.0,Dollar -True,0,0.0,0.0,0.0,0,8,455.0,Pound -False,1,0.0,0.0,0.0,0,12,455.0,Pound -False,0,0.0,0.0,0.0,0,0,455.0,Pound -True,0,0.0,0.0,0.0,0,21,455.0,Euro -False,0,0.0,0.0,0.0,0,7,455.0,Pound -False,0,0.0,0.0,0.0,0,12,455.0,Euro -False,1,0.0,0.0,0.0,0,8,455.0,Pound -True,0,0.0,0.0,0.0,0,12,455.0,Euro -True,2,0.0,0.0,0.0,0,26,455.0,Pound -False,1,0.0,0.0,0.0,0,7,455.0,Euro -False,0,0.0,0.0,0.0,0,7,455.0,Dollar -True,0,0.0,0.0,0.0,0,19,455.0,Pound -True,2,0.0,0.0,0.0,0,7,455.0,Pound -False,2,0.0,0.0,0.0,0,34,455.0,Euro -True,2,0.0,0.0,0.0,0,12,455.0,Pound -False,2,0.0,0.0,0.0,0,19,455.0,Pound -True,20,0.0,0.0,0.0,0,12,800.0,Pound -True,89,0.0,0.0,0.0,0,8,455.0,Euro -False,7,0.0,0.0,0.0,0,35,455.0,Pound -True,0,0.0,0.0,0.0,0,110,3200.0,Pound -False,2,0.0,0.0,0.0,0,6,455.0,Dollar -True,6,0.0,0.0,0.0,0,29,455.0,Pound -False,0,0.0,0.0,0.0,0,5,455.0,Pound -False,0,0.0,0.0,0.0,0,0,455.0,Pound -False,1,0.0,0.0,0.0,0,9,455.0,Euro -True,0,0.0,0.0,0.0,0,10,455.0,Dollar -True,1,0.0,0.0,0.0,0,18,455.0,Pound -True,0,0.0,0.0,0.0,0,11,455.0,Dollar -False,0,0.0,0.0,0.0,0,5,455.0,Euro -False,1,0.0,0.0,0.0,0,6,700.0,Dollar -False,1,0.0,0.0,0.0,0,19,455.0,Dollar -True,1,0.0,0.0,0.0,0,5,455.0,Pound -False,21,0.0,0.0,0.0,0,6,455.0,Pound -False,0,0.0,0.0,0.0,0,36,455.0,Pound -True,2,0.0,0.0,0.0,0,28,455.0,Pound -False,1,0.0,0.0,0.0,0,14,455.0,Dollar -True,1,0.0,0.0,0.0,0,21,455.0,Pound -False,2,0.0,0.0,0.0,0,7,455.0,Euro -False,1,0.0,0.0,0.0,0,8,455.0,Dollar -True,5,0.0,0.0,0.0,0,18,455.0,Pound -True,4,0.0,0.0,0.0,0,7,455.0,Pound -False,4,0.0,0.0,0.0,0,8,455.0,Pound -True,1,0.0,0.0,0.0,0,11,455.0,Dollar -False,0,0.0,0.0,0.0,0,46,455.0,Euro -False,5,0.0,0.0,0.0,0,11,455.0,Pound -False,0,0.0,0.0,0.0,0,43,2720.0,Euro -True,2,0.0,0.0,0.0,0,6,455.0,Euro -True,4,0.0,0.0,0.0,0,25,700.0,Pound -False,1,0.0,0.0,0.0,0,18,455.0,Dollar -False,0,0.0,0.0,0.0,0,6,455.0,Euro -False,129,0.0,0.0,0.0,0,20,455.0,Pound -False,0,0.0,0.0,0.0,0,21,455.0,Euro -True,1,0.0,0.0,0.0,0,46,455.0,Pound -False,1,0.0,0.0,0.0,0,8,455.0,Pound -False,3,0.0,0.0,0.0,0,114,455.0,Dollar -False,8,0.0,0.0,0.0,0,7,455.0,Pound -False,1,0.0,0.0,0.0,0,5,455.0,Dollar -False,0,0.0,0.0,0.0,0,19,455.0,Euro -False,0,0.0,0.0,0.0,0,0,455.0,Dollar -False,1,0.0,0.0,0.0,0,6,455.0,Euro -False,0,0.0,0.0,0.0,0,9,455.0,Pound -True,1,0.0,0.0,0.0,0,8,455.0,Euro -True,0,0.0,0.0,0.0,0,42,455.0,Euro -True,0,0.0,0.0,0.0,0,5,455.0,Dollar -True,0,0.0,0.0,0.0,0,0,455.0,Euro -False,4,0.0,0.0,0.0,0,12,455.0,Pound -False,6,0.0,0.0,0.0,0,10,455.0,Dollar -True,6,0.0,0.0,0.0,0,9,455.0,Euro -True,0,0.0,0.0,0.0,0,24,455.0,Dollar -True,0,0.0,0.0,0.0,0,11,455.0,Euro -True,1,0.0,0.0,0.0,0,9,700.0,Pound -False,0,0.0,0.0,0.0,0,8,455.0,Pound -True,0,0.0,0.0,0.0,0,17,455.0,Euro -False,7,0.0,0.0,0.0,0,31,455.0,Pound -False,3,0.0,0.0,0.0,0,11,455.0,Euro -False,15,0.0,0.0,0.0,0,67,455.0,Dollar -False,0,0.0,0.0,0.0,0,14,455.0,Euro -True,11,0.0,0.0,0.0,0,9,2240.0,Dollar -True,0,0.0,0.0,0.0,0,7,455.0,Pound -True,8,0.0,0.0,0.0,0,23,455.0,Pound -False,2,0.0,0.0,0.0,0,12,455.0,Euro -True,1,0.0,0.0,0.0,0,0,455.0,Euro -True,5,0.0,0.0,0.0,0,7,455.0,Dollar -False,7,0.0,0.0,0.0,0,5,455.0,Dollar -True,1,0.0,0.0,0.0,0,9,455.0,Dollar -False,1,0.0,0.0,0.0,0,8,455.0,Pound -False,7,0.0,0.0,0.0,0,29,455.0,Euro -False,3,0.0,0.0,0.0,0,12,455.0,Dollar -False,0,0.0,0.0,0.0,0,11,455.0,Euro -True,0,0.0,0.0,0.0,0,5,455.0,Euro -False,0,0.0,0.0,0.0,0,0,455.0,Euro -True,0,0.0,0.0,0.0,0,10,455.0,Dollar -False,1,4.5,4.5,4.5,1,19,455.0,Euro -False,4,0.0,0.0,0.0,0,10,455.0,Euro -True,0,0.0,0.0,0.0,0,6,455.0,Dollar -False,3,0.0,0.0,0.0,0,18,455.0,Euro -False,0,0.0,0.0,0.0,0,14,455.0,Dollar -False,1,0.0,0.0,0.0,0,10,455.0,Dollar -False,0,0.0,0.0,0.0,0,34,455.0,Pound -False,2,0.0,0.0,0.0,0,23,455.0,Pound -False,1,0.0,0.0,0.0,0,27,455.0,Pound -True,8,0.0,0.0,0.0,0,8,455.0,Euro -True,2,0.0,0.0,0.0,0,6,455.0,Dollar -True,0,0.0,0.0,0.0,0,19,455.0,Dollar -False,1,0.0,0.0,0.0,0,45,455.0,Dollar -False,0,0.0,0.0,0.0,0,7,455.0,Euro -True,1,0.0,0.0,0.0,0,5,700.0,Pound -True,1,0.0,0.0,0.0,0,6,640.0,Euro -True,1,0.0,0.0,0.0,0,5,455.0,Euro -True,4,0.0,0.0,0.0,0,11,455.0,Dollar -False,3,0.0,0.0,0.0,0,6,560.0,Euro -True,7,0.0,0.0,0.0,0,8,455.0,Pound -False,2,0.0,0.0,0.0,0,9,455.0,Euro -True,0,0.0,0.0,0.0,0,9,455.0,Euro -True,10,0.0,0.0,0.0,0,15,455.0,Dollar -True,0,0.0,0.0,0.0,0,9,455.0,Euro -True,7,0.0,0.0,0.0,0,7,455.0,Euro -False,1,0.0,0.0,0.0,0,20,455.0,Euro -False,2,0.0,0.0,0.0,0,0,455.0,Dollar -True,1,0.0,0.0,0.0,0,22,455.0,Euro -False,5,0.0,0.0,0.0,0,22,455.0,Euro -True,0,0.0,0.0,0.0,0,8,1440.0,Dollar -True,2,0.0,0.0,0.0,0,24,455.0,Pound -False,3,0.0,0.0,0.0,0,21,455.0,Euro -False,0,0.0,0.0,0.0,0,11,455.0,Pound -True,5,0.0,0.0,0.0,0,10,455.0,Pound -True,0,0.0,0.0,0.0,0,6,455.0,Dollar -True,4,0.0,0.0,0.0,0,43,455.0,Dollar -False,1,0.0,0.0,0.0,0,38,455.0,Dollar -True,0,0.0,0.0,0.0,0,6,455.0,Pound -True,0,0.0,0.0,0.0,0,5,455.0,Euro -False,5,0.0,0.0,0.0,0,11,455.0,Euro -True,10,5.0,5.0,5.0,1,18,455.0,Pound -True,0,0.0,0.0,0.0,0,43,455.0,Dollar -True,1,0.0,0.0,0.0,0,0,455.0,Pound -True,0,0.0,0.0,0.0,0,15,455.0,Pound -False,0,0.0,0.0,0.0,0,5,455.0,Euro -False,1,0.0,0.0,0.0,0,7,455.0,Pound -False,0,0.0,0.0,0.0,0,27,455.0,Dollar -False,95,0.0,0.0,0.0,0,5,455.0,Euro -False,0,0.0,0.0,0.0,0,13,455.0,Pound -False,0,0.0,0.0,0.0,0,11,455.0,Pound -True,0,0.0,0.0,0.0,0,13,455.0,Pound -False,13,0.0,0.0,0.0,0,33,455.0,Dollar -True,7,0.0,0.0,0.0,0,15,455.0,Euro -False,2,0.0,0.0,0.0,0,6,455.0,Euro -False,0,0.0,0.0,0.0,0,22,455.0,Dollar -True,1,0.0,0.0,0.0,0,5,455.0,Euro -False,2,0.0,0.0,0.0,0,5,455.0,Pound -True,50,0.0,0.0,0.0,0,10,455.0,Euro -True,1,0.0,0.0,0.0,0,22,455.0,Pound -True,0,0.0,0.0,0.0,0,5,455.0,Dollar -False,0,0.0,0.0,0.0,0,5,455.0,Pound -False,0,0.0,0.0,0.0,0,8,455.0,Dollar -True,1,0.0,0.0,0.0,0,5,455.0,Dollar -True,2,0.0,0.0,0.0,0,16,455.0,Euro -False,0,0.0,0.0,0.0,0,49,455.0,Euro -False,0,0.0,0.0,0.0,0,6,700.0,Dollar -False,1,0.0,0.0,0.0,0,7,455.0,Pound -True,0,0.0,0.0,0.0,0,65,455.0,Euro -True,0,0.0,0.0,0.0,0,11,455.0,Pound -True,0,0.0,0.0,0.0,0,7,455.0,Dollar -True,0,0.0,0.0,0.0,0,11,455.0,Pound -True,0,0.0,0.0,0.0,0,11,455.0,Euro -True,0,0.0,0.0,0.0,0,14,455.0,Pound -True,0,0.0,0.0,0.0,0,7,455.0,Dollar -True,4,0.0,0.0,0.0,0,10,455.0,Pound -False,0,0.0,0.0,0.0,0,59,455.0,Euro -True,12,0.0,0.0,0.0,0,30,455.0,Dollar -False,0,0.0,0.0,0.0,0,10,455.0,Dollar -False,11,0.0,0.0,0.0,0,0,455.0,Pound -False,4,0.0,0.0,0.0,0,29,1600.0,Pound -True,15,0.0,0.0,0.0,0,11,640.0,Pound -False,1,0.0,0.0,0.0,0,8,455.0,Dollar -False,9,0.0,0.0,0.0,0,0,455.0,Pound -False,7,0.0,0.0,0.0,0,47,455.0,Euro -False,5,0.0,0.0,0.0,0,8,640.0,Pound -True,131,0.0,0.0,0.0,0,25,455.0,Dollar -False,2,0.0,0.0,0.0,0,5,455.0,Dollar -True,0,0.0,0.0,0.0,0,11,455.0,Euro -False,3,0.0,0.0,0.0,0,11,455.0,Euro -True,4,0.0,0.0,0.0,0,14,455.0,Dollar -False,2,0.0,0.0,0.0,0,7,455.0,Dollar -True,0,0.0,0.0,0.0,0,11,455.0,Pound -True,1,0.0,0.0,0.0,0,18,455.0,Euro diff --git a/whitebox/analytics/drift/pipelines.py b/whitebox/analytics/drift/pipelines.py deleted file mode 100644 index b1c3d19..0000000 --- a/whitebox/analytics/drift/pipelines.py +++ /dev/null @@ -1,98 +0,0 @@ -import pandas as pd -import json -from evidently.report import Report -from evidently.metric_preset import DataDriftPreset, TargetDriftPreset -from whitebox.schemas.driftingMetric import DataDriftTable, ConceptDriftTable - - -def run_data_drift_pipeline( - reference_dataset: pd.DataFrame, current_dataset: pd.DataFrame -) -> DataDriftTable: - """ - Two datasets are needed - The reference dataset serves as a benchmark. - An analysis happens comparing the current production data to the reference data. - - The dataset should include the needed features to evaluate for drift. - The schema of both datasets should be identical. - - In the case of pandas DataFrame, all column names should be string - - All feature columns analyzed for drift should have the numerical type (np.number) - - Categorical data can be encoded as numerical labels and specified in the column_mapping. - - DateTime column is the only exception. If available, it can be used as the x-axis in the plots. - - Potentially, any two datasets can be used for comparison. Only the reference dataset - will be used as a basis for comparison. - - How it works - - To estimate the data drift Evidently compares the distributions of each feature in the two datasets. - Evidently applies statistical tests to detect if the distribution has changed significantly. There is a default - logic to choosing the appropriate statistical test based on: - - feature type: categorical or numerical - - the number of observations in the reference dataset - - the number of unique values in the feature (n_unique) - - For small data with <= 1000 observations in the reference dataset: - - For numerical features (n_unique > 5): two-sample Kolmogorov-Smirnov test. - - For categorical features or numerical features with n_unique <= 5: chi-squared test. - - For binary categorical features (n_unique <= 2), we use the proportion difference test for independent samples based on Z-score. - - All tests use a 0.95 confidence level by default. - - For larger data with > 1000 observations in the reference dataset: - - For numerical features (n_unique > 5): Wasserstein Distance. - - For categorical features or numerical with n_unique <= 5): Jensen–Shannon divergence. - - All tests use a threshold = 0.1 by default. - - """ - drift_report = Report(metrics=[DataDriftPreset()]) - drift_report.run(reference_data=reference_dataset, current_data=current_dataset) - - initial_report = drift_report.json() - initial_report = json.loads(initial_report) - - data_drift_report = {} - data_drift_report["drift_summary"] = initial_report["metrics"][1]["result"] - - return DataDriftTable(**data_drift_report["drift_summary"]) - - -def run_concept_drift_pipeline( - reference_dataset: pd.DataFrame, current_dataset: pd.DataFrame, target_feature: str -) -> ConceptDriftTable: - """ - To estimate the categorical target drift, we compare the distribution of the target in the two datasets. - This solution works for both binary and multi-class classification. - As this function works with keywords we have to explicitly define the target column. At the end of the function - we return the initial name of the feature. - - There is a default logic to choosing the appropriate statistical test, based on: - - the number of observations in the reference dataset - - the number of unique values in the target (n_unique) - - For small data with <= 1000 observations in the reference dataset: - - For categorical target with n_unique > 2: chi-squared test. - - For binary categorical target (n_unique <= 2), we use the proportion difference test for independent samples based on Z-score. - - All tests use a 0.95 confidence level by default. - - For larger data with > 1000 observations in the reference dataset we use Jensen–Shannon divergence with a threshold = 0.1. - - """ - reference_dataset.rename(columns={target_feature: "target"}, inplace=True) - current_dataset.rename(columns={target_feature: "target"}, inplace=True) - drift_report = Report(metrics=[TargetDriftPreset()]) - drift_report.run(reference_data=reference_dataset, current_data=current_dataset) - initial_report = drift_report.json() - initial_report = json.loads(initial_report) - concept_drift_report = {} - concept_drift_report["concept_drift_summary"] = initial_report["metrics"][0][ - "result" - ] - concept_drift_report["column_correlation"] = initial_report["metrics"][1]["result"] - - return ConceptDriftTable( - concept_drift_summary=concept_drift_report["concept_drift_summary"], - column_correlation=concept_drift_report["column_correlation"], - ) diff --git a/whitebox/analytics/metrics/functions.py b/whitebox/analytics/metrics/functions.py deleted file mode 100644 index b5f74aa..0000000 --- a/whitebox/analytics/metrics/functions.py +++ /dev/null @@ -1,119 +0,0 @@ -from sklearn.metrics import multilabel_confusion_matrix -import pandas as pd -from typing import Dict, Union, List - - -def format_feature_metrics( - missing_count: Dict[str, int], - non_missing_count: Dict[str, int], - mean: Dict[str, float], - minimum: Dict[str, float], - maximum: Dict[str, float], - sum: Dict[str, float], - standard_deviation: Dict[str, float], - variance: Dict[str, float], -) -> Dict[str, Union[int, float]]: - formated_metrics = { - "missing_count": missing_count, - "non_missing_count": non_missing_count, - "mean": mean, - "minimum": minimum, - "maximum": maximum, - "sum": sum, - "standard_deviation": standard_deviation, - "variance": variance, - } - - return formated_metrics - - -def format_evaluation_metrics_binary( - accuracy: float, - precision: float, - recall: float, - f1: float, - tn: int, - fp: int, - fn: int, - tp: int, -) -> Dict[str, Union[int, float]]: - formated_metrics_for_binary = { - "accuracy": accuracy, - "precision": precision, - "recall": recall, - "f1": f1, - "true_negative": tn, - "false_positive": fp, - "false_negative": fn, - "true_positive": tp, - } - - return formated_metrics_for_binary - - -def format_evaluation_metrics_multiple( - accuracy: float, - precision_statistics: Dict[str, float], - recall_statistics: Dict[str, float], - f1_statistics: Dict[str, float], - conf_matrix: Dict[str, Dict[str, int]], -) -> Dict[str, Union[float, Dict[str, Union[int, float]]]]: - formated_metrics_for_multiple = { - "accuracy": accuracy, - "precision": precision_statistics, - "recall": recall_statistics, - "f1": f1_statistics, - "confusion_matrix": conf_matrix, - } - - return formated_metrics_for_multiple - - -def format_evaluation_metrics_regression( - r_square: float, - mean_squared_error: float, - mean_absolute_error: float, -) -> Dict[str, Union[int, float]]: - formated_metrics_for_regression = { - "r_square": r_square, - "mean_squared_error": mean_squared_error, - "mean_absolute_error": mean_absolute_error, - } - - return formated_metrics_for_regression - - -def confusion_for_multiclass( - test_set: pd.DataFrame, prediction_set: pd.DataFrame, labels: List[int] -) -> Dict[str, Dict[str, int]]: - """ - Gets 2 datasets based on multiclass classification and calculates - the corresponding confusion matrix outputs tn, fp, fn, tp - - Parameters - ---------- - test_set : pd.DataFrame - Multiclass ground truth labels. - - y_score : pd.DataFrame - Multiclass predicted labels. - - Returns - ------- - mult_dict : Dict - - """ - cm = multilabel_confusion_matrix(test_set, prediction_set, labels=labels) - mult_dict = {} - class_key = 0 - for i in cm: - tn, fp, fn, tp = i.ravel() - eval_dict = { - "true_negative": tn, - "false_positive": fp, - "false_negative": fn, - "true_positive": tp, - } - mult_dict["class{}".format(class_key)] = eval_dict - class_key = class_key + 1 - return mult_dict diff --git a/whitebox/analytics/metrics/pipelines.py b/whitebox/analytics/metrics/pipelines.py deleted file mode 100644 index ddd660f..0000000 --- a/whitebox/analytics/metrics/pipelines.py +++ /dev/null @@ -1,231 +0,0 @@ -import pandas as pd -from sklearn import metrics -from sklearn.metrics import confusion_matrix -from whitebox.analytics.metrics.functions import * -from typing import List -from whitebox.schemas.performanceMetric import ( - BinaryClassificationMetricsPipelineResult, - MultiClassificationMetricsPipelineResult, - RegressionMetricsPipelineResult, -) -from whitebox.schemas.modelIntegrityMetric import FeatureMetrics - - -def create_feature_metrics_pipeline( - dataset: pd.DataFrame, -) -> FeatureMetrics: - """ - Feature metrics basic calculation - - Calculates the basic metrics of a given dataset - - Parameters - ---------- - dataset : pd.DataFrame - Given dataset for the calculation of metrics - - Returns - ------- - feature_metrics : Dict - - The returned metrics are: - missing_count, - non_missing_count, - mean, - minimum, - maximum, - sum, - standard_deviation, - variance - - """ - missing_count = dataset.isna().sum().to_dict() - non_missing_count = dataset.notna().sum().to_dict() - mean = dataset.mean(numeric_only=True).to_dict() - minimum = dataset.min(numeric_only=True).to_dict() - maximum = dataset.max(numeric_only=True).to_dict() - sum = dataset.sum(numeric_only=True).to_dict() - standard_deviation = dataset.std(numeric_only=True).to_dict() - variance = dataset.var(numeric_only=True).to_dict() - - return FeatureMetrics( - **format_feature_metrics( - missing_count, - non_missing_count, - mean, - minimum, - maximum, - sum, - standard_deviation, - variance, - ) - ) - - -def create_binary_classification_evaluation_metrics_pipeline( - test_set: pd.Series, prediction_set: pd.Series, labels: List[int] -) -> BinaryClassificationMetricsPipelineResult: - """ - Binary classification evaluation metrics - - Calculates the evaluation metrics for binary classification - given two datasets - - Parameters - ---------- - test_set : pd.Series - Given ground truth dataset - - prediction_set : pd.Series - Given predictions dataset - - Returns - ------- - evaluation_metrics : Dict - - The returned metrics are: - accuracy, - precision, - recall, - f1, - tn, - fp, - fn, - tp - - """ - - accuracy = metrics.accuracy_score(test_set, prediction_set) - precision = metrics.precision_score(test_set, prediction_set) - recall = metrics.recall_score(test_set, prediction_set) - f1 = metrics.f1_score(test_set, prediction_set) - tn, fp, fn, tp = confusion_matrix(test_set, prediction_set, labels=labels).ravel() - - return BinaryClassificationMetricsPipelineResult( - **format_evaluation_metrics_binary( - accuracy, precision, recall, f1, tn, fp, fn, tp - ) - ) - - -def create_multiple_classification_evaluation_metrics_pipeline( - test_set: pd.Series, prediction_set: pd.Series, labels: List[int] -) -> MultiClassificationMetricsPipelineResult: - """ - Multiclass classification evaluation metrics - - Calculates the evaluation metrics for multiclass classification - given two datasets - - Parameters - ---------- - test_set : pd.Series - Given ground truth dataset - - prediction_set : pd.Series - Given predictions dataset - - Returns - ------- - evaluation_metrics : Dict - - The returned metrics are: - - accuracy, - - precision_statistics - micro_precision, - macro_precision, - weighted_precision, - - recall - micro_recall, - macro_recall, - weighted_recall, - - f1 - micro_f1, - macro_f1, - weighted_f1 - - conf_matrix - tn, - fp, - fn, - tp - """ - accuracy = metrics.accuracy_score(test_set, prediction_set) - micro_precision = metrics.precision_score(test_set, prediction_set, average="micro") - macro_precision = metrics.precision_score(test_set, prediction_set, average="macro") - weighted_precision = metrics.precision_score( - test_set, prediction_set, average="weighted" - ) - precision_statistics = { - "micro": micro_precision, - "macro": macro_precision, - "weighted": weighted_precision, - } - - micro_recall = metrics.recall_score(test_set, prediction_set, average="micro") - macro_recall = metrics.recall_score(test_set, prediction_set, average="macro") - weighted_recall = metrics.recall_score(test_set, prediction_set, average="weighted") - recall_statistics = { - "micro": micro_recall, - "macro": macro_recall, - "weighted": weighted_recall, - } - - micro_f1 = metrics.f1_score(test_set, prediction_set, average="micro") - macro_f1 = metrics.f1_score(test_set, prediction_set, average="macro") - weighted_f1 = metrics.f1_score(test_set, prediction_set, average="weighted") - f1_statistics = {"micro": micro_f1, "macro": macro_f1, "weighted": weighted_f1} - conf_matrix = confusion_for_multiclass(test_set, prediction_set, labels) - - return MultiClassificationMetricsPipelineResult( - **format_evaluation_metrics_multiple( - accuracy, - precision_statistics, - recall_statistics, - f1_statistics, - conf_matrix, - ) - ) - - -def create_regression_evaluation_metrics_pipeline( - test_set: pd.Series, prediction_set: pd.Series -) -> RegressionMetricsPipelineResult: - """ - Regression evaluation metrics - - Calculates the evaluation metrics for regression - given two datasets - - Parameters - ---------- - test_set : pd.Series - Given ground truth dataset - - prediction_set : pd.Series - Given predictions dataset - - Returns - ------- - evaluation_metrics : Dict - - The returned metrics are: - r square, - mean square error, - mean absolute error - - """ - - rsq = round(metrics.r2_score(test_set, prediction_set), 4) - mse = round(metrics.mean_squared_error(test_set, prediction_set), 4) - mae = round(metrics.mean_absolute_error(test_set, prediction_set), 4) - - return RegressionMetricsPipelineResult( - **format_evaluation_metrics_regression( - r_square=rsq, mean_squared_error=mse, mean_absolute_error=mae - ) - ) diff --git a/whitebox/analytics/models/pipelines.py b/whitebox/analytics/models/pipelines.py deleted file mode 100644 index 02d63ba..0000000 --- a/whitebox/analytics/models/pipelines.py +++ /dev/null @@ -1,194 +0,0 @@ -import pandas as pd -import os -from typing import Dict -import numpy as np -import lightgbm as lgb -from lightgbm import LGBMClassifier -from sklearn.model_selection import train_test_split -from sklearn.metrics import roc_auc_score, precision_score -from sklearn import metrics -import joblib -from whitebox.core.settings import get_settings - -settings = get_settings() - -model_base_path = settings.MODEL_PATH - - -def create_binary_classification_training_model_pipeline( - training_dataset: pd.DataFrame, target: str, model_id: str -) -> Dict[str, float]: - model_path = f"{model_base_path}/{model_id}" - - # Create directory if it doesn't exist - os.makedirs(model_path, exist_ok=True) - - """ - We first define what will be training set and the targeted column for our prediction - - """ - Y = training_dataset[target] - X = training_dataset.drop(columns=[target]) - """ - We split to test and training set by using a random_state of 0 in order our code to be - reproducible. - WARNING: We assume that the given dataset is preprocessed. That means than no preprocessing will be performed - by us. We have to revisit this step in the near future. - - """ - - X_train, X_test, y_train, y_test = train_test_split( - X, Y, test_size=0.3, random_state=0 - ) - """ - We use the default set of parameters which produce good results with our baseline dataset. - WARNING: In the near future we have to grid-search for the optimal parameters for training datasets - - The train of our model took locally less than 1 seconds. - Also we temp save the model in a pkl format. - WARNING: We have to revisit this step for optimise the resources cost. - - """ - clf = LGBMClassifier() - clf.fit(X_train, y_train) - joblib.dump(clf, f"{model_path}/lgb_binary.pkl") - - """ - We make some predictions in the X_test and we find the class - there by rounding the output. After that we calculate the roc auc curve - score. - - """ - - y_pred_1 = clf.predict(X_test) - y_pred_1 = y_pred_1.round(0) - y_pred_1 = y_pred_1.astype(int) - - roc_score = roc_auc_score(y_test, y_pred_1) - binary_evaluation_report = {} - binary_evaluation_report["roc_auc_score"] = roc_score - - return clf, binary_evaluation_report - - -def create_multiclass_classification_training_model_pipeline( - training_dataset: pd.DataFrame, target: str, model_id: str -) -> Dict[str, float]: - model_path = f"{model_base_path}/{model_id}" - - # Create directory if it doesn't exist - os.makedirs(model_path, exist_ok=True) - - """ - We first define what will be training set and the targeted column for our prediction - - """ - Y = training_dataset[target] - X = training_dataset.drop(columns=[target]) - """ - We split to test and training set by using a random_state of 0 in order our code to be - reproducible. - We load the dataset to lightgbm library. - WARNING: We assume that the given dataset is preprocessed. That means than no preprocessing will be performed - by us. We have to revisit this step in the near future. - - """ - - X_train, X_test, y_train, y_test = train_test_split( - X, Y, test_size=0.3, random_state=0 - ) - d_train = lgb.Dataset(X_train, label=y_train) - """ - We use a set of parameters which produce good results with our baseline dataset. - WARNING: In the near future we have to grid-search for the optimal parameters for training datasets - - """ - - params = {} - params["verbose"] = -1 # Remove logs - params["learning_rate"] = 0.03 - params["boosting_type"] = "gbdt" # GradientBoostingDecisionTree - params["objective"] = "multiclass" # Multi-class target feature - params["metric"] = "multi_logloss" # metric for multi-class - params["max_depth"] = 10 - params[ - "num_class" - ] = 3 # no.of unique values in the target class not inclusive of the end value - """ - We train our model in 100 epochs - locally this took less than 2 seconds. - Also we temp save the model in a pkl format. - WARNING: We have to revisit this step for optimise the resources cost. - - """ - clf = lgb.train(params, d_train, 100) # training the model on 100 epocs - joblib.dump(clf, f"{model_path}/lgb_multi.pkl") - - """ - We make some predictions in the X_test and we find the class with the higher - probability there. After that we calculate the precision_score - - """ - - y_pred_1 = clf.predict(X_test) - y_pred_1 = [np.argmax(line) for line in y_pred_1] - prec_score = precision_score(y_test, y_pred_1, average=None).mean() - - multi_evaluation_report = {} - multi_evaluation_report["precision"] = prec_score - - return clf, multi_evaluation_report - - -def create_regression_training_model_pipeline( - training_dataset: pd.DataFrame, target: str, model_id: str -) -> Dict[str, float]: - model_path = f"{model_base_path}/{model_id}" - - # Create directory if it doesn't exist - os.makedirs(model_path, exist_ok=True) - - """ - We first define what will be training set and the targeted column for our prediction - - """ - Y = training_dataset[target] - X = training_dataset.drop(columns=[target]) - """ - We split to test and training set by using a random_state of 0 in order our code to be - reproducible. - WARNING: We assume that the given dataset is preprocessed. That means than no preprocessing will be performed - by us. We have to revisit this step in the near future. - - """ - - X_train, X_test, y_train, y_test = train_test_split( - X, Y, test_size=0.3, random_state=0 - ) - """ - We use the default set of parameters which produce good results with our baseline dataset. - WARNING: In the near future we have to grid-search for the optimal parameters for training datasets - - The train of our model took locally less than 1 seconds. - Also we temp save the model in a pkl format. - WARNING: We have to revisit this step for optimise the resources cost. - - """ - - reg = lgb.LGBMRegressor() - reg.fit(X_train, y_train) - joblib.dump(reg, f"{model_path}/lgb_reg.pkl") - - """ - We make some predictions in the X_test and we find the class - there by rounding the output. After that we calculate the roc auc curve - score. - - """ - - y_predicted = reg.predict(X_test) - r2_score = round(metrics.r2_score(y_test, y_predicted), 4) - - reg_evaluation_report = {} - reg_evaluation_report["r2_score"] = r2_score - - return reg, reg_evaluation_report diff --git a/whitebox/analytics/tests/__init__.py b/whitebox/analytics/tests/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/whitebox/analytics/tests/test_pipelines.py b/whitebox/analytics/tests/test_pipelines.py deleted file mode 100644 index beb6910..0000000 --- a/whitebox/analytics/tests/test_pipelines.py +++ /dev/null @@ -1,319 +0,0 @@ -from whitebox.analytics.metrics.pipelines import * -from whitebox.analytics.drift.pipelines import * -from whitebox.analytics.models.pipelines import * -from whitebox.analytics.xai_models.pipelines import * -from unittest import TestCase -from sklearn.datasets import fetch_california_housing -from sklearn.datasets import load_breast_cancer, load_wine, load_diabetes - -test_model_id = "test_model_id" - -test_metrics_df = pd.read_csv("whitebox/analytics/data/testing/metrics_test_data.csv") -test_classification_df = pd.read_csv( - "whitebox/analytics/data/testing/classification_test_data.csv" -) -drift_data = fetch_california_housing(as_frame=True) -drift_data = drift_data.frame -reference = drift_data.head(500) -current = drift_data.iloc[1000:1200] -reference_concept_drift = test_classification_df.head(5) -current_concept_drift = test_classification_df.tail(5) -concept_drift_detected_dataset = pd.read_csv( - "whitebox/analytics/data/testing/udemy_fin_adj.csv" -) -reference_concept_drift_detected = concept_drift_detected_dataset.head(1000) -current_concept_drift_detected = concept_drift_detected_dataset.tail(1000) -df_load_binary = load_breast_cancer() -df_binary = pd.DataFrame(df_load_binary.data, columns=df_load_binary.feature_names) -df_binary["target"] = df_load_binary.target -df_binary_inference = df_binary.drop(columns=["target"]) -df_binary_inference = df_binary_inference.tail(10) -df_binary_inference_row1 = df_binary_inference.iloc[7] -df_binary_inference_row2 = df_binary_inference.iloc[3] -df_load_multi = load_wine() -df_multi = pd.DataFrame(df_load_multi.data, columns=df_load_multi.feature_names) -df_multi["target"] = df_load_multi.target -df_multi_inference = df_multi.drop(columns=["target"]) -df_multi_inference = df_multi_inference.tail(10) -df_multi_inference_row1 = df_multi_inference.iloc[4] -df_multi_inference_row2 = df_multi_inference.iloc[2] - -test_regression_df = pd.read_csv( - "whitebox/analytics/data/testing/regression_test_data.csv" -) -df_load_reg = load_diabetes() -df_reg = pd.DataFrame(df_load_reg.data, columns=df_load_reg.feature_names) -df_reg["target"] = df_load_reg.target -df_reg_inference = df_reg.drop(columns=["target"]) -df_reg_inference = df_reg_inference.tail(10) -df_reg_inference_row1 = df_reg_inference.iloc[7] -df_reg_inference_row2 = df_reg_inference.iloc[3] - - -class TestNodes: - def test_create_feature_metrics_pipeline(self): - features_metrics = dict(create_feature_metrics_pipeline(test_metrics_df)) - missing_count = features_metrics["missing_count"] - non_missing_count = features_metrics["non_missing_count"] - mean = features_metrics["mean"] - minimum = features_metrics["minimum"] - maximum = features_metrics["maximum"] - sum = features_metrics["sum"] - standard_deviation = features_metrics["standard_deviation"] - variance = features_metrics["variance"] - TestCase().assertDictEqual( - {"num1": 1, "num2": 2, "num3": 0, "cat1": 1, "cat2": 2}, missing_count - ) - TestCase().assertDictEqual( - {"num1": 9, "num2": 8, "num3": 10, "cat1": 9, "cat2": 8}, non_missing_count - ) - TestCase().assertDictEqual( - {"num1": 156.33333333333334, "num2": 9.223817500000001, "num3": 1.0}, mean - ) - TestCase().assertDictEqual({"num1": 0.0, "num2": 0.00054, "num3": 0.0}, minimum) - TestCase().assertDictEqual( - {"num1": 1000.0, "num2": 45.896, "num3": 2.0}, maximum - ) - TestCase().assertDictEqual( - {"num1": 1407.0, "num2": 73.79054000000001, "num3": 10.0}, sum - ) - TestCase().assertDictEqual( - { - "num1": 322.0283372624217, - "num2": 15.488918075768835, - "num3": 0.816496580927726, - }, - standard_deviation, - ) - TestCase().assertDictEqual( - { - "num1": 103702.25000000001, - "num2": 239.90658315787854, - "num3": 0.6666666666666666, - }, - variance, - ) - - def test_create_binary_classification_evaluation_metrics_pipeline(self): - binary_metrics = dict( - create_binary_classification_evaluation_metrics_pipeline( - test_classification_df["y_testing_binary"], - test_classification_df["y_prediction_binary"], - labels=[0, 1], - ) - ) - - binary_metrics_edge_case = dict( - create_binary_classification_evaluation_metrics_pipeline( - test_classification_df["y_testing_binary"].tail(1), - test_classification_df["y_prediction_binary"].tail(1), - labels=[0, 1], - ) - ) - - assert binary_metrics_edge_case["true_positive"] == 1 - assert binary_metrics["accuracy"] == 0.6 - assert binary_metrics["precision"] == 0.6 - assert binary_metrics["recall"] == 0.6 - assert binary_metrics["f1"] == 0.6 - assert binary_metrics["true_negative"] == 3 - assert binary_metrics["false_positive"] == 2 - assert binary_metrics["false_negative"] == 2 - assert binary_metrics["true_positive"] == 3 - - def test_create_multiple_classification_evaluation_metrics_pipeline(self): - multi_metrics = create_multiple_classification_evaluation_metrics_pipeline( - test_classification_df["y_testing_multi"], - test_classification_df["y_prediction_multi"], - labels=[0, 1, 2], - ) - - multi_metrics_edge_case = ( - create_multiple_classification_evaluation_metrics_pipeline( - test_classification_df["y_testing_multi"].tail(1), - test_classification_df["y_prediction_multi"].tail(1), - labels=[0, 1, 2], - ) - ) - - assert multi_metrics.accuracy == 0.6 - - TestCase().assertDictEqual( - { - "true_negative": 0, - "false_positive": 0, - "false_negative": 0, - "true_positive": 1, - }, - multi_metrics_edge_case.confusion_matrix["class1"].dict(), - ) - - TestCase().assertDictEqual( - {"micro": 0.6, "macro": 0.6444444444444445, "weighted": 0.64}, - multi_metrics.precision.dict(), - ) - TestCase().assertDictEqual( - {"micro": 0.6, "macro": 0.5833333333333334, "weighted": 0.6}, - multi_metrics.recall.dict(), - ) - TestCase().assertDictEqual( - {"micro": 0.6, "macro": 0.6, "weighted": 0.6066666666666667}, - multi_metrics.f1.dict(), - ) - TestCase().assertDictEqual( - { - "true_negative": 5, - "false_positive": 2, - "false_negative": 2, - "true_positive": 1, - }, - multi_metrics.confusion_matrix["class0"].dict(), - ) - TestCase().assertDictEqual( - { - "true_negative": 4, - "false_positive": 2, - "false_negative": 1, - "true_positive": 3, - }, - multi_metrics.confusion_matrix["class1"].dict(), - ) - TestCase().assertDictEqual( - { - "true_negative": 7, - "false_positive": 0, - "false_negative": 1, - "true_positive": 2, - }, - multi_metrics.confusion_matrix["class2"].dict(), - ) - - def test_create_regression_evaluation_metrics_pipeline(self): - reg_report = dict( - create_regression_evaluation_metrics_pipeline( - test_regression_df["y_test"], test_regression_df["y_prediction"] - ) - ) - rsq = reg_report["r_square"] - mse = reg_report["mean_squared_error"] - mae = reg_report["mean_absolute_error"] - assert (rsq) == 0.9044 - assert (mse) == 0.0071 - assert (mae) == 0.037 - - def test_create_data_drift_pipeline(self): - data_drift_report = dict(run_data_drift_pipeline(reference, current)) - assert data_drift_report["number_of_columns"] == 9 - assert data_drift_report["number_of_drifted_columns"] == 7 - assert ( - round( - dict(data_drift_report["drift_by_columns"]["Population"])[ - "drift_score" - ], - 2, - ) - == 0.06 - ) - assert ( - dict(data_drift_report["drift_by_columns"]["Longitude"])["drift_detected"] - == True - ) - assert ( - dict(data_drift_report["drift_by_columns"]["AveBedrms"])["drift_detected"] - == False - ) - - def test_create_concept_drift_pipeline_drift_not_detected(self): - concept_drift_report = vars( - run_concept_drift_pipeline( - reference_concept_drift, current_concept_drift, "y_testing_multi" - ) - ) - assert list(concept_drift_report.keys()) == [ - "concept_drift_summary", - "column_correlation", - ] - assert ( - round(vars(concept_drift_report["concept_drift_summary"])["drift_score"], 3) - == 0.082 - ) - assert ( - vars(concept_drift_report["concept_drift_summary"])["drift_detected"] - == False - ) - - def test_create_concept_drift_pipeline_drift_detected(self): - concept_drift_report = vars( - run_concept_drift_pipeline( - reference_concept_drift_detected, - current_concept_drift_detected, - "discount_price__currency", - ) - ) - assert list(concept_drift_report.keys()) == [ - "concept_drift_summary", - "column_correlation", - ] - assert ( - round(vars(concept_drift_report["concept_drift_summary"])["drift_score"], 3) - == 0.008 - ) - assert ( - vars(concept_drift_report["concept_drift_summary"])["drift_detected"] - == True - ) - - def test_create_binary_classification_training_model_pipeline(self): - model, eval = create_binary_classification_training_model_pipeline( - df_binary, "target", test_model_id - ) - eval_score = eval["roc_auc_score"] - assert (round(eval_score, 3)) == 0.976 - - def test_create_multiclass_classification_training_model_pipeline(self): - model, eval = create_multiclass_classification_training_model_pipeline( - df_multi, "target", test_model_id - ) - eval_score = eval["precision"] - assert (round(eval_score, 2)) == 0.96 - - def test_create_regression_training_model_pipeline(self): - model, eval = create_regression_training_model_pipeline( - df_reg, "target", test_model_id - ) - eval_score = eval["r2_score"] - assert (eval_score) == 0.2576 - - def test_create_xai_pipeline_per_inference_row(self): - binary_class_report1 = create_xai_pipeline_per_inference_row( - df_binary, "target", df_binary_inference_row1, "binary", test_model_id - ) - multi_class_report1 = create_xai_pipeline_per_inference_row( - df_multi, "target", df_multi_inference_row1, "multi_class", test_model_id - ) - regression_report1 = create_xai_pipeline_per_inference_row( - df_reg, "target", df_reg_inference_row1, "regression", test_model_id - ) - binary_class_report2 = create_xai_pipeline_per_inference_row( - df_binary, "target", df_binary_inference_row2, "binary", test_model_id - ) - multi_class_report2 = create_xai_pipeline_per_inference_row( - df_multi, "target", df_multi_inference_row2, "multi_class", test_model_id - ) - regression_report2 = create_xai_pipeline_per_inference_row( - df_reg, "target", df_reg_inference_row2, "regression", test_model_id - ) - - binary_contribution_check_one = binary_class_report1["worst perimeter"] - binary_contribution_check_two = binary_class_report2["worst texture"] - multi_contribution_check_one = multi_class_report1["hue"] - multi_contribution_check_two = multi_class_report2["alcohol"] - regression_contribution_check_one = regression_report1["sex"] - regression_contribution_check_two = regression_report2["bp"] - - assert (round(binary_contribution_check_one, 3)) == -0.464 - assert (round(binary_contribution_check_two, 1)) == -0.1 - assert (round(multi_contribution_check_one, 2)) == -0.09 - assert (round(multi_contribution_check_two, 3)) == 0.076 - assert (round(regression_contribution_check_one, 2)) == 9.48 - assert (round(regression_contribution_check_two, 3)) == 14.079 diff --git a/whitebox/analytics/xai_models/pipelines.py b/whitebox/analytics/xai_models/pipelines.py deleted file mode 100644 index a95b5fa..0000000 --- a/whitebox/analytics/xai_models/pipelines.py +++ /dev/null @@ -1,92 +0,0 @@ -import pandas as pd -from typing import Dict -import joblib -import lime -import lime.lime_tabular -from whitebox.analytics.models.pipelines import * -from whitebox.core.settings import get_settings -from whitebox.schemas.model import ModelType - - -settings = get_settings() - - -def create_xai_pipeline_per_inference_row( - training_set: pd.DataFrame, - target: str, - inference_row: pd.Series, - type_of_task: str, - model_id: str, -) -> Dict[str, float]: - model_base_path = settings.MODEL_PATH - model_path = f"{model_base_path}/{model_id}" - - xai_dataset = training_set.drop(columns=[target]) - explainability_report = {} - - # Make a mapping dict which will be used later to map the explainer index - # with the features names - - mapping_dict = {} - for feature in range(0, len(xai_dataset.columns.tolist())): - mapping_dict[feature] = xai_dataset.columns.tolist()[feature] - - # Expainability for both classifications tasks and regression - # We have again to revisit here in the future as in case we upload the model - # from the file system we don't care if it is binary or multiclass - - if type_of_task == ModelType.multi_class: - # Giving the option of retrieving the local model - - model = joblib.load(f"{model_path}/lgb_multi.pkl") - explainer = lime.lime_tabular.LimeTabularExplainer( - xai_dataset.values, - feature_names=xai_dataset.columns.values.tolist(), - mode="classification", - random_state=1, - ) - - exp = explainer.explain_instance(inference_row, model.predict) - med_report = exp.as_map() - temp_dict = dict(list(med_report.values())[0]) - explainability_report = { - mapping_dict[name]: val for name, val in temp_dict.items() - } - - elif type_of_task == ModelType.binary: - # Giving the option of retrieving the local model - - model = joblib.load(f"{model_path}/lgb_binary.pkl") - explainer = lime.lime_tabular.LimeTabularExplainer( - xai_dataset.values, - feature_names=xai_dataset.columns.values.tolist(), - mode="classification", - random_state=1, - ) - - exp = explainer.explain_instance(inference_row, model.predict_proba) - med_report = exp.as_map() - temp_dict = dict(list(med_report.values())[0]) - explainability_report = { - mapping_dict[name]: val for name, val in temp_dict.items() - } - - elif type_of_task == ModelType.regression: - # Giving the option of retrieving the local model - - model = joblib.load(f"{model_path}/lgb_reg.pkl") - explainer = lime.lime_tabular.LimeTabularExplainer( - xai_dataset.values, - feature_names=xai_dataset.columns.values.tolist(), - mode="regression", - random_state=1, - ) - - exp = explainer.explain_instance(inference_row, model.predict) - med_report = exp.as_map() - temp_dict = dict(list(med_report.values())[0]) - explainability_report = { - mapping_dict[name]: val for name, val in temp_dict.items() - } - - return explainability_report diff --git a/whitebox/api/__init__.py b/whitebox/api/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/whitebox/api/v1/__init__.py b/whitebox/api/v1/__init__.py deleted file mode 100644 index 0826863..0000000 --- a/whitebox/api/v1/__init__.py +++ /dev/null @@ -1,27 +0,0 @@ -from fastapi import APIRouter -from .health import health_router - -from .models import models_router -from .dataset_rows import dataset_rows_router -from .inference_rows import inference_rows_router -from .performance_metrics import performance_metrics_router -from .drifting_metrics import drifting_metrics_router -from .model_integrity_metrics import model_integrity_metrics_router -from .model_monitors import model_monitors_router -from .alerts import alerts_router -from .cron_tasks import cron_tasks_router - - -v1_router = APIRouter() -v1 = "/v1" - -v1_router.include_router(health_router, prefix=v1) -v1_router.include_router(models_router, prefix=v1) -v1_router.include_router(dataset_rows_router, prefix=v1) -v1_router.include_router(inference_rows_router, prefix=v1) -v1_router.include_router(performance_metrics_router, prefix=v1) -v1_router.include_router(drifting_metrics_router, prefix=v1) -v1_router.include_router(model_integrity_metrics_router, prefix=v1) -v1_router.include_router(model_monitors_router, prefix=v1) -v1_router.include_router(alerts_router, prefix=v1) -v1_router.include_router(cron_tasks_router, prefix=v1) diff --git a/whitebox/api/v1/alerts.py b/whitebox/api/v1/alerts.py deleted file mode 100644 index bd19a51..0000000 --- a/whitebox/api/v1/alerts.py +++ /dev/null @@ -1,41 +0,0 @@ -from typing import List, Union -from fastapi import APIRouter, Depends, status -from whitebox import crud -from sqlalchemy.orm import Session -from whitebox.core.db import get_db -from whitebox.middleware.auth import authenticate_user -from whitebox.schemas.alert import Alert -from whitebox.schemas.user import User -from whitebox.utils.errors import add_error_responses, errors - - -alerts_router = APIRouter() - - -@alerts_router.get( - "/alerts", - tags=["Alerts"], - response_model=List[Alert], - summary="Get all model's alerts", - status_code=status.HTTP_200_OK, - responses=add_error_responses([401, 404]), -) -async def get_alerts( - model_id: Union[str, None] = None, - db: Session = Depends(get_db), - authenticated_user: User = Depends(authenticate_user), -): - """ - Fetches alerts from the databse. - \n If a model id is provided, only the alerts for the specific model will be fetched. - \n If a model id is not provided then all alerts from the database will be fetched. - """ - - if model_id: - model = crud.models.get(db, model_id) - if model: - return crud.alerts.get_model_alerts_by_model(db=db, model_id=model_id) - else: - return errors.not_found("Model not found") - else: - return crud.alerts.get_all(db=db) diff --git a/whitebox/api/v1/cron_tasks.py b/whitebox/api/v1/cron_tasks.py deleted file mode 100644 index f4eb2d5..0000000 --- a/whitebox/api/v1/cron_tasks.py +++ /dev/null @@ -1,22 +0,0 @@ -from whitebox.schemas.utils import HealthCheck -from fastapi import APIRouter, status -from whitebox.cron_tasks.monitoring_metrics import run_calculate_metrics_pipeline -from whitebox.cron_tasks.monitoring_alerts import run_create_alerts_pipeline - - -cron_tasks_router = APIRouter() - - -@cron_tasks_router.post( - "/cron-tasks/run", - tags=["Cron Tasks"], - summary="Helper endpoint", - status_code=status.HTTP_200_OK, - response_description="Result of cron tasks", -) -async def run_cron(): - """A helper endpoint that triggers the metrics and alerts pipelines while testing.""" - - await run_calculate_metrics_pipeline() - await run_create_alerts_pipeline() - return HealthCheck(status="OK") diff --git a/whitebox/api/v1/dataset_rows.py b/whitebox/api/v1/dataset_rows.py deleted file mode 100644 index 360f181..0000000 --- a/whitebox/api/v1/dataset_rows.py +++ /dev/null @@ -1,110 +0,0 @@ -import pandas as pd -from typing import List -from whitebox.analytics.models.pipelines import ( - create_binary_classification_training_model_pipeline, - create_multiclass_classification_training_model_pipeline, - create_regression_training_model_pipeline, -) -from whitebox.middleware.auth import authenticate_user -from whitebox.schemas.datasetRow import DatasetRow, DatasetRowCreate -from whitebox.schemas.model import ModelType -from whitebox.schemas.user import User -from fastapi import APIRouter, BackgroundTasks, Depends, status -from fastapi.encoders import jsonable_encoder -from whitebox import crud -from sqlalchemy.orm import Session -from whitebox.core.db import get_db -from whitebox.utils.errors import add_error_responses, errors - - -dataset_rows_router = APIRouter() - - -@dataset_rows_router.post( - "/dataset-rows", - tags=["Dataset Rows"], - response_model=List[DatasetRow], - summary="Create dataset rows", - status_code=status.HTTP_201_CREATED, - responses=add_error_responses([400, 401, 404, 409]), -) -async def create_dataset_rows( - body: List[DatasetRowCreate], - background_tasks: BackgroundTasks, - db: Session = Depends(get_db), - authenticated_user: User = Depends(authenticate_user), -) -> DatasetRow: - """ - Inserts a set of dataset rows into the database. - \nWhen the dataset rows are successfully saved, the pipeline for training the model is triggered. - """ - - if len(body) <= 1: - return errors.bad_request("Training dataset should be longer that 1 row!") - - model = crud.models.get(db=db, _id=dict(body[0])["model_id"]) - if model: - for row in body: - if not model.target_column in row.processed: - return errors.bad_request( - f'Column "{model.target_column}" was not found in some or any of the rows in provided training dataset. Please try again!' - ) - - predictions = list(set(vars(x)["processed"][model.target_column] for x in body)) - if len(predictions) <= 1: - return errors.bad_request( - f'Training dataset\'s "{model.target_column}" columns must have at least 2 different values!' - ) - - new_dataset_rows = crud.dataset_rows.create_many(db=db, obj_list=body) - processed_dataset_rows = [ - x["processed"] for x in jsonable_encoder(new_dataset_rows) - ] - processed_dataset_rows_pd = pd.DataFrame(processed_dataset_rows) - - if model.type == ModelType.binary: - background_tasks.add_task( - create_binary_classification_training_model_pipeline, - processed_dataset_rows_pd, - model.target_column, - model.id, - ) - elif model.type == ModelType.multi_class: - background_tasks.add_task( - create_multiclass_classification_training_model_pipeline, - processed_dataset_rows_pd, - model.target_column, - model.id, - ) - elif model.type == ModelType.regression: - background_tasks.add_task( - create_regression_training_model_pipeline, - processed_dataset_rows_pd, - model.target_column, - model.id, - ) - return new_dataset_rows - else: - return errors.not_found(f"Model with id: {dict(body[0])['model_id']} not found") - - -@dataset_rows_router.get( - "/dataset-rows", - tags=["Dataset Rows"], - response_model=List[DatasetRow], - summary="Get all model's dataset rows", - status_code=status.HTTP_200_OK, - responses=add_error_responses([401, 404]), -) -async def get_all_dataset_rows( - model_id: str, - db: Session = Depends(get_db), - authenticated_user: User = Depends(authenticate_user), -): - """Fetches the dataset rows of a specific model. A model id is required.""" - - model = crud.models.get(db, model_id) - if model: - return crud.dataset_rows.get_dataset_rows_by_model(db=db, model_id=model_id) - else: - return errors.not_found("Model not found") diff --git a/whitebox/api/v1/docs.py b/whitebox/api/v1/docs.py deleted file mode 100644 index 66ae11a..0000000 --- a/whitebox/api/v1/docs.py +++ /dev/null @@ -1,109 +0,0 @@ -from whitebox.schemas.utils import ErrorResponse - - -tags_metadata = [ - { - "name": "Health", - "description": "Health endpoints are used for checking the status of the service", - }, - { - "name": "Models", - "description": "This set of endpoints handles the models that a user creates.", - }, - { - "name": "Dataset Rows", - "description": "This set of endpoints handles the dataset rows.", - }, - { - "name": "Inference Rows", - "description": "This set of endpoints handles a model's inference rows.", - }, - { - "name": "Performance Metrics", - "description": "This set of endpoints handles a model's performance metrics.", - }, - { - "name": "Drifting Metrics", - "description": "This set of endpoints handles a model's drifting metrics.", - }, - { - "name": "Model Integrity Metrics", - "description": "This set of endpoints handles a model's integrity metrics.", - }, - { - "name": "Model Monitors", - "description": "This set of endpoints handles a model's model monitors.", - }, - { - "name": "Alerts", - "description": "This set of endpoints handles a model's alerts.", - }, - { - "name": "Cron Tasks", - "description": "This is a helper endpoint to trigger cron tasks for tests.", - }, -] - - -bad_request: ErrorResponse = { - "title": "BadRequest", - "type": "object", - "properties": { - "error": {"title": "Error Message", "type": "string"}, - "status_code": {"title": "Status code", "type": "integer"}, - }, -} - -validation_error: ErrorResponse = { - "title": "HTTPValidationError", - "type": "object", - "properties": { - "error": {"title": "Error Message", "type": "string"}, - "status_code": {"title": "Status code", "type": "integer"}, - }, -} - -authorization_error: ErrorResponse = { - "title": "AuthorizationError", - "type": "object", - "properties": { - "error": {"title": "Error Message", "type": "string"}, - "status_code": {"title": "Status code", "type": "integer"}, - }, -} - -not_found_error: ErrorResponse = { - "title": "NotFoundError", - "type": "object", - "properties": { - "error": {"title": "Error Message", "type": "string"}, - "status_code": {"title": "Status code", "type": "integer"}, - }, -} - -conflict_error: ErrorResponse = { - "title": "ConflictError", - "type": "object", - "properties": { - "error": {"title": "Error Message", "type": "string"}, - "status_code": {"title": "Status code", "type": "integer"}, - }, -} - -conflict_error: ErrorResponse = { - "title": "ConflictError", - "type": "object", - "properties": { - "error": {"title": "Error Message", "type": "string"}, - "status_code": {"title": "Status code", "type": "integer"}, - }, -} - -content_gone: ErrorResponse = { - "title": "ContentGone", - "type": "object", - "properties": { - "error": {"title": "Error Message", "type": "string"}, - "status_code": {"title": "Status code", "type": "integer"}, - }, -} diff --git a/whitebox/api/v1/drifting_metrics.py b/whitebox/api/v1/drifting_metrics.py deleted file mode 100644 index b98f9c1..0000000 --- a/whitebox/api/v1/drifting_metrics.py +++ /dev/null @@ -1,36 +0,0 @@ -from typing import List -from fastapi import APIRouter, Depends, status -from whitebox import crud -from sqlalchemy.orm import Session -from whitebox.core.db import get_db -from whitebox.middleware.auth import authenticate_user -from whitebox.schemas.driftingMetric import DriftingMetricBase -from whitebox.schemas.user import User -from whitebox.utils.errors import add_error_responses, errors - - -drifting_metrics_router = APIRouter() - - -@drifting_metrics_router.get( - "/drifting-metrics", - tags=["Drifting Metrics"], - response_model=List[DriftingMetricBase], - summary="Get all model's drifting metrics", - status_code=status.HTTP_200_OK, - responses=add_error_responses([401, 404]), -) -async def get_all_models_drifting_metrics( - model_id: str, - db: Session = Depends(get_db), - authenticated_user: User = Depends(authenticate_user), -): - """Fetches the drifting metrics of a specific model. A model id is required.""" - - model = crud.models.get(db, model_id) - if model: - return crud.drifting_metrics.get_drifting_metrics_by_model( - db=db, model_id=model_id - ) - else: - return errors.not_found("Model not found") diff --git a/whitebox/api/v1/health.py b/whitebox/api/v1/health.py deleted file mode 100644 index 448c857..0000000 --- a/whitebox/api/v1/health.py +++ /dev/null @@ -1,17 +0,0 @@ -from whitebox.schemas.utils import HealthCheck -from fastapi import APIRouter, status - -health_router = APIRouter() - - -@health_router.get( - "/health", - tags=["Health"], - response_model=HealthCheck, - summary="Health check the service", - status_code=status.HTTP_200_OK, - response_description="Status of the service", -) -def health_check(): - """Responds with the status of the service.""" - return HealthCheck(status="OK") diff --git a/whitebox/api/v1/inference_rows.py b/whitebox/api/v1/inference_rows.py deleted file mode 100644 index bb67d18..0000000 --- a/whitebox/api/v1/inference_rows.py +++ /dev/null @@ -1,166 +0,0 @@ -from typing import Dict, List -from whitebox.middleware.auth import authenticate_user -from whitebox.schemas.inferenceRow import ( - InferenceRow, - InferenceRowCreateDto, - InferenceRowPreDb, -) -from whitebox.analytics.xai_models.pipelines import ( - create_xai_pipeline_per_inference_row, -) -import pandas as pd -from whitebox.schemas.user import User -from fastapi import APIRouter, Depends, status -from whitebox import crud -from sqlalchemy.orm import Session -from whitebox.core.db import get_db -from whitebox.utils.errors import add_error_responses, errors - - -inference_rows_router = APIRouter() - - -@inference_rows_router.post( - "/inference-rows", - tags=["Inference Rows"], - response_model=InferenceRow, - summary="Create an inference row", - status_code=status.HTTP_201_CREATED, - responses=add_error_responses([400, 401]), -) -async def create_row( - body: InferenceRowCreateDto, - db: Session = Depends(get_db), - authenticated_user: User = Depends(authenticate_user), -) -> InferenceRow: - """Inserts an inference row into the database.""" - - updated_body = InferenceRowPreDb(**dict(body), is_used=False) - - new_inference_row = crud.inference_rows.create(db=db, obj_in=updated_body) - return new_inference_row - - -@inference_rows_router.post( - "/inference-rows/batch", - tags=["Inference Rows"], - response_model=List[InferenceRow], - summary="Create many inference rows", - status_code=status.HTTP_201_CREATED, - responses=add_error_responses([400, 401]), -) -async def create_many_inference_rows( - body: List[InferenceRowCreateDto], - db: Session = Depends(get_db), - authenticated_user: User = Depends(authenticate_user), -) -> List[InferenceRow]: - """Inserts a set of inference rows into the database.""" - - model = crud.models.get(db=db, _id=dict(body[0])["model_id"]) - if model: - for row in body: - if not model.target_column in row.processed: - return errors.bad_request( - f'Column "{model.target_column}" was not found in some or any of the rows in provided inference dataset. Please try again!' - ) - - updated_body = [InferenceRowPreDb(**dict(x), is_used=False) for x in body] - new_inference_rows = crud.inference_rows.create_many( - db=db, obj_list=updated_body - ) - return new_inference_rows - else: - return errors.not_found(f"Model with id: {dict(body[0])['model_id']} not found") - - -@inference_rows_router.get( - "/inference-rows", - tags=["Inference Rows"], - response_model=List[InferenceRow], - summary="Get all model's inference rows", - status_code=status.HTTP_200_OK, - responses=add_error_responses([401, 404]), -) -async def get_all_models_inference_rows( - model_id: str, - db: Session = Depends(get_db), - authenticated_user: User = Depends(authenticate_user), -): - """Fetches the inference rows of a specific model. A model id is required.""" - - model = crud.models.get(db, model_id) - if model: - return crud.inference_rows.get_inference_rows_by_model(db=db, model_id=model_id) - else: - return errors.not_found("Model not found") - - -@inference_rows_router.get( - "/inference-rows/{inference_row_id}", - tags=["Inference Rows"], - response_model=InferenceRow, - summary="Get inference row by id", - status_code=status.HTTP_200_OK, - responses=add_error_responses([401, 404]), -) -async def get_inference_row( - inference_row_id: str, - db: Session = Depends(get_db), - authenticated_user: User = Depends(authenticate_user), -): - """Fetches a specific inference row. An inference row id is required.""" - - inference_row = crud.inference_rows.get(db=db, _id=inference_row_id) - if not inference_row: - return errors.not_found("Inference not found") - - return inference_row - - -@inference_rows_router.get( - "/inference-rows/{inference_row_id}/xai", - tags=["Inference Rows"], - response_model=Dict[str, float], - summary="Creates and fetches am explainability report for an inference row", - status_code=status.HTTP_200_OK, - responses=add_error_responses([401, 404]), -) -async def create_inference_row_xai_report( - inference_row_id: str, - db: Session = Depends(get_db), - authenticated_user: User = Depends(authenticate_user), -): - """ - Given a specific inference row id, this endpoint produces an explainability report for this inference. - The XAI pipeline requires a set of dataset rows as a training set, a model and the inference row. - If one of those three is not found in the database, a 404 error is returned. - """ - - inference_row = crud.inference_rows.get(db=db, _id=inference_row_id) - if not inference_row: - return errors.not_found(f"Inference row with id {inference_row_id} not found") - - inference_row_df = pd.DataFrame([inference_row.processed]) - inference_row_series = inference_row_df.drop(columns=["target"]).iloc[0] - - model = crud.models.get(db=db, _id=inference_row.model_id) - if not model: - return errors.not_found(f"Model with id {inference_row.model_id} not found") - - dataset_rows = crud.dataset_rows.get_dataset_rows_by_model(db=db, model_id=model.id) - if not dataset_rows: - return errors.not_found( - f"Dataset rows for model with id {inference_row.model_id} not found" - ) - - dataset_rows_processed = [x.processed for x in dataset_rows] - - xai_report = create_xai_pipeline_per_inference_row( - training_set=pd.DataFrame(dataset_rows_processed), - target=model.target_column, - inference_row=inference_row_series, - type_of_task=model.type, - model_id=model.id, - ) - - return xai_report diff --git a/whitebox/api/v1/model_integrity_metrics.py b/whitebox/api/v1/model_integrity_metrics.py deleted file mode 100644 index e4f0e4a..0000000 --- a/whitebox/api/v1/model_integrity_metrics.py +++ /dev/null @@ -1,36 +0,0 @@ -from typing import List -from fastapi import APIRouter, Depends, status -from whitebox import crud -from sqlalchemy.orm import Session -from whitebox.core.db import get_db -from whitebox.middleware.auth import authenticate_user -from whitebox.schemas.modelIntegrityMetric import ModelIntegrityMetric -from whitebox.schemas.user import User -from whitebox.utils.errors import add_error_responses, errors - - -model_integrity_metrics_router = APIRouter() - - -@model_integrity_metrics_router.get( - "/model-integrity-metrics", - tags=["Model Integrity Metrics"], - response_model=List[ModelIntegrityMetric], - summary="Get all model's model integrity metrics", - status_code=status.HTTP_200_OK, - responses=add_error_responses([401, 404]), -) -async def get_all_models_model_integrity_metrics( - model_id: str, - db: Session = Depends(get_db), - authenticated_user: User = Depends(authenticate_user), -): - """Fetches the model integrity metrics of a specific model. A model id is required.""" - - model = crud.models.get(db, model_id) - if model: - return crud.model_integrity_metrics.get_model_integrity_metrics_by_model( - db=db, model_id=model_id - ) - else: - return errors.not_found("Model not found") diff --git a/whitebox/api/v1/model_monitors.py b/whitebox/api/v1/model_monitors.py deleted file mode 100644 index 1be6e0f..0000000 --- a/whitebox/api/v1/model_monitors.py +++ /dev/null @@ -1,157 +0,0 @@ -from typing import List, Union -from whitebox.middleware.auth import authenticate_user -from whitebox.schemas.modelMonitor import ( - ModelMonitor, - ModelMonitorCreateDto, - ModelMonitorUpdateDto, - MonitorMetrics, -) -from fastapi import APIRouter, Depends, status -from whitebox import crud -from sqlalchemy.orm import Session -from whitebox.core.db import get_db -from whitebox.schemas.user import User -from whitebox.schemas.utils import StatusCode -from whitebox.utils.errors import add_error_responses, errors - - -model_monitors_router = APIRouter() - - -@model_monitors_router.post( - "/model-monitors", - tags=["Model Monitors"], - response_model=ModelMonitor, - summary="Create a model monitor", - status_code=status.HTTP_201_CREATED, - responses=add_error_responses([400, 401, 409]), -) -async def create_model_monitor( - body: ModelMonitorCreateDto, - db: Session = Depends(get_db), - authenticated_user: User = Depends(authenticate_user), -) -> ModelMonitor: - """Inserts a model monitor into the database.""" - - model = crud.models.get(db, body.model_id) - if not model: - return errors.not_found("Model not found!") - - if body.metric in [MonitorMetrics.concept_drift, MonitorMetrics.data_drift]: - if body.metric == MonitorMetrics.concept_drift: - body.feature = model.target_column - else: - if not body.feature: - return errors.bad_request(f"Please set a feature for the monitor!") - # TODO This should get the feature columns from model.features when this field is - # automatically updated from the training dataset. - dataset_row = crud.dataset_rows.get_first_by_filter(db, model_id=model.id) - if not dataset_row: - return errors.not_found( - f"No training dataset found for model: {model.id}!\ - Insert the taining dataset and then create a monitor!" - ) - features = dataset_row.processed - if body.feature not in features: - return errors.bad_request( - f"Monitored featured must be in the dataset's features!" - ) - if body.feature == model.target_column: - return errors.bad_request( - f"Monitored featured cannot be the target column in data drift!" - ) - body.lower_threshold = None - else: - if body.lower_threshold is None: - return errors.bad_request(f"Please set a lower threshold for the monitor!") - body.feature = None - - new_model_monitor = crud.model_monitors.create(db=db, obj_in=body) - return new_model_monitor - - -@model_monitors_router.get( - "/model-monitors", - tags=["Model Monitors"], - response_model=List[ModelMonitor], - summary="Get all model's model monitors", - status_code=status.HTTP_200_OK, - responses=add_error_responses([401, 404]), -) -async def get_all_models_model_monitors( - model_id: Union[str, None] = None, - db: Session = Depends(get_db), - authenticated_user: User = Depends(authenticate_user), -): - """ - Fetches model monitors from the databse. - \n If a model id is provided, only the monitors for the specific model will be fetched. - \n If a model id is not provided then all monitors from the database will be fetched. - """ - - if model_id: - model = crud.models.get(db, model_id) - if model: - return crud.model_monitors.get_model_monitors_by_model( - db=db, model_id=model_id - ) - else: - return errors.not_found("Model not found") - else: - return crud.model_monitors.get_all(db=db) - - -@model_monitors_router.put( - "/model-monitors/{model_monitor_id}", - tags=["Model Monitors"], - response_model=ModelMonitor, - summary="Update model monitor", - status_code=status.HTTP_200_OK, - responses=add_error_responses([400, 401, 404]), -) -async def update_model_monitor( - model_monitor_id: str, - body: ModelMonitorUpdateDto, - db: Session = Depends(get_db), - authenticated_user: User = Depends(authenticate_user), -) -> ModelMonitor: - """Updates record of the model monitor with the specified id.""" - - # Remove all unset properties (with None values) from the update object - filtered_body = {k: v for k, v in dict(body).items() if v is not None} - - model_monitor = crud.model_monitors.get(db=db, _id=model_monitor_id) - - if not model_monitor: - return errors.not_found("Model monitor not found!") - - if model_monitor.metric in [ - MonitorMetrics.concept_drift, - MonitorMetrics.data_drift, - ]: - filtered_body["lower_threshold"] = None - - return crud.model_monitors.update(db=db, db_obj=model_monitor, obj_in=filtered_body) - - -@model_monitors_router.delete( - "/model-monitors/{model_monitor_id}", - tags=["Model Monitors"], - response_model=StatusCode, - summary="Delete model monitor", - status_code=status.HTTP_200_OK, - responses=add_error_responses([401, 404]), -) -async def delete_model_monitor( - model_monitor_id: str, - db: Session = Depends(get_db), - authenticated_user: User = Depends(authenticate_user), -) -> StatusCode: - """Deletes the model monitor with the specified id from the database.""" - - model_monitor = crud.model_monitors.get(db=db, _id=model_monitor_id) - if not model_monitor: - return errors.not_found("Model monitor not found") - - crud.model_monitors.remove(db=db, _id=model_monitor_id) - return {"status_code": status.HTTP_200_OK} diff --git a/whitebox/api/v1/models.py b/whitebox/api/v1/models.py deleted file mode 100644 index e5058bc..0000000 --- a/whitebox/api/v1/models.py +++ /dev/null @@ -1,140 +0,0 @@ -from typing import List -from whitebox.middleware.auth import authenticate_user -from whitebox.schemas.model import Model, ModelCreateDto, ModelUpdateDto -from fastapi import APIRouter, Depends, status -from whitebox import crud -from sqlalchemy.orm import Session -from whitebox.core.db import get_db -from whitebox.schemas.utils import StatusCode -from whitebox.schemas.user import User -from whitebox.utils.errors import add_error_responses, errors - - -models_router = APIRouter() - - -@models_router.post( - "/models", - tags=["Models"], - response_model=Model, - summary="Create model", - status_code=status.HTTP_201_CREATED, - responses=add_error_responses([400, 401]), -) -async def create_model( - body: ModelCreateDto, - db: Session = Depends(get_db), - authenticated_user: User = Depends(authenticate_user), -) -> Model: - """Inserts a model into the database""" - - granularity = body.granularity - - try: - granularity_amount = float(granularity[:-1]) - except ValueError: - return errors.bad_request("Granularity amount that was given is not a number!") - - if not granularity_amount.is_integer(): - return errors.bad_request( - "Granularity amount should be an integer and not a float (e.g. 1D)!" - ) - - granularity_type = granularity[-1] - if granularity_type not in ["T", "H", "D", "W"]: - return errors.bad_request( - "Wrong granularity type. Accepted values: T (minutes), H (hours), D (days), W (weeks)" - ) - - new_model = crud.models.create(db=db, obj_in=body) - return new_model - - -@models_router.get( - "/models", - tags=["Models"], - response_model=List[Model], - summary="Get all models", - status_code=status.HTTP_200_OK, - responses=add_error_responses([401]), -) -async def get_all_models( - db: Session = Depends(get_db), authenticated_user: User = Depends(authenticate_user) -): - """Fetches all models from the database""" - - models_in_db = crud.models.get_all(db=db) - return models_in_db - - -@models_router.get( - "/models/{model_id}", - tags=["Models"], - response_model=Model, - summary="Get model by id", - status_code=status.HTTP_200_OK, - responses=add_error_responses([401, 404]), -) -async def get_model( - model_id: str, - db: Session = Depends(get_db), - authenticated_user: User = Depends(authenticate_user), -): - """Fetches the model with the specified id from the database""" - - model = crud.models.get(db=db, _id=model_id) - - if not model: - return errors.not_found("Model not found") - - return model - - -@models_router.put( - "/models/{model_id}", - tags=["Models"], - response_model=Model, - summary="Update model", - status_code=status.HTTP_200_OK, - responses=add_error_responses([400, 401, 404]), -) -async def update_model( - model_id: str, - body: ModelUpdateDto, - db: Session = Depends(get_db), - authenticated_user: User = Depends(authenticate_user), -) -> Model: - """Updates record of the model with the specified id""" - - # Remove all unset properties (with None values) from the update object - filtered_body = {k: v for k, v in dict(body).items() if v is not None} - - model = crud.models.get(db=db, _id=model_id) - - if not model: - return errors.not_found("Model not found") - - return crud.models.update(db=db, db_obj=model, obj_in=filtered_body) - - -@models_router.delete( - "/models/{model_id}", - tags=["Models"], - response_model=StatusCode, - summary="Delete model", - status_code=status.HTTP_200_OK, - responses=add_error_responses([401, 404]), -) -async def delete_model( - model_id: str, - db: Session = Depends(get_db), - authenticated_user: User = Depends(authenticate_user), -) -> StatusCode: - """Deletes the model with the specified id from the database""" - - model = crud.models.get(db=db, _id=model_id) - if not model: - return errors.not_found("Model not found") - - crud.models.remove(db=db, _id=model_id) - return {"status_code": status.HTTP_200_OK} diff --git a/whitebox/api/v1/performance_metrics.py b/whitebox/api/v1/performance_metrics.py deleted file mode 100644 index 81a6136..0000000 --- a/whitebox/api/v1/performance_metrics.py +++ /dev/null @@ -1,54 +0,0 @@ -from typing import List, Union -from fastapi import APIRouter, Depends, status -from whitebox import crud -from sqlalchemy.orm import Session -from whitebox.core.db import get_db -from whitebox.middleware.auth import authenticate_user -from whitebox.schemas.performanceMetric import ( - BinaryClassificationMetrics, - MultiClassificationMetrics, - RegressionMetrics, -) -from whitebox.schemas.user import User -from whitebox.schemas.model import ModelType -from whitebox.utils.errors import add_error_responses, errors - - -performance_metrics_router = APIRouter() - - -@performance_metrics_router.get( - "/performance-metrics", - tags=["Performance Metrics"], - response_model=Union[ - List[BinaryClassificationMetrics], - List[MultiClassificationMetrics], - List[RegressionMetrics], - ], - summary="Get all model's performance metrics", - status_code=status.HTTP_200_OK, - responses=add_error_responses([401, 404]), -) -async def get_all_models_performance_metrics( - model_id: str, - db: Session = Depends(get_db), - authenticated_user: User = Depends(authenticate_user), -): - """Fetches the performance metrics of a specific model. A model id is required.""" - - model = crud.models.get(db, model_id) - if model: - if model.type == ModelType.binary: - return crud.binary_classification_metrics.get_performance_metrics_by_model( - db=db, model_id=model_id - ) - elif model.type == ModelType.multi_class: - return crud.multi_classification_metrics.get_performance_metrics_by_model( - db=db, model_id=model_id - ) - elif model.type == ModelType.regression: - return crud.regression_metrics.get_performance_metrics_by_model( - db=db, model_id=model_id - ) - else: - return errors.not_found("Model not found") diff --git a/whitebox/core/__init__.py b/whitebox/core/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/whitebox/core/db.py b/whitebox/core/db.py deleted file mode 100644 index 85a66ac..0000000 --- a/whitebox/core/db.py +++ /dev/null @@ -1,56 +0,0 @@ -from whitebox.core.settings import get_settings -import databases -import sqlalchemy -from sqlalchemy.orm import sessionmaker -from whitebox.entities.Base import Base -from whitebox.schemas.user import UserCreateDto - -from whitebox import crud -from whitebox.utils.passwords import encrypt_api_key -from whitebox.utils.logger import cronLogger as logger - -from secrets import token_hex - -settings = get_settings() -database = databases.Database(settings.DATABASE_URL) -engine = sqlalchemy.create_engine(settings.DATABASE_URL) -SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) - - -def get_db(): - db = SessionLocal() - try: - yield db - finally: - db.close() - - -async def connect(): - """ - Connect to DB - """ - Base.metadata.create_all(engine) - db = SessionLocal() - - admin_exists = crud.users.get_first_by_filter(db=db, username="admin") - if not admin_exists: - plain_api_key = token_hex(32) - secret_key = settings.SECRET_KEY - api_key = ( - encrypt_api_key(plain_api_key, secret_key.encode()) - if secret_key - else plain_api_key - ) - - obj_in = UserCreateDto(username="admin", api_key=api_key) - crud.users.create(db=db, obj_in=obj_in) - logger.info(f"Created username: admin, API key: {plain_api_key}") - await database.connect() - - -async def close(): - """ - Close DB Connection - """ - await database.disconnect() - # logging.info("Closed connection with DB") diff --git a/whitebox/core/manager.py b/whitebox/core/manager.py deleted file mode 100644 index 35ec4de..0000000 --- a/whitebox/core/manager.py +++ /dev/null @@ -1,349 +0,0 @@ -import asyncio -import functools -from collections import deque - -from crontab import CronTab -from whitebox.utils.exceptions import ( - TaskNotFoundException, - TaskAlreadyRunningException, - TaskNotRunningException, -) -from whitebox.utils.logger import cronLogger as logger -from whitebox.schemas.task import ( - TaskDefinition, - RunningTask, - TaskLog, - TaskInfo, - TaskStatus, - State, - TaskRealTimeInfo, - EventType, -) -from typing import Callable, Optional, Coroutine, List, Dict, Deque, Union - -from functools import lru_cache -import datetime - -import pytz - - -def now(): - return datetime.datetime.utcnow().replace(tzinfo=pytz.utc) - - -class Task_Manager: - def __init__(self): - self._definitions: Dict[str, TaskDefinition] = {} - self._real_time: Dict[str, TaskRealTimeInfo] = {} - self._running_tasks: Dict[str, RunningTask] = {} - self._log_queue: Deque[TaskLog] = deque() - - self._is_running: bool = False - self._is_shutting_down: bool = False - - self._cleanup_tasks: List[asyncio.Task] = [] - - def clear(self): - """Resets the""" - if self._is_running or self._is_shutting_down: - raise Exception("Cannot clear before shutdown") - self._definitions: Dict[str, TaskDefinition] = {} - self._real_time: Dict[str, TaskRealTimeInfo] = {} - self._running_tasks: Dict[str, RunningTask] = {} - self._log_queue: Deque[TaskLog] = deque() - - def register( - self, - async_callable: Callable[[], Coroutine], - crontab: Union[str, None] = None, - name: Union[str, None] = None, - ): - name = name or async_callable.__name__ - if name in self._definitions: - raise Exception(f"Task <{name}> already exists.") - - definition = TaskDefinition( - name=name, async_callable=async_callable, crontab=crontab, enabled=True - ) - self._definitions[name] = definition - self._real_time[name] = TaskRealTimeInfo( - name=name, status="registered", next_run_ts=None - ) - - self._log_event("task_registered", definition.name) - - def _log_event( - self, event_type: EventType, task_name: str, error: Union[str, None] = None - ): - self._log_queue.append( - TaskLog( - event_type=event_type, - task_name=task_name, - crontab=self._definitions[task_name].crontab, - enabled=self._definitions[task_name].enabled, - error=error, - ) - ) - - def _get_task_definition(self, name: str) -> TaskDefinition: - try: - return self._definitions[name] - except KeyError as e: - raise TaskNotFoundException from e - - def _get_running_task(self, name: str) -> RunningTask: - try: - return self._running_tasks[name] - except KeyError as e: - raise TaskNotRunningException from e - - def _is_task_running(self, name: str) -> bool: - return name in self._running_tasks - - def get_task_info(self, name: str) -> TaskInfo: - definition = self._get_task_definition(name) - return TaskInfo( - name=definition.name, - enabled=definition.enabled, - crontab=definition.crontab, - started_at=self._get_task_started_at(name), - stopped_at=self._get_task_stopped_at(name), - next_run_in=self._get_task_next_run_in(name), - previous_status=self._get_previous_status(name) or "registered", - status=self._get_task_status(name), - ) - - # TODO: Implement functionality - def _get_task_started_at(self, name: str): - rt_info = self._real_time.get(name) - if not rt_info: - raise TaskNotFoundException("task not found") - return rt_info.started_at - - # TODO: Implement functionality - def _get_task_stopped_at(self, name: str): - rt_info = self._real_time.get(name) - if not rt_info: - raise TaskNotFoundException("task not found") - return rt_info.stopped_at - - def _get_task_status(self, name: str) -> TaskStatus: - rt_info = self._real_time.get(name) - if not rt_info: - raise TaskNotFoundException("task not found") - return rt_info.status - - def _get_previous_status(self, name: str) -> TaskStatus: - rt_info = self._real_time.get(name) - if not rt_info: - raise TaskNotFoundException("task not found") - return rt_info.previous_status - - def _get_task_next_run_in(self, name: str) -> Optional[int]: - definition = self._get_task_definition(name) - if definition.crontab is None: - return None - return CronTab(definition.crontab).next(default_utc=True) - - def _create_running_task(self, definition: TaskDefinition) -> RunningTask: - running_task = RunningTask( - task_definition=definition, - asyncio_task=asyncio.get_event_loop().create_task( - definition.async_callable() - ), - since=now().timestamp(), - ) - running_task.asyncio_task.add_done_callback( - functools.partial(self._on_task_done, definition.name) - ) - return running_task - - async def cancel_task(self, name: str): - if not self._is_task_running(name): - raise TaskNotRunningException("task not running") - logger.info(f"Cancelling {name}") - self._get_task_definition(name) - running_task = self._get_running_task(name) - cancelled = running_task.asyncio_task.cancel() - return cancelled - - def run_task(self, name: str) -> None: - if self._is_task_running(name): - raise TaskAlreadyRunningException("task already running") - - definition = self._get_task_definition(name) - running_task = self._create_running_task(definition) - self._running_tasks[definition.name] = running_task - - self._real_time[name] = TaskRealTimeInfo( - name=name, - status="running", - previous_status=self._get_previous_status(name), - started_at=now().timestamp(), - next_run_ts=now().timestamp() + (self._get_task_next_run_in(name) or 0), - ) - - # TODO: Implement disable task functionality - def disable_task(self, name: str): - return False - - # TODO: Implement enable task functionality - def enable_task(self, name: str): - return False - - def get_all_tasks_info(self) -> List[TaskInfo]: - return [self.get_task_info(name) for name in self._definitions.keys()] - - def _on_task_done(self, task_name: str, task: asyncio.Task) -> None: - definition = self._get_task_definition(task_name) - del self._running_tasks[task_name] - - try: - exception = task.exception() - except asyncio.CancelledError: - self._log_event("task_cancelled", definition.name) - - self._real_time[task_name] = TaskRealTimeInfo( - name=task_name, - status="pending", - previous_status="cancelled", - next_run_ts=None, - started_at=self._get_task_started_at(task_name), - stopped_at=now().timestamp(), - ) - task = asyncio.get_event_loop().create_task( - self.on_task_cancelled(task_name) - ) - self._cleanup_tasks.append(task) - return - - if exception: - self._log_event("task_failed", definition.name, error=str(exception)) - - self._real_time[task_name] = TaskRealTimeInfo( - name=task_name, - status="pending", - previous_status="failed", - next_run_ts=None, - started_at=self._get_task_started_at(task_name), - stopped_at=now().timestamp(), - ) - task = asyncio.get_event_loop().create_task( - self.on_task_exception(task_name, exception) - ) - self._cleanup_tasks.append(task) - return - - self._log_event("task_finished", definition.name) - - self._real_time[task_name] = TaskRealTimeInfo( - name=task_name, - status="pending", - previous_status="finished", - started_at=self._get_task_started_at(task_name), - stopped_at=now().timestamp(), - next_run_ts=now().timestamp() + self._get_task_next_run_in(task_name) - if definition.crontab - else None, - ) - task = asyncio.get_event_loop().create_task(self.on_task_finished(task_name)) - self._cleanup_tasks.append(task) - return - - async def _on_task_started(self, task_name: str): - definition = self._get_task_definition(task_name) - - self._log_event("task_started", definition.name) - await self.on_task_started(task_name) - - async def run(self, state: Union[State, None] = None): - if self._is_running: - logger.warning("Ignoring current calling of run(). Already running.") - return - - self._is_running = True - await self.on_startup() - - if state: - for task_info in state.tasks_info: - if task_info.name in self._definitions: - self._definitions[task_info.name].crontab = task_info.crontab - self._definitions[task_info.name].enabled = task_info.enabled - - self._real_time[task_info.name].status = task_info.status - - await self._run_ad_infinitum() - - async def _run_ad_infinitum(self): - while True and self._is_running: - for task_name, rt_info in self._real_time.items(): - this_time_ts = now().timestamp() - - if rt_info.status == "registered": - delta: int = self._get_task_next_run_in(task_name) or 0 - - self._real_time[task_name] = TaskRealTimeInfo( - name=task_name, - status="pending", - previous_status="registered", - next_run_ts=now().timestamp() + delta, - ) - elif ( - not self._is_shutting_down - and rt_info.status in ["pending", "finished"] - and rt_info.next_run_ts is not None - and rt_info.next_run_ts <= this_time_ts - ): - self.run_task(task_name) - elif rt_info.status == "running" and not self._is_task_running( - task_name - ): - self.run_task(task_name) - else: # rt_info.status in ["cancelled", "failed"]: - ... - await asyncio.sleep(1.5) - - async def shutdown(self): - await asyncio.sleep(2) - logger.info("Shutting down...") - logger.info(f"Cancelling {len(self._running_tasks)} running tasks...") - self._is_shutting_down = True - - for running_task in self._running_tasks.values(): - await self.cancel_task(running_task.task_definition.name) - logger.debug(f"Cancelled task {running_task.task_definition.name}") - - await asyncio.gather(*self._cleanup_tasks) - logger.debug("Cleanup tasks finished.") - - await self.on_shutdown() - - self._is_running = False - self._is_shutting_down = False - - async def on_task_started(self, task_name: str): - ... - - async def on_task_exception(self, task_name: str, exception: BaseException): - ... - - async def on_task_cancelled(self, task_name: str): - logger.info(f"Cancelled {task_name}") - - async def on_task_finished(self, task_name: str): - logger.info(f"Finished {task_name}") - - async def on_startup(self): - ... - - async def on_shutdown(self): - ... - - def state(self) -> State: - state = State(created_at=now(), tasks_info=self.get_all_tasks_info()) - return state - - -@lru_cache() -def get_task_manager(): - return Task_Manager() diff --git a/whitebox/core/settings.py b/whitebox/core/settings.py deleted file mode 100644 index 1203407..0000000 --- a/whitebox/core/settings.py +++ /dev/null @@ -1,34 +0,0 @@ -from functools import lru_cache -from pydantic import BaseSettings -import os - - -class Settings(BaseSettings): - APP_NAME: str = "" - ENV: str = "" - DATABASE_URL: str = "" - VERSION: str = "" - MODEL_PATH: str = "" - SECRET_KEY: str = "" - GRANULARITY: str = "" - - class Config: - env_file = f".env.{os.getenv('ENV')}" or ".env.dev" - - -@lru_cache() -def get_settings(): - return Settings() - - -class CronSettings(Settings): - APP_NAME_CRON: str - METRICS_CRON: str - - class Config: - env_file = f".env.{os.getenv('ENV')}" or ".env.dev" - - -@lru_cache() -def get_cron_settings(): - return CronSettings() diff --git a/whitebox/cron.py b/whitebox/cron.py deleted file mode 100644 index 8d15357..0000000 --- a/whitebox/cron.py +++ /dev/null @@ -1,39 +0,0 @@ -from fastapi import FastAPI, Depends -import asyncio -import json -from whitebox.utils.logger import cronLogger as logger - -from whitebox.core.settings import get_cron_settings -from whitebox.cron_tasks.tasks import task_manager -from fastapi.openapi.utils import get_openapi - - -settings = get_cron_settings() -cron_app = FastAPI(title=settings.APP_NAME_CRON, redoc_url="/") - - -@cron_app.on_event("startup") -async def init(): - # Start task amanager - asyncio.get_event_loop().create_task(task_manager.run()) - - -@cron_app.on_event("shutdown") -async def shutdown(): - logger.info("App is shutting down...") - logger.info("Task Manager is shutting down...") - await task_manager.shutdown() - - -def app_openapi(): - if cron_app.openapi_schema: - return cron_app.openapi_schema - openapi_schema = get_openapi( - title="Cron API", version=settings.VERSION, routes=cron_app.routes - ) - - cron_app.openapi_schema = openapi_schema - return cron_app.openapi_schema - - -cron_app.openapi = app_openapi diff --git a/whitebox/cron_tasks/monitoring_alerts.py b/whitebox/cron_tasks/monitoring_alerts.py deleted file mode 100644 index 286f3c0..0000000 --- a/whitebox/cron_tasks/monitoring_alerts.py +++ /dev/null @@ -1,129 +0,0 @@ -from datetime import datetime -import time -from sqlalchemy import create_engine -from sqlalchemy.orm import sessionmaker, Session - -from whitebox import crud, entities -from whitebox.core.settings import get_settings -from whitebox.cron_tasks.shared import ( - get_all_models, - get_latest_drift_metrics_report, - get_latest_performance_metrics_report, - get_active_model_monitors, -) -from whitebox.schemas.model import Model, ModelType -from whitebox.schemas.modelMonitor import ModelMonitor, MonitorMetrics -from whitebox.utils.logger import cronLogger as logger - -settings = get_settings() - -engine = create_engine(settings.DATABASE_URL) -SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) -db: Session = SessionLocal() - - -async def run_create_performance_metric_alert_pipeline( - model: Model, monitor: ModelMonitor -): - """ - Run the pipeline to find any alerts for a metric in performance metrics - If one is found it is saved in the database - """ - - last_performance_metrics_report = await get_latest_performance_metrics_report( - db, model - ) - - if not last_performance_metrics_report: - logger.info( - f"No alert created for monitor: {monitor.id} because no performance report was found!" - ) - return - - # Performance metrics reports for not multi_class models have the same format: metric: float. - # Same if the metric is accuracy. - if ( - model.type is not ModelType.multi_class - or monitor.metric == MonitorMetrics.accuracy - ): - metric_value = vars(last_performance_metrics_report)[monitor.metric] - else: - metric_value = vars(last_performance_metrics_report)[monitor.metric]["weighted"] - - if metric_value < monitor.lower_threshold: - new_alert = entities.Alert( - model_id=model.id, - model_monitor_id=monitor.id, - timestamp=str(datetime.utcnow()), - description=f"{monitor.metric} fell below the threshold of {monitor.lower_threshold} at value {metric_value}.", - ) - crud.alerts.create(db, obj_in=new_alert) - logger.info(f"Created alert for monitor {monitor.id}!") - - -async def run_create_drift_alert_pipeline(model: Model, monitor: ModelMonitor): - """ - Run the pipeline to find any alerts for a metric in drift metrics - If one is found it is saved in the database - """ - - last_drift_report = await get_latest_drift_metrics_report(db, model) - - if not last_drift_report: - logger.info( - f"No alert created for monitor: {monitor.id} because no drift report was found!" - ) - return - - if monitor.metric == MonitorMetrics.data_drift: - drift_detected: bool = last_drift_report.data_drift_summary["drift_by_columns"][ - monitor.feature - ]["drift_detected"] - else: - drift_detected: bool = last_drift_report.concept_drift_summary[ - "concept_drift_summary" - ]["drift_detected"] - - if drift_detected: - new_alert = entities.Alert( - model_id=model.id, - model_monitor_id=monitor.id, - timestamp=str(datetime.utcnow()), - description=f'{monitor.metric.capitalize().replace("_", " ")} found in "{monitor.feature}" feature.', - ) - crud.alerts.create(db, obj_in=new_alert) - logger.info(f"Created alert for monitor {monitor.id}!") - - -async def run_create_alerts_pipeline(): - logger.info("Beginning Alerts pipeline for all models!") - start = time.time() - engine.connect() - - models = await get_all_models(db) - if not models: - logger.info("No models found! Skipping pipeline") - else: - for model in models: - model_monitors = await get_active_model_monitors(db, model_id=model.id) - for monitor in model_monitors: - if monitor.metric in [ - MonitorMetrics.accuracy, - MonitorMetrics.precision, - MonitorMetrics.recall, - MonitorMetrics.f1, - MonitorMetrics.r_square, - MonitorMetrics.mean_squared_error, - MonitorMetrics.mean_absolute_error, - ]: - await run_create_performance_metric_alert_pipeline(model, monitor) - elif ( - monitor.metric == MonitorMetrics.data_drift - or monitor.metric == MonitorMetrics.concept_drift - ): - await run_create_drift_alert_pipeline(model, monitor) - - db.close() - end = time.time() - logger.info("Alerts pipeline ended for all models!") - logger.info("Runtime of Alerts pipeline took {}".format(end - start)) diff --git a/whitebox/cron_tasks/monitoring_metrics.py b/whitebox/cron_tasks/monitoring_metrics.py deleted file mode 100644 index cbc112b..0000000 --- a/whitebox/cron_tasks/monitoring_metrics.py +++ /dev/null @@ -1,323 +0,0 @@ -from datetime import datetime -import pandas as pd -import time -from sqlalchemy import create_engine -from sqlalchemy.orm import sessionmaker, Session -from fastapi.encoders import jsonable_encoder -from whitebox import crud, entities -from whitebox.analytics.drift.pipelines import ( - run_data_drift_pipeline, - run_concept_drift_pipeline, -) -from whitebox.analytics.metrics.pipelines import ( - create_binary_classification_evaluation_metrics_pipeline, - create_feature_metrics_pipeline, - create_multiple_classification_evaluation_metrics_pipeline, - create_regression_evaluation_metrics_pipeline, -) -from whitebox.core.settings import get_settings -from whitebox.cron_tasks.shared import ( - get_all_models, - get_model_dataset_rows_df, - get_unused_model_inference_rows, - group_inference_rows_by_timestamp, - seperate_inference_rows, - set_inference_rows_to_used, - get_latest_drift_metrics_report, - round_timestamp, - get_used_inference_for_reusage, -) -from whitebox.schemas.model import Model, ModelType -from whitebox.schemas.modelIntegrityMetric import ModelIntegrityMetricCreate -from whitebox.utils.logger import cronLogger as logger - - -settings = get_settings() - -engine = create_engine(settings.DATABASE_URL) -SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) -db: Session = SessionLocal() - - -async def run_calculate_drifting_metrics_pipeline( - model: Model, inference_processed_df: pd.DataFrame, timestamp: datetime -): - """ - Run the pipeline to calculate the drifting metrics - After the metrics are calculated they are saved in the database - """ - - training_processed_df = await get_model_dataset_rows_df(db, model_id=model.id) - - if training_processed_df.empty: - logger.info(f"Can't calculate data drift metrics for model {model.id}") - return - - logger.info(f"Calculating drifting metrics for model {model.id}...") - - # We need to drop the target column from the data to calculate drifting metrics - processed_inference_dropped_target_df = inference_processed_df.drop( - [model.target_column], axis=1 - ) - processed_training_dropped_target_df = training_processed_df.drop( - [model.target_column], axis=1 - ) - - data_drift_report = run_data_drift_pipeline( - processed_training_dropped_target_df, processed_inference_dropped_target_df - ) - concept_drift_report = run_concept_drift_pipeline( - training_processed_df, - inference_processed_df, - model.target_column, - ) - - new_drifting_metric = entities.DriftingMetric( - timestamp=str(timestamp), - model_id=model.id, - concept_drift_summary=concept_drift_report, - data_drift_summary=data_drift_report, - ) - - existing_report = crud.drifting_metrics.get_first_by_filter( - db=db, model_id=model.id, timestamp=timestamp - ) - if existing_report: - crud.drifting_metrics.update( - db=db, db_obj=existing_report, obj_in=jsonable_encoder(new_drifting_metric) - ) - else: - crud.drifting_metrics.create(db, obj_in=new_drifting_metric) - logger.info("Drifting metrics calculated!") - - -async def run_calculate_performance_metrics_pipeline( - model: Model, - inference_processed_df: pd.DataFrame, - actual_df: pd.DataFrame, - timestamp: datetime, -): - """ - Run the pipeline to calculate the performance metrics - After the metrics are calculated they are saved in the database - """ - - cleaned_actuals_df = actual_df.dropna() - - if cleaned_actuals_df.empty: - logger.info( - f"Can't calculate performance metrics for model {model.id} because no actuals were found!" - ) - return - - if len(cleaned_actuals_df.index) != len(actual_df.index): - logger.info( - f"Performance metrics will be calculated only for a portion of rows for model: {model.id}\ - because actuals were not provided for all inference rows!" - ) - inference_processed_df = inference_processed_df.iloc[cleaned_actuals_df.index] - - inference_processed_df = inference_processed_df.reset_index(drop=True) - cleaned_actuals_df = cleaned_actuals_df.reset_index(drop=True) - - if model.type is not ModelType.regression: - if not model.labels: - logger.info( - f"Can't calculate performance metrics for model {model.id} because labels are required for binary and multi_class models!" - ) - return - labels = list(model.labels.values()) - - logger.info(f"Calculating performance metrics for model {model.id}") - if model.type == ModelType.binary: - binary_classification_metrics_report = ( - create_binary_classification_evaluation_metrics_pipeline( - cleaned_actuals_df, inference_processed_df[model.target_column], labels - ) - ) - - new_performance_metric = entities.BinaryClassificationMetrics( - model_id=model.id, - timestamp=str(timestamp), - **dict(binary_classification_metrics_report), - ) - - existing_report = crud.binary_classification_metrics.get_first_by_filter( - db=db, model_id=model.id, timestamp=timestamp - ) - if existing_report: - crud.binary_classification_metrics.update( - db=db, - db_obj=existing_report, - obj_in=jsonable_encoder(new_performance_metric), - ) - else: - crud.binary_classification_metrics.create(db, obj_in=new_performance_metric) - - elif model.type == ModelType.multi_class: - multiclass_classification_metrics_report = ( - create_multiple_classification_evaluation_metrics_pipeline( - cleaned_actuals_df, inference_processed_df[model.target_column], labels - ) - ) - - new_performance_metric = entities.MultiClassificationMetrics( - model_id=model.id, - timestamp=str(timestamp), - **dict(multiclass_classification_metrics_report), - ) - - existing_report = crud.multi_classification_metrics.get_first_by_filter( - db=db, model_id=model.id, timestamp=timestamp - ) - if existing_report: - crud.multi_classification_metrics.update( - db=db, - db_obj=existing_report, - obj_in=jsonable_encoder(new_performance_metric), - ) - else: - crud.multi_classification_metrics.create(db, obj_in=new_performance_metric) - - elif model.type == ModelType.regression: - regression_metrics_report = create_regression_evaluation_metrics_pipeline( - cleaned_actuals_df, inference_processed_df[model.target_column] - ) - - new_performance_metric = entities.RegressionMetrics( - model_id=model.id, - timestamp=str(timestamp), - **dict(regression_metrics_report), - ) - - existing_report = crud.regression_metrics.get_first_by_filter( - db=db, model_id=model.id, timestamp=timestamp - ) - if existing_report: - crud.regression_metrics.update( - db=db, - db_obj=existing_report, - obj_in=jsonable_encoder(new_performance_metric), - ) - else: - crud.regression_metrics.create(db, obj_in=new_performance_metric) - - logger.info("Performance metrics calculated!") - - -async def run_calculate_feature_metrics_pipeline( - model: Model, inference_processed_df: pd.DataFrame, timestamp: datetime -): - """ - Run the pipeline to calculate the feature metrics - After the metrics are calculated they are saved in the database - """ - - logger.info(f"Calculating feature metrics for model {model.id}") - feature_metrics_report = create_feature_metrics_pipeline(inference_processed_df) - - if feature_metrics_report: - new_feature_metric = ModelIntegrityMetricCreate( - model_id=model.id, - timestamp=str(timestamp), - feature_metrics=feature_metrics_report, - ) - - existing_report = crud.model_integrity_metrics.get_first_by_filter( - db=db, model_id=model.id, timestamp=timestamp - ) - if existing_report: - crud.model_integrity_metrics.update( - db=db, - db_obj=existing_report, - obj_in=jsonable_encoder(new_feature_metric), - ) - else: - crud.model_integrity_metrics.create(db, obj_in=new_feature_metric) - - logger.info("Feature metrics calculated!") - - -async def run_calculate_metrics_pipeline(): - logger.info("Beginning Metrics pipeline for all models!") - start = time.time() - engine.connect() - - models = await get_all_models(db) - if not models: - logger.info("No models found! Skipping pipeline") - else: - for model in models: - granularity = model.granularity - granularity_amount = int(granularity[:-1]) - granularity_type = granularity[-1] - - last_report = await get_latest_drift_metrics_report(db, model) - - # We need to get the last report's timestamp as a base of grouping unless there's no report produced. - # In this case, the base timestamp is considered the "now" rounded to the day so the intervals start from midnight - # e.g. 12:00, 12:15, 12:30, 12:45 and so on if granularity is 15T. - last_report_time = ( - last_report.timestamp - if last_report - else round_timestamp(datetime.utcnow(), "1D") - ) - - unused_inference_rows_in_db = await get_unused_model_inference_rows( - db, model_id=model.id - ) - - if len(unused_inference_rows_in_db) == 0: - logger.info( - f"No new inferences found for model {model.id}! Continuing with next model..." - ) - continue - logger.info(f"Executing Metrics pipeline for model {model.id}...") - - used_inferences = get_used_inference_for_reusage( - db, - model.id, - unused_inference_rows_in_db, - last_report_time, - granularity_amount, - granularity_type, - ) - - all_inferences = unused_inference_rows_in_db + used_inferences - - grouped_inference_rows = await group_inference_rows_by_timestamp( - all_inferences, - last_report_time, - granularity_amount, - granularity_type, - ) - - for group in grouped_inference_rows: - for timestamp, inference_group in group.items(): - inference_rows_ids = [x.id for x in inference_group] - ( - inference_processed_df, - inference_nonprocessed_df, - actual_df, - ) = await seperate_inference_rows(inference_group) - - await run_calculate_drifting_metrics_pipeline( - model, inference_processed_df, timestamp - ) - - await run_calculate_performance_metrics_pipeline( - model, inference_processed_df, actual_df, timestamp - ) - - await run_calculate_feature_metrics_pipeline( - model, inference_processed_df, timestamp - ) - - await set_inference_rows_to_used(db, inference_rows_ids) - - logger.info(f"Ended Metrics pipeline for model {model.id}...") - - db.close() - end = time.time() - logger.info("Metrics pipeline ended for all models!") - logger.info("Runtime of Metrics pipeline took {}".format(end - start)) diff --git a/whitebox/cron_tasks/shared.py b/whitebox/cron_tasks/shared.py deleted file mode 100644 index 45e3f13..0000000 --- a/whitebox/cron_tasks/shared.py +++ /dev/null @@ -1,224 +0,0 @@ -from typing import Callable, Dict, List, Tuple, Union -import itertools -import pandas as pd -import datetime -from sqlalchemy.orm import Session -from whitebox import crud -from whitebox.schemas.inferenceRow import InferenceRow -from whitebox.schemas.model import Model, ModelType -from whitebox.schemas.modelMonitor import ModelMonitor -from whitebox.schemas.driftingMetric import DriftingMetric -from whitebox.schemas.performanceMetric import ( - BinaryClassificationMetrics, - MultiClassificationMetrics, -) - - -async def get_model_dataset_rows_df(db: Session, model_id: str) -> pd.DataFrame: - dataset_rows_in_db = crud.dataset_rows.get_dataset_rows_by_model( - db=db, model_id=model_id - ) - dataset_rows_processed = [x.processed for x in dataset_rows_in_db] - dataset_df = pd.DataFrame(dataset_rows_processed) - return dataset_df - - -async def get_unused_model_inference_rows( - db: Session, model_id: str -) -> List[InferenceRow]: - return crud.inference_rows.get_unused_inference_rows(db=db, model_id=model_id) - - -async def group_inference_rows_by_timestamp( - inference_rows: List[InferenceRow], - last_time: datetime.datetime, - granularity_amount: int, - granularity_type: str, -) -> List[Dict[datetime.datetime, List[InferenceRow]]]: - """Create a list of dicts with all inferences grouped by timestamp""" - - dict_inference_rows = [vars(x) for x in inference_rows] - - updated_inferences_dict = [] - for x in dict_inference_rows: - new_obj = {**x} - new_obj["timestamp"] = change_timestamp( - x["timestamp"], last_time, granularity_amount, granularity_type - ) - updated_inferences_dict.append(new_obj) - - updated_inferences = [InferenceRow(**x) for x in updated_inferences_dict] - - key_func: Callable[[InferenceRow]] = lambda x: x.timestamp - - grouped_inferences = [ - {key: list(group)} - for key, group in itertools.groupby(updated_inferences, key_func) - ] - - return grouped_inferences - - -async def seperate_inference_rows( - inference_rows: List[InferenceRow], -) -> Tuple[pd.DataFrame, pd.DataFrame, pd.Series]: - inference_rows_processed = [x.processed for x in inference_rows] - inference_rows_nonprocessed = [x.nonprocessed for x in inference_rows] - inference_rows_actual = [x.actual for x in inference_rows] - processed_df = pd.DataFrame(inference_rows_processed) - nonprocessed_df = pd.DataFrame(inference_rows_nonprocessed) - actual_df = pd.Series(inference_rows_actual) - - # TODO: check if the length of the dataframes is the same - return processed_df, nonprocessed_df, actual_df - - -async def set_inference_rows_to_used(db: Session, ids: List[str]) -> None: - """Changes the "is_used" property of an inference row to True""" - - for id in ids: - inference_to_update = crud.inference_rows.get(db=db, _id=id) - crud.inference_rows.update( - db=db, db_obj=inference_to_update, obj_in={"is_used": True} - ) - - -async def get_all_models(db: Session) -> List[Model]: - models_in_db = crud.models.get_all(db) - return models_in_db - - -async def get_active_model_monitors(db: Session, model_id: str) -> List[ModelMonitor]: - model_monitors_in_db = crud.model_monitors.get_active_model_monitors_by_model( - db=db, model_id=model_id - ) - return model_monitors_in_db - - -async def get_latest_performance_metrics_report( - db: Session, model: Model -) -> Union[BinaryClassificationMetrics, MultiClassificationMetrics]: - if model.type == ModelType.binary: - last_report_in_db = ( - crud.binary_classification_metrics.get_latest_report_by_model( - db, model_id=model.id - ) - ) - elif model.type == ModelType.multi_class: - last_report_in_db = ( - crud.multi_classification_metrics.get_latest_report_by_model( - db, model_id=model.id - ) - ) - else: - last_report_in_db = crud.regression_metrics.get_latest_report_by_model( - db, model_id=model.id - ) - return last_report_in_db - - -async def get_latest_drift_metrics_report(db: Session, model: Model) -> DriftingMetric: - last_report_in_db = crud.drifting_metrics.get_latest_report_by_model( - db, model_id=model.id - ) - return last_report_in_db - - -def round_timestamp( - timestamp: datetime.datetime, granularity_type: str -) -> datetime.datetime: - """Rounds a timestamp depending on a given unit - (e.g. if the unit is D (day) it converts 2023-03-03 12:33:25.34432 into 2023-03-03 00:00:00) - """ - - if granularity_type == "T": - timestamp = timestamp.replace(second=0, microsecond=0) - elif granularity_type == "H": - timestamp = timestamp.replace(minute=0, second=0, microsecond=0) - else: - timestamp = timestamp.replace(hour=0, minute=0, second=0, microsecond=0) - - return timestamp - - -def convert_granularity_to_secs(granularity_amount: int, granularity_type: str) -> int: - """Converts a granularity into seconds (e.g. 1 day in 1 * 86400 = 86400 seconds)""" - - amount_of_seconds = {"T": 60, "H": 3600, "D": 86400, "W": 604800} - - return granularity_amount * amount_of_seconds[granularity_type] - - -def change_timestamp( - timestamp: datetime.datetime, - start_time: datetime.datetime, - granularity_amount: int, - granularity_type: str, -) -> datetime.datetime: - """Converts a specific timestamp into it's group's timestamp based on the granularity and previous group timestamp.\n - (E.g. a timestamp 2023-03-03 12:33:25.34432 when granularity is set to 2D and the previous group's timestamp is \ - 2023-03-03 00:00:00 will be converted into 2023-03-05 00:00:00)""" - - timestamp_in_seconds = round_timestamp(timestamp, granularity_type).timestamp() - - granularity_in_seconds = convert_granularity_to_secs( - granularity_amount, granularity_type - ) - - start_time_in_seconds = start_time.timestamp() - - time_difference = ( - timestamp_in_seconds - start_time_in_seconds - ) // granularity_in_seconds - - new_timestamp_in_seconds = ( - time_difference + 1 - ) * granularity_in_seconds + start_time_in_seconds - - new_timestamp = datetime.datetime.fromtimestamp(new_timestamp_in_seconds) - - return new_timestamp - - -def get_used_inference_for_reusage( - db: Session, - model_id: str, - inferences: List[InferenceRow], - start_time: datetime.datetime, - granularity_amount: int, - granularity_type: str, -) -> List[InferenceRow]: - """Collects already used inference rows to be grouped with new rows of the same timestamp group and be \ - reused to create new reports.""" - - timestamps = [x.timestamp for x in inferences] - - changed_timestamps = [ - change_timestamp(x, start_time, granularity_amount, granularity_type) - for x in timestamps - ] - unique_timestamps = list(set(changed_timestamps)) - - granularity_in_seconds = convert_granularity_to_secs( - granularity_amount, granularity_type - ) - - all_used_inferences = [] - - for timestamp in unique_timestamps: - previous_timestamp = timestamp - datetime.timedelta( - seconds=granularity_in_seconds - ) - - used_inferences_for_timestamp = ( - crud.inference_rows.get_inference_rows_betweet_dates( - db=db, - model_id=model_id, - min_date=previous_timestamp, - max_date=timestamp, - ) - ) - - all_used_inferences += used_inferences_for_timestamp - - return all_used_inferences diff --git a/whitebox/cron_tasks/tasks.py b/whitebox/cron_tasks/tasks.py deleted file mode 100644 index 89ce2b9..0000000 --- a/whitebox/cron_tasks/tasks.py +++ /dev/null @@ -1,20 +0,0 @@ -import os -from whitebox.core.manager import get_task_manager -from whitebox.cron_tasks.monitoring_metrics import run_calculate_metrics_pipeline -from whitebox.cron_tasks.monitoring_alerts import run_create_alerts_pipeline - -task_manager = get_task_manager() - -metrics_cron = os.getenv("METRICS_CRON") or "0 12 * * *" - -task_manager.register( - name="metrics_cron", - async_callable=run_calculate_metrics_pipeline, - crontab=metrics_cron, -) - -task_manager.register( - name="alerts_cron", - async_callable=run_create_alerts_pipeline, - crontab=metrics_cron, -) diff --git a/whitebox/crud/__init__.py b/whitebox/crud/__init__.py deleted file mode 100644 index 389e2cf..0000000 --- a/whitebox/crud/__init__.py +++ /dev/null @@ -1,10 +0,0 @@ -from .drifting_metrics import * -from .dataset_rows import * -from .inference_rows import * -from .model_integrity_metrics import * -from .model_monitors import * -from .performance_metrics import * -from .alerts import * -from .users import * -from .models import * -from .base import * diff --git a/whitebox/crud/alerts.py b/whitebox/crud/alerts.py deleted file mode 100644 index a4317a6..0000000 --- a/whitebox/crud/alerts.py +++ /dev/null @@ -1,13 +0,0 @@ -from typing import Any, List -from sqlalchemy.orm import Session -from whitebox.crud.base import CRUDBase -from whitebox.entities.Alert import Alert as AlertEntity -from whitebox.schemas.alert import Alert - - -class CRUD(CRUDBase[Alert, Any, Any]): - def get_model_alerts_by_model(self, db: Session, *, model_id: str) -> List[Alert]: - return db.query(self.model).filter(AlertEntity.model_id == model_id).all() - - -alerts = CRUD(AlertEntity) diff --git a/whitebox/crud/base.py b/whitebox/crud/base.py deleted file mode 100644 index f76d8c1..0000000 --- a/whitebox/crud/base.py +++ /dev/null @@ -1,86 +0,0 @@ -from typing import Any, Dict, Generic, List, Optional, Type, TypeVar, Union -from fastapi.encoders import jsonable_encoder -from pydantic import BaseModel -from sqlalchemy.orm import Session -from whitebox.core.db import Base -import datetime - -ModelType = TypeVar("ModelType", bound=Base) -CreateSchemaType = TypeVar("CreateSchemaType", bound=BaseModel) -UpdateSchemaType = TypeVar("UpdateSchemaType", bound=BaseModel) - - -class CRUDBase(Generic[ModelType, CreateSchemaType, UpdateSchemaType]): - def __init__(self, model: Type[ModelType]): - """ - CRUD object with default methods to Create, Read, Update, Delete (CRUD). - - **Parameters** - - * `model`: A SQLAlchemy model class - * `schema`: A Pydantic model (schema) class - """ - self.model = model - - def get(self, db: Session, _id: str) -> Optional[ModelType]: - return db.query(self.model).filter(self.model.id == _id).first() - - def get_all( - self, db: Session, *, skip: int = 0, limit: int = 100 - ) -> List[ModelType]: - return db.query(self.model).offset(skip).limit(limit).all() - - def get_first_by_filter(self, db: Session, **kwargs: Any) -> Optional[ModelType]: - return db.query(self.model).filter_by(**kwargs).first() - - def create(self, db: Session, *, obj_in: CreateSchemaType) -> ModelType: - date_now = datetime.datetime.utcnow() - obj_in_data = jsonable_encoder(obj_in) - db_obj = self.model(**obj_in_data, created_at=date_now, updated_at=date_now) - db.add(db_obj) - db.commit() - db.refresh(db_obj) - return db_obj - - def create_many( - self, db: Session, *, obj_list: List[CreateSchemaType] - ) -> List[ModelType]: - date_now = datetime.datetime.utcnow() - obj_list_in_data = jsonable_encoder(obj_list) - db_obj_list = list( - map( - lambda x: self.model(**x, created_at=date_now, updated_at=date_now), - obj_list_in_data, - ) - ) - db.add_all(db_obj_list) - db.commit() - for obj in db_obj_list: - db.refresh(obj) - return db_obj_list - - def update( - self, - db: Session, - *, - db_obj: ModelType, - obj_in: Union[UpdateSchemaType, Dict[str, Any]] - ) -> ModelType: - date_now = datetime.datetime.utcnow() - obj_data = jsonable_encoder(db_obj) - if isinstance(obj_in, dict): - update_data = obj_in - else: - update_data = obj_in.dict(exclude_unset=True) - for field in obj_data: - if field in update_data: - setattr(db_obj, field, update_data[field]) - setattr(db_obj, "updated_at", date_now) - db.commit() - db.refresh(db_obj) - return db_obj - - def remove(self, db: Session, *, _id: str): - db.query(self.model).filter(self.model.id == _id).delete() - db.commit() - return diff --git a/whitebox/crud/dataset_rows.py b/whitebox/crud/dataset_rows.py deleted file mode 100644 index 6a64117..0000000 --- a/whitebox/crud/dataset_rows.py +++ /dev/null @@ -1,15 +0,0 @@ -from typing import Any, List -from sqlalchemy.orm import Session -from whitebox.crud.base import CRUDBase -from whitebox.schemas.datasetRow import DatasetRow, DatasetRowCreate -from whitebox.entities.DatasetRow import DatasetRow as DatasetRowEntity - - -class CRUD(CRUDBase[DatasetRow, DatasetRowCreate, Any]): - def get_dataset_rows_by_model( - self, db: Session, *, model_id: str - ) -> List[DatasetRow]: - return db.query(self.model).filter(DatasetRowEntity.model_id == model_id).all() - - -dataset_rows = CRUD(DatasetRowEntity) diff --git a/whitebox/crud/drifting_metrics.py b/whitebox/crud/drifting_metrics.py deleted file mode 100644 index ee17853..0000000 --- a/whitebox/crud/drifting_metrics.py +++ /dev/null @@ -1,31 +0,0 @@ -from typing import Any, List -from sqlalchemy.orm import Session -from sqlalchemy import asc, desc -from whitebox.crud.base import CRUDBase -from whitebox.entities.DriftingMetric import DriftingMetric as DriftingMetricEntity -from whitebox.schemas.driftingMetric import DriftingMetric - - -class CRUD(CRUDBase[DriftingMetric, Any, Any]): - def get_drifting_metrics_by_model( - self, db: Session, *, model_id: str - ) -> List[DriftingMetric]: - return ( - db.query(self.model) - .filter(DriftingMetricEntity.model_id == model_id) - .order_by(asc("timestamp")) - .all() - ) - - def get_latest_report_by_model( - self, db: Session, *, model_id: int - ) -> DriftingMetric: - return ( - db.query(self.model) - .filter(self.model.model_id == model_id) - .order_by(desc("created_at")) - .first() - ) - - -drifting_metrics = CRUD(DriftingMetricEntity) diff --git a/whitebox/crud/inference_rows.py b/whitebox/crud/inference_rows.py deleted file mode 100644 index e732bf7..0000000 --- a/whitebox/crud/inference_rows.py +++ /dev/null @@ -1,47 +0,0 @@ -from typing import Any, List -from datetime import datetime -from sqlalchemy import and_ -from sqlalchemy.orm import Session -from whitebox.crud.base import CRUDBase -from whitebox.schemas.inferenceRow import InferenceRow, InferenceRowPreDb -from whitebox.entities.Inference import InferenceRow as InferenceRowEntity - - -class CRUD(CRUDBase[InferenceRow, InferenceRowPreDb, Any]): - def get_inference_rows_by_model( - self, db: Session, *, model_id: str - ) -> List[InferenceRow]: - return ( - db.query(self.model).filter(InferenceRowEntity.model_id == model_id).all() - ) - - def get_unused_inference_rows( - self, db: Session, *, model_id: str - ) -> List[InferenceRow]: - return ( - db.query(self.model) - .filter( - InferenceRowEntity.model_id == model_id, - InferenceRowEntity.is_used == False, - ) - .all() - ) - - def get_inference_rows_betweet_dates( - self, db: Session, *, model_id: str, min_date: datetime, max_date: datetime - ) -> List[InferenceRow]: - return ( - db.query(self.model) - .filter( - and_( - InferenceRowEntity.model_id == model_id, - InferenceRowEntity.is_used == True, - InferenceRowEntity.timestamp >= min_date, - InferenceRowEntity.timestamp < max_date, - ) - ) - .all() - ) - - -inference_rows = CRUD(InferenceRowEntity) diff --git a/whitebox/crud/model_integrity_metrics.py b/whitebox/crud/model_integrity_metrics.py deleted file mode 100644 index 44ade18..0000000 --- a/whitebox/crud/model_integrity_metrics.py +++ /dev/null @@ -1,26 +0,0 @@ -from typing import Any, List -from sqlalchemy.orm import Session -from sqlalchemy import asc -from whitebox.crud.base import CRUDBase -from whitebox.entities.ModelIntegrityMetric import ( - ModelIntegrityMetric as ModelIntegrityMetricEntity, -) -from whitebox.schemas.modelIntegrityMetric import ( - ModelIntegrityMetricCreate, - ModelIntegrityMetric, -) - - -class CRUD(CRUDBase[ModelIntegrityMetric, ModelIntegrityMetricCreate, Any]): - def get_model_integrity_metrics_by_model( - self, db: Session, *, model_id: str - ) -> List[ModelIntegrityMetric]: - return ( - db.query(self.model) - .filter(ModelIntegrityMetricEntity.model_id == model_id) - .order_by(asc("timestamp")) - .all() - ) - - -model_integrity_metrics = CRUD(ModelIntegrityMetricEntity) diff --git a/whitebox/crud/model_monitors.py b/whitebox/crud/model_monitors.py deleted file mode 100644 index 5bbc371..0000000 --- a/whitebox/crud/model_monitors.py +++ /dev/null @@ -1,33 +0,0 @@ -from typing import Any, List -from whitebox.crud.base import CRUDBase -from sqlalchemy.orm import Session -from whitebox.schemas.modelMonitor import ( - ModelMonitor, - ModelMonitorCreateDto, - MonitorStatus, -) -from whitebox.entities.ModelMonitor import ModelMonitor as ModelMonitorEntity - - -class CRUD(CRUDBase[ModelMonitor, ModelMonitorCreateDto, Any]): - def get_model_monitors_by_model( - self, db: Session, *, model_id: str - ) -> List[ModelMonitor]: - return ( - db.query(self.model).filter(ModelMonitorEntity.model_id == model_id).all() - ) - - def get_active_model_monitors_by_model( - self, db: Session, *, model_id: str - ) -> List[ModelMonitor]: - return ( - db.query(self.model) - .filter( - ModelMonitorEntity.model_id == model_id, - ModelMonitorEntity.status == MonitorStatus.active, - ) - .all() - ) - - -model_monitors = CRUD(ModelMonitorEntity) diff --git a/whitebox/crud/models.py b/whitebox/crud/models.py deleted file mode 100644 index 275334f..0000000 --- a/whitebox/crud/models.py +++ /dev/null @@ -1,10 +0,0 @@ -from whitebox.crud.base import CRUDBase -from whitebox.schemas.model import Model, ModelCreateDto, ModelUpdateDto -from whitebox.entities.Model import Model as ModelEntity - - -class CRUD(CRUDBase[Model, ModelCreateDto, ModelUpdateDto]): - pass - - -models = CRUD(ModelEntity) diff --git a/whitebox/crud/performance_metrics.py b/whitebox/crud/performance_metrics.py deleted file mode 100644 index 5da1a43..0000000 --- a/whitebox/crud/performance_metrics.py +++ /dev/null @@ -1,49 +0,0 @@ -from typing import Any, List, Union -from sqlalchemy.orm import Session -from sqlalchemy import asc, desc -from whitebox.crud.base import CRUDBase -from whitebox.entities.PerformanceMetric import ( - BinaryClassificationMetrics as BinaryClassificationMetricsEntity, - MultiClassificationMetrics as MultiClassificationMetricsEntity, - RegressionMetrics as RegressionMetricsEntity, -) -from whitebox.schemas.performanceMetric import ( - BinaryClassificationMetrics, - MultiClassificationMetrics, - RegressionMetrics, -) - - -class CRUD( - CRUDBase[Union[BinaryClassificationMetrics, MultiClassificationMetrics], Any, Any] -): - def get_performance_metrics_by_model( - self, db: Session, *, model_id: int - ) -> Union[ - List[BinaryClassificationMetrics], - List[MultiClassificationMetrics], - List[RegressionMetrics], - ]: - return ( - db.query(self.model) - .filter(self.model.model_id == model_id) - .order_by(asc("timestamp")) - .all() - ) - - def get_latest_report_by_model( - self, db: Session, *, model_id: int - ) -> Union[ - BinaryClassificationMetrics, MultiClassificationMetrics, RegressionMetrics - ]: - return ( - db.query(self.model) - .filter(self.model.model_id == model_id) - .order_by(desc("created_at")) - .first() - ) - - -binary_classification_metrics = CRUD(BinaryClassificationMetricsEntity) -multi_classification_metrics = CRUD(MultiClassificationMetricsEntity) -regression_metrics = CRUD(RegressionMetricsEntity) diff --git a/whitebox/crud/users.py b/whitebox/crud/users.py deleted file mode 100644 index b68b1a6..0000000 --- a/whitebox/crud/users.py +++ /dev/null @@ -1,11 +0,0 @@ -from typing import Any -from whitebox.crud.base import CRUDBase -from whitebox.schemas.user import User, UserCreateDto -from whitebox.entities.User import User as UserEntity - - -class CRUD(CRUDBase[User, UserCreateDto, Any]): - pass - - -users = CRUD(UserEntity) diff --git a/whitebox/entities/Alert.py b/whitebox/entities/Alert.py deleted file mode 100644 index a43a379..0000000 --- a/whitebox/entities/Alert.py +++ /dev/null @@ -1,17 +0,0 @@ -from sqlalchemy import Column, String, ForeignKey, DateTime -from whitebox.entities.Base import Base -from whitebox.utils.id_gen import generate_uuid - - -class Alert(Base): - __tablename__ = "alerts" - - id = Column(String, primary_key=True, unique=True, default=generate_uuid) - model_id = model_id = Column(String, ForeignKey("models.id", ondelete="CASCADE")) - model_monitor_id = Column( - String, ForeignKey("model_monitors.id", ondelete="CASCADE") - ) - timestamp = Column(DateTime) - description = Column(String) - created_at = Column(DateTime) - updated_at = Column(DateTime) diff --git a/whitebox/entities/Base.py b/whitebox/entities/Base.py deleted file mode 100644 index e8aec5d..0000000 --- a/whitebox/entities/Base.py +++ /dev/null @@ -1,16 +0,0 @@ -from typing import Any, Dict -from sqlalchemy.ext.declarative import as_declarative, declared_attr - - -class_registry: Dict = {} - - -@as_declarative(class_registry=class_registry) -class Base: - id: Any - __name__: str - - # Generate __tablename__ automatically - @declared_attr - def __tablename__(cls) -> str: - return cls.__name__.lower() diff --git a/whitebox/entities/DatasetRow.py b/whitebox/entities/DatasetRow.py deleted file mode 100644 index c7f9fbd..0000000 --- a/whitebox/entities/DatasetRow.py +++ /dev/null @@ -1,14 +0,0 @@ -from sqlalchemy import Column, String, ForeignKey, DateTime, JSON -from whitebox.entities.Base import Base -from whitebox.utils.id_gen import generate_uuid - - -class DatasetRow(Base): - __tablename__ = "dataset_rows" - - id = Column(String, primary_key=True, unique=True, default=generate_uuid) - model_id = Column(String, ForeignKey("models.id", ondelete="CASCADE")) - nonprocessed = Column(JSON) - processed = Column(JSON) - created_at = Column(DateTime) - updated_at = Column(DateTime) diff --git a/whitebox/entities/DriftingMetric.py b/whitebox/entities/DriftingMetric.py deleted file mode 100644 index 5496904..0000000 --- a/whitebox/entities/DriftingMetric.py +++ /dev/null @@ -1,15 +0,0 @@ -from sqlalchemy import Column, ForeignKey, String, DateTime, JSON -from whitebox.entities.Base import Base -from whitebox.utils.id_gen import generate_uuid - - -class DriftingMetric(Base): - __tablename__ = "drifting_metrics" - - id = Column(String, primary_key=True, unique=True, default=generate_uuid) - model_id = Column(String, ForeignKey("models.id", ondelete="CASCADE")) - timestamp = Column(DateTime) - concept_drift_summary = Column(JSON) - data_drift_summary = Column(JSON) - created_at = Column(DateTime) - updated_at = Column(DateTime) diff --git a/whitebox/entities/Inference.py b/whitebox/entities/Inference.py deleted file mode 100644 index 2d0d6d4..0000000 --- a/whitebox/entities/Inference.py +++ /dev/null @@ -1,18 +0,0 @@ -from sqlalchemy import Boolean, Column, String, ForeignKey, DateTime, JSON, Float -from whitebox.entities.Base import Base -from whitebox.utils.id_gen import generate_uuid - - -class InferenceRow(Base): - __tablename__ = "inference_rows" - - id = Column(String, primary_key=True, unique=True, default=generate_uuid) - model_id = Column(String, ForeignKey("models.id", ondelete="CASCADE")) - timestamp = Column(DateTime) - nonprocessed = Column(JSON) - processed = Column(JSON) - is_used = Column(Boolean) - actual = Column(Float, nullable=True) - - created_at = Column(DateTime) - updated_at = Column(DateTime) diff --git a/whitebox/entities/Model.py b/whitebox/entities/Model.py deleted file mode 100644 index 2cae97d..0000000 --- a/whitebox/entities/Model.py +++ /dev/null @@ -1,28 +0,0 @@ -from sqlalchemy import Column, String, DateTime, JSON, Enum -from whitebox.entities.Base import Base -from whitebox.utils.id_gen import generate_uuid -from sqlalchemy.orm import relationship -from whitebox.schemas.model import ModelType - - -class Model(Base): - __tablename__ = "models" - - id = Column(String, primary_key=True, unique=True, default=generate_uuid) - name = Column(String) - description = Column(String) - type = Column("type", Enum(ModelType)) - target_column = Column(String) - granularity = Column(String) - labels = Column(JSON, nullable=True) - created_at = Column(DateTime) - updated_at = Column(DateTime) - - dataset_rows = relationship("DatasetRow") - inference_rows = relationship("InferenceRow") - binary_classification_metrics = relationship("BinaryClassificationMetrics") - multi_classification_metrics = relationship("MultiClassificationMetrics") - regression_metrics = relationship("RegressionMetrics") - drifting_metrics = relationship("DriftingMetric") - model_integrity_metrics = relationship("ModelIntegrityMetric") - model_monitors = relationship("ModelMonitor") diff --git a/whitebox/entities/ModelIntegrityMetric.py b/whitebox/entities/ModelIntegrityMetric.py deleted file mode 100644 index 277794a..0000000 --- a/whitebox/entities/ModelIntegrityMetric.py +++ /dev/null @@ -1,14 +0,0 @@ -from sqlalchemy import Column, JSON, Float, ForeignKey, String, DateTime -from whitebox.entities.Base import Base -from whitebox.utils.id_gen import generate_uuid - - -class ModelIntegrityMetric(Base): - __tablename__ = "model_integrity_metrics" - - id = Column(String, primary_key=True, unique=True, default=generate_uuid) - model_id = Column(String, ForeignKey("models.id", ondelete="CASCADE")) - timestamp = Column(DateTime) - feature_metrics = Column(JSON) - created_at = Column(DateTime) - updated_at = Column(DateTime) diff --git a/whitebox/entities/ModelMonitor.py b/whitebox/entities/ModelMonitor.py deleted file mode 100644 index a0b406d..0000000 --- a/whitebox/entities/ModelMonitor.py +++ /dev/null @@ -1,23 +0,0 @@ -from sqlalchemy import Column, Numeric, Enum, String, ForeignKey, DateTime -from whitebox.entities.Base import Base -from sqlalchemy.orm import relationship -from whitebox.schemas.modelMonitor import AlertSeverity, MonitorMetrics, MonitorStatus -from whitebox.utils.id_gen import generate_uuid - - -class ModelMonitor(Base): - __tablename__ = "model_monitors" - - id = Column(String, primary_key=True, unique=True, default=generate_uuid) - model_id = Column(String, ForeignKey("models.id", ondelete="CASCADE")) - name = Column(String) - status = Column("status", Enum(MonitorStatus)) - metric = Column("metric", Enum(MonitorMetrics)) - feature = Column(String, nullable=True) - lower_threshold = Column(Numeric, nullable=True) - severity = Column("severity", Enum(AlertSeverity)) - email = Column(String) - created_at = Column(DateTime) - updated_at = Column(DateTime) - - alerts = relationship("Alert") diff --git a/whitebox/entities/PerformanceMetric.py b/whitebox/entities/PerformanceMetric.py deleted file mode 100644 index c2969d4..0000000 --- a/whitebox/entities/PerformanceMetric.py +++ /dev/null @@ -1,49 +0,0 @@ -from sqlalchemy import Column, Integer, Float, ForeignKey, String, DateTime, JSON -from whitebox.entities.Base import Base -from whitebox.utils.id_gen import generate_uuid - - -class BinaryClassificationMetrics(Base): - __tablename__ = "binary_classification_metrics" - - id = Column(String, primary_key=True, unique=True, default=generate_uuid) - model_id = Column(String, ForeignKey("models.id", ondelete="CASCADE")) - timestamp = Column(DateTime) - accuracy = Column(Float) - precision = Column(Float) - recall = Column(Float) - f1 = Column(Float) - true_negative = Column(Integer) - false_positive = Column(Integer) - false_negative = Column(Integer) - true_positive = Column(Integer) - created_at = Column(DateTime) - updated_at = Column(DateTime) - - -class MultiClassificationMetrics(Base): - __tablename__ = "multi_classification_metrics" - - id = Column(String, primary_key=True, unique=True, default=generate_uuid) - model_id = Column(String, ForeignKey("models.id", ondelete="CASCADE")) - timestamp = Column(DateTime) - accuracy = Column(Float) - precision = Column(JSON) - recall = Column(JSON) - f1 = Column(JSON) - confusion_matrix = Column(JSON) - created_at = Column(DateTime) - updated_at = Column(DateTime) - - -class RegressionMetrics(Base): - __tablename__ = "regression_metrics" - - id = Column(String, primary_key=True, unique=True, default=generate_uuid) - model_id = Column(String, ForeignKey("models.id", ondelete="CASCADE")) - timestamp = Column(DateTime) - r_square = Column(Float) - mean_squared_error = Column(Float) - mean_absolute_error = Column(Float) - created_at = Column(DateTime) - updated_at = Column(DateTime) diff --git a/whitebox/entities/User.py b/whitebox/entities/User.py deleted file mode 100644 index b0838a6..0000000 --- a/whitebox/entities/User.py +++ /dev/null @@ -1,14 +0,0 @@ -from sqlalchemy import Column, String, DateTime -from whitebox.entities.Base import Base -from whitebox.utils.id_gen import generate_uuid -from sqlalchemy.orm import deferred, relationship - - -class User(Base): - __tablename__ = "users" - - id = Column(String, unique=True, primary_key=True, default=generate_uuid) - username = Column(String) - api_key = Column(String) - created_at = Column(DateTime) - updated_at = Column(DateTime) diff --git a/whitebox/entities/__init__.py b/whitebox/entities/__init__.py deleted file mode 100644 index d4cb0a4..0000000 --- a/whitebox/entities/__init__.py +++ /dev/null @@ -1,13 +0,0 @@ -from .Alert import Alert -from .DatasetRow import DatasetRow -from .DriftingMetric import DriftingMetric -from .Inference import InferenceRow -from .Model import Model -from .ModelIntegrityMetric import ModelIntegrityMetric -from .ModelMonitor import ModelMonitor -from .PerformanceMetric import ( - BinaryClassificationMetrics, - MultiClassificationMetrics, - RegressionMetrics, -) -from .User import User diff --git a/whitebox/main.py b/whitebox/main.py deleted file mode 100644 index 36fb043..0000000 --- a/whitebox/main.py +++ /dev/null @@ -1,73 +0,0 @@ -from fastapi import FastAPI -from fastapi.middleware.cors import CORSMiddleware -from whitebox.api.v1 import v1_router -from fastapi.openapi.utils import get_openapi -from whitebox.api.v1.docs import ( - tags_metadata, - validation_error, - authorization_error, - not_found_error, - conflict_error, - content_gone, - bad_request, -) -from whitebox.core.settings import get_settings -from whitebox.core.db import connect, close -from starlette.exceptions import HTTPException as StarletteHTTPException -from fastapi.exceptions import RequestValidationError - -from whitebox.utils.errors import errors - -settings = get_settings() - -app = FastAPI(title=settings.APP_NAME, redoc_url="/") - -app.add_middleware( - CORSMiddleware, - allow_origins=["*"], - allow_credentials=True, - allow_methods=["*"], - allow_headers=["*"], -) - -app.include_router(v1_router) - - -app.add_exception_handler(StarletteHTTPException, errors.http_exception_handler) -app.add_exception_handler(RequestValidationError, errors.validation_exception_handler) - - -@app.on_event("startup") -async def on_app_start(): - """Anything that needs to be done while app starts""" - await connect() - - -@app.on_event("shutdown") -async def on_app_shutdown(): - """Anything that needs to be done while app shutdown""" - await close() - - -def app_openapi(): - if app.openapi_schema: - return app.openapi_schema - openapi_schema = get_openapi( - title="Whitebox", - version=settings.VERSION, - routes=app.routes, - tags=tags_metadata, - ) - - openapi_schema["components"]["schemas"]["HTTPValidationError"] = validation_error - openapi_schema["components"]["schemas"]["AuthorizationError"] = authorization_error - openapi_schema["components"]["schemas"]["NotFoundError"] = not_found_error - openapi_schema["components"]["schemas"]["ConflictError"] = conflict_error - openapi_schema["components"]["schemas"]["BadRequest"] = bad_request - openapi_schema["components"]["schemas"]["ContentGone"] = content_gone - - app.openapi_schema = openapi_schema - return app.openapi_schema - - -app.openapi = app_openapi diff --git a/whitebox/middleware/__initi__.py b/whitebox/middleware/__initi__.py deleted file mode 100644 index e69de29..0000000 diff --git a/whitebox/middleware/auth.py b/whitebox/middleware/auth.py deleted file mode 100644 index 40143c5..0000000 --- a/whitebox/middleware/auth.py +++ /dev/null @@ -1,18 +0,0 @@ -from fastapi import Depends, HTTPException, status, Header -from sqlalchemy.orm import Session -from whitebox import crud -from whitebox.schemas.user import User -from whitebox.core.db import get_db -from whitebox.utils.passwords import passwords_match - - -async def authenticate_user( - api_key: str = Header(), - db: Session = Depends(get_db), -) -> User: - user = crud.users.get_first_by_filter(db, username="admin") - if not passwords_match(user.api_key, api_key): - raise HTTPException( - detail="Invalid API key", status_code=status.HTTP_401_UNAUTHORIZED - ) - return user diff --git a/whitebox/schemas/__init__.py b/whitebox/schemas/__init__.py deleted file mode 100644 index b13b928..0000000 --- a/whitebox/schemas/__init__.py +++ /dev/null @@ -1,11 +0,0 @@ -from .inferenceRow import * -from .model import * -from .alert import * -from .base import * -from .datasetRow import * -from .driftingMetric import * -from .modelIntegrityMetric import * -from .modelMonitor import * -from .performanceMetric import * -from .user import * -from .utils import * diff --git a/whitebox/schemas/alert.py b/whitebox/schemas/alert.py deleted file mode 100644 index b8308ea..0000000 --- a/whitebox/schemas/alert.py +++ /dev/null @@ -1,19 +0,0 @@ -from datetime import datetime -from typing import Union -from pydantic import BaseModel -from whitebox.schemas.base import ItemBase - - -class AlertBase(BaseModel): - model_id: str - model_monitor_id: str - timestamp: Union[str, datetime] - description: str - - -class Alert(AlertBase, ItemBase): - pass - - -class AlertCreateDto(AlertBase): - pass diff --git a/whitebox/schemas/base.py b/whitebox/schemas/base.py deleted file mode 100644 index bd496f3..0000000 --- a/whitebox/schemas/base.py +++ /dev/null @@ -1,11 +0,0 @@ -import datetime -from pydantic import BaseModel - - -class ItemBase(BaseModel): - id: str - created_at: datetime.datetime - updated_at: datetime.datetime - - class Config: - orm_mode = True diff --git a/whitebox/schemas/datasetRow.py b/whitebox/schemas/datasetRow.py deleted file mode 100644 index 6276a4e..0000000 --- a/whitebox/schemas/datasetRow.py +++ /dev/null @@ -1,19 +0,0 @@ -from pydantic import BaseModel -from whitebox.schemas.base import ItemBase -from typing import Dict, Any - - -class DatasetRowBase(BaseModel): - model_id: str - # Data before any processing - nonprocessed: Dict[str, Any] - # Before model entry - processed: Dict[str, float] - - -class DatasetRow(DatasetRowBase, ItemBase): - pass - - -class DatasetRowCreate(DatasetRowBase): - pass diff --git a/whitebox/schemas/driftingMetric.py b/whitebox/schemas/driftingMetric.py deleted file mode 100644 index 97616cf..0000000 --- a/whitebox/schemas/driftingMetric.py +++ /dev/null @@ -1,68 +0,0 @@ -from datetime import datetime -from typing import Dict, List, Union -from pydantic import BaseModel -from whitebox.schemas.base import ItemBase - - -class ColumnDataDriftMetrics(BaseModel): - """One column drift metrics""" - - column_name: str - column_type: str - stattest_name: str - drift_score: float - drift_detected: bool - threshold: float - - -class DataDriftTable(BaseModel): - number_of_columns: int - number_of_drifted_columns: int - share_of_drifted_columns: float - dataset_drift: bool - drift_by_columns: Dict[str, ColumnDataDriftMetrics] - - -class CramerV(BaseModel): - """CramerV statistics""" - - column_name: str - kind: str - values: Dict[str, List[str]] - - -class ColumnConceptDriftCorrelationMetrics(BaseModel): - """One column concept drift correlation metrics""" - - column_name: str - current: Dict[str, CramerV] - reference: Dict[str, CramerV] - - -class ColumnConceptDriftMetrics(BaseModel): - """One column concept drift metrics""" - - column_name: str - column_type: str - stattest_name: str - drift_score: float - drift_detected: bool - stattest_threshold: float - - -class ConceptDriftTable(BaseModel): - """Concept drift Table metrics""" - - concept_drift_summary: ColumnConceptDriftMetrics - column_correlation: ColumnConceptDriftCorrelationMetrics - - -class DriftingMetricBase(ItemBase): - model_id: str - timestamp: Union[str, datetime] - concept_drift_summary: ConceptDriftTable - data_drift_summary: DataDriftTable - - -class DriftingMetric(DriftingMetricBase, ItemBase): - pass diff --git a/whitebox/schemas/inferenceRow.py b/whitebox/schemas/inferenceRow.py deleted file mode 100644 index abd0ba9..0000000 --- a/whitebox/schemas/inferenceRow.py +++ /dev/null @@ -1,25 +0,0 @@ -from datetime import datetime -from typing import Any, Dict, Union, Optional -from pydantic import BaseModel -from whitebox.schemas.base import ItemBase - - -class InferenceRowBase(BaseModel): - model_id: str - timestamp: Union[str, datetime] - # Prediction is included into nonprocessed & processed - nonprocessed: Dict[str, Any] - processed: Dict[str, float] - actual: Optional[float] - - -class InferenceRowCreateDto(InferenceRowBase): - pass - - -class InferenceRowPreDb(InferenceRowBase): - is_used: bool - - -class InferenceRow(InferenceRowPreDb, ItemBase): - pass diff --git a/whitebox/schemas/model.py b/whitebox/schemas/model.py deleted file mode 100644 index 4ad533c..0000000 --- a/whitebox/schemas/model.py +++ /dev/null @@ -1,32 +0,0 @@ -from typing import Dict, Optional -from pydantic import BaseModel -from whitebox.schemas.base import ItemBase -import enum - - -class ModelType(str, enum.Enum): - binary = "binary" - multi_class = "multi_class" - regression = "regression" - - -class ModelBase(BaseModel): - name: str - description: str - type: ModelType - target_column: str - granularity: str - labels: Optional[Dict[str, int]] - - -class Model(ModelBase, ItemBase): - pass - - -class ModelCreateDto(ModelBase): - pass - - -class ModelUpdateDto(BaseModel): - name: Optional[str] - description: Optional[str] diff --git a/whitebox/schemas/modelIntegrityMetric.py b/whitebox/schemas/modelIntegrityMetric.py deleted file mode 100644 index eefc1d1..0000000 --- a/whitebox/schemas/modelIntegrityMetric.py +++ /dev/null @@ -1,29 +0,0 @@ -from typing import Dict, Union -from pydantic import BaseModel -from whitebox.schemas.base import ItemBase -from datetime import datetime - - -class FeatureMetrics(BaseModel): - missing_count: Dict[str, int] - non_missing_count: Dict[str, int] - mean: Dict[str, float] - minimum: Dict[str, float] - maximum: Dict[str, float] - sum: Dict[str, float] - standard_deviation: Dict[str, float] - variance: Dict[str, float] - - -class ModelIntegrityMetricBase(BaseModel): - model_id: str - timestamp: Union[str, datetime] - feature_metrics: FeatureMetrics - - -class ModelIntegrityMetric(ModelIntegrityMetricBase, ItemBase): - pass - - -class ModelIntegrityMetricCreate(ModelIntegrityMetricBase): - pass diff --git a/whitebox/schemas/modelMonitor.py b/whitebox/schemas/modelMonitor.py deleted file mode 100644 index bb38fcf..0000000 --- a/whitebox/schemas/modelMonitor.py +++ /dev/null @@ -1,57 +0,0 @@ -from typing import Optional -from pydantic import BaseModel -import enum -from whitebox.schemas.base import ItemBase - - -class MonitorStatus(str, enum.Enum): - active = "active" - inactive = "inactive" - - -class MonitorMetrics(str, enum.Enum): - # Performance metrics - accuracy = "accuracy" - precision = "precision" - recall = "recall" - f1 = "f1" - r_square = "r_square" - mean_squared_error = "mean_squared_error" - mean_absolute_error = "mean_absolute_error" - - # Drifting metrics - data_drift = "data_drift" - concept_drift = "concept_drift" - - -class AlertSeverity(str, enum.Enum): - low = "low" - mid = "mid" - high = "high" - - -class ModelMonitorBase(BaseModel): - model_id: str - name: str - status: MonitorStatus - metric: MonitorMetrics - severity: AlertSeverity - email: str - feature: Optional[str] - lower_threshold: Optional[float] - - -class ModelMonitor(ModelMonitorBase, ItemBase): - pass - - -class ModelMonitorCreateDto(ModelMonitorBase): - pass - - -class ModelMonitorUpdateDto(BaseModel): - name: Optional[str] - status: Optional[MonitorStatus] - severity: Optional[AlertSeverity] - email: Optional[str] - lower_threshold: Optional[float] diff --git a/whitebox/schemas/performanceMetric.py b/whitebox/schemas/performanceMetric.py deleted file mode 100644 index 54a7968..0000000 --- a/whitebox/schemas/performanceMetric.py +++ /dev/null @@ -1,77 +0,0 @@ -from datetime import datetime -from pydantic import BaseModel -from typing import Dict, Union -from whitebox.schemas.base import ItemBase - -# TODO: Include comments of what each class represents - - -class BinaryClassificationMetricsPipelineResult(BaseModel): - """This class is used to store the results of the pipeline that calculates the binary classification metrics""" - - accuracy: float - precision: float - recall: float - f1: float - true_negative: int - false_positive: int - false_negative: int - true_positive: int - - -class BinaryClassificationMetricsBase(BinaryClassificationMetricsPipelineResult): - model_id: str - timestamp: Union[str, datetime] - - -class BinaryClassificationMetrics(BinaryClassificationMetricsBase, ItemBase): - pass - - -class DifferentStatistics(BaseModel): - micro: float - macro: float - weighted: float - - -class ConfusionMatrix(BaseModel): - true_negative: int - false_positive: int - false_negative: int - true_positive: int - - -class MultiClassificationMetricsPipelineResult(BaseModel): - """This class is used to store the results of the pipeline that calculates the multi classification metrics""" - - accuracy: float - precision: DifferentStatistics - recall: DifferentStatistics - f1: DifferentStatistics - confusion_matrix: Dict[str, ConfusionMatrix] - - -class MultiClassificationMetricsBase(MultiClassificationMetricsPipelineResult): - model_id: str - timestamp: Union[str, datetime] - - -class MultiClassificationMetrics(MultiClassificationMetricsBase, ItemBase): - pass - - -class RegressionMetricsPipelineResult(BaseModel): - """This class is used to store the results of the pipeline that calculates the regression metrics""" - - r_square: float - mean_squared_error: float - mean_absolute_error: float - - -class RegressionMetricsBase(RegressionMetricsPipelineResult): - model_id: str - timestamp: Union[str, datetime] - - -class RegressionMetrics(RegressionMetricsBase, ItemBase): - pass diff --git a/whitebox/schemas/task.py b/whitebox/schemas/task.py deleted file mode 100644 index 8ca74f4..0000000 --- a/whitebox/schemas/task.py +++ /dev/null @@ -1,77 +0,0 @@ -from asyncio.tasks import Task -from dataclasses import dataclass - -from pydantic import BaseModel, Field -from typing import Callable, Coroutine, Optional, List, Dict, Deque, Literal, Union -from uuid import UUID, uuid4 - -import datetime -import pytz - - -def now(): - return datetime.datetime.utcnow().replace(tzinfo=pytz.utc) - - -TaskStatus = Literal[ - "registered", "running", "finished", "pending", "cancelled", "failed" -] - -EventType = Literal[ - "task_registered", - "task_started", - "task_failed", - "task_finished", - "task_cancelled", - "task_disabled", -] - - -class TaskInfo(BaseModel): - uid: UUID = uuid4() - name: str - status: str - previous_status: str - enabled: bool - crontab: Union[str, None] = None - created_at: Union[datetime.datetime, float] = now().timestamp() - started_at: Union[datetime.datetime, float, None] = None - stopped_at: Union[datetime.datetime, float, None] = None - next_run_in: Union[int, None] = None - - -class TaskDefinition(BaseModel): - name: str - async_callable: Callable[[], Coroutine] - enabled: bool = True - crontab: Optional[str] = None - - -@dataclass -class RunningTask: - task_definition: TaskDefinition - asyncio_task: Task - since: Union[datetime.datetime, float] - - -class TaskLog(BaseModel): - event_type: EventType - task_name: str - crontab: Union[str, None] = None - enabled: bool - error: Union[str, None] = None - timestamp: int = Field(default_factory=lambda: datetime.datetime.now().timestamp()) - - -class State(BaseModel): - created_at: datetime.datetime - tasks_info: List[TaskInfo] - - -class TaskRealTimeInfo(BaseModel): - name: str - status: TaskStatus - previous_status: Optional[TaskStatus] - next_run_ts: Optional[int] - started_at: Optional[Union[datetime.datetime, float]] - stopped_at: Optional[Union[datetime.datetime, float]] diff --git a/whitebox/schemas/user.py b/whitebox/schemas/user.py deleted file mode 100644 index 6ed25f2..0000000 --- a/whitebox/schemas/user.py +++ /dev/null @@ -1,15 +0,0 @@ -from typing import Optional, Union -from pydantic import BaseModel -from whitebox.schemas.base import ItemBase - - -class UserBase(BaseModel): - username: str - - -class User(UserBase, ItemBase): - pass - - -class UserCreateDto(UserBase): - api_key: str diff --git a/whitebox/schemas/utils.py b/whitebox/schemas/utils.py deleted file mode 100644 index 0cf2556..0000000 --- a/whitebox/schemas/utils.py +++ /dev/null @@ -1,20 +0,0 @@ -from pydantic import BaseModel - - -class HealthCheck(BaseModel): - status: str - - -class StatusCode(BaseModel): - status_code: str - - -class ErrorProps(BaseModel): - error: str - status_code: int - - -class ErrorResponse(BaseModel): - title: str - type: str - properties: ErrorProps diff --git a/whitebox/sdk/__init__.py b/whitebox/sdk/__init__.py deleted file mode 100644 index 16835b2..0000000 --- a/whitebox/sdk/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .whitebox import * diff --git a/whitebox/sdk/whitebox.py b/whitebox/sdk/whitebox.py deleted file mode 100644 index 0d06c85..0000000 --- a/whitebox/sdk/whitebox.py +++ /dev/null @@ -1,403 +0,0 @@ -from enum import Enum -import numpy as np -import pandas as pd -from whitebox.schemas.model import ModelCreateDto, ModelType, ModelUpdateDto -from typing import Dict, Optional, Union -import requests -import logging -from fastapi import status as status_code -from fastapi.encoders import jsonable_encoder - -from whitebox.schemas.modelMonitor import ( - AlertSeverity, - ModelMonitorCreateDto, - ModelMonitorUpdateDto, - MonitorMetrics, - MonitorStatus, -) - - -class APiVersion(str, Enum): - v1 = "v1" - - -logger = logging.getLogger(__name__) - - -class Whitebox: - def __init__( - self, - host: str, - api_key: str, - verbose: bool = False, - api_version: APiVersion = APiVersion.v1, - ): - self.host = host - self.api_key = api_key - self.verbose = verbose - self.api_version = api_version - - def create_model( - self, - name: str, - type: ModelType, - target_column: str, - granularity: str, - labels: Dict[str, int] = None, - description: str = "", - ) -> dict: - """ - Create a new model in Whitebox and define a type, and a schema for it. - """ - new_model = ModelCreateDto( - name=name, - type=type, - target_column=target_column, - granularity=granularity, - labels=labels, - description=description, - ) - - result = requests.post( - url=f"{self.host}/{self.api_version}/models", - json=jsonable_encoder(new_model), - headers={"api-key": self.api_key}, - ) - - logger.info(result.json()) - return result.json() - - def get_model(self, model_id: str) -> dict: - """ - Returns a model by its id. If the model does not exist, returns None. - """ - result = requests.get( - url=f"{self.host}/{self.api_version}/models/{model_id}", - headers={"api-key": self.api_key}, - ) - if result.status_code == status_code.HTTP_404_NOT_FOUND: - return None - - return result.json() - - def get_models(self) -> Union[dict, None]: - """ - Returns all the models. If no models exist, returns None. - """ - result = requests.get( - url=f"{self.host}/{self.api_version}/models", - headers={"api-key": self.api_key}, - ) - if result.status_code == status_code.HTTP_404_NOT_FOUND: - return None - - return result.json() - - def update_model( - self, - model_id: str, - name: Optional[str] = None, - description: Optional[str] = None, - ): - """ - Updates a model by its id. If any error occurs, returns False. - """ - - model = ModelUpdateDto(name=name, description=description) - - result = requests.put( - url=f"{self.host}/{self.api_version}/models/{model_id}", - json=jsonable_encoder(model), - headers={"api-key": self.api_key}, - ) - logger.info(result.json()) - - if result.status_code == status_code.HTTP_200_OK: - return True - - return False - - def delete_model(self, model_id: str): - """ - Deletes a model by its id. If any error occurs, returns False. - """ - result = requests.delete( - url=f"{self.host}/{self.api_version}/models/{model_id}", - headers={"api-key": self.api_key}, - ) - - if result.status_code == status_code.HTTP_200_OK: - return True - - return False - - def log_training_dataset( - self, model_id: str, non_processed: pd.DataFrame, processed: pd.DataFrame - ) -> bool: - """ - Logs a training dataset for a model. - - Non processed is a dataframe with the raw data. - Processed is a dataframe with the data after it has been processed and before it has entered the model. - """ - self._check_processed_and_non_processed_length(processed, non_processed) - non_processed_json = non_processed.to_dict(orient="records") - processed_json = processed.to_dict(orient="records") - - dataset_rows = [] - for i in range(len(non_processed)): - dataset_rows.append( - dict( - model_id=model_id, - nonprocessed=non_processed_json[i], - processed=processed_json[i], - ) - ) - - result = requests.post( - url=f"{self.host}/{self.api_version}/dataset-rows", - headers={"api-key": self.api_key}, - json=dataset_rows, - ) - if result.status_code == status_code.HTTP_201_CREATED: - return True - - return False - - def log_inferences( - self, - model_id: str, - non_processed: pd.DataFrame, - processed: pd.DataFrame, - timestamps: pd.Series, - actuals: pd.Series = None, - ) -> bool: - """ - Logs inferences of a model. - - Non processed is a dataframe with the raw data. - Processed is a dataframe with the data after it has been processed and before it has entered the model. - """ - self._check_processed_and_non_processed_length(processed, non_processed) - non_processed_json = non_processed.to_dict(orient="records") - processed_json = processed.to_dict(orient="records") - timestamps_list = timestamps.tolist() - - if actuals is not None: - actuals = actuals.replace({np.nan: None}) - actuals_list = actuals.tolist() - else: - actuals_list = actuals - - inference_rows = [] - for i in range(len(non_processed)): - inference_rows.append( - dict( - model_id=model_id, - nonprocessed=non_processed_json[i], - processed=processed_json[i], - timestamp=timestamps_list[i], - actual=actuals_list[i] if actuals_list is not None else None, - ) - ) - - result = requests.post( - url=f"{self.host}/{self.api_version}/inference-rows/batch", - headers={"api-key": self.api_key}, - json=inference_rows, - ) - if result.status_code == status_code.HTTP_201_CREATED: - return True - - return False - - def get_inferences(self, model_id: str): - """ - Given a specific model id, this endpoint fetches all the inferences. - If some of the required data isn't found, returns None. - """ - result = requests.get( - url=f"{self.host}/{self.api_version}/inference-rows?model_id={model_id}", - headers={"api-key": self.api_key}, - ) - if result.status_code == status_code.HTTP_404_NOT_FOUND: - return None - - return result.json() - - def get_xai_row(self, inference_row_id: str): - """ - Given a specific inference row id, this endpoint produces an explainability report for this inference. - If some of the required data isn't found, returns None. - """ - result = requests.get( - url=f"{self.host}/{self.api_version}/inference-rows/{inference_row_id}/xai", - headers={"api-key": self.api_key}, - ) - if result.status_code == status_code.HTTP_404_NOT_FOUND: - return None - - return result.json() - - def create_model_monitor( - self, - model_id: str, - name: str, - status: MonitorStatus, - metric: MonitorMetrics, - severity: AlertSeverity, - email: str, - lower_threshold: Optional[float], - feature: Optional[Union[str, None]] = None, - ) -> dict: - """ - Creates a monitor for a model. - """ - - model_monitor = ModelMonitorCreateDto( - model_id=model_id, - name=name, - status=status, - metric=metric, - feature=feature, - lower_threshold=lower_threshold, - severity=severity, - email=email, - ) - - result = requests.post( - url=f"{self.host}/{self.api_version}/model-monitors", - json=model_monitor.dict(), - headers={"api-key": self.api_key}, - ) - - logger.info(result.json()) - return result.json() - - def get_model_monitors(self, model_id: str) -> dict: - """ - Returns all monitors for a model. - """ - result = requests.get( - url=f"{self.host}/{self.api_version}/model-monitors?modelId={model_id}", - headers={"api-key": self.api_key}, - ) - - logger.info(result.json()) - return result.json() - - def update_model_monitor( - self, - model_monitor_id: str, - name: Optional[str] = None, - status: Optional[MonitorStatus] = None, - severity: Optional[AlertSeverity] = None, - email: Optional[str] = None, - lower_threshold: Optional[float] = None, - ): - """ - Updates a model monitor by its id. If any error occurs, returns False. - """ - - model_monitor = ModelMonitorUpdateDto( - name=name, - status=status, - severity=severity, - lower_threshold=lower_threshold, - email=email, - ) - - result = requests.put( - url=f"{self.host}/{self.api_version}/model-monitors/{model_monitor_id}", - json=jsonable_encoder(model_monitor), - headers={"api-key": self.api_key}, - ) - - logger.info(result.json()) - - if result.status_code == status_code.HTTP_200_OK: - return True - - return False - - def delete_model_monitor(self, model_monitor_id: str): - """ - Deletes a model monitor by its id. If any error occurs, returns False. - """ - result = requests.delete( - url=f"{self.host}/{self.api_version}/model-monitors/{model_monitor_id}", - headers={"api-key": self.api_key}, - ) - - if result.status_code == status_code.HTTP_200_OK: - return True - - return False - - def get_alerts(self, model_id: str = "") -> dict: - """ - Returns all alerts for a model. - """ - result = requests.get( - url=f"{self.host}/{self.api_version}/alerts?model_id={model_id}", - headers={"api-key": self.api_key}, - ) - - if result.status_code == status_code.HTTP_404_NOT_FOUND: - return None - - return result.json() - - def get_drifting_metrics(self, model_id: str) -> dict: - """ - Returns a model's drifting metric reports. If the model does not exist, returns None. - If the model exists but there are no metrics, returns an empty list. - """ - result = requests.get( - url=f"{self.host}/{self.api_version}/drifting-metrics?model_id={model_id}", - headers={"api-key": self.api_key}, - ) - if result.status_code == status_code.HTTP_404_NOT_FOUND: - return None - - return result.json() - - def get_descriptive_statistics(self, model_id: str) -> dict: - """ - Returns a model's descriptive statistics reports. If the model does not exist, returns None. - If the model exists but there are no metrics, returns an empty list. - """ - result = requests.get( - url=f"{self.host}/{self.api_version}/model-integrity-metrics?model_id={model_id}", - headers={"api-key": self.api_key}, - ) - if result.status_code == status_code.HTTP_404_NOT_FOUND: - return None - - return result.json() - - def get_performance_metrics(self, model_id: str) -> dict: - """ - Returns a model's performance metric reports. If the model does not exist, returns None. - If the model exists but there are no metrics, returns an empty list. - """ - result = requests.get( - url=f"{self.host}/{self.api_version}/performance-metrics?model_id={model_id}", - headers={"api-key": self.api_key}, - ) - if result.status_code == status_code.HTTP_404_NOT_FOUND: - return None - - return result.json() - - def _check_processed_and_non_processed_length( - self, processed: pd.DataFrame, non_processed: pd.DataFrame - ) -> bool: - """ - Checks if the processed and non processed dataframes have the same number of rows. - """ - if len(processed) != len(non_processed): - raise ValueError( - "Processed and non processed dataframes must have the same length." - ) - return True diff --git a/whitebox/streamlit/app.py b/whitebox/streamlit/app.py deleted file mode 100644 index 159b247..0000000 --- a/whitebox/streamlit/app.py +++ /dev/null @@ -1,92 +0,0 @@ -import numpy as np -import pandas as pd -import streamlit as st -from typing import Dict, Union - -from tabs.drifting import * -from tabs.sidebar import * -from tabs.overview import * -from tabs.performance import * -from tabs.inferences import * -from tabs.monitors import * -from tabs.alerts import * -from cards import * -from utils.transformation import get_model_from_name - -st.set_option("deprecation.showPyplotGlobalUse", False) - - -# ---------------------------------------------- -def format_evaluation_metrics_binary( - accuracy: float, - precision: float, - recall: float, - f1: float, - tn: int, - fp: int, - fn: int, - tp: int, -) -> Dict[str, Union[int, float]]: - formated_metrics_for_binary = { - "accuracy": accuracy, - "precision": precision, - "recall": recall, - "f1": f1, - "true_negative": tn, - "false_positive": fp, - "false_negative": fn, - "true_positive": tp, - } - - return formated_metrics_for_binary - - -evaluation_metrics_binary = format_evaluation_metrics_binary( - 0.64, 0.5, 0.11, 0.72, 1200, 600, 840, 260 -) -evaluation_metrics_binary_df = pd.DataFrame(evaluation_metrics_binary, index=[0]) -base_evaluation_metrics_binary_df = evaluation_metrics_binary_df[ - ["accuracy", "precision", "recall", "f1"] -] -# Conf matrix -first_part = [ - evaluation_metrics_binary["true_positive"], - evaluation_metrics_binary["false_positive"], -] -second_part = [ - evaluation_metrics_binary["false_negative"], - evaluation_metrics_binary["true_negative"], -] -cm = np.array([first_part, second_part]) - -# ----------------------------------- -overview, performance, drifting, inferences, monitors, alerts = st.tabs( - ["Overview", "Performance", "Drifting", "Inferences", "Monitors", "Alerts"] -) -model_option, models_list, checkbox, wb = create_sidebar() - -if checkbox: - model = get_model_from_name(models_list, model_option) - - if model: - pred_column = model["target_column"] - model_id = model["id"] - model_type = model["type"] - # TODO: Need to connect this one with the db. - with overview: - create_overview_tab(model, cm, base_evaluation_metrics_binary_df) - - with performance: - create_performance_tab(wb, model_id, model_type) - - with drifting: - create_drift_tab(wb, model_id) - - with inferences: - create_inferences_tab(wb, model_id, pred_column) - - with monitors: - create_monitors_tab(wb, model_id, model_type) - - with alerts: - create_alerts_tab(wb, model_id) diff --git a/whitebox/streamlit/cards.py b/whitebox/streamlit/cards.py deleted file mode 100644 index cd6efdd..0000000 --- a/whitebox/streamlit/cards.py +++ /dev/null @@ -1,30 +0,0 @@ -import streamlit as st - - -def card1(text1, text2): - st.markdown( - f""" -
-
-

{text1}

-

{text2}

-
-
- """, - unsafe_allow_html=True, - ) - - -def card(text1, text2, text3): - st.markdown( - f""" -
-
-
{text1}
-
type: {text2}
-

{text3}

-
-
- """, - unsafe_allow_html=True, - ) diff --git a/whitebox/streamlit/classification_test_data copy.csv b/whitebox/streamlit/classification_test_data copy.csv deleted file mode 100644 index 84d7b17..0000000 --- a/whitebox/streamlit/classification_test_data copy.csv +++ /dev/null @@ -1,11 +0,0 @@ -y_testing_binary,y_prediction_binary,y_testing_multi,y_prediction_multi -0,0,0,1 -0,0,2,2 -0,1,0,0 -1,1,1,1 -0,0,2,0 -1,0,1,1 -1,0,1,0 -1,1,2,2 -0,1,0,1 -1,1,1,1 diff --git a/whitebox/streamlit/classification_test_data.csv b/whitebox/streamlit/classification_test_data.csv deleted file mode 100644 index 84d7b17..0000000 --- a/whitebox/streamlit/classification_test_data.csv +++ /dev/null @@ -1,11 +0,0 @@ -y_testing_binary,y_prediction_binary,y_testing_multi,y_prediction_multi -0,0,0,1 -0,0,2,2 -0,1,0,0 -1,1,1,1 -0,0,2,0 -1,0,1,1 -1,0,1,0 -1,1,2,2 -0,1,0,1 -1,1,1,1 diff --git a/whitebox/streamlit/config/config_readme.toml b/whitebox/streamlit/config/config_readme.toml deleted file mode 100644 index 40ab4cd..0000000 --- a/whitebox/streamlit/config/config_readme.toml +++ /dev/null @@ -1,57 +0,0 @@ -[app] -app_intro = """ -This streamlit app allows you to visualise and monitor the results and all related analytics produced by Whitebox. - -All you have to do is to select your desired model which is stored in your database and then navigate through the different tabs. -""" -[tooltips] -model_option = """ -These are the models that are saved in your connected database. -""" -overview_performance = """ -These are the model's performance metrics after it was trained with the training data.  -""" -monitor_name = """ -Add your preference name for the new monitor.  -""" -monitor_use_case = """ -Add your preference type of monitor.  -""" -stat_thresh_monitor = """ -Enter a value between 0 and 1 with max two decimal points, e.g. 0.25.  -""" -alert_trig_monitor = """ -Alert will trigger if below the lower threshold or above the upper threshold.  -""" -alert_severity_monitor = """ -What alert severity should be associated with the notifications being sent? -""" -notifications_monitor = """ -Notifications will be sent via email. Please provide your email below: -""" -host = """ -Your host and port combined in a url. -""" -api_key = """ -Your api key as was created from the initialisation of Whitebox. -""" -model_name = """ -Your desired model name. -""" -model_description = """ -Your desired model description. -""" -model_type = """ -Your desired model type. -""" -target_column = """ -Your desired target column as depicted in your data. -""" -granularity_amount = """ -Your data's granularity amount (must be an integer). -""" -granularity_type = """ -Your data's granularity type. -""" -[links] -repo = "https://github.com/squaredev-io/whitebox" \ No newline at end of file diff --git a/whitebox/streamlit/mock/alerts.json b/whitebox/streamlit/mock/alerts.json deleted file mode 100644 index 1b31fa7..0000000 --- a/whitebox/streamlit/mock/alerts.json +++ /dev/null @@ -1,20 +0,0 @@ -[ - { - "id": 44, - "model_monitor_id": 1, - "timestamp": "2023-03-14", - "description": "fell below the threshold" - }, - { - "id": 45, - "model_monitor_id": 1, - "timestamp": "2023-03-16", - "description": "fell below the threshold" - }, - { - "id": 46, - "model_monitor_id": 3, - "timestamp": "2023-03-16", - "description": "fell increasinlgy below the threshold" - } -] \ No newline at end of file diff --git a/whitebox/streamlit/mock/drift.json b/whitebox/streamlit/mock/drift.json deleted file mode 100644 index 47df3dc..0000000 --- a/whitebox/streamlit/mock/drift.json +++ /dev/null @@ -1,188 +0,0 @@ -[ - { - "id": "b3381df8-56b4-43f6-aa72-523427b7d723", - "created_at": "2023-02-09T14:33:00.456240", - "updated_at": "2023-02-09T14:33:00.456240", - "model_id": "83539c2b-579f-4a2c-b7ba-02d31c9408d8", - "timestamp": "2022-12-22T00:00:00", - "concept_drift_summary": { - "concept_drift_summary": { - "column_name": "target", - "column_type": "cat", - "stattest_name": "chi-square p_value", - "drift_score": 0.3896307449384165, - "drift_detected": false, - "stattest_threshold": 0.05 - }, - "column_correlation": { - "column_name": "target", - "current": {}, - "reference": {} - } - }, - "data_drift_summary": { - "number_of_columns": 4, - "number_of_drifted_columns": 0, - "share_of_drifted_columns": 0.0, - "dataset_drift": false, - "drift_by_columns": { - "petal length (cm)": { - "column_name": "petal length (cm)", - "column_type": "num", - "stattest_name": "K-S p_value", - "drift_score": 0.7588302830810655, - "drift_detected": true, - "threshold": 0.05 - }, - "petal width (cm)": { - "column_name": "petal width (cm)", - "column_type": "num", - "stattest_name": "K-S p_value", - "drift_score": 0.7588302830810655, - "drift_detected": false, - "threshold": 0.05 - }, - "sepal length (cm)": { - "column_name": "sepal length (cm)", - "column_type": "num", - "stattest_name": "K-S p_value", - "drift_score": 0.8382225197478262, - "drift_detected": false, - "threshold": 0.05 - }, - "sepal width (cm)": { - "column_name": "sepal width (cm)", - "column_type": "num", - "stattest_name": "K-S p_value", - "drift_score": 0.9540265350498883, - "drift_detected": false, - "threshold": 0.05 - } - } - } - }, - { - "id": "6f74de30-9a5c-4a88-9e02-0a7d8777e242", - "created_at": "2023-02-09T14:36:00.506190", - "updated_at": "2023-02-09T14:36:00.506190", - "model_id": "83539c2b-579f-4a2c-b7ba-02d31c9408d8", - "timestamp": "2022-12-23T00:00:00", - "concept_drift_summary": { - "concept_drift_summary": { - "column_name": "target", - "column_type": "cat", - "stattest_name": "chi-square p_value", - "drift_score": 0.6738389777139696, - "drift_detected": false, - "stattest_threshold": 0.05 - }, - "column_correlation": { - "column_name": "target", - "current": {}, - "reference": {} - } - }, - "data_drift_summary": { - "number_of_columns": 4, - "number_of_drifted_columns": 0, - "share_of_drifted_columns": 0.0, - "dataset_drift": false, - "drift_by_columns": { - "petal length (cm)": { - "column_name": "petal length (cm)", - "column_type": "num", - "stattest_name": "K-S p_value", - "drift_score": 0.9797880018857934, - "drift_detected": false, - "threshold": 0.05 - }, - "petal width (cm)": { - "column_name": "petal width (cm)", - "column_type": "num", - "stattest_name": "K-S p_value", - "drift_score": 0.9325945507895383, - "drift_detected": false, - "threshold": 0.05 - }, - "sepal length (cm)": { - "column_name": "sepal length (cm)", - "column_type": "num", - "stattest_name": "K-S p_value", - "drift_score": 0.8957682983065736, - "drift_detected": false, - "threshold": 0.05 - }, - "sepal width (cm)": { - "column_name": "sepal width (cm)", - "column_type": "num", - "stattest_name": "K-S p_value", - "drift_score": 0.7450045755465691, - "drift_detected": false, - "threshold": 0.05 - } - } - } - }, - { - "id": "78453a39-faa0-4aa7-bb30-8e4e1b91fef4", - "created_at": "2023-02-09T14:39:00.608156", - "updated_at": "2023-02-09T14:39:00.608156", - "model_id": "83539c2b-579f-4a2c-b7ba-02d31c9408d8", - "timestamp": "2022-12-24T00:00:00", - "concept_drift_summary": { - "concept_drift_summary": { - "column_name": "target", - "column_type": "cat", - "stattest_name": "chi-square p_value", - "drift_score": 0.32175216781613775, - "drift_detected": false, - "stattest_threshold": 0.05 - }, - "column_correlation": { - "column_name": "target", - "current": {}, - "reference": {} - } - }, - "data_drift_summary": { - "number_of_columns": 4, - "number_of_drifted_columns": 0, - "share_of_drifted_columns": 0.0, - "dataset_drift": false, - "drift_by_columns": { - "petal length (cm)": { - "column_name": "petal length (cm)", - "column_type": "num", - "stattest_name": "K-S p_value", - "drift_score": 0.692577574430372, - "drift_detected": false, - "threshold": 0.05 - }, - "petal width (cm)": { - "column_name": "petal width (cm)", - "column_type": "num", - "stattest_name": "K-S p_value", - "drift_score": 0.692577574430372, - "drift_detected": false, - "threshold": 0.05 - }, - "sepal length (cm)": { - "column_name": "sepal length (cm)", - "column_type": "num", - "stattest_name": "K-S p_value", - "drift_score": 0.8799325977736985, - "drift_detected": false, - "threshold": 0.05 - }, - "sepal width (cm)": { - "column_name": "sepal width (cm)", - "column_type": "num", - "stattest_name": "K-S p_value", - "drift_score": 0.1333377862549532, - "drift_detected": false, - "threshold": 0.05 - } - } - } - } -] \ No newline at end of file diff --git a/whitebox/streamlit/mock/inferences.json b/whitebox/streamlit/mock/inferences.json deleted file mode 100644 index 21dda2a..0000000 --- a/whitebox/streamlit/mock/inferences.json +++ /dev/null @@ -1,142 +0,0 @@ -[ - { - "id": 0, - "model_id": "test", - "nonprocessed": { - "first_col": 5.1, - "sec_col": 3.5, - "third_col": 1.4, - "four_col": 0.2, - "target": 0 - }, - "processed": null, - "timestamp": "2023-2-14", - "actual": 0 - }, - { - "id": 1, - "model_id": "test", - "nonprocessed": { - "first_col": 4.9, - "sec_col": 3.0, - "third_col": 1.4, - "four_col": 0.2, - "target": 0 - }, - "processed": null, - "timestamp": "2023-2-14", - "actual": 0 - }, - { - "id": 2, - "model_id": "test", - "nonprocessed": { - "first_col": 4.7, - "sec_col": 3.2, - "third_col": 1.3, - "four_col": 0.2, - "target": 0 - }, - "processed": null, - "timestamp": "2023-2-14", - "actual": 0 - }, - { - "id": 3, - "model_id": "test", - "nonprocessed": { - "first_col": 4.6, - "sec_col": 3.1, - "third_col": 1.5, - "four_col": 0.2, - "target": 1 - }, - "processed": null, - "timestamp": "2023-2-14", - "actual": 0 - }, - { - "id": 4, - "model_id": "test", - "nonprocessed": { - "first_col": 5.0, - "sec_col": 3.6, - "third_col": 1.4, - "four_col": 0.2, - "target": 0 - }, - "processed": null, - "timestamp": "2023-2-14", - "actual": 0 - }, - { - "id": 5, - "model_id": "test", - "nonprocessed": { - "first_col": 5.4, - "sec_col": 3.9, - "third_col": 1.7, - "four_col": 0.4, - "target": 1 - }, - "processed": null, - "timestamp": "2023-2-14", - "actual": 0 - }, - { - "id": 6, - "model_id": "test", - "nonprocessed": { - "first_col": 4.6, - "sec_col": 3.4, - "third_col": 1.4, - "four_col": 0.3, - "target": 0 - }, - "processed": null, - "timestamp": "2023-2-14", - "actual": 0 - }, - { - "id": 7, - "model_id": "test", - "nonprocessed": { - "first_col": 5.0, - "sec_col": 3.4, - "third_col": 1.5, - "four_col": 0.2, - "target": 0 - }, - "processed": null, - "timestamp": "2023-2-14", - "actual": 0 - }, - { - "id": 8, - "model_id": "test", - "nonprocessed": { - "first_col": 4.4, - "sec_col": 2.9, - "third_col": 1.4, - "four_col": 0.2, - "target": 1 - }, - "processed": null, - "timestamp": "2023-2-14", - "actual": 0 - }, - { - "id": 9, - "model_id": "test", - "nonprocessed": { - "first_col": 4.9, - "sec_col": 3.1, - "third_col": 1.5, - "four_col": 0.1, - "target": 0 - }, - "processed": null, - "timestamp": "2023-2-14", - "actual": 0 - } -] \ No newline at end of file diff --git a/whitebox/streamlit/mock/monitors.json b/whitebox/streamlit/mock/monitors.json deleted file mode 100644 index 89520f0..0000000 --- a/whitebox/streamlit/mock/monitors.json +++ /dev/null @@ -1,35 +0,0 @@ -[ - { - "id": 1, - "model_id": "model_test", - "name": "my_custom_metric", - "status": "active", - "metric": "accuracy", - "severity": "low", - "email": "test@squaredev.io", - "lower_threshold": 0.7, - "updated_at": "2023-02-16" - }, - { - "id": 2, - "model_id": "model_test", - "name": "another_metric", - "status": "active", - "metric": "data_drift", - "severity": "low", - "email": "test@squaredev.io", - "lower_threshold": 0.5, - "updated_at": "2023-02-14" - }, - { - "id": 3, - "model_id": "model_test", - "name": "check this metric", - "status": "active", - "metric": "accuracy", - "severity": "low", - "email": "test@squaredev.io", - "lower_threshold": 0.5, - "updated_at": "2023-02-14" - } -] \ No newline at end of file diff --git a/whitebox/streamlit/mock/performance.json b/whitebox/streamlit/mock/performance.json deleted file mode 100644 index 1e9da4d..0000000 --- a/whitebox/streamlit/mock/performance.json +++ /dev/null @@ -1,131 +0,0 @@ -[ - { - "id": "b4bff1cd-76bd-47e6-8446-4ce690096dac", - "created_at": "2023-02-09T14:33:00.473312", - "updated_at": "2023-02-09T14:33:00.473312", - "accuracy": 0.6, - "precision": { - "micro": 0.6, - "macro": 0.7333333333333334, - "weighted": 0.9199999999999999 - }, - "recall": { - "micro": 0.6, - "macro": 0.7000000000000001, - "weighted": 0.6 - }, - "f1": { - "micro": 0.6, - "macro": 0.5833333333333334, - "weighted": 0.675 - }, - "confusion_matrix": { - "class0": { - "true_negative": 5, - "false_positive": 4, - "false_negative": 0, - "true_positive": 1 - }, - "class1": { - "true_negative": 5, - "false_positive": 0, - "false_negative": 2, - "true_positive": 3 - }, - "class2": { - "true_negative": 6, - "false_positive": 0, - "false_negative": 2, - "true_positive": 2 - } - }, - "model_id": "83539c2b-579f-4a2c-b7ba-02d31c9408d8", - "timestamp": "2022-12-22T00:00:00" - }, - { - "id": "0ffa0e1d-8e8a-4658-8443-7405a9cd6fd5", - "created_at": "2023-02-09T14:36:00.522083", - "updated_at": "2023-02-09T14:36:00.522083", - "accuracy": 0.45, - "precision": { - "micro": 0.45, - "macro": 0.48611111111111116, - "weighted": 0.6125 - }, - "recall": { - "micro": 0.45, - "macro": 0.46296296296296297, - "weighted": 0.45 - }, - "f1": { - "micro": 0.45, - "macro": 0.4222222222222222, - "weighted": 0.5000000000000001 - }, - "confusion_matrix": { - "class0": { - "true_negative": 11, - "false_positive": 7, - "false_negative": 1, - "true_positive": 1 - }, - "class1": { - "true_negative": 10, - "false_positive": 1, - "false_negative": 4, - "true_positive": 5 - }, - "class2": { - "true_negative": 8, - "false_positive": 3, - "false_negative": 6, - "true_positive": 3 - } - }, - "model_id": "83539c2b-579f-4a2c-b7ba-02d31c9408d8", - "timestamp": "2022-12-23T00:00:00" - }, - { - "id": "ca19193b-5c9b-478b-93a7-48c7b08af306", - "created_at": "2023-02-09T14:39:00.618561", - "updated_at": "2023-02-09T14:39:00.618561", - "accuracy": 0.43333333333333335, - "precision": { - "micro": 0.43333333333333335, - "macro": 0.48860398860398857, - "weighted": 0.6921652421652421 - }, - "recall": { - "micro": 0.43333333333333335, - "macro": 0.4447415329768271, - "weighted": 0.43333333333333335 - }, - "f1": { - "micro": 0.43333333333333335, - "macro": 0.389923526765632, - "weighted": 0.5119928025191183 - }, - "confusion_matrix": { - "class0": { - "true_negative": 16, - "false_positive": 12, - "false_negative": 1, - "true_positive": 1 - }, - "class1": { - "true_negative": 12, - "false_positive": 1, - "false_negative": 9, - "true_positive": 8 - }, - "class2": { - "true_negative": 15, - "false_positive": 4, - "false_negative": 7, - "true_positive": 4 - } - }, - "model_id": "83539c2b-579f-4a2c-b7ba-02d31c9408d8", - "timestamp": "2022-12-24T00:00:00" - } -] \ No newline at end of file diff --git a/whitebox/streamlit/mock/t.ipynb b/whitebox/streamlit/mock/t.ipynb deleted file mode 100644 index dbe3d5d..0000000 --- a/whitebox/streamlit/mock/t.ipynb +++ /dev/null @@ -1,435 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 23, - "metadata": {}, - "outputs": [], - "source": [ - "a = [\n", - " {\n", - " \"id\": 1,\n", - " \"model_id\": \"model_test\",\n", - " \"name\": \"my_custom_metric\",\n", - " \"status\": \"active\",\n", - " \"metric\": \"accuracy\",\n", - " \"severity\": \"low\",\n", - " \"email\": \"test@squaredev.io\",\n", - " \"lower_threshold\": 0.7\n", - " },\n", - " {\"id\": 2,\n", - " \"model_id\": \"model_test\",\n", - " \"name\": \"my_custom_metric\",\n", - " \"status\": \"active\",\n", - " \"metric\": \"data_drift\",\n", - " \"severity\": \"low\",\n", - " \"email\": \"test@squaredev.io\",\n", - " \"lower_threshold\": 0.5\n", - " }\n", - "]" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "mo = pd.DataFrame(a)" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": {}, - "outputs": [], - "source": [ - "al = [\n", - " {\n", - " \"id\": 44,\n", - " \"model_monitor_id\": 1,\n", - " \"timestamp\": \"2023-03-14\",\n", - " \"description\": \"fell below the threshold\"\n", - " },\n", - " {\n", - " \"id\": 45,\n", - " \"model_monitor_id\": 1,\n", - " \"timestamp\": \"2023-03-16\",\n", - " \"description\": \"fell below the threshold\"\n", - " }\n", - "]" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idmodel_monitor_idtimestampdescription
04412023-03-14fell below the threshold
14512023-03-16fell below the threshold
\n", - "
" - ], - "text/plain": [ - " id model_monitor_id timestamp description\n", - "0 44 1 2023-03-14 fell below the threshold\n", - "1 45 1 2023-03-16 fell below the threshold" - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import pandas as pd\n", - "df = pd.DataFrame(al)\n", - "df[\"timestamp\"] = pd.to_datetime(df[\"timestamp\"])\n", - "df" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": {}, - "outputs": [], - "source": [ - "def get_recent_alert(alerts_df, timestamp_column):\n", - " '''\n", - " Function that gets alerts dataframe and results on the \n", - " most recent alert row for each unique id\n", - " '''\n", - " # sort the dataframe by 'date' column in descending order\n", - " alerts_df = alerts_df.sort_values(by=timestamp_column, ascending=False)\n", - " # drop duplicates based on 'id' column, keeping only the first occurrence (most recent date)\n", - " alerts_df = alerts_df.drop_duplicates(subset='model_monitor_id', keep='first')\n", - "\n", - " return alerts_df" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": {}, - "outputs": [], - "source": [ - "al = get_recent_alert(df, \"timestamp\")" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idmodel_monitor_idtimestampdescription
14512023-03-16fell below the threshold
\n", - "
" - ], - "text/plain": [ - " id model_monitor_id timestamp description\n", - "1 45 1 2023-03-16 fell below the threshold" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "al" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idmodel_idnamestatusmetricseverityemaillower_threshold
01model_testmy_custom_metricactiveaccuracylowtest@squaredev.io0.7
12model_testmy_custom_metricactivedata_driftlowtest@squaredev.io0.5
\n", - "
" - ], - "text/plain": [ - " id model_id name status metric severity \\\n", - "0 1 model_test my_custom_metric active accuracy low \n", - "1 2 model_test my_custom_metric active data_drift low \n", - "\n", - " email lower_threshold \n", - "0 test@squaredev.io 0.7 \n", - "1 test@squaredev.io 0.5 " - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "mo" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idmodel_idnamestatusmetricseverityemaillower_thresholdmodel_monitor_idtimestampdescription
01model_testmy_custom_metricactiveaccuracylowtest@squaredev.io0.712023-03-16fell below the threshold
\n", - "
" - ], - "text/plain": [ - " id model_id name status metric severity \\\n", - "0 1 model_test my_custom_metric active accuracy low \n", - "\n", - " email lower_threshold model_monitor_id timestamp \\\n", - "0 test@squaredev.io 0.7 1 2023-03-16 \n", - "\n", - " description \n", - "0 fell below the threshold " - ] - }, - "execution_count": 33, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "merged_df = pd.merge(mo, al[[\"model_monitor_id\", \"timestamp\", \"description\"]], left_on='id', right_on=\"model_monitor_id\")\n", - "merged_df" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['my_custom_metric']" - ] - }, - "execution_count": 40, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "merged_df[\"name\"].values.tolist()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": ".venv", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.8.6" - }, - "orig_nbformat": 4, - "vscode": { - "interpreter": { - "hash": "6b8a8ae524dcca06b04542d2d49be160be0f11dd19d43d7b2673d555344c6092" - } - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/whitebox/streamlit/mock_app.py b/whitebox/streamlit/mock_app.py deleted file mode 100644 index 7cd9417..0000000 --- a/whitebox/streamlit/mock_app.py +++ /dev/null @@ -1,123 +0,0 @@ -import numpy as np -import pandas as pd -import streamlit as st -from typing import Dict, Union, List -from matplotlib import pyplot as plt -import json - - -from tabs.drifting import * -from tabs.sidebar import * -from tabs.overview import * -from tabs.performance import * -from tabs.inferences import * -from tabs.monitors import * -from tabs.alerts import * -from cards import * - -st.set_option("deprecation.showPyplotGlobalUse", False) - - -# The below lines are temp until we have the performance metricc functionality -# ---------------------------------------- -def format_evaluation_metrics_binary( - accuracy: float, - precision: float, - recall: float, - f1: float, - tn: int, - fp: int, - fn: int, - tp: int, -) -> Dict[str, Union[int, float]]: - formated_metrics_for_binary = { - "accuracy": accuracy, - "precision": precision, - "recall": recall, - "f1": f1, - "true_negative": tn, - "false_positive": fp, - "false_negative": fn, - "true_positive": tp, - } - - return formated_metrics_for_binary - - -model_names = ["model test", "decision_tree", "random_forest", "custom_tf_model"] - -model = { - "id": "001", - "name": "model test", - "description": "a model for testing visualisations", - "type": "binary", - "target_column": "target", - "labels": {"default": 0, "no_default": 1}, - "created_at": "2022-05-05", - "updated_at": "2022-05-05", -} -evaluation_metrics_binary = format_evaluation_metrics_binary( - 0.64, 0.5, 0.11, 0.72, 1200, 600, 840, 260 -) -evaluation_metrics_binary_df = pd.DataFrame(evaluation_metrics_binary, index=[0]) -base_evaluation_metrics_binary_df = evaluation_metrics_binary_df[ - ["accuracy", "precision", "recall", "f1"] -] -# Conf matrix -first_part = [ - evaluation_metrics_binary["true_positive"], - evaluation_metrics_binary["false_positive"], -] -second_part = [ - evaluation_metrics_binary["false_negative"], - evaluation_metrics_binary["true_negative"], -] -cm = np.array([first_part, second_part]) - -f = open("whitebox/streamlit/mock/drift.json") -drift = json.load(f) -f.close() - -f = open("whitebox/streamlit/mock/performance.json") -perf = json.load(f) -f.close() - -f = open("whitebox/streamlit/mock/inferences.json") -inf = json.load(f) -f.close() - -f = open("whitebox/streamlit/mock/monitors.json") -mon = json.load(f) -f.close() - -f = open("whitebox/streamlit/mock/alerts.json") -al = json.load(f) -f.close() - -pred_column = model["prediction"] - -# ----------------------------------- -overview, performance, drifting, inferences, monitors, alerts = st.tabs( - ["Overview", "Performance", "Drifting", "Inferences", "Monitors", "Alerts"] -) - -model_option, button = create_sidebar(model_names) - -if button: - with overview: - create_overview_tab(model, cm, base_evaluation_metrics_binary_df) - - with performance: - create_performance_tab(perf, model) - - with drifting: - create_drift_tab(drift) - - with inferences: - create_inferences_tab(inf, pred_column) - - with monitors: - create_monitors_tab(mon, al) - - with alerts: - create_alerts_tab(al, mon) diff --git a/whitebox/streamlit/references/logo.png b/whitebox/streamlit/references/logo.png deleted file mode 100644 index bb472a2..0000000 Binary files a/whitebox/streamlit/references/logo.png and /dev/null differ diff --git a/whitebox/streamlit/references/whitebox2.png b/whitebox/streamlit/references/whitebox2.png deleted file mode 100644 index f61f830..0000000 Binary files a/whitebox/streamlit/references/whitebox2.png and /dev/null differ diff --git a/whitebox/streamlit/tabs/alerts.py b/whitebox/streamlit/tabs/alerts.py deleted file mode 100644 index 8614143..0000000 --- a/whitebox/streamlit/tabs/alerts.py +++ /dev/null @@ -1,128 +0,0 @@ -import streamlit as st -import pandas as pd -from utils.export import structure -from utils.transformation import combine_monitor_with_alert_for_alerts - -from pandas.api.types import ( - is_categorical_dtype, - is_datetime64_any_dtype, - is_numeric_dtype, - is_object_dtype, -) - -import os, sys - -sys.path.insert(0, os.path.abspath("./")) -from whitebox import Whitebox - - -def filter_dataframe(df: pd.DataFrame) -> pd.DataFrame: - """ - Creates filtering on top of a dataframe - - Args: - df (pd.DataFrame): Input dataframe - - Returns: - pd.DataFrame: Filtered dataframe - """ - filter_checkbox = st.checkbox("Add filters") - - if not filter_checkbox: - return df - - df = df.copy() - - # Convert datetimes into a standard format (datetime with no timezone) - for col in df.columns: - if is_object_dtype(df[col]): - try: - df[col] = pd.to_datetime(df[col]) - except Exception: - pass - - if is_datetime64_any_dtype(df[col]): - df[col] = df[col].dt.tz_localize(None) - - filter_container = st.container() - - with filter_container: - filtering_columns = st.multiselect("Filter dataframe on", df.columns) - - for column in filtering_columns: - left, right = st.columns((1, 20)) - - # Treat columns with < 10 unique values as categorical - if is_categorical_dtype(df[column]) or df[column].nunique() < 10: - user_cat_input = right.multiselect( - f"Values for {column}", - df[column].unique(), - default=list(df[column].unique()), - ) - df = df[df[column].isin(user_cat_input)] - - elif is_numeric_dtype(df[column]): - _min = float(df[column].min()) - _max = float(df[column].max()) - step = (_max - _min) / 100 - user_num_input = right.slider( - f"Values for {column}", - min_value=_min, - max_value=_max, - value=(_min, _max), - step=step, - ) - df = df[df[column].between(*user_num_input)] - - elif is_datetime64_any_dtype(df[column]): - user_date_input = right.date_input( - f"Values for {column}", - value=( - df[column].min(), - df[column].max(), - ), - ) - - if len(user_date_input) == 2: - user_date_input = tuple(map(pd.to_datetime, user_date_input)) - start_date, end_date = user_date_input - df = df.loc[df[column].between(start_date, end_date)] - - else: - user_text_input = right.text_input( - f"Substring or regex in {column}", - ) - - if user_text_input: - df = df[df[column].astype(str).str.contains(user_text_input)] - - return df - - -def create_alerts_tab(wb: Whitebox, model_id: str) -> None: - """ - Creates the alerts tab in Streamlit. - A table with all the alerts is visualised. - """ - - with st.spinner("Loading alerts..."): - structure() - monitors = wb.get_model_monitors(model_id) - alerts = wb.get_alerts(model_id) - total_alerts = len(alerts) - st.title("Alerts (" + str(total_alerts) + ")") - - alerts_df = pd.DataFrame(alerts) - monitors_df = pd.DataFrame(monitors) - - if (len(alerts_df) > 0) & (len(monitors_df) > 0): - merged_df = combine_monitor_with_alert_for_alerts(monitors_df, alerts_df) - show_df = merged_df[["timestamp", "metric", "description", "name"]] - show_df.columns = [ - "Anomaly timestamp", - "Metric", - "Anomaly details", - "Monitor Name", - ] - filtered_df = filter_dataframe(show_df) - st.dataframe(filtered_df, width=1200, height=300) diff --git a/whitebox/streamlit/tabs/drifting.py b/whitebox/streamlit/tabs/drifting.py deleted file mode 100644 index 7702edd..0000000 --- a/whitebox/streamlit/tabs/drifting.py +++ /dev/null @@ -1,71 +0,0 @@ -import streamlit as st -import plotly.express as px - -from utils.transformation import export_drift_timeseries -from utils.export import structure - -import os, sys - -sys.path.insert(0, os.path.abspath("./")) - -from whitebox import Whitebox - - -def create_drift_tab(wb: Whitebox, model_id: str) -> None: - """ - Creates the dift tab in Streamlit. - - Gets the drift object and plots via streamlit the drifting graphs. - It creates 2 tabs of graphs, one with the combined drifts of variables - and one tab with graphs for each one variable. - """ - with st.spinner("Loading model drift..."): - structure() - st.title("Drifting") - drift = wb.get_drifting_metrics(model_id) - # Isolate timeseties parts from the drift object - value_df, drift_df = export_drift_timeseries(drift) - # Keep the columns except the time/index - df_columns = value_df.drop("index", axis=1).columns - # We have 2 different representations - common_tab, sep_tab = st.tabs( - ["Common representation", "Separeted representation"] - ) - - with sep_tab: - # Create a graph for each column/variable - for column in df_columns: - # Check if we have drift in order to mention it (as a subtitle) - drift_detected = (drift_df[[column]] == True).any()[0] - viz_df = value_df[[column, "index"]] - viz_df.columns = ["drift_score", "time"] - subtitle = "" - - if drift_detected: - subtitle = "Drift detected" - - fig = px.line( - viz_df, - x="time", - y="drift_score", - title=f"{column}
{subtitle}", - ) - st.plotly_chart(fig) - - with common_tab: - # If dift is detected in at least one column/variable it - # mentions drift as a whole - drift_detected = True in drift_df.values - subtitle = "" - - if drift_detected: - subtitle = "Drift detected" - - fig = px.line( - value_df, - x="index", - y=df_columns, - title=f"All variables
{subtitle}", - markers=True, - ) - st.plotly_chart(fig) diff --git a/whitebox/streamlit/tabs/inferences.py b/whitebox/streamlit/tabs/inferences.py deleted file mode 100644 index 0df80ad..0000000 --- a/whitebox/streamlit/tabs/inferences.py +++ /dev/null @@ -1,72 +0,0 @@ -import streamlit as st -import pandas as pd -from utils.transformation import convert_inference_to_df -from utils.export import structure -import time - -import os, sys - -sys.path.insert(0, os.path.abspath("./")) - -from whitebox import Whitebox - - -@st.cache_data(ttl=300) -def highlight_rows(row: pd.DataFrame, pred_column: str): - """ - Part of styling function of dataframe. - It highlights the rows where actual is inequal to to prediction - """ - actual = row.loc["actual"] - pred = row.loc[pred_column] - if actual != pred: - color = "#8FC4C7" - else: - color = "" - - return ["background-color: {}".format(color) for r in row] - - -def viz_inference_df(inf_df: pd.DataFrame, pred_column: str): - """ - Visualises the highlighted dataframe in Streamlit - """ - # Style and mark the columns when actual is not equal to prediction - inf_df = inf_df.style.apply(lambda x: highlight_rows(x, pred_column), axis=1) - st.dataframe(inf_df, width=1200, height=390) - - -def create_inferences_tab(wb: Whitebox, model_id: str, pred_column: str) -> None: - """ - Creates the Inferences tab in Streamlit. - It visualises the dataframe of the inferences and also spawns - the explanation part based on explainability. - """ - with st.spinner("Loading inferences..."): - structure() - st.title("Inferences") - inf = wb.get_inferences(model_id) - - if inf: - inf_df = convert_inference_to_df(inf, pred_column) - - explain = st.checkbox("Explain inferences") - if explain: - col1, col2 = st.columns(2) - - with col1: - # TODO: Add filter for dates (eg. Show data from 'last month') - viz_inference_df(inf_df, pred_column) - - with col2: - text_input = st.text_input( - "Explain an inference based on id:", - placeholder="an inference id", - ) - - if text_input: - with st.spinner("Loading explanations for id: " + text_input): - time.sleep(8) - - else: - viz_inference_df(inf_df, pred_column) diff --git a/whitebox/streamlit/tabs/monitors.py b/whitebox/streamlit/tabs/monitors.py deleted file mode 100644 index c908da7..0000000 --- a/whitebox/streamlit/tabs/monitors.py +++ /dev/null @@ -1,227 +0,0 @@ -from typing import List -import streamlit as st -import pandas as pd -from utils.export import structure -from utils.transformation import ( - get_recent_alert, - combine_monitor_with_alert_for_monitors, -) -from utils.load import load_config -from utils.export import text_markdown - -import os, sys -from whitebox.entities import ModelMonitor - -sys.path.insert(0, os.path.abspath("./")) - -from whitebox import Whitebox - - -def add_new_monitor(wb, model_id, model_type) -> None: - """ - Spawns the section of the addition of a new monitor - """ - readme = load_config("config_readme.toml") - new_monitor_name = st.text_input( - "Monitor name", - max_chars=30, - help=readme["tooltips"]["monitor_name"], - placeholder="Model name", - ) - if new_monitor_name: - # TODO: To include "Data Quality" in the future - monitor_option = st.selectbox( - "Select use case", - ("Drift", "Model performance"), - help=readme["tooltips"]["monitor_use_case"], - ) - if monitor_option == "Model performance": - if (model_type == "binary") | (model_type == "multi_class"): - metric_option = st.selectbox( - "Select metric", - ("accuracy", "precision", "recall", "f1"), - ) - else: - metric_option = st.selectbox( - "Select metric", - ("r_square", "mean_squared_error", "mean_absolute_error"), - ) - else: - metric_option = st.selectbox( - "Select metric", - ("data_drift", "concept_drift"), - ) - - monitor_option_check = st.checkbox("Select static threshold") - - if monitor_option_check: - st.write( - text_markdown( - readme["tooltips"]["alert_trig_monitor"], "#525462", "12px" - ) - ) - lower_threshold = st.number_input( - "Lower threshold", - min_value=0.0, - max_value=1.0, - key="lower", - help=readme["tooltips"]["stat_thresh_monitor"], - ) - # TODO: upper_threshold is not currently being used - upper_threshold = st.number_input( - "Upper threshold", - min_value=0.0, - max_value=1.0, - key="upper", - help=readme["tooltips"]["stat_thresh_monitor"], - ) - threshold_option_check = st.checkbox("Set actions") - - if threshold_option_check: - st.write("Alert severity") - st.write( - text_markdown( - readme["tooltips"]["alert_severity_monitor"], "#525462", "12px" - ) - ) - severity = st.radio( - "Alert severity", - ["low", "medium", "high"], - label_visibility="collapsed", - ) - - st.write("Notifications") - st.write( - text_markdown( - readme["tooltips"]["notifications_monitor"], "#525462", "12px" - ) - ) - email = st.text_input( - "Notifications", - placeholder="Your email...", - label_visibility="collapsed", - ) - - setup_button = st.button("Complete setup") - if setup_button: - new_monitor = wb.create_model_monitor( - model_id=model_id, - name=new_monitor_name, - status="active", - metric=metric_option, - severity=severity, - email=email, - lower_threshold=lower_threshold, - ) - st.write( - f"The new monitor has been created with id: ", - new_monitor["id"], - ) - st.write( - "Please uncheck the 'Add new monitor' checkbox at the top to go back." - ) - - -def update_model_monitor_attribute( - wb: Whitebox, model_monitor_id: str, selected_attribute: str, value: str -) -> bool: - updated_model_monitor = wb.update_model_monitor( - model_monitor_id, **{selected_attribute: value} - ) - st.write( - f"The status of the selected monitors has been updated to {value.capitalize()}!" - ) - - return updated_model_monitor - - -def basic_monitor_page( - wb: Whitebox, - monitor_list: List[ModelMonitor], - show_df: pd.DataFrame, - merged_df: pd.DataFrame = None, -) -> None: - """ - Create the basic monitor page part. - Displays the dataframe of the monitors and adds filters - for activity and inactivity of found monitors. - """ - - st.dataframe(show_df, width=1200, height=300) - if merged_df: - select_box = st.selectbox( - "Search and filter for monitors", merged_df["name"].values.tolist() - ) - else: - merged_df = show_df - select_box = st.selectbox( - "Search and filter for monitors", show_df["Name"].values.tolist() - ) - - if select_box: - filtered_df = show_df[show_df["Name"].isin([select_box])] - st.dataframe(filtered_df, width=1200, height=200) - - monitor = next(filter(lambda x: x["name"] == select_box, monitor_list), None) - - status = st.checkbox("Change the status of the selected monitors") - delete = st.checkbox("Delete monitor") - if status: - status_slider = st.select_slider( - "Select the status of the selected monitor", - ["Active", "", "Inactive"], - value=(""), - ) - - if status_slider == "Active": - update_model_monitor_attribute(wb, monitor["id"], "status", "active") - - elif status_slider == "Inactive": - update_model_monitor_attribute(wb, monitor["id"], "status", "inactive") - if delete: - delete_button = st.button("Delete monitor") - if delete_button: - deleted_model_monitor = wb.delete_model_monitor(monitor["id"]) - st.write(f"The selected monitors has been deleted!") - - -def create_monitors_tab(wb: Whitebox, model_id: str, model_type: str): - """ - Creates the monitors tabs in Streamlit - """ - with st.spinner("Loading monitors..."): - structure() - st.title("Monitors") - monitors = wb.get_model_monitors(model_id) - alerts = wb.get_alerts(model_id) - - monitors_df = pd.DataFrame(monitors) - alerts_df = pd.DataFrame(alerts) - - # We need to find the recent alerts for each monitor - # then we need them to get their decriptions to show into the - # monitors tab - recent_alerts_df = get_recent_alert(alerts_df) - if len(monitors_df) > 0: - if len(recent_alerts_df) > 0: - merged_df = combine_monitor_with_alert_for_monitors( - monitors_df, recent_alerts_df - ) - show_df = merged_df[["status", "name", "updated_at", "description"]] - show_df.columns = ["Status", "Name", "Last update", "Anomaly activity"] - else: - show_df = monitors_df[["status", "name", "updated_at"]] - show_df.columns = ["Status", "Name", "Last update"] - - add_new_monitor_check = st.checkbox( - "Add new monitor", - key="add", - ) - if add_new_monitor_check: - add_new_monitor(wb, model_id, model_type) - else: - if len(monitors_df) > 0: - if len(recent_alerts_df) > 0: - basic_monitor_page(wb, monitors, show_df, merged_df) - else: - basic_monitor_page(wb, monitors, show_df) diff --git a/whitebox/streamlit/tabs/overview.py b/whitebox/streamlit/tabs/overview.py deleted file mode 100644 index 0dff82c..0000000 --- a/whitebox/streamlit/tabs/overview.py +++ /dev/null @@ -1,110 +0,0 @@ -import streamlit as st -from matplotlib import pyplot as plt -import pandas as pd -from numpy import ndarray -from sklearn.metrics import ConfusionMatrixDisplay -from cards import * -from utils.export import structure -from utils.load import load_config - -import os, sys - -sys.path.insert(0, os.path.abspath("./")) -from whitebox.schemas.model import Model - - -# TODO: Need to connect this one with the db. -# Currently one shot running for training data is not supported! -def create_classification_performance_metrics( - base_evaluation_metrics: pd.DataFrame, -) -> None: - """ - Create performance metrics visualisation for classification model in Streamlit - """ - col1, col2, col3, col4 = st.columns(4) - col1.metric( - label="Accuracy", - value=base_evaluation_metrics["accuracy"].iloc[0], - ) - - col2.metric( - label="Precision", - value=base_evaluation_metrics["precision"].iloc[0], - ) - - col3.metric( - label="Recall", - value=base_evaluation_metrics["recall"].iloc[0], - ) - - col4.metric( - label="F1", - value=base_evaluation_metrics["f1"].iloc[0], - ) - - -def create_regression_performance_metrics( - base_evaluation_metrics: pd.DataFrame, -) -> None: - """ - Create performance metrics visualisation for regression model in Streamlit - """ - col1, col2, col3 = st.columns(3) - col1.metric( - label="R2", - value=base_evaluation_metrics["r_square"].iloc[0], - ) - - col2.metric( - label="MSE", - value=base_evaluation_metrics["mean_squared_error"].iloc[0], - ) - - col3.metric( - label="MAE", - value=base_evaluation_metrics["mean_absolute_error"].iloc[0], - ) - - -def plot_confusion_matrix(confusion_matrix: ndarray, model: Model): - st.header("Confusion matrix") - - if model["labels"]: - display_labels = list(model["labels"].values()) - else: - display_labels = None - - disp = ConfusionMatrixDisplay( - confusion_matrix=confusion_matrix, - display_labels=display_labels, - ) - fig, ax = plt.subplots(figsize=(5, 5)) - disp.plot(ax=ax) - st.pyplot() - - -def create_overview_tab( - model: Model, confusion_matrix: ndarray, base_evaluation_metrics: pd.DataFrame -) -> None: - """ - Creates the overview tab in Streamlit - """ - with st.spinner("Loading overview of the model..."): - readme = load_config("config_readme.toml") - structure() - st.title("Overview") - st.write(card(model["name"], model["type"], model["description"])) - st.header("Performance") - - with st.expander("See explanation"): - st.write(readme["tooltips"]["overview_performance"]) - - if model["type"] == "binary": - create_classification_performance_metrics(base_evaluation_metrics) - plot_confusion_matrix(confusion_matrix, model) - - elif model["type"] == "multi_class": - create_classification_performance_metrics(base_evaluation_metrics) - - elif model["type"] == "regression": - create_regression_performance_metrics(base_evaluation_metrics) diff --git a/whitebox/streamlit/tabs/performance.py b/whitebox/streamlit/tabs/performance.py deleted file mode 100644 index 7c702b4..0000000 --- a/whitebox/streamlit/tabs/performance.py +++ /dev/null @@ -1,60 +0,0 @@ -import streamlit as st -import pandas as pd -import numpy as np -from utils.export import structure -from utils.transformation import ( - get_dataframe_from_classification_performance_metrics, - get_dataframe_from_regression_performance_metrics, -) -from utils.graphs import create_line_graph - -import os, sys - -sys.path.insert(0, os.path.abspath("./")) -from whitebox import Whitebox - - -def create_performance_graphs(performance_df: pd.DataFrame, perf_column: str) -> None: - """ - Creates a graph based on a performance metric - """ - viz_df = performance_df[[perf_column, "timestamp"]] - viz_df.columns = ["score (%)", "time"] - mean_score = round(np.mean(viz_df["score (%)"]) * 100, 2) - subtitle = str(mean_score) + " %" - create_line_graph(viz_df, "time", "score (%)", perf_column, subtitle, 400, 380) - - -def create_performance_tab(wb: Whitebox, model_id: str, model_type: str) -> None: - """ - Creates the performance tab in Streamlit - """ - - with st.spinner("Loading performance of the model..."): - structure() - st.title("Performance") - performance = wb.get_performance_metrics(model_id) - - if performance: - # Set the graphs in two columns (side by side) - col1, col2 = st.columns(2) - - if (model_type == "binary") | (model_type == "multi_class"): - performance_df = get_dataframe_from_classification_performance_metrics( - performance - ) - else: - # For now the only case is regression - performance_df = get_dataframe_from_regression_performance_metrics( - performance - ) - # Need to keep only the metrics columns to be visualised as separeted graphs - perf_columns = performance_df.drop("timestamp", axis=1).columns - - for i in range(len(perf_columns)): - if (i % 2) == 0: - with col1: - create_performance_graphs(performance_df, perf_columns[i]) - else: - with col2: - create_performance_graphs(performance_df, perf_columns[i]) diff --git a/whitebox/streamlit/tabs/sidebar.py b/whitebox/streamlit/tabs/sidebar.py deleted file mode 100644 index af70454..0000000 --- a/whitebox/streamlit/tabs/sidebar.py +++ /dev/null @@ -1,228 +0,0 @@ -import streamlit as st -from utils.load import load_config, load_image, local_css -from utils.export import display_links, center_image -from typing import List, Tuple, Union, Dict, Any -from whitebox.schemas.model import Model -from whitebox import Whitebox -from utils.transformation import get_models_names, get_model_from_name - - -@st.cache_resource -def initialise_whitebox(host_option, api_key_option): - wb = Whitebox( - host=host_option, - api_key=api_key_option, - ) - return wb - - -def create_sidebar() -> ( - Tuple[ - Union[str, None, bool], - Union[List[str], None], - Union[bool, None], - Union[Whitebox, None], - ] -): - """ - Creates the sidebar of a Streamlit app - - Args: - model_names (List[str]): _description_ - - Returns: - Tuple[Union[str, None, bool], bool]: _description_ - """ - # Setup basic structure parts - readme = load_config("config_readme.toml") - center_image() - st.sidebar.image(load_image("logo.png"), width=120) - display_links(readme["links"]["repo"]) - st.sidebar.write( - "Whitebox is an open source E2E ML monitoring platform with edge capabilities that plays nicely with kubernetes." - ) - - # Structure sidebar's additional expander sections - local_css("whitebox/streamlit/utils/style.css") - settings_expander = st.sidebar.expander("Settings", expanded=True) - - with settings_expander: - host_option = st.text_input( - "Paste here your Host URL:", - max_chars=21, - placeholder="http://127.0.0.1:8000", - value="http://127.0.0.1:8000", - help=readme["tooltips"]["host"], - ) - - api_key_option = st.text_input( - "Paste here your API key:", - max_chars=64, - type="password", - placeholder="your api key", - help=readme["tooltips"]["api_key"], - ) - setting_confirmation = st.checkbox("I'm ok, proceed with the above settings") - - # Initialise the other expanders only when the settings are confirmed - if setting_confirmation: - wb = initialise_whitebox(host_option, api_key_option) - - creation_model_expander = st.sidebar.expander("Create model", expanded=False) - with creation_model_expander: - create_new_model(wb, readme) - - selection_model_expander = st.sidebar.expander("Select model", expanded=False) - with selection_model_expander: - models_list = wb.get_models() - model_names = get_models_names(models_list) - model_option = st.selectbox( - "Please select one of the found models below to be visualised:", - model_names, - help=readme["tooltips"]["model_option"], - ) - - modification_model_expander = st.sidebar.expander("Edit model", expanded=False) - with modification_model_expander: - st.write(f"This step will modify the selected model '{model_option}'") - modify_selected_model(wb, models_list, readme, model_option) - - return model_option, models_list, setting_confirmation, wb - else: - return None, None, False, None - - -def create_new_model(wb: Whitebox, readme: Dict[str, Any]): - model_name = st.text_input( - "Enter your model name:", - max_chars=25, - placeholder="Your model name", - help=readme["tooltips"]["model_name"], - ) - - description_name = st.text_input( - "Enter your model description:", - max_chars=25, - placeholder="Your model description", - help=readme["tooltips"]["model_description"], - ) - - model_type_option = create_model_type_select_box(readme, "type_create") - prediction_column_name = st.text_input( - "Enter your target column name", - max_chars=10, - placeholder="Your target column name", - help=readme["tooltips"]["target_column"], - ) - - granularity_amount_name = st.text_input( - "Enter your model granularity amount", - max_chars=5, - placeholder="Your granularity amount", - help=readme["tooltips"]["granularity_amount"], - ) - - granularity_type_option = create_model_granularity_select_box( - readme, "granularity_create" - ) - create_model_button = st.button("Create model") - - if create_model_button: - try: - granularity_amount = float(granularity_amount_name) - # Have a control for geting model name, target column name and correct number in granularity amount - if ( - (len(model_name) > 0) - & (len(prediction_column_name) > 0) - & (granularity_amount.is_integer()) - ): - wb.create_model( - name=model_name, - description=description_name, - type=model_type_option, - target_column=prediction_column_name, - granularity=granularity_amount_name + granularity_type_option, - ) - st.write("The new model has been created!") - except: - pass - - -def create_model_type_select_box(readme: Dict[str, Any], key: str): - model_type_option_list = ["binary", "multi_class", "regression"] - model_type_option = st.selectbox( - "Please select model:", - model_type_option_list, - help=readme["tooltips"]["model_type"], - key=key, - ) - return model_type_option - - -def create_model_granularity_select_box(readme: Dict[str, Any], key: str): - model_granularity_type_option_list = ["Minutes", "Hours", "Days", "Weeks"] - model_granularity_type_option_map = { - "Minutes": "T", - "Hours": "H", - "Days": "D", - "Weeks": "W", - } - - model_granularity_type_option = st.selectbox( - "Please select model granularity type:", - model_granularity_type_option_list, - help=readme["tooltips"]["granularity_type"], - key=key, - ) - model_granularity_type_option_mapped = ( - model_granularity_type_option_map[model_granularity_type_option] or None - ) - - return model_granularity_type_option_mapped - - -def update_model_attribute( - wb: Whitebox, model_id: str, selected_attribute: str, value: str -): - updated_model = wb.update_model(model_id, **{selected_attribute: value}) - st.write(f"Updated the selected model '{selected_attribute}'!") - - return updated_model - - -def modify_selected_model( - wb: Whitebox, - models_list: Union[List[Model], None], - readme: Dict[str, Any], - selected_model_name: str, -): - # Get the id of the previous selected model - selected_model = get_model_from_name(models_list, selected_model_name) - if selected_model: - model_id = selected_model["id"] - - model_option = st.selectbox( - "Please select one of the below options:", - ["delete model", "rename model", "change model description"], - ) - if model_option == "delete model": - delete_button = st.button("Delete model") - if delete_button: - delete_model = wb.delete_model(model_id) - st.write(f"Deleted model '{selected_model}'!") - - elif model_option == "rename model": - new_name_value = st.text_input("Please provide below the new model name:") - rename_button = st.button("Rename model") - if rename_button: - update_model_attribute(wb, model_id, "name", new_name_value) - - elif model_option == "change model description": - new_description_value = st.text_input( - "Please provide below the new model description:" - ) - description_button = st.button("Change model description") - if description_button: - update_model_attribute( - wb, model_id, "description", new_description_value - ) diff --git a/whitebox/streamlit/utils/export.py b/whitebox/streamlit/utils/export.py deleted file mode 100644 index 4a01615..0000000 --- a/whitebox/streamlit/utils/export.py +++ /dev/null @@ -1,46 +0,0 @@ -from typing import Any, Dict, List -import streamlit as st - - -def display_links(repo_link: str) -> None: - """Displays a repository""" - st.sidebar.markdown( - f"Source code", - unsafe_allow_html=True, - ) - - -def structure() -> None: - """Structures the tabs in Streamlit""" - st.markdown( - """ - - """, - unsafe_allow_html=True, - ) - - -def center_image() -> None: - """Markdown for seting logo in the center""" - st.markdown( - """ - - """, - unsafe_allow_html=True, - ) - - -def text_markdown(text: str, color: str, font_size: str) -> None: - """Sets a text in specific color and font size""" - st.markdown( - f'

{text}

', - unsafe_allow_html=True, - ) diff --git a/whitebox/streamlit/utils/graphs.py b/whitebox/streamlit/utils/graphs.py deleted file mode 100644 index 2886062..0000000 --- a/whitebox/streamlit/utils/graphs.py +++ /dev/null @@ -1,25 +0,0 @@ -import streamlit as st -import pandas as pd -import plotly.express as px - - -def create_line_graph( - df: pd.DataFrame, - x: str, - y: str, - title: str, - subtitle: str, - height: float, - width: float, - markers: bool = False, -) -> None: - """Plots a plotly chart in Streamlit""" - fig = px.line( - df, - x=x, - y=y, - title=f"{title}
{subtitle}", - height=height, - width=width, - ) - st.plotly_chart(fig) diff --git a/whitebox/streamlit/utils/load.py b/whitebox/streamlit/utils/load.py deleted file mode 100644 index d325baf..0000000 --- a/whitebox/streamlit/utils/load.py +++ /dev/null @@ -1,49 +0,0 @@ -import streamlit as st -from typing import Tuple, Dict, Any -import toml -from pathlib import Path -from PIL import Image - - -@st.cache_data(ttl=300) -def load_config(config_readme_filename: str) -> Dict[str, Any]: - """Loads configuration files. - - Parameters - ---------- - config_readme_filename : str - Filename of readme configuration file. - - Returns - ------- - dict - Lib configuration file. - dict - Readme configuration file. - """ - config_readme = toml.load( - Path(f"whitebox/streamlit/config/{config_readme_filename}") - ) - return dict(config_readme) - - -@st.cache_data(ttl=300) -def load_image(image_name: str): - """Displays an image. - - Parameters - ---------- - image_name : str - Local path of the image. - - Returns - ------- - Image - Image to be displayed. - """ - return Image.open(f"whitebox/streamlit/references/{image_name}") - - -def local_css(file_name: str): - with open(file_name) as f: - st.markdown(f"", unsafe_allow_html=True) diff --git a/whitebox/streamlit/utils/style.css b/whitebox/streamlit/utils/style.css deleted file mode 100644 index daa9126..0000000 --- a/whitebox/streamlit/utils/style.css +++ /dev/null @@ -1,3 +0,0 @@ -div[data-testid="stExpander"] div[role="button"] p { - font-size: 1.5rem; -} \ No newline at end of file diff --git a/whitebox/streamlit/utils/transformation.py b/whitebox/streamlit/utils/transformation.py deleted file mode 100644 index 0cfda7c..0000000 --- a/whitebox/streamlit/utils/transformation.py +++ /dev/null @@ -1,209 +0,0 @@ -import pandas as pd -from pandas.api.types import is_datetime64_any_dtype -from typing import List, Tuple, Union -import streamlit as st -import os, sys - -sys.path.insert(0, os.path.abspath("./")) - -from whitebox.schemas.driftingMetric import DriftingMetricBase -from whitebox.schemas.performanceMetric import ( - RegressionMetrics, - BinaryClassificationMetrics, - MultiClassificationMetrics, -) -from whitebox.schemas.model import Model -from whitebox.schemas.inferenceRow import InferenceRow - - -@st.cache_data(ttl=300) -def get_models_names(models_list: List[Model]) -> Union[List[str], None]: - """Gets a Model list and returns a list with the models' names""" - if len(models_list) > 0: - models_df = pd.DataFrame(models_list) - return models_df["name"].to_list() - else: - return models_list - - -@st.cache_data(ttl=300) -def get_model_from_name( - models_list: Union[List[Model], None], model_name: str -) -> Union[Model, None]: - """ - Gets a model name and a models List and returns the - entire model object with the corresponding name - """ - if len(models_list) > 0: - models_df = pd.DataFrame(models_list) - model_df = models_df.loc[models_df["name"] == model_name].reset_index(drop=True) - return model_df.to_dict(orient="records")[0] - - -@st.cache_data(ttl=300) -def convert_drift_timeseries_dict_to_pd(timeseries_dict) -> pd.DataFrame: - """Converts the drift timeseries dict to a pandas dataframe object""" - df = pd.DataFrame.from_dict(timeseries_dict, orient="index") - df = df.reset_index() - df["index"] = pd.to_datetime(df["index"]) - - return df - - -@st.cache_data(ttl=300) -def export_drift_timeseries( - drift: List[DriftingMetricBase], -) -> Tuple[pd.DataFrame, pd.DataFrame]: - """Exports the drift object to 2 pandas dataframe objects as timeseries""" - timeseries_value = {} - timeseries_drift = {} - - for i in range(len(drift)): - drift_by_columns = drift[i]["data_drift_summary"]["drift_by_columns"] - temp_col_value_dict = {} - temp_col_drift_dict = {} - for j in drift_by_columns.keys(): - temp_col_value_dict[j] = drift_by_columns[j]["drift_score"] - temp_col_drift_dict[j] = drift_by_columns[j]["drift_detected"] - - timeseries_value[drift[i]["timestamp"]] = temp_col_value_dict - timeseries_drift[drift[i]["timestamp"]] = temp_col_drift_dict - - value_df = convert_drift_timeseries_dict_to_pd(timeseries_value) - drift_df = convert_drift_timeseries_dict_to_pd(timeseries_drift) - - return value_df, drift_df - - -@st.cache_data(ttl=300) -def get_dataframe_from_regression_performance_metrics( - performance: List[RegressionMetrics], -) -> pd.DataFrame: - df = pd.DataFrame(performance) - df = df[["r_square", "mean_squared_error", "mean_absolute_error", "timestamp"]] - - return df - - -@st.cache_data(ttl=300) -def get_dataframe_from_classification_performance_metrics( - performance: Union[ - List[BinaryClassificationMetrics], List[MultiClassificationMetrics], None - ] -) -> Union[pd.DataFrame, None]: - """ - Gets pandas dataframe timeseries out of classification - performance metrics - """ - if performance: - timeseries = {} - for i in range(len(performance)): - acc = performance[i]["accuracy"] - prec = performance[i]["precision"]["macro"] - rec = performance[i]["recall"]["macro"] - f1 = performance[i]["f1"]["macro"] - timeseries[performance[i]["timestamp"]] = { - "accuracy": acc, - "precision": prec, - "recall": rec, - "f1": f1, - } - - performance_df = pd.DataFrame.from_dict( - timeseries, orient="index" - ).reset_index() - performance_df["index"] = pd.to_datetime(performance_df["index"]) - - performance_df = performance_df.rename({"index": "timestamp"}, axis=1) - return performance_df - - -@st.cache_data(ttl=300) -def adjust_inference_column_positions( - inf_df: pd.DataFrame, target_column: str -) -> pd.DataFrame: - """Adjust a dataframe's columns positions""" - df_columns = inf_df.columns - # Find only the feature columns - df_feature_columns = df_columns.drop([target_column, "timestamp", "id", "actual"]) - # Inser the id and timestamp in front positions - df_adj_columns = df_feature_columns.insert(0, "id") - df_adj_columns = df_adj_columns.insert(1, "timestamp") - # Append target column and actual column - df_adj_columns = df_adj_columns.to_list() - df_adj_columns.append(target_column) - df_adj_columns.append("actual") - - return inf_df.reindex(columns=df_adj_columns) - - -@st.cache_data(ttl=300) -def convert_inference_to_df( - inf_list: List[InferenceRow], target_column: str -) -> pd.DataFrame: - """Gets pandas dataframe timeseries out of given inference rows""" - temp_full_dict = {} - for i in range(len(inf_list)): - temp_row_dict = inf_list[i]["nonprocessed"] - temp_row_dict["timestamp"] = inf_list[i]["timestamp"] - temp_row_dict["id"] = inf_list[i]["id"] - temp_row_dict["actual"] = inf_list[i]["actual"] - - temp_full_dict[i] = temp_row_dict - - inf_df = pd.DataFrame.from_dict(temp_full_dict, orient="index") - return adjust_inference_column_positions(inf_df, target_column) - - -@st.cache_data(ttl=300) -def get_recent_alert(alerts_df: pd.DataFrame) -> pd.DataFrame: - """ - Function that gets alerts dataframe and results on the - most recent alert row for each unique id - """ - if len(alerts_df) > 0: - alerts_df["timestamp"] = pd.to_datetime(alerts_df["timestamp"]) - - # datetime with no timezone - if is_datetime64_any_dtype(alerts_df["timestamp"]): - alerts_df["timestamp"] = alerts_df["timestamp"].dt.tz_localize(None) - - # sort the dataframe by 'date' column in descending order - alerts_df = alerts_df.sort_values(by="timestamp", ascending=False) - # drop duplicates based on 'id' column, keeping only the first occurrence (most recent date) - alerts_df = alerts_df.drop_duplicates(subset="model_monitor_id", keep="first") - - return alerts_df.reset_index(drop=True) - else: - return alerts_df - - -@st.cache_data(ttl=300) -def combine_monitor_with_alert_for_alerts( - monitor_df: pd.DataFrame, alert_df: pd.DataFrame -) -> pd.DataFrame: - """Merges two df together based on specific keys and columns for alerts part""" - merged_df = pd.merge( - monitor_df[["id", "metric", "name"]], - alert_df[["model_monitor_id", "timestamp", "description"]], - how="right", - left_on="id", - right_on="model_monitor_id", - ) - return merged_df - - -@st.cache_data(ttl=300) -def combine_monitor_with_alert_for_monitors( - monitor_df: pd.DataFrame, alert_df: pd.DataFrame -) -> pd.DataFrame: - """Merges two df together based on specific keys and columns for monitors part""" - - merged_df = pd.merge( - monitor_df, - alert_df[["model_monitor_id", "description"]], - how="left", - left_on="id", - right_on="model_monitor_id", - ) - return merged_df diff --git a/whitebox/tests/__init__.py b/whitebox/tests/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/whitebox/tests/unit_tests/test_unit.py b/whitebox/tests/unit_tests/test_unit.py deleted file mode 100644 index 63ba3e7..0000000 --- a/whitebox/tests/unit_tests/test_unit.py +++ /dev/null @@ -1,17 +0,0 @@ -from whitebox.cron_tasks.shared import change_timestamp -from datetime import datetime - - -class TestNodes: - def test_round_timestamp(self): - timestamp = datetime(2023, 3, 7, 15, 34, 23) - start_time = datetime(2023, 3, 6) - - assert change_timestamp(timestamp, start_time, 15, "T") == datetime( - 2023, 3, 7, 15, 45 - ) - assert change_timestamp(timestamp, start_time, 5, "H") == datetime( - 2023, 3, 7, 16, 0 - ) - assert change_timestamp(timestamp, start_time, 2, "D") == datetime(2023, 3, 8) - assert change_timestamp(timestamp, start_time, 1, "W") == datetime(2023, 3, 13) diff --git a/whitebox/tests/utils/maps.py b/whitebox/tests/utils/maps.py deleted file mode 100644 index fbf8933..0000000 --- a/whitebox/tests/utils/maps.py +++ /dev/null @@ -1,47 +0,0 @@ -v1_test_order_map = [ - "health", - "models_no_api_key", - "models_wrong_api_key", - "cron_tasks_run_no_models", - "models_create", - "models_get_all", - "models_get", - "models_update", - "cron_tasks_run_no_inference", - "inference_rows_create", - "inference_rows_create_many", - "inference_rows_get_model's_all", - "inference_rows_get", - "dataset_rows_wrong_training_dataset", - "dataset_rows_create", - "dataset_rows_get_model's_all", - "inference_rows_xai", - "model_monitor_create", - "model_monitors_get_model_all", - "model_monitor_update", - "cron_tasks_run_ok", - "performance_metrics_get_model_all", - "drifting_metrics_get_model_all", - "model_integrity_metrics_get_model_all", - "alerts_get", - "inference_rows_create_many_after_x_time", - "cron_tasks_run_after_x_time", - "drifting_metrics_get_binary_model_after_x_time", - "model_monitor_delete", - "models_delete", - # SDK tests - "sdk_init", - "sdk_create_model", - "sdk_get_model", - "sdk_delete_model", - "sdk_log_training_dataset", - "sdk_log_inferences", - "sdk_create_model_monitor", - "sdk_update_model_monitor", - "sdk_delete_model_monitor", - "sdk_get_alerts", - "sdk_get_drifting_metrics", - "sdk_get_descriptive_statistics", - "sdk_get_performance_metrics", - "sdk_get_xai_row", -] diff --git a/whitebox/tests/v1/__init__.py b/whitebox/tests/v1/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/whitebox/tests/v1/conftest.py b/whitebox/tests/v1/conftest.py deleted file mode 100644 index ea3280f..0000000 --- a/whitebox/tests/v1/conftest.py +++ /dev/null @@ -1,72 +0,0 @@ -import shutil -from fastapi.testclient import TestClient -from pytest import fixture -from sqlalchemy.orm import close_all_sessions -from whitebox import crud -from whitebox.core.settings import get_settings -from whitebox.entities.Base import Base -from whitebox.main import app -from whitebox.sdk.whitebox import Whitebox -from whitebox.tests.utils.maps import v1_test_order_map -from whitebox.utils.passwords import decrypt_api_key -from whitebox.core.db import SessionLocal, engine - -settings = get_settings() - - -def get_order_number(task): - return v1_test_order_map.index(task) - - -@fixture(scope="session") -def client(): - with TestClient(app) as client: - yield client - - -@fixture(scope="session") -def api_key(): - db = SessionLocal() - - user = crud.users.get_first_by_filter(db=db, username="admin") - api_key = ( - decrypt_api_key(user.api_key, settings.SECRET_KEY.encode()) - if settings.SECRET_KEY - else user.api_key - ) - - yield api_key - - -@fixture(scope="session", autouse=True) -def drop_db(): - yield - # Removes the folder "test_model" with the models trained during testing - test_model_path = settings.MODEL_PATH - shutil.rmtree(test_model_path) - - close_all_sessions() - # Drops all test database tables - Base.metadata.drop_all(engine) - - -class TestsState: - user: dict = {} - model_binary: dict = {} - model_multi: dict = {} - model_multi_2: dict = {} - model_multi_3: dict = {} - model_regression: dict = {} - inference_row_multi: dict = {} - inference_row_binary: dict = {} - concept_drift_monitor: dict = {} - - -state = TestsState() - - -class TestsSDKState: - wb: Whitebox - - -state_sdk = TestsSDKState() diff --git a/whitebox/tests/v1/mock_data.py b/whitebox/tests/v1/mock_data.py deleted file mode 100644 index 4935b1c..0000000 --- a/whitebox/tests/v1/mock_data.py +++ /dev/null @@ -1,602 +0,0 @@ -from datetime import datetime -from whitebox.schemas.model import ModelType -from sklearn.datasets import load_breast_cancer, load_wine, load_diabetes -import pandas as pd -from copy import deepcopy - -from whitebox.schemas.modelMonitor import AlertSeverity, MonitorMetrics, MonitorStatus - -user_create_payload = dict(username="admin") - -model_binary_create_payload = dict( - name="Model Binary", - description="Model description", - type=ModelType.binary, - labels={"label_1": 0, "label_2": 1}, - target_column="target", - granularity="1D", -) - -model_multi_create_payload = dict( - name="Model 1 Multi", - description="Model 1 description", - type=ModelType.multi_class, - labels={"label_1": 0, "label_2": 1, "label_3": 2}, - target_column="target", - granularity="15T", -) - -model_multi_2_create_payload = dict( - name="Model 2 Multi", - description="Model 2 description", - type=ModelType.multi_class, - labels={"label_1": 0, "label_2": 1, "label_3": 2}, - target_column="target", - granularity="2H", -) - -model_multi_3_create_payload = dict( - name="Model 3", - description="Model 3 description", - type=ModelType.multi_class, - labels={"label_1": 0, "label_2": 1, "label_3": 2}, - target_column="target", - granularity="1W", -) - -model_regression_create_payload = dict( - name="Regression Model", - description="Regression Model description", - type=ModelType.regression, - target_column="target", - granularity="1D", -) - -model_update_payload = dict( - name="Model 2 - categorical", - description="Model 2 description updated", -) - -# dataset rows data for both binary and multiclass models -dataset_rows_single_row_column_payload = [ - { - "nonprocessed": {}, - "processed": {"additionalProp1": 0, "additionalProp2": 0, "target": 1}, - } -] - -dataset_rows_no_prediction_column_payload = [ - { - "nonprocessed": {}, - "processed": {"additionalProp1": 0, "additionalProp2": 0}, - }, - { - "nonprocessed": {}, - "processed": {"additionalProp1": 1, "additionalProp2": 0}, - }, -] - -dataset_rows_one_prediction_value_payload = [ - { - "nonprocessed": {}, - "processed": {"additionalProp1": 0, "additionalProp2": 0, "target": 0}, - }, - { - "nonprocessed": {}, - "processed": {"additionalProp1": 1, "additionalProp2": 0, "target": 0}, - }, -] - - -df_load_multi = load_wine() -df_multi = pd.DataFrame(df_load_multi.data, columns=df_load_multi.feature_names) -df_multi["target"] = df_load_multi.target -df_multi = df_multi.tail(100) - -dict_multi_data = df_multi.to_dict(orient="records") -dataset_rows_create_multi_class_payload = [ - {"processed": x, "nonprocessed": x} for x in dict_multi_data -] - -df_load_binary = load_breast_cancer() -df_binary = pd.DataFrame(df_load_binary.data, columns=df_load_binary.feature_names) -df_binary["target"] = df_load_binary.target -df_binary = df_binary.tail(100) - -dict_binary_data = df_binary.to_dict(orient="records") -dataset_rows_create_binary_payload = [ - {"processed": x, "nonprocessed": x} for x in dict_binary_data -] - -df_load_reg = load_diabetes() -df_reg = pd.DataFrame(df_load_reg.data, columns=df_load_reg.feature_names) -df_reg["target"] = df_load_reg.target -df_reg = df_reg.tail(100) - -dict_reg_data = df_reg.to_dict(orient="records") -dataset_rows_create_reg_payload = [ - {"processed": x, "nonprocessed": x} for x in dict_reg_data -] - -dataset_rows_create_wrong_model_payload = list( - ( - dict( - model_id="wrong_model_id", - nonprocessed={"sex": "male"}, - processed={"sex": 0}, - ), - dict( - model_id="wrong_model_id", - nonprocessed={"sex": "female"}, - processed={"sex": 1}, - ), - ) -) - - -# inference rows data for both binary and multiclaas models -df_multi_inference = df_multi.tail(10) -dict_multi_inferences = df_multi_inference.to_dict(orient="records") -multi_actuals = [0, 2, 0, 1, 2, 1, 1, 2, 0, 1] -inference_row_create_many_multi_payload = [ - { - "timestamp": str(datetime(2023, 3, 6, 12, 13, 25)), - "processed": x, - "nonprocessed": x, - "actual": multi_actuals[i], - } - for i, x in enumerate(dict_multi_inferences) -] - -inference_row_create_single_row_payload = inference_row_create_many_multi_payload[0] -inference_row_create_many_multi_no_actual_payload = deepcopy( - inference_row_create_many_multi_payload -) -for x in inference_row_create_many_multi_no_actual_payload: - del x["actual"] - -inference_row_create_many_multi_mixed_actuals_payload = ( - inference_row_create_many_multi_no_actual_payload - + inference_row_create_many_multi_payload -) - -# This is the body of the request coming from the sdk -df_binary_inference = df_binary.tail(10) -dict_binary_inferences = df_binary_inference.to_dict(orient="records") -binary_actuals = [0, 1, 1, 0, 1, 0, 1, 1, 1, 0] -inference_row_create_many_binary_payload = [ - { - "timestamp": str(datetime(2023, 3, 6, 12, 13, 25)), - "processed": x, - "nonprocessed": x, - "actual": binary_actuals[i], - } - for i, x in enumerate(dict_binary_inferences) -] - -df_reg_inference = df_reg.tail(10) -dict_reg_inferences = df_reg_inference.to_dict(orient="records") -reg_actuals = [103, 20, 50, 64, 48, 198, 105, 138, 250, 57] -inference_row_create_many_reg_payload = [ - { - "timestamp": str(datetime(2023, 3, 6, 12, 13, 25)), - "processed": x, - "nonprocessed": x, - "actual": reg_actuals[i], - } - for i, x in enumerate(dict_reg_inferences) -] - -timestamps = pd.Series(["2022-12-22T12:13:27.879738"] * 10) -mixed_actuals = pd.Series([0, 1, None, 1, 0, None, None, 1, 0, None]) - -model_monitor_accuracy_create_payload = dict( - name="accuracy monitor", - status=MonitorStatus.active, - metric=MonitorMetrics.accuracy, - lower_threshold=0.85, - severity=AlertSeverity.low, - email="example@whitebox.io", -) - -model_monitor_f1_create_payload = dict( - name="f1 Monitor", - status=MonitorStatus.active, - metric=MonitorMetrics.f1, - lower_threshold=0.85, - severity=AlertSeverity.low, - email="example@whitebox.io", -) - -model_monitor_data_drift_create_payload = dict( - name="data drift monitor", - status=MonitorStatus.active, - metric=MonitorMetrics.data_drift, - feature="concavity error", - severity=AlertSeverity.low, - email="example@whitebox.io", -) - -model_monitor_concept_drift_create_payload = dict( - name="concept drift monitor", - status=MonitorStatus.active, - metric=MonitorMetrics.concept_drift, - feature="concavity error", - severity=AlertSeverity.low, - email="example@whitebox.io", -) - -model_monitor_precision_create_payload = dict( - name="precision monitor", - status=MonitorStatus.active, - metric=MonitorMetrics.precision, - lower_threshold=0.85, - severity=AlertSeverity.low, - email="example@whitebox.io", -) - -model_monitor_r_square_create_payload = dict( - name="r_square monitor", - status=MonitorStatus.active, - metric=MonitorMetrics.r_square, - lower_threshold=0.85, - severity=AlertSeverity.low, - email="example@whitebox.io", -) - -model_monitor_no_threshold_create_payload = dict( - name="no threshold monitor", - status=MonitorStatus.active, - metric=MonitorMetrics.r_square, - severity=AlertSeverity.low, - email="example@whitebox.io", -) - -model_monitor_no_feature_create_payload = dict( - name="no feature monitor", - status=MonitorStatus.active, - metric=MonitorMetrics.data_drift, - severity=AlertSeverity.low, - email="example@whitebox.io", -) - -model_monitor_feature_same_as_target_create_payload = dict( - name="feature same as target monitor", - status=MonitorStatus.active, - metric=MonitorMetrics.data_drift, - feature="target", - severity=AlertSeverity.low, - email="example@whitebox.io", -) - -model_monitor_feature_not_in_columns_create_payload = dict( - name="feature not in columns monitor", - status=MonitorStatus.active, - metric=MonitorMetrics.data_drift, - feature="not_a_column", - severity=AlertSeverity.low, - email="example@whitebox.io", -) - - -model_monitor_update_payload = dict( - name="concept drift monitor updated", lower_threshold=0.54 -) - -alert_payload = { - "id": "c2a25e32-4e40-40da-a83f-fc299514866e", - "created_at": "2023-02-09T12:52:50.547557", - "updated_at": "2023-02-09T12:52:50.547557", - "model_id": "11737584-a356-4de5-924c-9894dfcd0e0d", - "model_monitor_id": "fa3a12f3-6801-4c25-8154-8b627e1d37b1", - "timestamp": "2023-02-09T12:52:50.547525", - "description": 'Data drift found in "concavity error" feature.', -} - -performance_metrics_report_payload = [ - { - "id": "f7030044-e0c2-4493-8aea-f66e6564efb7", - "created_at": "2023-02-06T09:53:00.343616", - "updated_at": "2023-02-06T09:53:00.343616", - "model_id": "dbb7f384-cf46-4884-bca3-7787e049a3d5", - "timestamp": "2023-02-06T09:53:00.343548", - "accuracy": 0.6, - "precision": 0.25, - "recall": 0.5, - "f1": 0.3333333333333333, - "true_negative": 5, - "false_positive": 3, - "false_negative": 1, - "true_positive": 1, - } -] - -descriptive_statistics_report_payload = [ - { - "id": "d4f18837-65f6-45c2-af7c-34dcdc4aabf9", - "created_at": "2023-02-06T09:53:00.370639", - "updated_at": "2023-02-06T09:53:00.370639", - "model_id": "bc01a212-b01e-48b4-aeb5-4a0a3cfa3c98", - "timestamp": "2023-02-06T09:53:00.370617", - "feature_metrics": { - "missing_count": { - "alcohol": 0, - "malic_acid": 0, - "ash": 0, - "alcalinity_of_ash": 0, - "magnesium": 0, - "total_phenols": 0, - "flavanoids": 0, - "nonflavanoid_phenols": 0, - "proanthocyanins": 0, - "color_intensity": 0, - "hue": 0, - "od280/od315_of_diluted_wines": 0, - "proline": 0, - "target": 0, - }, - "non_missing_count": { - "alcohol": 10, - "malic_acid": 10, - "ash": 10, - "alcalinity_of_ash": 10, - "magnesium": 10, - "total_phenols": 10, - "flavanoids": 10, - "nonflavanoid_phenols": 10, - "proanthocyanins": 10, - "color_intensity": 10, - "hue": 10, - "od280/od315_of_diluted_wines": 10, - "proline": 10, - "target": 10, - }, - "mean": { - "alcohol": 13.379000000000001, - "malic_acid": 3.564, - "ash": 2.493, - "alcalinity_of_ash": 21.6, - "magnesium": 102.3, - "total_phenols": 1.6620000000000001, - "flavanoids": 0.699, - "nonflavanoid_phenols": 0.44499999999999995, - "proanthocyanins": 1.1889999999999998, - "color_intensity": 8.595999899999999, - "hue": 0.6399999999999999, - "od280/od315_of_diluted_wines": 1.6970000000000003, - "proline": 674.5, - "target": 2.0, - }, - "minimum": { - "alcohol": 12.2, - "malic_acid": 2.39, - "ash": 2.26, - "alcalinity_of_ash": 19.0, - "magnesium": 86.0, - "total_phenols": 1.25, - "flavanoids": 0.49, - "nonflavanoid_phenols": 0.27, - "proanthocyanins": 0.64, - "color_intensity": 5.5, - "hue": 0.57, - "od280/od315_of_diluted_wines": 1.56, - "proline": 470.0, - "target": 2.0, - }, - "maximum": { - "alcohol": 14.16, - "malic_acid": 5.65, - "ash": 2.86, - "alcalinity_of_ash": 25.0, - "magnesium": 120.0, - "total_phenols": 2.05, - "flavanoids": 0.96, - "nonflavanoid_phenols": 0.56, - "proanthocyanins": 1.54, - "color_intensity": 10.2, - "hue": 0.74, - "od280/od315_of_diluted_wines": 1.92, - "proline": 840.0, - "target": 2.0, - }, - "sum": { - "alcohol": 133.79000000000002, - "malic_acid": 35.64, - "ash": 24.93, - "alcalinity_of_ash": 216.0, - "magnesium": 1023.0, - "total_phenols": 16.62, - "flavanoids": 6.989999999999999, - "nonflavanoid_phenols": 4.449999999999999, - "proanthocyanins": 11.889999999999999, - "color_intensity": 85.959999, - "hue": 6.3999999999999995, - "od280/od315_of_diluted_wines": 16.970000000000002, - "proline": 6745.0, - "target": 20.0, - }, - "standard_deviation": { - "alcohol": 0.5907894906159238, - "malic_acid": 1.1073311258256142, - "ash": 0.2058613341278272, - "alcalinity_of_ash": 2.3664319132398464, - "magnesium": 11.80442478244681, - "total_phenols": 0.24334703157790474, - "flavanoids": 0.14224001624796806, - "nonflavanoid_phenols": 0.08396427811873335, - "proanthocyanins": 0.3045743842734572, - "color_intensity": 1.4311393049673125, - "hue": 0.05291502622129182, - "od280/od315_of_diluted_wines": 0.12356284950492914, - "proline": 130.39363481397396, - "target": 0.0, - }, - "variance": { - "alcohol": 0.34903222222222274, - "malic_acid": 1.2261822222222223, - "ash": 0.04237888888888891, - "alcalinity_of_ash": 5.599999999999999, - "magnesium": 139.34444444444443, - "total_phenols": 0.059217777777777765, - "flavanoids": 0.02023222222222222, - "nonflavanoid_phenols": 0.0070500000000000024, - "proanthocyanins": 0.09276555555555556, - "color_intensity": 2.048159710222322, - "hue": 0.002800000000000001, - "od280/od315_of_diluted_wines": 0.015267777777777769, - "proline": 17002.5, - "target": 0.0, - }, - }, - } -] - -drifting_metrics_report_payload = [ - { - "id": "d11f2313-12e3-4533-b16d-7689175ad617", - "created_at": "2023-02-06T09:53:00.450466", - "updated_at": "2023-02-06T09:53:00.450466", - "model_id": "e8e5ff00-0212-4a1e-bcdb-0ef9183c867f", - "timestamp": "2023-02-06T09:53:00.450435", - "concept_drift_summary": { - "concept_drift_summary": { - "column_name": "target", - "column_type": "cat", - "stattest_name": "Z-test p_value", - "drift_score": 0.0010364142456651404, - "drift_detected": True, - "stattest_threshold": 0.05, - }, - "column_correlation": { - "column_name": "target", - "current": {}, - "reference": {}, - }, - }, - "data_drift_summary": { - "number_of_columns": 13, - "number_of_drifted_columns": 7, - "share_of_drifted_columns": 0.5384615384615384, - "dataset_drift": True, - "drift_by_columns": { - "alcalinity_of_ash": { - "column_name": "alcalinity_of_ash", - "column_type": "num", - "stattest_name": "K-S p_value", - "drift_score": 0.5163177458201748, - "drift_detected": False, - "threshold": 0.05, - }, - "alcohol": { - "column_name": "alcohol", - "column_type": "num", - "stattest_name": "K-S p_value", - "drift_score": 0.0012612112534500996, - "drift_detected": True, - "threshold": 0.05, - }, - "ash": { - "column_name": "ash", - "column_type": "num", - "stattest_name": "K-S p_value", - "drift_score": 0.23438597334285016, - "drift_detected": False, - "threshold": 0.05, - }, - "color_intensity": { - "column_name": "color_intensity", - "column_type": "num", - "stattest_name": "K-S p_value", - "drift_score": 0.00015242693342585546, - "drift_detected": True, - "threshold": 0.05, - }, - "flavanoids": { - "column_name": "flavanoids", - "column_type": "num", - "stattest_name": "K-S p_value", - "drift_score": 0.0003384276858653337, - "drift_detected": True, - "threshold": 0.05, - }, - "hue": { - "column_name": "hue", - "column_type": "num", - "stattest_name": "K-S p_value", - "drift_score": 0.0002500181491633883, - "drift_detected": True, - "threshold": 0.05, - }, - "magnesium": { - "column_name": "magnesium", - "column_type": "num", - "stattest_name": "K-S p_value", - "drift_score": 0.08450859981880006, - "drift_detected": False, - "threshold": 0.05, - }, - "malic_acid": { - "column_name": "malic_acid", - "column_type": "num", - "stattest_name": "K-S p_value", - "drift_score": 0.033698127881912385, - "drift_detected": True, - "threshold": 0.05, - }, - "nonflavanoid_phenols": { - "column_name": "nonflavanoid_phenols", - "column_type": "num", - "stattest_name": "K-S p_value", - "drift_score": 0.30861039864383094, - "drift_detected": False, - "threshold": 0.05, - }, - "od280/od315_of_diluted_wines": { - "column_name": "od280/od315_of_diluted_wines", - "column_type": "num", - "stattest_name": "K-S p_value", - "drift_score": 0.0006076739224878145, - "drift_detected": True, - "threshold": 0.05, - }, - "proanthocyanins": { - "column_name": "proanthocyanins", - "column_type": "num", - "stattest_name": "K-S p_value", - "drift_score": 0.09673060972050829, - "drift_detected": False, - "threshold": 0.05, - }, - "proline": { - "column_name": "proline", - "column_type": "num", - "stattest_name": "K-S p_value", - "drift_score": 0.0328848734766648, - "drift_detected": True, - "threshold": 0.05, - }, - "total_phenols": { - "column_name": "total_phenols", - "column_type": "num", - "stattest_name": "K-S p_value", - "drift_score": 0.082145120769578, - "drift_detected": False, - "threshold": 0.05, - }, - }, - }, - } -] - -inference_row_xai_payload = { - "mean perimeter": -0.23641989216827916, - "mean concavity": -0.16854638344893477, - "worst radius": -0.16657884627852115, - "mean concave points": -0.1260514980862101, - "worst perimeter": -0.08533726601274261, - "worst texture": -0.07905090544100012, - "mean texture": -0.05969642438812264, - "worst concave points": -0.03310756238929911, - "mean radius": -0.03244286722644983, - "worst symmetry": 0.02852296352595751, -} diff --git a/whitebox/tests/v1/test_alerts.py b/whitebox/tests/v1/test_alerts.py deleted file mode 100644 index 64ba6b7..0000000 --- a/whitebox/tests/v1/test_alerts.py +++ /dev/null @@ -1,31 +0,0 @@ -import pytest -from whitebox import schemas -from whitebox.tests.v1.conftest import get_order_number, state -from fastapi import status - - -@pytest.mark.order(get_order_number("alerts_get")) -def test_alerts_get_model_all(client, api_key): - response_all = client.get( - f"/v1/alerts", - headers={"api-key": api_key}, - ) - - response_model_all = client.get( - f"/v1/alerts?model_id={state.model_multi['id']}", - headers={"api-key": api_key}, - ) - - response_wrong_model = client.get( - f"/v1/alerts?model_id=wrong_model_id", - headers={"api-key": api_key}, - ) - - assert len(response_all.json()) == 6 - - assert response_all.status_code == status.HTTP_200_OK - assert response_model_all.status_code == status.HTTP_200_OK - assert response_wrong_model.status_code == status.HTTP_404_NOT_FOUND - - validated = [schemas.Alert(**m) for m in response_all.json()] - validated = [schemas.Alert(**m) for m in response_model_all.json()] diff --git a/whitebox/tests/v1/test_cron_tasks.py b/whitebox/tests/v1/test_cron_tasks.py deleted file mode 100644 index 27cdc62..0000000 --- a/whitebox/tests/v1/test_cron_tasks.py +++ /dev/null @@ -1,27 +0,0 @@ -import pytest -from whitebox.tests.v1.conftest import get_order_number -from fastapi import status - - -@pytest.mark.order(get_order_number("cron_tasks_run_no_models")) -def test_cron_tasks_no_models(client): - response = client.post("/v1/cron-tasks/run") - assert response.status_code == status.HTTP_200_OK - - -@pytest.mark.order(get_order_number("cron_tasks_run_no_inference")) -def test_cron_tasks_no_inference(client): - response = client.post("/v1/cron-tasks/run") - assert response.status_code == status.HTTP_200_OK - - -@pytest.mark.order(get_order_number("cron_tasks_run_ok")) -def test_cron_tasks_ok(client): - response = client.post("/v1/cron-tasks/run") - assert response.status_code == status.HTTP_200_OK - - -@pytest.mark.order(get_order_number("cron_tasks_run_after_x_time")) -def test_cron_tasks_run_after_x_time(client): - response = client.post("/v1/cron-tasks/run") - assert response.status_code == status.HTTP_200_OK diff --git a/whitebox/tests/v1/test_dataset_rows.py b/whitebox/tests/v1/test_dataset_rows.py deleted file mode 100644 index a12cba9..0000000 --- a/whitebox/tests/v1/test_dataset_rows.py +++ /dev/null @@ -1,125 +0,0 @@ -from whitebox.tests.v1.mock_data import ( - dataset_rows_single_row_column_payload, - dataset_rows_no_prediction_column_payload, - dataset_rows_one_prediction_value_payload, - dataset_rows_create_multi_class_payload, - dataset_rows_create_binary_payload, - dataset_rows_create_wrong_model_payload, - dataset_rows_create_reg_payload, -) -import pytest -from whitebox import schemas -from whitebox.tests.v1.conftest import get_order_number, state -from fastapi import status - - -@pytest.mark.order(get_order_number("dataset_rows_wrong_training_dataset")) -def test_dataset_rows_wrong_training_data(client, api_key): - response_single_row = client.post( - "/v1/dataset-rows", - json=list( - map( - lambda x: {**x, "model_id": state.model_multi["id"]}, - dataset_rows_single_row_column_payload, - ) - ), - headers={"api-key": api_key}, - ) - - response_no_prediction = client.post( - "/v1/dataset-rows", - json=list( - map( - lambda x: {**x, "model_id": state.model_multi["id"]}, - dataset_rows_no_prediction_column_payload, - ) - ), - headers={"api-key": api_key}, - ) - - response_one_prediction_value = client.post( - "/v1/dataset-rows", - json=list( - map( - lambda x: {**x, "model_id": state.model_multi["id"]}, - dataset_rows_one_prediction_value_payload, - ) - ), - headers={"api-key": api_key}, - ) - - assert response_single_row.status_code == status.HTTP_400_BAD_REQUEST - assert response_no_prediction.status_code == status.HTTP_400_BAD_REQUEST - assert response_one_prediction_value.status_code == status.HTTP_400_BAD_REQUEST - - -@pytest.mark.order(get_order_number("dataset_rows_create")) -def test_dataset_row_create_many(client, api_key): - response_model_multi = client.post( - "/v1/dataset-rows", - json=list( - map( - lambda x: {**x, "model_id": state.model_multi["id"]}, - dataset_rows_create_multi_class_payload, - ) - ), - headers={"api-key": api_key}, - ) - - response_model_binary = client.post( - "/v1/dataset-rows", - json=list( - map( - lambda x: {**x, "model_id": state.model_binary["id"]}, - dataset_rows_create_binary_payload, - ) - ), - headers={"api-key": api_key}, - ) - - response_model_reg = client.post( - "/v1/dataset-rows", - json=list( - map( - lambda x: {**x, "model_id": state.model_regression["id"]}, - dataset_rows_create_reg_payload, - ) - ), - headers={"api-key": api_key}, - ) - - response_wrong_model = client.post( - "/v1/dataset-rows", - json=(dataset_rows_create_wrong_model_payload), - headers={"api-key": api_key}, - ) - - assert response_model_multi.status_code == status.HTTP_201_CREATED - assert response_model_binary.status_code == status.HTTP_201_CREATED - assert response_model_reg.status_code == status.HTTP_201_CREATED - assert response_wrong_model.status_code == status.HTTP_404_NOT_FOUND - validated = [schemas.DatasetRow(**m) for m in response_model_multi.json()] - validated = [schemas.DatasetRow(**m) for m in response_model_binary.json()] - validated = [schemas.DatasetRow(**m) for m in response_model_reg.json()] - - -@pytest.mark.order(get_order_number("dataset_rows_get_model's_all")) -def test_dataset_row_get_models_all(client, api_key): - response_model_multi = client.get( - f"/v1/dataset-rows?model_id={state.model_multi['id']}", - headers={"api-key": api_key}, - ) - response_model_binary = client.get( - f"/v1/dataset-rows?model_id={state.model_binary['id']}", - headers={"api-key": api_key}, - ) - response_model_not_found = client.get( - f"/v1/dataset-rows?model_id=wrong_model_id", - headers={"api-key": api_key}, - ) - - assert response_model_multi.status_code == status.HTTP_200_OK - assert response_model_binary.status_code == status.HTTP_200_OK - assert response_model_not_found.status_code == status.HTTP_404_NOT_FOUND - validated = [schemas.DatasetRow(**m) for m in response_model_multi.json()] - validated = [schemas.DatasetRow(**m) for m in response_model_binary.json()] diff --git a/whitebox/tests/v1/test_drifting_metrics.py b/whitebox/tests/v1/test_drifting_metrics.py deleted file mode 100644 index 3939a94..0000000 --- a/whitebox/tests/v1/test_drifting_metrics.py +++ /dev/null @@ -1,55 +0,0 @@ -import pytest -from whitebox import schemas -from whitebox.tests.v1.conftest import get_order_number, state -from fastapi import status - - -@pytest.mark.order(get_order_number("drifting_metrics_get_model_all")) -def test_drifting_metric_get_model_all(client, api_key): - response_multi = client.get( - f"/v1/drifting-metrics?model_id={state.model_multi['id']}", - headers={"api-key": api_key}, - ) - - response_binary = client.get( - f"/v1/drifting-metrics?model_id={state.model_binary['id']}", - headers={"api-key": api_key}, - ) - response_wrong_model = client.get( - f"/v1/drifting-metrics?model_id=wrong_model_id", - headers={"api-key": api_key}, - ) - - response_binary_json = response_binary.json() - response_multi_json = response_multi.json() - - assert len(response_multi_json) == 1 - assert len(response_binary_json) == 1 - - assert response_multi_json[0]["timestamp"] == "2023-03-06T12:15:00" - assert response_binary_json[0]["timestamp"] == "2023-03-07T00:00:00" - - assert response_multi.status_code == status.HTTP_200_OK - assert response_binary.status_code == status.HTTP_200_OK - assert response_wrong_model.status_code == status.HTTP_404_NOT_FOUND - - validated = [schemas.DriftingMetric(**m) for m in response_multi_json] - validated = [schemas.DriftingMetric(**m) for m in response_binary_json] - - -@pytest.mark.order(get_order_number("drifting_metrics_get_binary_model_after_x_time")) -def test_drifting_metrics_get_binary_model_after_x_time(client, api_key): - response_binary = client.get( - f"/v1/drifting-metrics?model_id={state.model_binary['id']}", - headers={"api-key": api_key}, - ) - - response_binary_json = response_binary.json() - - assert len(response_binary_json) == 1 - - assert response_binary_json[0]["timestamp"] == "2023-03-07T00:00:00" - - assert response_binary.status_code == status.HTTP_200_OK - - validated = [schemas.DriftingMetric(**m) for m in response_binary_json] diff --git a/whitebox/tests/v1/test_errors.py b/whitebox/tests/v1/test_errors.py deleted file mode 100644 index f486d82..0000000 --- a/whitebox/tests/v1/test_errors.py +++ /dev/null @@ -1,20 +0,0 @@ -import pytest -from whitebox.tests.v1.conftest import get_order_number -from fastapi import status - - -@pytest.mark.order(get_order_number("models_no_api_key")) -def test_model_no_api_key(client): - response = client.get("/v1/models") - - assert response.status_code == status.HTTP_422_UNPROCESSABLE_ENTITY - - -@pytest.mark.order(get_order_number("models_wrong_api_key")) -def test_model_wrong_api_key(client): - response = client.get( - "/v1/models", - headers={"api-key": "1234567890"}, - ) - - assert response.status_code == status.HTTP_401_UNAUTHORIZED diff --git a/whitebox/tests/v1/test_health.py b/whitebox/tests/v1/test_health.py deleted file mode 100644 index 7a85a23..0000000 --- a/whitebox/tests/v1/test_health.py +++ /dev/null @@ -1,11 +0,0 @@ -import pytest -from whitebox import schemas -from whitebox.tests.v1.conftest import get_order_number -from fastapi import status - - -@pytest.mark.order(get_order_number("health")) -def test_health(client): - response = client.get("/v1/health") - assert response.status_code == status.HTTP_200_OK - validated = schemas.HealthCheck(**response.json()) diff --git a/whitebox/tests/v1/test_inference_rows.py b/whitebox/tests/v1/test_inference_rows.py deleted file mode 100644 index 320e930..0000000 --- a/whitebox/tests/v1/test_inference_rows.py +++ /dev/null @@ -1,191 +0,0 @@ -from whitebox.tests.v1.mock_data import ( - inference_row_create_single_row_payload, - inference_row_create_many_binary_payload, - inference_row_create_many_multi_payload, - inference_row_create_many_multi_no_actual_payload, - inference_row_create_many_multi_mixed_actuals_payload, - inference_row_create_many_reg_payload, -) -import pytest -from whitebox import schemas -from whitebox.tests.v1.conftest import get_order_number, state -from fastapi import status - - -@pytest.mark.order(get_order_number("inference_rows_create")) -def test_inference_row_create(client, api_key): - response = client.post( - "/v1/inference-rows", - json={ - **inference_row_create_single_row_payload, - "model_id": state.model_multi["id"], - }, - headers={"api-key": api_key}, - ) - state.inference_row_multi = response.json() - assert response.status_code == status.HTTP_201_CREATED - validated = schemas.InferenceRow(**response.json()) - - -@pytest.mark.order(get_order_number("inference_rows_create_many")) -def test_inference_row_create_many(client, api_key): - response_binary = client.post( - "/v1/inference-rows/batch", - json=list( - map( - lambda x: {**x, "model_id": state.model_binary["id"]}, - inference_row_create_many_binary_payload, - ) - ), - headers={"api-key": api_key}, - ) - - state.inference_row_binary = response_binary.json()[0] - - response_multi = client.post( - "/v1/inference-rows/batch", - json=list( - map( - lambda x: {**x, "model_id": state.model_multi["id"]}, - inference_row_create_many_multi_payload, - ) - ), - headers={"api-key": api_key}, - ) - - response_multi_2 = client.post( - "/v1/inference-rows/batch", - json=list( - map( - lambda x: {**x, "model_id": state.model_multi_2["id"]}, - inference_row_create_many_multi_no_actual_payload, - ) - ), - headers={"api-key": api_key}, - ) - - response_multi_3 = client.post( - "/v1/inference-rows/batch", - json=list( - map( - lambda x: {**x, "model_id": state.model_multi_3["id"]}, - inference_row_create_many_multi_mixed_actuals_payload, - ) - ), - headers={"api-key": api_key}, - ) - - response_reg = client.post( - "/v1/inference-rows/batch", - json=list( - map( - lambda x: {**x, "model_id": state.model_regression["id"]}, - inference_row_create_many_reg_payload, - ) - ), - headers={"api-key": api_key}, - ) - - assert response_binary.status_code == status.HTTP_201_CREATED - assert response_multi.status_code == status.HTTP_201_CREATED - assert response_reg.status_code == status.HTTP_201_CREATED - validated = [schemas.InferenceRow(**m) for m in response_binary.json()] - validated = [schemas.InferenceRow(**m) for m in response_multi.json()] - validated = [schemas.InferenceRow(**m) for m in response_multi_2.json()] - validated = [schemas.InferenceRow(**m) for m in response_multi_3.json()] - validated = [schemas.InferenceRow(**m) for m in response_reg.json()] - - -@pytest.mark.order(get_order_number("inference_rows_get_model's_all")) -def test_inference_row_get_models_all(client, api_key): - response_multi = client.get( - f"/v1/inference-rows?model_id={state.model_multi['id']}", - headers={"api-key": api_key}, - ) - response_binary = client.get( - f"/v1/inference-rows?model_id={state.model_binary['id']}", - headers={"api-key": api_key}, - ) - response_wrong_model = client.get( - f"/v1/inference-rows?model_id=wrong_model_id", - headers={"api-key": api_key}, - ) - assert response_multi.status_code == status.HTTP_200_OK - assert response_binary.status_code == status.HTTP_200_OK - assert response_wrong_model.status_code == status.HTTP_404_NOT_FOUND - validated = [schemas.InferenceRow(**m) for m in response_multi.json()] - validated = [schemas.InferenceRow(**m) for m in response_binary.json()] - - -@pytest.mark.order(get_order_number("inference_rows_get")) -def test_inference_row_get(client, api_key): - response = client.get( - f"/v1/inference-rows/{state.inference_row_multi['id']}", - headers={"api-key": api_key}, - ) - response_wrong_inference = client.get( - f"/v1/inference-rows/wrong_inference_id", - headers={"api-key": api_key}, - ) - assert response.status_code == status.HTTP_200_OK - assert response_wrong_inference.status_code == status.HTTP_404_NOT_FOUND - validated = schemas.InferenceRow(**response.json()) - - -@pytest.mark.order(get_order_number("inference_rows_xai")) -def test_inference_row_xai(client, api_key): - response = client.get( - f"/v1/inference-rows/{state.inference_row_binary['id']}/xai", - headers={"api-key": api_key}, - ) - - response_wrong_inference = client.get( - f"/v1/inference-rows/wrong_inference_id/xai", - headers={"api-key": api_key}, - ) - - assert response.status_code == status.HTTP_200_OK - assert response_wrong_inference.status_code == status.HTTP_404_NOT_FOUND - - -@pytest.mark.order(get_order_number("inference_rows_create_many_after_x_time")) -def test_inference_row_create_many_after_x_time(client, api_key): - response_binary = client.post( - "/v1/inference-rows/batch", - json=list( - map( - lambda x: {**x, "model_id": state.model_binary["id"]}, - inference_row_create_many_binary_payload, - ) - ), - headers={"api-key": api_key}, - ) - - response_multi = client.post( - "/v1/inference-rows/batch", - json=list( - map( - lambda x: {**x, "model_id": state.model_multi["id"]}, - inference_row_create_many_multi_payload, - ) - ), - headers={"api-key": api_key}, - ) - - response_reg = client.post( - "/v1/inference-rows/batch", - json=list( - map( - lambda x: {**x, "model_id": state.model_regression["id"]}, - inference_row_create_many_reg_payload, - ) - ), - headers={"api-key": api_key}, - ) - - assert response_binary.status_code == status.HTTP_201_CREATED - assert response_multi.status_code == status.HTTP_201_CREATED - assert response_reg.status_code == status.HTTP_201_CREATED - validated = [schemas.InferenceRow(**m) for m in response_binary.json()] - validated = [schemas.InferenceRow(**m) for m in response_multi.json()] - validated = [schemas.InferenceRow(**m) for m in response_reg.json()] diff --git a/whitebox/tests/v1/test_model_integrity_metrics.py b/whitebox/tests/v1/test_model_integrity_metrics.py deleted file mode 100644 index f7378bb..0000000 --- a/whitebox/tests/v1/test_model_integrity_metrics.py +++ /dev/null @@ -1,30 +0,0 @@ -import pytest -from whitebox import schemas -from whitebox.tests.v1.conftest import get_order_number, state -from fastapi import status - - -@pytest.mark.order(get_order_number("model_integrity_metrics_get_model_all")) -def test_model_integrity_metric_get_model_all(client, api_key): - response_multi = client.get( - f"/v1/model-integrity-metrics?model_id={state.model_multi['id']}", - headers={"api-key": api_key}, - ) - response_binary = client.get( - f"/v1/model-integrity-metrics?model_id={state.model_binary['id']}", - headers={"api-key": api_key}, - ) - response_wrong_model = client.get( - f"/v1/model-integrity-metrics?model_id=wrong_model_id", - headers={"api-key": api_key}, - ) - - assert len(response_multi.json()) == 1 - assert len(response_binary.json()) == 1 - - assert response_multi.status_code == status.HTTP_200_OK - assert response_binary.status_code == status.HTTP_200_OK - assert response_wrong_model.status_code == status.HTTP_404_NOT_FOUND - - validated = [schemas.ModelIntegrityMetric(**m) for m in response_multi.json()] - validated = [schemas.ModelIntegrityMetric(**m) for m in response_binary.json()] diff --git a/whitebox/tests/v1/test_model_monitors.py b/whitebox/tests/v1/test_model_monitors.py deleted file mode 100644 index 4183e33..0000000 --- a/whitebox/tests/v1/test_model_monitors.py +++ /dev/null @@ -1,206 +0,0 @@ -import pytest -from whitebox.tests.v1.mock_data import ( - model_monitor_accuracy_create_payload, - model_monitor_f1_create_payload, - model_monitor_data_drift_create_payload, - model_monitor_concept_drift_create_payload, - model_monitor_precision_create_payload, - model_monitor_r_square_create_payload, - model_monitor_no_threshold_create_payload, - model_monitor_no_feature_create_payload, - model_monitor_feature_same_as_target_create_payload, - model_monitor_feature_not_in_columns_create_payload, - model_monitor_update_payload, -) -from whitebox import schemas -from whitebox.tests.v1.conftest import get_order_number, state -from fastapi import status - - -@pytest.mark.order(get_order_number("model_monitor_create")) -def test_model_monitor_create(client, api_key): - accuracy_monitor = client.post( - "/v1/model-monitors", - json={ - **model_monitor_accuracy_create_payload, - "model_id": state.model_multi["id"], - }, - headers={"api-key": api_key}, - ) - - f1_monitor = client.post( - "/v1/model-monitors", - json={ - **model_monitor_f1_create_payload, - "model_id": state.model_multi["id"], - }, - headers={"api-key": api_key}, - ) - - data_drift_monitor = client.post( - "/v1/model-monitors", - json={ - **model_monitor_data_drift_create_payload, - "model_id": state.model_binary["id"], - }, - headers={"api-key": api_key}, - ) - - concept_drift_monitor = client.post( - "/v1/model-monitors", - json={ - **model_monitor_concept_drift_create_payload, - "model_id": state.model_binary["id"], - }, - headers={"api-key": api_key}, - ) - - precision_monitor = client.post( - "/v1/model-monitors", - json={ - **model_monitor_precision_create_payload, - "model_id": state.model_binary["id"], - }, - headers={"api-key": api_key}, - ) - - r_square_monitor = client.post( - "/v1/model-monitors", - json={ - **model_monitor_r_square_create_payload, - "model_id": state.model_regression["id"], - }, - headers={"api-key": api_key}, - ) - - wrong_model_monitor = client.post( - "/v1/model-monitors", - json={ - **model_monitor_r_square_create_payload, - "model_id": "wrong_model_id", - }, - headers={"api-key": api_key}, - ) - - no_training_data = client.post( - "/v1/model-monitors", - json={ - **model_monitor_data_drift_create_payload, - "model_id": state.model_multi_3["id"], - }, - headers={"api-key": api_key}, - ) - - no_threshold = client.post( - "/v1/model-monitors", - json={ - **model_monitor_no_threshold_create_payload, - "model_id": state.model_multi["id"], - }, - headers={"api-key": api_key}, - ) - - no_feature = client.post( - "/v1/model-monitors", - json={ - **model_monitor_no_feature_create_payload, - "model_id": state.model_multi["id"], - }, - headers={"api-key": api_key}, - ) - - feature_same_as_target = client.post( - "/v1/model-monitors", - json={ - **model_monitor_feature_same_as_target_create_payload, - "model_id": state.model_multi["id"], - }, - headers={"api-key": api_key}, - ) - - feature_not_in_columns = client.post( - "/v1/model-monitors", - json={ - **model_monitor_feature_not_in_columns_create_payload, - "model_id": state.model_multi["id"], - }, - headers={"api-key": api_key}, - ) - - state.concept_drift_monitor = ( - concept_drift_monitor_json - ) = concept_drift_monitor.json() - - assert concept_drift_monitor.status_code == status.HTTP_201_CREATED - assert concept_drift_monitor_json["feature"] == "target" - assert wrong_model_monitor.status_code == status.HTTP_404_NOT_FOUND - assert no_threshold.status_code == status.HTTP_400_BAD_REQUEST - assert no_feature.status_code == status.HTTP_400_BAD_REQUEST - assert feature_same_as_target.status_code == status.HTTP_400_BAD_REQUEST - assert feature_not_in_columns.status_code == status.HTTP_400_BAD_REQUEST - assert no_training_data.status_code == status.HTTP_404_NOT_FOUND - validated = schemas.ModelMonitor(**concept_drift_monitor_json) - - -@pytest.mark.order(get_order_number("model_monitors_get_model_all")) -def test_model_monitors_get_model_all(client, api_key): - response_multi = client.get( - f"/v1/model-monitors?model_id={state.model_multi['id']}", - headers={"api-key": api_key}, - ) - response_all = client.get( - f"/v1/model-monitors", - headers={"api-key": api_key}, - ) - response_wrong_model = client.get( - f"/v1/model-monitors?model_id=wrong_model_id", - headers={"api-key": api_key}, - ) - - assert len(response_multi.json()) == 2 - assert len(response_all.json()) == 6 - - assert response_multi.status_code == status.HTTP_200_OK - assert response_all.status_code == status.HTTP_200_OK - assert response_wrong_model.status_code == status.HTTP_404_NOT_FOUND - - validated = [schemas.ModelMonitor(**m) for m in response_multi.json()] - validated = [schemas.ModelMonitor(**m) for m in response_all.json()] - - -@pytest.mark.order(get_order_number("model_monitor_update")) -def test_model_monitor_update(client, api_key): - response = client.put( - f"/v1/model-monitors/{state.concept_drift_monitor['id']}", - json=model_monitor_update_payload, - headers={"api-key": api_key}, - ) - response_wrong_model = client.put( - f"/v1/model-monitors/wrong_model_id", - json=model_monitor_update_payload, - headers={"api-key": api_key}, - ) - - response_json = response.json() - - assert response.status_code == status.HTTP_200_OK - assert response_json["lower_threshold"] == None - assert response_wrong_model.status_code == status.HTTP_404_NOT_FOUND - - validated = schemas.ModelMonitor(**response_json) - - -@pytest.mark.order(get_order_number("model_monitor_delete")) -def test_model_monitor_delete(client, api_key): - response = client.delete( - f"/v1/model-monitors/{state.concept_drift_monitor['id']}", - headers={"api-key": api_key}, - ) - - wrong_monitor_response = client.delete( - f"/v1/model-monitors/wrong_model_monitor_id", - headers={"api-key": api_key}, - ) - - assert response.status_code == status.HTTP_200_OK - assert wrong_monitor_response.status_code == status.HTTP_404_NOT_FOUND diff --git a/whitebox/tests/v1/test_models.py b/whitebox/tests/v1/test_models.py deleted file mode 100644 index e7aaeff..0000000 --- a/whitebox/tests/v1/test_models.py +++ /dev/null @@ -1,133 +0,0 @@ -from whitebox.tests.v1.mock_data import ( - model_binary_create_payload, - model_multi_create_payload, - model_multi_2_create_payload, - model_multi_3_create_payload, - model_regression_create_payload, - model_update_payload, -) -import pytest -from whitebox import schemas -from whitebox.tests.v1.conftest import get_order_number, state -from fastapi import status - - -@pytest.mark.order(get_order_number("models_create")) -def test_model_create(client, api_key): - response_binary = client.post( - "/v1/models", - json={**model_binary_create_payload}, - headers={"api-key": api_key}, - ) - - response_multi = client.post( - "/v1/models", - json={**model_multi_create_payload}, - headers={"api-key": api_key}, - ) - - response_multi_2 = client.post( - "/v1/models", - json={**model_multi_2_create_payload}, - headers={"api-key": api_key}, - ) - - response_multi_3 = client.post( - "/v1/models", - json={**model_multi_3_create_payload}, - headers={"api-key": api_key}, - ) - - response_regression = client.post( - "/v1/models", - json={**model_regression_create_payload}, - headers={"api-key": api_key}, - ) - - state.model_binary = response_binary.json() - state.model_multi = response_multi.json() - state.model_multi_2 = response_multi_2.json() - state.model_multi_3 = response_multi_3.json() - state.model_regression = response_regression.json() - - assert response_binary.status_code == status.HTTP_201_CREATED - assert response_multi.status_code == status.HTTP_201_CREATED - assert response_multi_2.status_code == status.HTTP_201_CREATED - assert response_multi_3.status_code == status.HTTP_201_CREATED - assert response_regression.status_code == status.HTTP_201_CREATED - - validated = schemas.Model(**response_binary.json()) - validated = schemas.Model(**response_multi.json()) - validated = schemas.Model(**response_multi_2.json()) - validated = schemas.Model(**response_multi_3.json()) - validated = schemas.Model(**response_regression.json()) - - -@pytest.mark.order(get_order_number("models_get_all")) -def test_model_get_all(client, api_key): - response = client.get(f"/v1/models", headers={"api-key": api_key}) - assert response.status_code == status.HTTP_200_OK - validated = [schemas.Model(**m) for m in response.json()] - - -@pytest.mark.order(get_order_number("models_get")) -def test_model_get(client, api_key): - response = client.get( - f"/v1/models/{state.model_multi['id']}", headers={"api-key": api_key} - ) - response_wrong_model = client.get( - f"/v1/models/wrong_model_id", headers={"api-key": api_key} - ) - - assert response.status_code == status.HTTP_200_OK - assert response_wrong_model.status_code == status.HTTP_404_NOT_FOUND - - validated = schemas.Model(**response.json()) - - -@pytest.mark.order(get_order_number("models_update")) -def test_model_update(client, api_key): - response = client.put( - f"/v1/models/{state.model_multi['id']}", - json=model_update_payload, - headers={"api-key": api_key}, - ) - response_wrong_model = client.put( - f"/v1/models/wrong_model_id", - json=model_update_payload, - headers={"api-key": api_key}, - ) - - assert response.status_code == status.HTTP_200_OK - assert response_wrong_model.status_code == status.HTTP_404_NOT_FOUND - - validated = schemas.Model(**response.json()) - - -@pytest.mark.order(get_order_number("models_delete")) -def test_model_delete(client, api_key): - response_binary = client.delete( - f"/v1/models/{state.model_binary['id']}", headers={"api-key": api_key} - ) - response_multi = client.delete( - f"/v1/models/{state.model_multi['id']}", headers={"api-key": api_key} - ) - response_multi_2 = client.delete( - f"/v1/models/{state.model_multi_2['id']}", headers={"api-key": api_key} - ) - response_multi_3 = client.delete( - f"/v1/models/{state.model_multi_3['id']}", headers={"api-key": api_key} - ) - response_regression = client.delete( - f"/v1/models/{state.model_regression['id']}", headers={"api-key": api_key} - ) - response_no_model = client.delete( - f"/v1/models/{state.model_binary['id']}", headers={"api-key": api_key} - ) - - assert response_binary.status_code == status.HTTP_200_OK - assert response_multi.status_code == status.HTTP_200_OK - assert response_multi_2.status_code == status.HTTP_200_OK - assert response_multi_3.status_code == status.HTTP_200_OK - assert response_regression.status_code == status.HTTP_200_OK - assert response_no_model.status_code == status.HTTP_404_NOT_FOUND diff --git a/whitebox/tests/v1/test_performance_metrics.py b/whitebox/tests/v1/test_performance_metrics.py deleted file mode 100644 index 690527d..0000000 --- a/whitebox/tests/v1/test_performance_metrics.py +++ /dev/null @@ -1,35 +0,0 @@ -import pytest -from whitebox import schemas -from whitebox.tests.v1.conftest import get_order_number, state -from fastapi import status - - -@pytest.mark.order(get_order_number("performance_metrics_get_model_all")) -def test_performance_metric_get_model_all(client, api_key): - response_multi = client.get( - f"/v1/performance-metrics?model_id={state.model_multi['id']}", - headers={"api-key": api_key}, - ) - response_binary = client.get( - f"/v1/performance-metrics?model_id={state.model_binary['id']}", - headers={"api-key": api_key}, - ) - response_reg = client.get( - f"/v1/performance-metrics?model_id={state.model_regression['id']}", - headers={"api-key": api_key}, - ) - response_wrong_model = client.get( - f"/v1/performance-metrics?model_id=wrong_model_id", - headers={"api-key": api_key}, - ) - - assert response_multi.status_code == status.HTTP_200_OK - assert response_binary.status_code == status.HTTP_200_OK - assert response_reg.status_code == status.HTTP_200_OK - assert response_wrong_model.status_code == status.HTTP_404_NOT_FOUND - - validated = [schemas.MultiClassificationMetrics(**m) for m in response_multi.json()] - validated = [ - schemas.BinaryClassificationMetrics(**m) for m in response_binary.json() - ] - validated = [schemas.RegressionMetrics(**m) for m in response_reg.json()] diff --git a/whitebox/tests/v1/test_sdk.py b/whitebox/tests/v1/test_sdk.py deleted file mode 100644 index 7ef4994..0000000 --- a/whitebox/tests/v1/test_sdk.py +++ /dev/null @@ -1,397 +0,0 @@ -import pandas as pd -import pytest -from whitebox.schemas.modelMonitor import AlertSeverity, MonitorMetrics, MonitorStatus -from whitebox.sdk import Whitebox -from whitebox.tests.v1.conftest import get_order_number, state, state_sdk -from whitebox.tests.v1.mock_data import ( - model_multi_create_payload, - timestamps, - mixed_actuals, - inference_row_xai_payload, - model_monitor_concept_drift_create_payload, - model_monitor_update_payload, - alert_payload, - drifting_metrics_report_payload, - descriptive_statistics_report_payload, - performance_metrics_report_payload, -) -import requests_mock -from fastapi import status - - -@pytest.mark.order(get_order_number("sdk_init")) -def test_sdk_init(client, api_key): - wb = Whitebox(host=client.base_url, api_key=api_key) - assert wb.host == client.base_url - assert wb.api_key == api_key - state_sdk.wb = wb - - -@pytest.mark.order(get_order_number("sdk_create_model")) -def test_sdk_create_model(client): - with requests_mock.Mocker() as m: - m.post( - url=f"{state_sdk.wb.host}/v1/models", - json=model_multi_create_payload, - headers={"api-key": state_sdk.wb.api_key}, - ) - - model = state_sdk.wb.create_model( - name=model_multi_create_payload["name"], - description=model_multi_create_payload["description"], - labels=model_multi_create_payload["labels"], - type=model_multi_create_payload["type"], - target_column=model_multi_create_payload["target_column"], - granularity=model_multi_create_payload["granularity"], - ) - - assert model == model_multi_create_payload - - -@pytest.mark.order(get_order_number("sdk_get_model")) -def test_sdk_get_model(client): - mock_model_id = "mock_model_id" - with requests_mock.Mocker() as m: - m.get( - url=f"{state_sdk.wb.host}/v1/models/{mock_model_id}", - headers={"api-key": state_sdk.wb.api_key}, - status_code=status.HTTP_404_NOT_FOUND, - ) - - not_found_result = state_sdk.wb.get_model(model_id=mock_model_id) - - assert not_found_result == None - - m.get( - url=f"{state_sdk.wb.host}/v1/models/{mock_model_id}", - headers={"api-key": state_sdk.wb.api_key}, - json=state.model_multi, - ) - - model = state_sdk.wb.get_model(model_id=mock_model_id) - - assert model == state.model_multi - - -@pytest.mark.order(get_order_number("sdk_delete_model")) -def test_sdk_delete_model(client): - mock_model_id = "mock_model_id" - - with requests_mock.Mocker() as m: - m.delete( - url=f"{state_sdk.wb.host}/v1/models/{mock_model_id}", - headers={"api-key": state_sdk.wb.api_key}, - status_code=status.HTTP_200_OK, - ) - - happy_result = state_sdk.wb.delete_model(model_id=mock_model_id) - assert happy_result == True - - m.delete( - url=f"{state_sdk.wb.host}/v1/models/{mock_model_id}", - headers={"api-key": state_sdk.wb.api_key}, - status_code=status.HTTP_400_BAD_REQUEST, - ) - - sad_result = state_sdk.wb.delete_model(model_id=mock_model_id) - assert sad_result == False - - -@pytest.mark.order(get_order_number("sdk_log_training_dataset")) -def test_sdk_log_training_dataset(client): - mock_model_id = "mock_model_id" - df = pd.read_csv("whitebox/analytics/data/testing/classification_test_data.csv") - - with requests_mock.Mocker() as m: - m.post( - url=f"{state_sdk.wb.host}/v1/dataset-rows", - headers={"api-key": state_sdk.wb.api_key}, - status_code=status.HTTP_201_CREATED, - ) - - happy_result = state_sdk.wb.log_training_dataset( - model_id=mock_model_id, processed=df, non_processed=df - ) - assert happy_result == True - - m.post( - url=f"{state_sdk.wb.host}/v1/dataset-rows", - headers={"api-key": state_sdk.wb.api_key}, - status_code=status.HTTP_400_BAD_REQUEST, - ) - - sad_result = state_sdk.wb.log_training_dataset( - model_id=mock_model_id, processed=df, non_processed=df - ) - assert sad_result == False - - # drop a row in df to test the dataframe length error handling - df2 = df.drop(df.index[0]) - with pytest.raises(Exception) as e_info: - state_sdk.wb.log_inferences( - model_id=mock_model_id, processed=df, non_processed=df2 - ) - - -@pytest.mark.order(get_order_number("sdk_log_inferences")) -def test_sdk_log_inferences(client): - mock_model_id = "mock_model_id" - df = pd.read_csv("whitebox/analytics/data/testing/classification_test_data.csv") - - with requests_mock.Mocker() as m: - m.post( - url=f"{state_sdk.wb.host}/v1/inference-rows/batch", - headers={"api-key": state_sdk.wb.api_key}, - status_code=status.HTTP_201_CREATED, - ) - - happy_result = state_sdk.wb.log_inferences( - model_id=mock_model_id, - processed=df, - non_processed=df, - timestamps=timestamps, - actuals=mixed_actuals, - ) - assert happy_result == True - - m.post( - url=f"{state_sdk.wb.host}/v1/inference-rows/batch", - headers={"api-key": state_sdk.wb.api_key}, - status_code=status.HTTP_400_BAD_REQUEST, - ) - - sad_result = state_sdk.wb.log_inferences( - model_id=mock_model_id, - processed=df, - non_processed=df, - timestamps=timestamps, - ) - assert sad_result == False - - # drop a row in df to test the dataframe length error handling - df2 = df.drop(df.index[0]) - with pytest.raises(Exception) as e_info: - state_sdk.wb.log_inferences( - model_id=mock_model_id, - processed=df, - non_processed=df2, - timestamps=timestamps, - actuals=mixed_actuals, - ) - - -@pytest.mark.order(get_order_number("sdk_create_model_monitor")) -def test_sdk_create_model_monitor(client): - with requests_mock.Mocker() as m: - m.post( - url=f"{state_sdk.wb.host}/v1/model-monitors", - json=model_monitor_concept_drift_create_payload, - headers={"api-key": state_sdk.wb.api_key}, - ) - - model_monitor = state_sdk.wb.create_model_monitor( - model_id="mock_model_id", - name="test", - status=MonitorStatus.active, - metric=MonitorMetrics.accuracy, - feature="feature1", - lower_threshold=0.7, - severity=AlertSeverity.high, - email="jackie.chan@chinamail.io", - ) - - assert model_monitor is not None - - -@pytest.mark.order(get_order_number("sdk_update_model_monitor")) -def test_sdk_update_model_monitor(client): - mock_model_monitor_id = "mock_model_monitor_id" - - with requests_mock.Mocker() as m: - m.put( - url=f"{state_sdk.wb.host}/v1/model-monitors/{mock_model_monitor_id}", - json=model_monitor_update_payload, - headers={"api-key": state_sdk.wb.api_key}, - ) - - happy_result = state_sdk.wb.update_model_monitor( - model_monitor_id=mock_model_monitor_id, - name="concept drift monitor updated", - lower_threshold=0.54, - ) - - assert happy_result == True - - m.put( - url=f"{state_sdk.wb.host}/v1/model-monitors/{mock_model_monitor_id}", - json=model_monitor_update_payload, - headers={"api-key": state_sdk.wb.api_key}, - status_code=status.HTTP_400_BAD_REQUEST, - ) - - sad_result = state_sdk.wb.update_model_monitor( - model_monitor_id=mock_model_monitor_id, - name="concept drift monitor updated", - lower_threshold=0.54, - ) - - assert sad_result == False - - -@pytest.mark.order(get_order_number("sdk_delete_model_monitor")) -def test_sdk_delete_model_monitor(client): - mock_model_monitor_id = "mock_model_monitor_id" - - with requests_mock.Mocker() as m: - m.delete( - url=f"{state_sdk.wb.host}/v1/model-monitors/{mock_model_monitor_id}", - headers={"api-key": state_sdk.wb.api_key}, - status_code=status.HTTP_200_OK, - ) - - happy_result = state_sdk.wb.delete_model_monitor( - model_monitor_id=mock_model_monitor_id - ) - assert happy_result == True - - m.delete( - url=f"{state_sdk.wb.host}/v1/model-monitors/{mock_model_monitor_id}", - headers={"api-key": state_sdk.wb.api_key}, - status_code=status.HTTP_400_BAD_REQUEST, - ) - - sad_result = state_sdk.wb.delete_model_monitor( - model_monitor_id=mock_model_monitor_id - ) - assert sad_result == False - - -@pytest.mark.order(get_order_number("sdk_get_alerts")) -def test_sdk_get_alerts(client): - mock_model_id = "mock_model_id" - with requests_mock.Mocker() as m: - m.get( - url=f"{state_sdk.wb.host}/v1/alerts?model_id={mock_model_id}", - headers={"api-key": state_sdk.wb.api_key}, - status_code=status.HTTP_404_NOT_FOUND, - ) - - not_found_result = state_sdk.wb.get_alerts(model_id=mock_model_id) - - assert not_found_result == None - - m.get( - url=f"{state_sdk.wb.host}/v1/alerts?model_id={mock_model_id}", - headers={"api-key": state_sdk.wb.api_key}, - json=alert_payload, - ) - - alert = state_sdk.wb.get_alerts(model_id=mock_model_id) - - assert alert == alert_payload - - -@pytest.mark.order(get_order_number("sdk_get_drifting_metrics")) -def test_sdk_get_drifting_metrics(client): - mock_model_id = "mock_model_id" - with requests_mock.Mocker() as m: - m.get( - url=f"{state_sdk.wb.host}/v1/drifting-metrics?model_id={mock_model_id}", - headers={"api-key": state_sdk.wb.api_key}, - status_code=status.HTTP_404_NOT_FOUND, - ) - - not_found_result = state_sdk.wb.get_drifting_metrics(model_id=mock_model_id) - - assert not_found_result == None - - m.get( - url=f"{state_sdk.wb.host}/v1/drifting-metrics?model_id={mock_model_id}", - headers={"api-key": state_sdk.wb.api_key}, - json=drifting_metrics_report_payload, - ) - - drifting_report = state_sdk.wb.get_drifting_metrics(model_id=mock_model_id) - - assert drifting_report == drifting_metrics_report_payload - - -@pytest.mark.order(get_order_number("sdk_get_descriptive_statistics")) -def test_sdk_get_descriptive_statistics(client): - mock_model_id = "mock_model_id" - with requests_mock.Mocker() as m: - m.get( - url=f"{state_sdk.wb.host}/v1/model-integrity-metrics?model_id={mock_model_id}", - headers={"api-key": state_sdk.wb.api_key}, - status_code=status.HTTP_404_NOT_FOUND, - ) - - not_found_result = state_sdk.wb.get_descriptive_statistics( - model_id=mock_model_id - ) - - assert not_found_result == None - - m.get( - url=f"{state_sdk.wb.host}/v1/model-integrity-metrics?model_id={mock_model_id}", - headers={"api-key": state_sdk.wb.api_key}, - json=descriptive_statistics_report_payload, - ) - - descriptive_report = state_sdk.wb.get_descriptive_statistics( - model_id=mock_model_id - ) - - assert descriptive_report == descriptive_statistics_report_payload - - -@pytest.mark.order(get_order_number("sdk_get_performance_metrics")) -def test_sdk_get_performance_metrics(client): - mock_model_id = "mock_model_id" - with requests_mock.Mocker() as m: - m.get( - url=f"{state_sdk.wb.host}/v1/performance-metrics?model_id={mock_model_id}", - headers={"api-key": state_sdk.wb.api_key}, - status_code=status.HTTP_404_NOT_FOUND, - ) - - not_found_result = state_sdk.wb.get_performance_metrics(model_id=mock_model_id) - - assert not_found_result == None - - m.get( - url=f"{state_sdk.wb.host}/v1/performance-metrics?model_id={mock_model_id}", - headers={"api-key": state_sdk.wb.api_key}, - json=performance_metrics_report_payload, - ) - - performance_report = state_sdk.wb.get_performance_metrics( - model_id=mock_model_id - ) - - assert performance_report == performance_metrics_report_payload - - -@pytest.mark.order(get_order_number("sdk_get_xai_row")) -def test_sdk_get_xai_row(client): - mock_inference_id = "mock_inference_id" - with requests_mock.Mocker() as m: - m.get( - url=f"{state_sdk.wb.host}/v1/inference-rows/{mock_inference_id}/xai", - headers={"api-key": state_sdk.wb.api_key}, - status_code=status.HTTP_404_NOT_FOUND, - ) - - not_found_result = state_sdk.wb.get_xai_row(inference_row_id=mock_inference_id) - - assert not_found_result == None - - m.get( - url=f"{state_sdk.wb.host}/v1/inference-rows/{mock_inference_id}/xai", - headers={"api-key": state_sdk.wb.api_key}, - json=inference_row_xai_payload, - ) - - xai = state_sdk.wb.get_xai_row(inference_row_id=mock_inference_id) - - assert xai == inference_row_xai_payload diff --git a/whitebox/utils/__init__.py b/whitebox/utils/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/whitebox/utils/errors.py b/whitebox/utils/errors.py deleted file mode 100644 index 6b7c050..0000000 --- a/whitebox/utils/errors.py +++ /dev/null @@ -1,124 +0,0 @@ -from typing import List -from fastapi import status -from fastapi.encoders import jsonable_encoder -from fastapi.responses import JSONResponse -from starlette.exceptions import HTTPException as StarletteHTTPException -from fastapi.exceptions import HTTPException -from starlette.requests import Request -from whitebox.schemas.utils import ErrorProps -from whitebox.utils.logger import log - - -class CustomError(BaseException): - async def http_exception_handler( - self, _: Request, exc: StarletteHTTPException - ) -> ErrorProps: - log.error(f"{exc.status_code}: {exc.detail}") - return JSONResponse( - status_code=exc.status_code, - content=jsonable_encoder( - {"error": f"{str(exc.detail)}", "status_code": exc.status_code} - ), - ) - - async def validation_exception_handler( - self, - _: Request, - exc: HTTPException, - ) -> ErrorProps: - responsible_value = exc.errors()[0]["loc"][-1] - reason = exc.errors()[0]["msg"] - log.error( - f"{status.HTTP_422_UNPROCESSABLE_ENTITY}: ({str(responsible_value)}) {str(reason)}" - ) - return JSONResponse( - status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, - content=jsonable_encoder( - { - "error": f"({str(responsible_value)}) {str(reason)}", - "status_code": status.HTTP_422_UNPROCESSABLE_ENTITY, - } - ), - ) - - def bad_request(self, msg: str = "Bad request") -> ErrorProps: - log.error(f"{status.HTTP_400_BAD_REQUEST}: {str(msg)}") - return JSONResponse( - status_code=status.HTTP_400_BAD_REQUEST, - content=jsonable_encoder( - {"error": str(msg), "status_code": status.HTTP_400_BAD_REQUEST} - ), - ) - - def not_found(self, msg: str = "Content not found") -> ErrorProps: - log.error(f"{status.HTTP_404_NOT_FOUND}: {str(msg)}") - return JSONResponse( - status_code=status.HTTP_404_NOT_FOUND, - content=jsonable_encoder( - {"error": str(msg), "status_code": status.HTTP_404_NOT_FOUND} - ), - ) - - -errors = CustomError() - - -def add_error_responses(status_codes) -> List[ErrorProps]: - """ - For the schema to work the part after schemas/ should correspond to a title error schema in whitebox/api/app/v1/docs.py - """ - - error_responses = { - 400: { - "description": "Bad Request", - "content": { - "application/json": { - "schema": {"$ref": "#/components/schemas/BadRequest"} - } - }, - }, - 401: { - "description": "Authorization Error", - "content": { - "application/json": { - "schema": {"$ref": "#/components/schemas/AuthorizationError"} - } - }, - }, - 404: { - "description": "Not Found Error", - "content": { - "application/json": { - "schema": {"$ref": "#/components/schemas/NotFoundError"} - } - }, - }, - 409: { - "description": "Conflict Error", - "content": { - "application/json": { - "schema": {"$ref": "#/components/schemas/ConflictError"} - } - }, - }, - 410: { - "description": "Content Gone", - "content": { - "application/json": { - "schema": {"$ref": "#/components/schemas/ContenGone"} - } - }, - }, - 422: { - "description": "Validation Error", - "content": { - "application/json": { - "schema": {"$ref": "#/components/schemas/HTTPValidationError"} - } - }, - }, - } - responses = {} - for code in status_codes: - responses[code] = error_responses[code] - return responses diff --git a/whitebox/utils/exceptions.py b/whitebox/utils/exceptions.py deleted file mode 100644 index 8268fa0..0000000 --- a/whitebox/utils/exceptions.py +++ /dev/null @@ -1,10 +0,0 @@ -class TaskAlreadyRunningException(Exception): - pass - - -class TaskNotFoundException(Exception): - pass - - -class TaskNotRunningException(Exception): - pass diff --git a/whitebox/utils/id_gen.py b/whitebox/utils/id_gen.py deleted file mode 100644 index 9ec92e6..0000000 --- a/whitebox/utils/id_gen.py +++ /dev/null @@ -1,5 +0,0 @@ -from uuid import uuid4 - - -def generate_uuid(): - return str(uuid4()) diff --git a/whitebox/utils/logger.py b/whitebox/utils/logger.py deleted file mode 100644 index 8326174..0000000 --- a/whitebox/utils/logger.py +++ /dev/null @@ -1,21 +0,0 @@ -from colorama import Fore, Back, Style -import logging - - -class Logger: - def info(self, info): - print(Fore.LIGHTBLUE_EX + "INFO" + Fore.BLACK + ":" + 4 * " ", info) - - def error(self, error): - print(Fore.RED + "ERROR" + Fore.BLACK + ":" + 3 * " ", error) - - def success(self, msg): - print(Fore.GREEN + "SUCCESS" + Fore.BLACK + ":" + 1 * " ", msg) - - -log = Logger() - - -logging.basicConfig(level="INFO") - -cronLogger = logging.getLogger("cron") diff --git a/whitebox/utils/passwords.py b/whitebox/utils/passwords.py deleted file mode 100644 index 3386dd2..0000000 --- a/whitebox/utils/passwords.py +++ /dev/null @@ -1,42 +0,0 @@ -from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes -from cryptography.hazmat.primitives import padding -from cryptography.hazmat.backends import default_backend -import secrets -from whitebox.core.settings import get_settings - - -settings = get_settings() - - -def to_utf8(ps): - return ps.encode("utf-8") - - -def encrypt_api_key(password: str, key: bytes) -> str: - iv = secrets.token_bytes(16) - cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend()) - encryptor = cipher.encryptor() - padder = padding.PKCS7(128).padder() - padded_data = padder.update(to_utf8(password)) + padder.finalize() - ct = encryptor.update(padded_data) + encryptor.finalize() - return (iv + ct).hex() - - -def decrypt_api_key(password: str, key: bytes) -> str: - ct = bytes.fromhex(password) - iv = ct[:16] - ct = ct[16:] - cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend()) - decryptor = cipher.decryptor() - pt = decryptor.update(ct) + decryptor.finalize() - unpadder = padding.PKCS7(128).unpadder() - data = unpadder.update(pt) + unpadder.finalize() - return data.decode("utf-8") - - -def passwords_match(api_key_in_db: str, api_key_in_headers: str): - if not settings.SECRET_KEY: - return api_key_in_db == api_key_in_headers - - api_key = decrypt_api_key(api_key_in_db, settings.SECRET_KEY.encode()) - return api_key == api_key_in_headers