diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..6035690 Binary files /dev/null and b/.DS_Store differ diff --git a/README.md b/README.md index d84cb36..7d58221 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,35 @@ -# sugartrail -Network analysis tool for locating suspicious directors, locations and companies via Companies House +# Sugartrail + +## Tool Description + +Sugartrail is a work-in-progress network analysis tool and workflow that helps researchers to use a suspicious company director to discover other suspicious companies, directors and locations through Companies House. + +The workflow is based on the following observations: + +- suspicious directors often have many active appointments registered to multiple historic addresses +- addresses with many registered businesses can contain multiple scam businesses + +## Requirements + +You will require an API key from Companies House to authenticate with the API. First you will need to create a live application to get an API key which you can do by following the [Companies House guide](https://developer.company-information.service.gov.uk/how-to-create-an-application). You will then need to manually hard-code the API key inside the `sugartrail.py` script as the value for `access_token`. + +## Installation + +1. Make sure you have Conda installed + +2. Download the tool's repository using the command: + +```bash +git clone https://github.com/ribenamaplesyrup/sugartrail.git +``` + +3. Navigate to the main directory and run: + +```bash +conda env create -f environment.yml +conda activate candystore +``` + +## Usage + +- A walkthrough of how to use the tool is included in the linked Jupyter notebook showing how we can get from suspicious Candy Stores of Oxford Street to several prolific scammers. diff --git a/Tutorial 1 - Exit Through the Candy Shop.ipynb b/Tutorial 1 - Exit Through the Candy Shop.ipynb new file mode 100644 index 0000000..f8f7223 --- /dev/null +++ b/Tutorial 1 - Exit Through the Candy Shop.ipynb @@ -0,0 +1,1529 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "1e5d8ed4", + "metadata": {}, + "source": [ + "*In this tutorial, we will use the tool to input a suspicious business owner and use them to discover other suspicious business owners who use similar addresses and behavoir to register businesses*" + ] + }, + { + "cell_type": "markdown", + "id": "e65d7c27", + "metadata": {}, + "source": [ + "## Introduction \n", + "\n", + "We will begin our journey on Oxford Street in central London, a street that until recently was regarded as the cities premier shopping destination, which over the past two years has seen the opening of a suprising number of American sweet shops to the dislike of many citizens and local authorities. The shops have attracted negative attention for a number of reasons including extortionate prices, out of date/counterfeit products and opaque finances that have led Westminster council to claim they are [overdue £7.9 million](https://www.ft.com/candy) in business rates from 30 sweet shops in the area.\n", + "\n", + "*Kingdom of Sweets* is one store in particular that came under scrutiny recently for unpaid taxes. The [mysterious owner](https://find-and-update.company-information.service.gov.uk/officers/Nd2URspq4bvLy-hwzDZ0_p7FGJw/appointments) of the business has a prolific record of directing many companies that fended off compulsary strike-offs and [failed to pay millions in business rates](https://www.ft.com/content/3d338904-6036-4326-a786-971464907f14). This questionable business owner will serve as the input to our hunt to find other individuals." + ] + }, + { + "cell_type": "markdown", + "id": "64d59901", + "metadata": {}, + "source": [ + "![title](assets/candyy.jpeg)" + ] + }, + { + "cell_type": "markdown", + "id": "2d6d7178", + "metadata": {}, + "source": [ + "To get started you can input your Companies House API key below:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "db1561a0", + "metadata": {}, + "outputs": [], + "source": [ + "access_token = \"829952e2-23ab-44ab-b6e3-efb57f2fceb7\"" + ] + }, + { + "cell_type": "markdown", + "id": "29c0a1d2", + "metadata": {}, + "source": [ + "We will begin by using the director of *Kingdom of Sweets* as input. To get other directors, we will follow the following pattern: " + ] + }, + { + "cell_type": "markdown", + "id": "4496ff67", + "metadata": {}, + "source": [ + "officer -> `get_companies`(officer) -> `get_addresses`(companies) -> `get_companies`(addresses) -> `get_officers`(companies) -> officers" + ] + }, + { + "cell_type": "markdown", + "id": "f3d1d34e", + "metadata": {}, + "source": [ + "Every officer in Companies House has a unique ID which we can find from their URL. For instance we are interested in this URL: \"https://find-and-update.company-information.service.gov.uk/officers/Nd2URspq4bvLy-hwzDZ0_p7FGJw/appointments\", and the `officer_id` value is contained in the URL and is: \"Nd2URspq4bvLy-hwzDZ0_p7FGJw\"" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "edf3f674", + "metadata": {}, + "outputs": [], + "source": [ + "officer_id = \"Nd2URspq4bvLy-hwzDZ0_p7FGJw\"" + ] + }, + { + "cell_type": "markdown", + "id": "d7ab7be7", + "metadata": {}, + "source": [ + "API accepts authentication through basic auth where the access_token is `username` and `password` is left blank. We also include a `size` parameter set to the maximum of 5000 to ensure we get as many results from the API as possible. " + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "30123a7f", + "metadata": {}, + "outputs": [], + "source": [ + "from sugartrail import *" + ] + }, + { + "cell_type": "markdown", + "id": "995bcc63", + "metadata": {}, + "source": [ + "When we input the `officer_id`, `get_appointments()` will get all the appointments for the officer and also print some metadata. " + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "a61af765", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "30 appointments\n", + "28 active appointments\n" + ] + } + ], + "source": [ + "companies = get_appointments(officer_id)" + ] + }, + { + "cell_type": "markdown", + "id": "3ecc7a6d", + "metadata": {}, + "source": [ + "28 director roles is impressive workload! Now lets check out the correspondance address and registered address for these businesses: " + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "04696e86", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "6 unique postcodes\n", + "10 unique correspondance addresses\n", + "{'8 Segedunum Business Centre, Station Road, Wallsend, United Kingdom, NE28 6HQ': 8, '220, Consultancy House, Ilford, United Kingdom, IG2 7DY': 7, '220, Consultancy House, Ilford, England, IG2 7DY': 5, 'Burnards Accountants, 8 Segedunum Business Centre, Wallsend, England, NE28 6HQ': 3, '3rd Floor, 207, Regent Street, London, England, W1B 3HH': 2, '3rd Floor, 13 Charles Ii Street, London, England, SW1Y 4QU': 1, '13 Charles Ii Street, 3rd Floor, London, England, SW1Y 4QU': 1, '8 Segedunum Business Centre, Station Road, Wallsend, England, NE28 6HQ': 1, 'Burnard Accountants, 8 Bankside Building, Segedunum Business Centre, Wallsend, United Kingdom, NE28 6HQ': 1, '8 Bankside Bldg Segedunum Business Centre, Station Road, Wallsend, England, NE28 6HQ': 1}\n" + ] + } + ], + "source": [ + "correspondance_addresses = get_locations(companies,\"correspondance\")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "e9969b87", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3 unique postcodes\n", + "8 unique registered addresses\n", + "{'220 Consultancy House, Wards Road, England, Ilford, IG2 7DY': 10, '220 Consultancy House, Wards Road, United Kingdom, Ilford, IG2 7DY': 9, '220 Consultancy House Wards Road, Ilford, IG2 7DY': 3, '3rd Floor 13 Charles Ii Street, England, London, SW1Y 4QU': 2, 'Consultancy House, 220 Wards Road, United Kingdom, Ilford, IG2 7DY': 2, 'C/O BDO LLP, 5 Temple Square Temple Street, Liverpool, L2 5RH': 2, '13 Charles Ii Street 3rd Floor, Charles Ii Street, England, London, SW1Y 4QU': 1, '220 Consultancy House, Wards Road, Ilford, IG2 7DY': 1}\n" + ] + } + ], + "source": [ + "registered_addresses = get_locations(companies, \"registered\")" + ] + }, + { + "cell_type": "markdown", + "id": "a02178e7", + "metadata": {}, + "source": [ + "We can see our director has many businesses registered to the same addresses. Also a number of these addresses are the same address with alternative details, for instance, in total 25 of businesses are registered to 220 Consultancy House in Ilford which is listed under a number of different variations. As we can see from the postcodes, there are only 6 unique correspondance addresses and 3 unique registered addresses for the 30 businesses under the director's name. " + ] + }, + { + "cell_type": "markdown", + "id": "8fc53814", + "metadata": {}, + "source": [ + "![title](assets/consultancy_house.png)" + ] + }, + { + "cell_type": "markdown", + "id": "bc3f280e", + "metadata": {}, + "source": [ + "Now we want to see the businesses that are listed at each of the locations we've found. We can combine both correspondance and registered addresses: " + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "4ddce5bd", + "metadata": {}, + "outputs": [], + "source": [ + "addresses = list(set(correspondance_addresses + registered_addresses))" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "c60007f1", + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Index: 0\n", + "3rd Floor, 207, Regent Street, London, England, W1B 3HH\n", + "4685 companies registered or corresponding here, 1443 are active.\n", + "321 currently active companies registered in 2021\n", + "292 currently active companies registered in 2022\n", + "216 currently active companies registered in 2020\n", + "2211 companies dissolved between years 2-1\n", + "464 companies dissolved between years 3-2\n", + "174 companies dissolved between years 1-0\n", + "\n", + "Index: 1\n", + "C/O BDO LLP, 5 Temple Square Temple Street, Liverpool, L2 5RH\n", + "599 companies registered or corresponding here, 2 are active.\n", + "2 currently active companies registered in 1999\n", + "9 companies dissolved between years 12-11\n", + "8 companies dissolved between years 10-9\n", + "8 companies dissolved between years 20-19\n", + "\n", + "Index: 2\n", + "8 Segedunum Business Centre, Station Road, Wallsend, United Kingdom, NE28 6HQ\n", + "189 companies registered or corresponding here, 138 are active.\n", + "31 currently active companies registered in 2021\n", + "19 currently active companies registered in 2019\n", + "16 currently active companies registered in 2022\n", + "17 companies dissolved between years 2-1\n", + "12 companies dissolved between years 3-2\n", + "5 companies dissolved between years 4-3\n", + "\n", + "Index: 3\n", + "8 Segedunum Business Centre, Station Road, Wallsend, England, NE28 6HQ\n", + "62 companies registered or corresponding here, 39 are active.\n", + "8 currently active companies registered in 2019\n", + "8 currently active companies registered in 2020\n", + "7 currently active companies registered in 2018\n", + "8 companies dissolved between years 2-1\n", + "4 companies dissolved between years 3-2\n", + "3 companies dissolved between years 4-3\n", + "\n", + "Index: 4\n", + "220 Consultancy House, Wards Road, Ilford, IG2 7DY\n", + "33 companies registered or corresponding here, 32 are active.\n", + "6 currently active companies registered in 2016\n", + "5 currently active companies registered in 2012\n", + "4 currently active companies registered in 2010\n", + "1 companies dissolved between years 4-3\n", + "\n", + "Index: 5\n", + "220 Consultancy House Wards Road, Ilford, IG2 7DY\n", + "33 companies registered or corresponding here, 32 are active.\n", + "6 currently active companies registered in 2016\n", + "5 currently active companies registered in 2012\n", + "4 currently active companies registered in 2010\n", + "1 companies dissolved between years 4-3\n", + "\n", + "Index: 6\n", + "220 Consultancy House, Wards Road, England, Ilford, IG2 7DY\n", + "14 companies registered or corresponding here, 14 are active.\n", + "3 currently active companies registered in 2012\n", + "3 currently active companies registered in 2016\n", + "2 currently active companies registered in 2010\n", + "\n", + "Index: 7\n", + "220, Consultancy House, Ilford, England, IG2 7DY\n", + "14 companies registered or corresponding here, 14 are active.\n", + "3 currently active companies registered in 2012\n", + "3 currently active companies registered in 2016\n", + "2 currently active companies registered in 2010\n", + "\n", + "Index: 8\n", + "220 Consultancy House, Wards Road, United Kingdom, Ilford, IG2 7DY\n", + "13 companies registered or corresponding here, 13 are active.\n", + "3 currently active companies registered in 2019\n", + "2 currently active companies registered in 2016\n", + "2 currently active companies registered in 2010\n", + "\n", + "Index: 9\n", + "Consultancy House, 220 Wards Road, United Kingdom, Ilford, IG2 7DY\n", + "13 companies registered or corresponding here, 13 are active.\n", + "3 currently active companies registered in 2019\n", + "2 currently active companies registered in 2016\n", + "2 currently active companies registered in 2010\n", + "\n", + "Index: 10\n", + "220, Consultancy House, Ilford, United Kingdom, IG2 7DY\n", + "13 companies registered or corresponding here, 13 are active.\n", + "3 currently active companies registered in 2019\n", + "2 currently active companies registered in 2016\n", + "2 currently active companies registered in 2010\n", + "\n", + "Index: 11\n", + "13 Charles Ii Street, 3rd Floor, London, England, SW1Y 4QU\n", + "3 companies registered or corresponding here, 3 are active.\n", + "2 currently active companies registered in 2020\n", + "1 currently active companies registered in 2017\n", + "\n", + "Index: 12\n", + "13 Charles Ii Street 3rd Floor, Charles Ii Street, England, London, SW1Y 4QU\n", + "3 companies registered or corresponding here, 3 are active.\n", + "2 currently active companies registered in 2020\n", + "1 currently active companies registered in 2017\n", + "\n", + "Index: 13\n", + "3rd Floor 13 Charles Ii Street, England, London, SW1Y 4QU\n", + "3 companies registered or corresponding here, 3 are active.\n", + "2 currently active companies registered in 2020\n", + "1 currently active companies registered in 2017\n", + "\n", + "Index: 14\n", + "3rd Floor, 13 Charles Ii Street, London, England, SW1Y 4QU\n", + "3 companies registered or corresponding here, 3 are active.\n", + "2 currently active companies registered in 2020\n", + "1 currently active companies registered in 2017\n", + "\n" + ] + } + ], + "source": [ + "companies = get_companies(addresses)" + ] + }, + { + "cell_type": "markdown", + "id": "4f1c6bdf", + "metadata": {}, + "source": [ + "One location that stands out by an absolute mile is \"3rd Floor, 207, Regent Street\", which a quick Google Search reveals is a \"virtual office\" run by a company called [Hold Everything](https://www.hold-everything.com/) where businesses can set as a their correspondance address/registered address for £24 a month. They basically just forward your mail on so you can say you have an office on Regent Street. There's even a single board room you can book:" + ] + }, + { + "cell_type": "markdown", + "id": "cb585f3c", + "metadata": {}, + "source": [ + "![title](assets/hold.png)" + ] + }, + { + "cell_type": "markdown", + "id": "ec0fb676", + "metadata": {}, + "source": [ + "The address gives the impression of legitimacy and exclusivity:" + ] + }, + { + "cell_type": "markdown", + "id": "97f7f7d2", + "metadata": {}, + "source": [ + "![title](assets/exclusive.png)" + ] + }, + { + "cell_type": "markdown", + "id": "5dfbd701", + "metadata": {}, + "source": [ + "Although there are many customers of businesses registered at 207 Regent Street who have experienced scams or poor customer service and don't acknowledge the address is only a mailbox and board room: " + ] + }, + { + "cell_type": "markdown", + "id": "2d799bdc", + "metadata": {}, + "source": [ + "![title](assets/review.png)" + ] + }, + { + "cell_type": "markdown", + "id": "24b4f250", + "metadata": {}, + "source": [ + "Last year the [Daily Mail](https://www.hold-everything.com/) reported on the address and the prevalence of scam businesses registered there: " + ] + }, + { + "cell_type": "markdown", + "id": "ba11e456", + "metadata": {}, + "source": [ + "![title](assets/dm.png)" + ] + }, + { + "cell_type": "markdown", + "id": "514cbf17", + "metadata": {}, + "source": [ + "Now lets get all the officers that operate at this address:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "51fd6d0c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "completion: 48.60192102454643, index:2277\n", + "\n" + ] + } + ], + "source": [ + "businesses = get_officers(companies,[0])" + ] + }, + { + "cell_type": "markdown", + "id": "51d40e8b", + "metadata": {}, + "source": [ + "It might take a while to run this search on '207 Regent Street' but once we do, we should find some interesting names coming up in our most prolific searchers list (attached full output from a previous run at the bottom of page):" + ] + }, + { + "cell_type": "markdown", + "id": "5216819b", + "metadata": {}, + "source": [ + "Stuart POPPLETON\n", + "\n", + "- Prolific scammer\n", + "- Included in [paradise papers](https://offshoreleaks.icij.org/nodes/56044558)\n", + "- Linked to Bulgarian energy oligarch currently seeking 110 millions euros from Serbias government\n", + "- TradeInvest90 - [crypto scam](https://www.forexpeacearmy.com/community/threads/scammed-by-tradeinvest90.53201/)\n", + "- Also known as Neil Malcolm Stuart John - associated with printing scams for companies such as [UK Print Ltd](http://planettrevormontague.blogspot.com/2016/12/beware-clair-rosina-hunnisett-and-neil.html), [Printed Books Ltd, Offset Printers Ltd](https://www.printweek.com/news/article/print-farming-companies-struck-off)\n", + "- Alongside partner been been referred to as the ['Bonnie and Clyde'](https://www.printmonthly.co.uk/News/Business/5792/exposed-unethical-print) of the print industry \n", + "- Google Streetview photograph below from current location where many companies are registered. Can see someone peaking out the window :D" + ] + }, + { + "cell_type": "markdown", + "id": "5f96e8f8", + "metadata": {}, + "source": [ + "![title](assets/euro.png)" + ] + }, + { + "cell_type": "markdown", + "id": "8dd26598", + "metadata": {}, + "source": [ + "HELVE TCS LIMITED\n", + "\n", + "- Julian Richard BEARDSLEY (director) was found guilty of fraud and money related offences and sentenced to four and half years’ imprisonment at Southwark Crown Court and was disqualified from being a Company Director for 6 years. Daventry fraudster's part in £2.1 million investment and diamond scams which [robbed elderly and vulnerable victims' life savings](https://www.northamptonchron.co.uk/news/crime/fraudsters-part-in-ps21m-scams-robbing-elderly-victims-life-savings-3591064)." + ] + }, + { + "cell_type": "markdown", + "id": "e162d568", + "metadata": {}, + "source": [ + "![title](assets/diamond.png)" + ] + }, + { + "cell_type": "markdown", + "id": "09246438", + "metadata": {}, + "source": [ + "Full output of most prolific business owners operating from 207 Regent Street:" + ] + }, + { + "cell_type": "markdown", + "id": "c3bb144b", + "metadata": {}, + "source": [ + "{'CT SECRETARIES LIMITED': 182,\n", + " 'POPPLETON, Stuart Ralph': 68,\n", + " 'POPPLETON, Stuart': 53,\n", + " 'CT SECRETARIES LTD.': 46,\n", + " 'HELVE TCS LIMITED': 35,\n", + " 'ARORA, Josh Ajit Singh': 32,\n", + " 'COOPER, Sarah': 28,\n", + " 'CORPORATE AFFAIRS HANDLING LIMITED': 22,\n", + " 'SLEEK TECHNOLOGY LTD': 18,\n", + " 'TEMPLE SECRETARIES LIMITED': 16,\n", + " 'KAPOOR, Rajinder Pal Singh': 14,\n", + " 'HARTMAN, Alexander James': 14,\n", + " 'SACHS, Francis David': 12,\n", + " 'HUGHES, Christopher Paul': 11,\n", + " 'COMPANY DIRECTORS LIMITED': 11,\n", + " 'KOONES, Charles Crowley': 11,\n", + " 'MILGROM, Marc David': 11,\n", + " 'APPLETON SECRETARIES LIMITED': 10,\n", + " 'HODGKINSON, Paul Roger Dudley': 10,\n", + " 'INCORPORATE SECRETARIAT LIMITED': 10,\n", + " 'GATCH, Eric Ian': 10,\n", + " 'NEDELJKOVIC, Milan': 10,\n", + " 'SEWARDS, David': 8,\n", + " 'PHILLIPS, Justin Myles Jonathan': 8,\n", + " 'MILLWARD INVESTMENTS LIMITED': 8,\n", + " 'HICKSON, Katherine Anne': 8,\n", + " 'GOLDFINCH, Paul Anthony James': 8,\n", + " 'OUDDIR, Abderrahim': 8,\n", + " '7SIDE SECRETARIAL LIMITED': 7,\n", + " 'PETRE-MEARS, Sarah Louise': 7,\n", + " 'LEBE, Russell Simon': 7,\n", + " 'LIAW, Shelly': 7,\n", + " 'CLUBE, Laurence Murray': 6,\n", + " 'HERN, Jeanette': 6,\n", + " 'KLEINMAN, Darrin Andrew': 6,\n", + " 'GROUPWISE LIMITED': 6,\n", + " 'SCARF, Peter Michael': 6,\n", + " 'ATIENO, Taiwo Leo': 6,\n", + " 'PANDIA, Sumit': 6,\n", + " 'CORNHILL SECRETARIES LIMITED': 5,\n", + " 'CUNNINGHAM, Alastair Matthew': 5,\n", + " 'HOLLANDER, Colin Ivan': 5,\n", + " 'ARORA, Harmeena': 5,\n", + " 'FORM 10 SECRETARIES FD LTD': 5,\n", + " 'FORM 10 DIRECTORS FD LTD': 5,\n", + " 'GERARD, Bruno Andre, Joseph, Romain': 5,\n", + " 'BOURGEOT, Thierry Francois': 5,\n", + " 'SABIRY, Chafik': 5,\n", + " 'MARJANOVIC, Tomislav': 5,\n", + " 'SAUNDERS, Ashton': 5,\n", + " 'LANDAU, Elizabeth Heather': 5,\n", + " 'CHAPMAN, Craig': 5,\n", + " 'CHAPMAN, Craig John': 5,\n", + " 'JONES, Damien': 5,\n", + " 'NEWTON, Jamie': 5,\n", + " 'MORANO, Francois': 5,\n", + " 'ZAJOTTI, Francesco': 5,\n", + " 'BRUCE-MORGAN, Torsten Morris Tomas': 4,\n", + " 'MEADLEY, Nicola Joy': 4,\n", + " 'WILDERSPIN, Mark Paul': 4,\n", + " 'COOKE-PRIEST, James Robin Bruce': 4,\n", + " 'PEMEX SERVICES LIMITED': 4,\n", + " 'TARCHINI, Romain Joseph Michel': 4,\n", + " 'TULI, Suneet Singh': 4,\n", + " 'ALLAN, Angela Joyce': 4,\n", + " 'CRYSTAL COMMERCE SA': 4,\n", + " 'GUERNSEY CORPORATE SECRETARIES LIMITED': 4,\n", + " 'AMERIKANOS, Georgios': 4,\n", + " 'ZALES, Samuel': 4,\n", + " 'DAS, Utpal Kumar': 4,\n", + " 'LS BUSINESS SERVICES LIMITED': 4,\n", + " 'WARSHAW, Nicholas Anthony Beresford': 4,\n", + " 'SINGH, Kunwar Ajit': 4,\n", + " 'HOWELL, Rupert Cortlandt Spencer': 4,\n", + " 'MACHRAY, Philip James': 4,\n", + " 'TELLIEZ, Daniel Paul': 4,\n", + " 'BURKE, Daniel James': 4,\n", + " 'TAN, Colin': 4,\n", + " 'WEST, Timothy': 4,\n", + " 'MITCHELL, Mark': 4,\n", + " 'HUNTSMOOR LIMITED': 4,\n", + " 'HUNTSMOOR NOMINEES LIMITED': 4,\n", + " 'HCS SECRETARIAL LIMITED': 4,\n", + " 'PHILLIPS, Patricia Susan': 4,\n", + " 'NOMINEE SECRETARY LTD': 4,\n", + " 'PORTESS, Thor Hamilton Elick': 4,\n", + " 'BRANSON, Thomas Andy': 4,\n", + " 'STAYTON, Robert James Leslie': 4,\n", + " 'CUBITT, Sean': 4,\n", + " 'ARIZA-SANCTUARY, Rafael': 4,\n", + " 'BASSI, Manisha': 4,\n", + " 'COLE, Andrew': 4,\n", + " 'MALIK, Nadeem': 4,\n", + " 'CARRUTHERS, Matt': 4,\n", + " 'MISTRY, Bianca': 4,\n", + " 'WALLIS, Frances Jane': 4,\n", + " 'AL FURAIH, Naser, Dr': 4,\n", + " \"O'CONNOR, Nicholas\": 4,\n", + " 'CHISHOLM, Oreial': 4,\n", + " 'EMANUEL, Jerome': 4,\n", + " 'JANES, James': 4,\n", + " 'MARRI, Vijayanjan': 4,\n", + " 'MCINTOSH, Barrington': 4,\n", + " 'MORETON, Thomas': 4,\n", + " 'SEYMOUR, Gary Robert': 4,\n", + " 'VELAUTHAM, Kirikaran': 4,\n", + " 'WAI, King': 4,\n", + " 'WARRILOW, Thomas': 4,\n", + " 'CAPPE, Bertrand William': 4,\n", + " 'HERNANDES, Bernard Patrice': 4,\n", + " 'KAUR DOAL, Anjali': 4,\n", + " 'BOSOMWORTH, Danyl Lee': 3,\n", + " 'MARSON, Richard John': 3,\n", + " 'REEVE, Damon Andrew': 3,\n", + " 'RAHAMAN, Alexander': 3,\n", + " 'SWITZER, James Scott': 3,\n", + " 'HARVEY, Jayne Denise': 3,\n", + " 'HOMERIC LIMITED': 3,\n", + " 'CORNHILL REGISTRARS LIMITED': 3,\n", + " 'TERTHUR TRADING LIMITED': 3,\n", + " 'KEYSTONE INVESTMENTS LIMITED': 3,\n", + " 'APPLETON DIRECTORS LIMITED': 3,\n", + " 'AMOOTI, Kyamuwendo Elijah': 3,\n", + " 'GOLDFINCH, Scott James': 3,\n", + " 'TMP BUSINESS SERVICES LTD': 3,\n", + " 'MATHARU, Jaswinder Singh': 3,\n", + " 'ARORA, Chatter Singh': 3,\n", + " 'CALLAGHAN, Emma': 3,\n", + " 'HANOVER DIRECTORS LIMITED': 3,\n", + " 'SENATOR CAPITAL GROUP LLC': 3,\n", + " 'PASTERNAK, Robert Daniel': 3,\n", + " 'WILKINSON, Robert Ronald': 3,\n", + " 'DUFFY, James William': 3,\n", + " 'TECHNOLOGY LTD, Sleek': 3,\n", + " 'CARLSE, Ivan Trevor': 3,\n", + " 'MUSONDA, Rabecca Lubaya': 3,\n", + " 'GOODRICH, James': 3,\n", + " 'PASARIC, Marin': 3,\n", + " 'COM, Olivier': 3,\n", + " 'KITCHEN, Emma': 3,\n", + " 'KAHAN, Barbara': 3,\n", + " 'LONDON LAW SECRETARIAL LIMITED': 3,\n", + " 'RANDHAWA, Varinder Singh': 3,\n", + " 'GOUTARD, Anthony Joel': 3,\n", + " 'SPADA, Maria Cristina': 3,\n", + " 'SACHDEV, Byron Malik': 3,\n", + " 'BOAGE, Ian Neal': 3,\n", + " 'JEWELL, Malcolm Alec': 3,\n", + " 'JEVTOVIC, Zoran': 3,\n", + " 'CHESNEAU, Romann Franck': 3,\n", + " 'NOURI, Mourad Abderrahmane Maurice': 3,\n", + " 'THOMPSON, Bruce': 3,\n", + " 'SYMES, Darren': 3,\n", + " 'BARRASS-BROWN, Wayne Hunter': 3,\n", + " 'COLE, Jennifer': 3,\n", + " 'COTTERILL, Leigh Justin': 3,\n", + " 'TAYLOR, Dean': 3,\n", + " 'DAI, Jianfeng': 3,\n", + " 'ABREO, John': 3,\n", + " 'MANTEY, Guy-Michel': 3,\n", + " 'REID, Joash': 3,\n", + " 'OWARE, Chanel': 3,\n", + " 'PREEN, Melissa': 3,\n", + " 'SHAHI, Abhishek, Dr': 3,\n", + " 'SMITH, Andrew Raymond Marc': 3,\n", + " 'WALKER, Benjamin Alexander': 3,\n", + " 'WECKER, Jean-Marc Guy': 3,\n", + " 'DA SILVA COUTINHO, Konrad': 3,\n", + " 'HARISH, Casey': 3,\n", + " 'AHMAD, Adeel': 3,\n", + " 'AHMAD, Sajjad': 3,\n", + " 'ALAJMI, Khaled': 3,\n", + " 'ALMUTAIRI, Fahad': 3,\n", + " 'ARTIS, Graham': 3,\n", + " 'ATIENO, Taiwo': 3,\n", + " 'BALAYAN, Levon': 3,\n", + " 'BEVIS, Burint': 3,\n", + " 'BRESSLING, Andre': 3,\n", + " 'CHASTANET, Franck': 3,\n", + " 'HUDSON, Philip Lawrence Jack': 3,\n", + " 'CLAY, Simon Marc': 3,\n", + " 'GROSSMAN, Maxwell Aaron': 3,\n", + " 'COX, Geoffrey Allen': 3,\n", + " 'DIXON, Paul': 3,\n", + " 'MILLS, Michael John': 3,\n", + " 'JOHNS, Richard': 3,\n", + " 'MORRIS, Steve': 3,\n", + " 'ROBINSON, Mark': 3,\n", + " 'RAJA, Susie': 3,\n", + " 'RAWLINSON, Colin': 3,\n", + " 'SANGHA, Jasvinder': 3,\n", + " 'THOMAS, David Benjamin': 3,\n", + " 'TILLEY, Eathan': 3,\n", + " 'GURAZIU, Rudi': 3,\n", + " 'HAQUE, Mohammad': 3,\n", + " 'JAMES, Jonathon': 3,\n", + " 'CHALMERS, Andrew Craig': 2,\n", + " 'JACKSON, Nicholas': 2,\n", + " 'MCGRATH, Don Geoffrey': 2,\n", + " 'RAINEY, Samuel': 2,\n", + " 'WARD, Michael Joseph': 2,\n", + " 'METZGER, Joshua': 2,\n", + " 'CADOGAN, Timothy': 2,\n", + " 'GENTRY, John': 2,\n", + " 'GOMBOS, Rick': 2,\n", + " 'MCPHERSON, Douglas': 2,\n", + " 'SDG SECRETARIES LIMITED': 2,\n", + " 'BILEFIELD, James Daniel': 2,\n", + " 'IBRAHIMI, Khalil Ahmad': 2,\n", + " 'SDG REGISTRARS LIMITED': 2,\n", + " 'CHIMA, Parmeet Singh': 2,\n", + " 'NICHOLLS, William Richard Hardy': 2,\n", + " 'COMBINED SECRETARIAL SERVICES LIMITED': 2,\n", + " 'COOKE-PRIEST, James Robin': 2,\n", + " 'SOAR, Phil William': 2,\n", + " 'BLAIR, Charlotte Miranda Hacker': 2,\n", + " 'AGGARWAL, Nina': 2,\n", + " 'SOAMES, Christopher Paul': 2,\n", + " 'MERIDIAN SECRETARIES LTD': 2,\n", + " 'MERIDIAN PARTNERS LTD': 2,\n", + " 'CURRAN, Anthony': 2,\n", + " 'ALBANY MANAGERS LIMITED': 2,\n", + " 'ELSTOW INVESTMENTS LIMITED': 2,\n", + " 'COLCLOUGH, James Martin Joseph': 2,\n", + " 'SWIFT INCORPORATIONS LIMITED': 2,\n", + " 'INSTANT COMPANIES LIMITED': 2,\n", + " 'PERRET, Sylvie, Mme': 2,\n", + " 'STRUB, Wilhelm Irving': 2,\n", + " 'AMERSHAM SERVICES LIMITED': 2,\n", + " 'HALCO SECRETARIES LIMITED': 2,\n", + " 'TULI, Raja Singh': 2,\n", + " 'PETRIE, Rebecca': 2,\n", + " 'FIDUCIARY DIRECTORS LIMITED': 2,\n", + " 'EVANS, Glyn': 2,\n", + " 'BROWN, Michael': 2,\n", + " 'TILLEY, Jason': 2,\n", + " 'CHALFEN SECRETARIES LIMITED': 2,\n", + " 'CHALFEN NOMINEES LIMITED': 2,\n", + " 'ZAMORA, Javier Esquivel': 2,\n", + " 'ELDRIDGE, Andrea Lee': 2,\n", + " 'SYMONDS, Amanda Jane': 2,\n", + " 'FREDO, Scot': 2,\n", + " 'PATTON, Kathleen': 2,\n", + " 'KENNY, Kristen Victoria': 2,\n", + " 'TREVISAN, Jason Michael': 2,\n", + " 'MURASA, Rose': 2,\n", + " 'VANDEVELDE, Wim': 2,\n", + " 'SMITH, Andrew Donald': 2,\n", + " 'CHILDS, Maureen Anne': 2,\n", + " 'PRICE, Simon David': 2,\n", + " 'HEAP, Andrew Gordon': 2,\n", + " 'DELIA, Colin': 2,\n", + " 'THUILLARD, Jan': 2,\n", + " 'KUMAR, Manoj': 2,\n", + " 'MAVANI, Neeta Avinash': 2,\n", + " 'MILLERS ASSOCIATES LIMITED': 2,\n", + " 'ADEX, Samson Tosin': 2,\n", + " 'OJUOLAPE, James Ayo': 2,\n", + " 'STEANNE INDUSTRIES (OVERSEAS) LIMITED': 2,\n", + " 'HOLDEN, Daniel James': 2,\n", + " 'HOUGUEZ-SIMMONS, Jacqueline': 2,\n", + " 'MUSONDA, Chama Chilufya': 2,\n", + " 'MILLER, Andrew Michael': 2,\n", + " 'PHILLIPS, Louise Ann': 2,\n", + " 'OXLEY, Claire Ann Marie': 2,\n", + " 'BOURNE-TURNER, Kenneth Ian': 2,\n", + " 'COTTRELL, Gary Bernard': 2,\n", + " 'TURNER, Karen Louise': 2,\n", + " 'WILSON, Ray': 2,\n", + " 'CAPITAL SECURITIES LIMITED': 2,\n", + " 'FERRIS, Julie Ann': 2,\n", + " \"O'GRADY, John Francis\": 2,\n", + " 'BROADOAK DIRECTORS LIMITED': 2,\n", + " 'HOGG, Ian Christopher': 2,\n", + " 'PHILLIPS, Clive Anthony': 2,\n", + " 'BALAN, Floriana': 2,\n", + " 'HAMACHE, Mustapha': 2,\n", + " 'NOMINEE DIRECTOR LTD': 2,\n", + " 'HONOREM EXPERTISE SARL': 2,\n", + " 'HUNT, John Ferry Shackleton': 2,\n", + " 'SILVESTRI, Fabio': 2,\n", + " 'OWUSU-ANSAH, Joseph': 2,\n", + " 'MILL, George': 2,\n", + " 'FASSI FEHRI, Zeyd': 2,\n", + " 'MCMURRAY, Colin Andrew': 2,\n", + " 'UZOKWE, Izunna, Dr': 2,\n", + " 'AINSWORTH, Robert': 2,\n", + " 'HURWORTH, Aderyn': 2,\n", + " 'GASCOIGNE PEES, Robert': 2,\n", + " 'WILLIAMS, Mark Gillin': 2,\n", + " 'HABER, Jonathan': 2,\n", + " 'HOWLETT, Stephen': 2,\n", + " 'DUPORT SECRETARY LIMITED': 2,\n", + " 'DUPORT DIRECTOR LIMITED': 2,\n", + " 'TONEV, Boyan': 2,\n", + " 'RACHEV, Hristo Valentinov': 2,\n", + " 'KAPOOR, Pavan': 2,\n", + " 'KAPOOR, Raj': 2,\n", + " 'VAID, Lajdeep': 2,\n", + " 'KHANNA, Punita': 2,\n", + " 'KHANNA, Anshuraj': 2,\n", + " 'LOUW, Mark': 2,\n", + " 'MILLAR, Ryan Cary': 2,\n", + " 'WILSON, Blaine Robert': 2,\n", + " 'PURCELL, Frank': 2,\n", + " 'WEISS, Roland Jean-Louis': 2,\n", + " 'BONIS MARCHANDIN, Claire': 2,\n", + " 'WICKENS, Martin John': 2,\n", + " 'ZATLAND, Kate': 2,\n", + " 'WATKINS, John': 2,\n", + " 'AKPINAR, Mehmet': 2,\n", + " 'DUBRO, Anna': 2,\n", + " 'BUJDO, Marinko': 2,\n", + " 'NAYYAR, Angela': 2,\n", + " 'COMET, Nicolas Bernard': 2,\n", + " 'PIGNOTTI, Alessandro': 2,\n", + " 'SCARF, Peter Michael Edward': 2,\n", + " 'STAYTON, Jennifer Mary': 2,\n", + " 'HUXTABLE, Craig': 2,\n", + " 'JONES, Mark Anthony': 2,\n", + " 'GRIFFITHS, Ernest Thomas': 2,\n", + " 'JURNAIL, Gurnam Singh': 2,\n", + " 'MARTIN, Henry': 2,\n", + " 'LEWIS, Sarah Jane': 2,\n", + " 'LOTAY, Tarandeep': 2,\n", + " 'LOTAY, Mohinder Singh': 2,\n", + " 'AVLANI, Dilip': 2,\n", + " 'SODHA, Mahavir Kumar': 2,\n", + " 'LUMINGO, Messias Messias': 2,\n", + " 'SHEKONI, Oladapo Abdul-Azeez': 2,\n", + " 'TRUTSCH, Philipp': 2,\n", + " 'MATTHEWS, Ian Ronald': 2,\n", + " 'MATTHEWS, Samuel Eric': 2,\n", + " 'MONTGOMERY, Richard': 2,\n", + " 'PATAIA, Vittorio': 2,\n", + " 'MCCALLUM, David': 2,\n", + " 'MCGARVEY, Paul': 2,\n", + " 'MORRIS, Paul': 2,\n", + " 'LONDON LAW SERVICES LIMITED': 2,\n", + " 'GUELLARD, Sophie Jane': 2,\n", + " 'RANDHAWA, Balbir Kaur': 2,\n", + " 'RANDHAWA, Lakhwant Singh': 2,\n", + " 'RIGBY, Alex': 2,\n", + " 'PANCHAL, Kiran Illais': 2,\n", + " 'SHAH, Raza Ali': 2,\n", + " 'TEWOLDE, Sirac': 2,\n", + " 'TEWOLDE, Senait': 2,\n", + " 'VINCENT, Christopher': 2,\n", + " 'VALAITIS, Peter Anthony': 2,\n", + " 'ZAHOUA, Zahra': 2,\n", + " 'ABDUL AZIZ ABDUL RASHEED, Kinza Tania': 2,\n", + " 'ADEM, Metin': 2,\n", + " 'KASIM, Mustafa': 2,\n", + " 'AMENONYOH, Tatah': 2,\n", + " 'HANIF, Sara': 2,\n", + " 'COOPER, Richard Laurence': 2,\n", + " 'ASGARI, Soheil, Dr': 2,\n", + " 'BAILEY, Chloe': 2,\n", + " 'BELYAEV, Maxim': 2,\n", + " 'BERATUNGSZENTRUM FUER TUERKISCHE UNTERNEHMEN LTD.': 2,\n", + " 'BONNINGUES, Franck Georges': 2,\n", + " 'BOULANGER, Stephane': 2,\n", + " 'MUTALE, Justina': 2,\n", + " 'DUSABIMANA, Honore, Dr': 2,\n", + " 'BROWN, Peter': 2,\n", + " 'CAMPBELL, Lynda': 2,\n", + " 'CARPENTIER, Eric Christian': 2,\n", + " 'DAVID, Bastien Francois Alain': 2,\n", + " 'CHRETIEN, Francois Charles Paul': 2,\n", + " 'FLOREA, Costel Cristian': 2,\n", + " 'COX, Jemma': 2,\n", + " 'CUILLERON, Martial Lionel': 2,\n", + " 'WONG, Jowyn': 2,\n", + " 'MURPHY, Brian Christopher': 2,\n", + " 'WILLIAMS, Richard Keith': 2,\n", + " 'EL-RABAA, Rinad': 2,\n", + " 'FARAH, Mohamed Issa': 2,\n", + " 'FLAHAUT, Michael': 2,\n", + " 'GOLDSMITH, Daniel John': 2,\n", + " 'KUREK, Marcin': 2,\n", + " 'GOUVEIA, Jose': 2,\n", + " 'GREENWOOD, Vineeta': 2,\n", + " 'KHOURY, Ziad': 2,\n", + " 'HALL, Lauren': 2,\n", + " 'HOLT SNR, John': 2,\n", + " 'INTERTRUST (UK) LIMITED': 2,\n", + " 'MEHTA, Ravin Harshad': 2,\n", + " 'VIANA CABRAL NETTO, Olavo': 2,\n", + " 'ISHMAEL, Aadam': 2,\n", + " 'JOHNSON, Aldene Mary': 2,\n", + " 'NOVAK, Jaroslav': 2,\n", + " 'NUSSBAUM, Alan Brian': 2,\n", + " 'JOHAL, Ramandeep Singh': 2,\n", + " 'KENDRICK, Leight': 2,\n", + " 'KHAN, Humma Mazhar': 2,\n", + " 'ANAND, Shaila': 2,\n", + " 'LEADER, Marc': 2,\n", + " 'MANTLE, Myles Justin Bruce': 2,\n", + " 'LOAN, Mark': 2,\n", + " 'LOFTHOUSE, Louis Piers': 2,\n", + " 'MANSOOR, Muhammad': 2,\n", + " 'MAYO, Douglas James': 2,\n", + " 'COLMAN, Christopher David': 2,\n", + " 'LAWRENCE, Andrew James': 2,\n", + " 'PODMORE, Mark Winston': 2,\n", + " 'SALIB, Hany Wadea Elshahat': 2,\n", + " 'MINKIEWICZ, Anne Sophie': 2,\n", + " 'NAPOLITANO, Letizia': 2,\n", + " 'MAHMOOD, Zahid': 2,\n", + " 'OMOVBUDE, Omoneka Osa': 2,\n", + " 'OPTIMA SECRETARIES LIMITED': 2,\n", + " 'OWEN, Gareth Wyn': 2,\n", + " 'POLIAKOV, Alexei': 2,\n", + " 'UBRIG, Alain Jean': 2,\n", + " 'VAILLANT, Bertrand Marie': 2,\n", + " 'ZIEGLER, Stephane Marie': 2,\n", + " 'PORCU, Alessandro': 2,\n", + " 'IANIERO, Leonardo': 2,\n", + " 'PRAF, Alin Nicolae': 2,\n", + " 'PROGEN SOLAR': 2,\n", + " 'RICHARD, Etienne Pierre, Michel': 2,\n", + " 'ROBERT, Christophe': 2,\n", + " 'ROBERTS, Vivienne Sue': 2,\n", + " 'SABADO, Melanie': 2,\n", + " 'SINGCUENCO, Katrina': 2,\n", + " 'SEGEL, Adam': 2,\n", + " 'SIMON, Wayne': 2,\n", + " 'ST.HILL, Kathleen': 2,\n", + " 'STAN, Madalin': 2,\n", + " 'TAS, Mehmet': 2,\n", + " 'GUNDOGDU, Omer': 2,\n", + " 'THOMPSON, Julian': 2,\n", + " 'VANHINSBERGH, Kevin': 2,\n", + " 'WELLS, Ruxandra Luana': 2,\n", + " 'WELLS, Richard Hase': 2,\n", + " 'FUTURE II LTD': 2,\n", + " 'ABDULLAHI MUSA HAI, Ahmed': 2,\n", + " 'ADATSI, Franklin Jerry Kojo': 2,\n", + " 'FERNANDEZ-PRADOS, Elena Maria': 2,\n", + " 'AGUTTER, Emily': 2,\n", + " 'AHMADI, Hossein': 2,\n", + " 'AJAYI, David': 2,\n", + " 'AJAYI-OBE, Olawale Olakunle': 2,\n", + " 'AKINLUYI, Tolulope Stephen': 2,\n", + " 'ALLEN, Martin Andrew': 2,\n", + " 'ARCURI, Jennifer': 2,\n", + " 'HICKEY, Matthew James': 2,\n", + " 'WESTCO DIRECTORS LTD': 2,\n", + " 'AYE, Emily': 2,\n", + " 'BADIANE, Bakary': 2,\n", + " 'BAKER, Phillipa': 2,\n", + " 'BARKER-GOLIDE, Christine': 2,\n", + " 'BARRASS-BROWN, Wayne': 2,\n", + " 'BARROWCLIFFE, Maxine': 2,\n", + " 'BENBOW, Shaun, Dr': 2,\n", + " 'BLANCO, Sergi Mora': 2,\n", + " 'LOPEZ, Manuel Sanchez': 2,\n", + " 'POYATOS, Rafael Nevado': 2,\n", + " 'BLISS, James': 2,\n", + " 'BOUMAZOUNA, Leila': 2,\n", + " 'BOURNE, Patricia': 2,\n", + " 'REES, Nicholas': 2,\n", + " 'BROU, Bertin': 2,\n", + " 'NOAR BROWNE': 2,\n", + " 'BURLACU, Daniel': 2,\n", + " 'CARTER, Kaya': 2,\n", + " 'QUARRIE, John Elliott': 2,\n", + " 'CHANDRASEKERAN, Udeshika': 2,\n", + " 'CHEUNG, Hilary Hin': 2,\n", + " 'CHIKAMBA, Priscilla': 2,\n", + " 'CHIRINDA, Frank': 2,\n", + " 'CLARK, Eugene Anthony': 2,\n", + " 'COATES, Faye': 2,\n", + " 'COLEMAN, Tony': 2,\n", + " 'CONNIS, Jadon': 2,\n", + " 'COWLING, William': 2,\n", + " 'CRITCHLOW, Fabian': 2,\n", + " 'YOUNG, Jay Arron': 2,\n", + " 'BARTON, Elliot Henry': 2,\n", + " 'CONNOLLY, Kieran Thomas': 2,\n", + " 'GRIFFITHS, Paul Anthony': 2,\n", + " 'MONTEIRO DE FREITAS, Angela De Fatima': 2,\n", + " 'DALY, Veronica': 2,\n", + " 'DANQUAH, Jason': 2,\n", + " 'DAVIES, Angela Chipo Ulemu, Dr': 2,\n", + " 'DENCIC, Aco': 2,\n", + " 'LASS, Rosemary Anne': 2,\n", + " 'RANDLE, Vivien Edwina': 2,\n", + " 'DOLAN, Edward': 2,\n", + " 'DOSANJH, Ardeep': 2,\n", + " 'EFFANGA-PETER, Eno Jasmine': 2,\n", + " 'FALADE, Moranti': 2,\n", + " 'FEJZOLLI, Amarildo': 2,\n", + " 'FERRAZ, Goncalo Nuno Andrade': 2,\n", + " 'JEWELL, Matthew Malcolm': 2,\n", + " 'FINNIGAN, Diana': 2,\n", + " 'FISHER, Greig': 2,\n", + " 'FORRESTER, Delvon': 2,\n", + " 'GAVIN, John Thomas': 2,\n", + " 'GEAREY, Jacqueline Margaret': 2,\n", + " 'GEORGE JUSTIN, Alwyn Clittus': 2,\n", + " 'GITTOES-BREE, Stephanie Elaine': 2,\n", + " 'GLADWIN, Yvone': 2,\n", + " 'SCOTT, Jeff': 2,\n", + " 'GRANGIER, Arnaud Pascal': 2,\n", + " 'GROOM, Craig Michael': 2,\n", + " 'GURLU, Vedat': 2,\n", + " 'HALL, Suzie': 2,\n", + " 'HAM, David': 2,\n", + " 'HASSAN, Md': 2,\n", + " 'HATHAWAY, Beth': 2,\n", + " 'HEARN, Anthony': 2,\n", + " 'HEW, Kok-Hoong': 2,\n", + " 'HOLMES, Glenn': 2,\n", + " 'HOPE, Sandra': 2,\n", + " 'HORSWILL, Jill': 2,\n", + " 'IDRISSI, Abdulmounime': 2,\n", + " 'IKEJIANI, Ezinne': 2,\n", + " 'INAYATHULLA, Mohamed': 2,\n", + " 'PAL, Sumit': 2,\n", + " 'IRIMIA, Robert': 2,\n", + " 'JEFFERSON, Alison Jane': 2,\n", + " 'JOHN, Ceri Richard': 2,\n", + " 'JOHNS, Beverley': 2,\n", + " 'JUBA, Vidal Adedapo': 2,\n", + " 'SOUDANI, Abdelhamid': 2,\n", + " 'MEHMI, Reeni Kumari': 2,\n", + " 'KAMMAR, Rashmi': 2,\n", + " 'KEEFE, Karen': 2,\n", + " 'KELLY, John': 2,\n", + " 'KENNEDY, John': 2,\n", + " 'KILFOY, Anthony': 2,\n", + " 'KING, Rebecca': 2,\n", + " 'KLUK, Linda': 2,\n", + " 'KUMAR, Anjana': 2,\n", + " 'KUPRYS, Mantas': 2,\n", + " 'PIKALOV, Dmitrii': 2,\n", + " 'LAWRENCE, Matthew Charles': 2,\n", + " 'TAKIEDDINE, Karim Markus': 2,\n", + " 'LEDDER, Philip': 2,\n", + " 'ROBINSON, Jonathan Charles': 2,\n", + " 'LEMKECHER, Majed': 2,\n", + " 'LI, Xiao Chun': 2,\n", + " 'LIGHTFOOT, Steve': 2,\n", + " 'ANGILELLA, Marco': 2,\n", + " 'DIJKSTRA, Antje Rona': 2,\n", + " 'LAWSON, Nicholas St John': 2,\n", + " 'MACAULEY, Olayinka': 2,\n", + " 'MANDORA, Bhavesh': 2,\n", + " 'MANEA, Ion': 2,\n", + " 'MARGOLIN, Ryan': 2,\n", + " 'MARIN, Glenn': 2,\n", + " 'MCMAHON, Paul': 2,\n", + " 'RICHARDS, Greg': 2,\n", + " 'MARTIN, John': 2,\n", + " 'MARTONFI, Alexandru Robert': 2,\n", + " 'MARTYN, Elizabeth': 2,\n", + " 'MATIVI, Farai Alfred': 2,\n", + " 'MCAULIFFE, Adam Michael': 2,\n", + " 'GORDON, Jamie': 2,\n", + " 'MCKEVITT, Brian': 2,\n", + " 'JONES, Nick': 2,\n", + " 'MEDINA, Jose': 2,\n", + " 'BERARDO, Angela Teresa': 2,\n", + " 'WARDLE, Charlotte Victoria': 2,\n", + " 'MOKWELE, Mungombe': 2,\n", + " \"O'SHAUGHNESSY, Myles\": 2,\n", + " 'PICOTTE, Christopher James': 2,\n", + " 'MUGHAL, Asim': 2,\n", + " 'MURRAY, Owen': 2,\n", + " 'NADARAJAH, Anju': 2,\n", + " 'NASTASIA, Anca': 2,\n", + " 'NATANYAN, Arthur': 2,\n", + " 'NICHOLSON, Kevin': 2,\n", + " 'BANKS, Shay Ifeanyi': 2,\n", + " 'NORTH, Barbara': 2,\n", + " 'OBASEKI, Wickcliffe': 2,\n", + " 'ODOKAMA, Joyce': 2,\n", + " 'OKUNGBOWA, Irene': 2,\n", + " 'OLORUNLERO, Opeyemi': 2,\n", + " 'ORLANDINI, Guido': 2,\n", + " 'OUMOUMEN, Hamid': 2,\n", + " 'PEIKOS, Phillip': 2,\n", + " 'PIRCALABU, Elena': 2,\n", + " 'POLIARUSH, Vitalii': 2,\n", + " 'POLONSKI, Vyacheslav': 2,\n", + " 'PRICE, Robin': 2,\n", + " 'PRIDDEN, Joanne': 2,\n", + " 'RABIA, Dionis': 2,\n", + " 'RAYMOND, Moshe': 2,\n", + " 'REDDY, Martin': 2,\n", + " 'ROBERT, Vashisth': 2,\n", + " 'ROBINSON, Tony': 2,\n", + " 'ROSE, Steven': 2,\n", + " 'NANJI, Asani Ashvin': 2,\n", + " 'ROUSOPOULOS, Georgios': 2,\n", + " 'SAHDEV, Krishan': 2,\n", + " 'SAMUEL, David': 2,\n", + " 'SAVAGE, Sarah': 2,\n", + " 'MADDALUNI, Giovanni': 2,\n", + " 'SEXTON, Timothy': 2,\n", + " 'SLEE, Richard Peter': 2,\n", + " 'SMITH, Pascaline': 2,\n", + " 'SPEK, Patricia': 2,\n", + " 'STIUBEIANU, Carmen Marioara': 2,\n", + " 'SABBATINI STEWART, Roberta': 2,\n", + " 'BANDANA LTD': 2,\n", + " 'THERON, Theodorus': 2,\n", + " 'TANG, Chi Sim': 2,\n", + " 'THOMAS, Winston': 2,\n", + " 'AKDERE, Süleyman': 2,\n", + " 'UGHO, Chioma': 2,\n", + " 'UNIGWE, Rachel': 2,\n", + " 'VARLAN, Iulian': 2,\n", + " 'WALLIS, David John': 2,\n", + " 'WARD, Eleanor Rosamund': 2,\n", + " 'WARWICK, Lindsey Jean': 2,\n", + " 'WASHINGTON, Dayo': 2,\n", + " 'WENDT, Lars': 2,\n", + " 'WHITE, Farah Jane': 2,\n", + " 'WIJNHARD, Clyde Carlo': 2,\n", + " 'WILKS, Mark': 2,\n", + " 'WILLIAMS, Sarah': 2,\n", + " 'WOODS, Edward': 2,\n", + " 'YANG, Wenli': 2,\n", + " 'ABDULAZIZ, Yousif': 2,\n", + " 'ABDULSALAM, Nabil': 2,\n", + " 'ABRAHAM, Jaime Ilolo': 2,\n", + " 'ABULQASIM, Ismail': 2,\n", + " 'ADENEKAN, Olujimi': 2,\n", + " 'ADEWOLE, Oluwadamilare': 2,\n", + " 'ADJEI, Samuel': 2,\n", + " 'ADUAKA, Christy Ify': 2,\n", + " 'REHMAN, Danish': 2,\n", + " 'AHMED EBRAHEM ALMASOUD, Mohammad': 2,\n", + " 'AHMED, Ripon': 2,\n", + " 'AHMED, Rubina': 2,\n", + " 'AKUCHUKWU, Smart': 2,\n", + " 'AL AZAWI, Ilham Rashid': 2,\n", + " 'AL ENEZI, Jamal': 2,\n", + " 'AL ENEZY, Olia': 2,\n", + " 'AL ENIZI, Iman': 2,\n", + " 'AL-NAJJAR, Musaeb Mohammed': 2,\n", + " 'AL-ZYADI, Salwan': 2,\n", + " 'ALAJMI, Abdullah': 2,\n", + " 'ALAJMI, Fahad': 2,\n", + " 'ALAJMI, Hanan': 2,\n", + " 'ALAJMI, Maha': 2,\n", + " 'ALAJMI, Mashael': 2,\n", + " 'ALAJMI, Meshal': 2,\n", + " 'ALAJMI, Saad': 2,\n", + " 'ALAJMY, Aly': 2,\n", + " 'ALALI, Humoud': 2,\n", + " 'ALAMEER, Hameed': 2,\n", + " 'ALANZI, Abdulrahman': 2,\n", + " 'ALASOW, Sahra Abdullahi': 2,\n", + " 'ALAWADHI, Abdulaziz': 2,\n", + " 'ALAWADI, Abdulla, Dr': 2,\n", + " 'ALAWADI, Khaleel, Dr': 2,\n", + " 'ALAZMA, Majed': 2,\n", + " 'ALDHUFAIRI, Mohammad': 2,\n", + " 'ALDOUSARI, Mubarak': 2,\n", + " 'ALDUWAISAN, Muna': 2,\n", + " 'ALENEZI, Amany': 2,\n", + " 'ALENEZI, Ameenah': 2,\n", + " 'ALENEZI, Dalal': 2,\n", + " 'ALENEZI, Fatima': 2,\n", + " 'ALENEZI, Manal': 2,\n", + " 'ALENEZI, Nawal': 2,\n", + " 'ALENEZI, Yousef': 2,\n", + " 'ALHARBI, Bdour': 2,\n", + " 'ALHASSAN, Abdullah': 2,\n", + " 'ALHINDI, Mona': 2,\n", + " 'ALHINDI, Najat': 2,\n", + " 'ALHUNAIF, Emad': 2,\n", + " 'ALI, Miriam': 2,\n", + " 'ABBAS, Ali': 2,\n", + " 'ALIYEV, Farhad': 2,\n", + " 'ALJASSAS, Nadyah': 2,\n", + " 'ALKANDARI, Waleed': 2,\n", + " 'ALKANDERI, Sohaib': 2,\n", + " 'ALKHALEFAH, Dawood': 2,\n", + " 'ALMARAIKHI, Suad': 2,\n", + " 'ALMAZER, Salman': 2,\n", + " 'ALMERAIKHI, Ghanimah': 2,\n", + " 'ALMUDHAYAN, Ahmad': 2,\n", + " 'ALMUDHAYAN, Hamed': 2,\n", + " 'ALMUTAIRI, Hanan': 2,\n", + " 'ALMUTAIRI, Meshal': 2,\n", + " 'ALMUTAIRI, Mohammed': 2,\n", + " 'ALQATTAN, Qasem': 2,\n", + " 'ALRABAH, Yousef': 2,\n", + " 'ALRABEIAH, Fetouh': 2,\n", + " 'ALRABIAH, Aminah': 2,\n", + " 'ALRASHED, Husain': 2,\n", + " 'ALRASHIDI, Wasemeya': 2,\n", + " 'ALSANAD, Saja': 2,\n", + " 'ALSARDI, Shatha': 2,\n", + " 'ALSHAIJI, Ali': 2,\n", + " 'ALSHALAHI, Abdulrahman': 2,\n", + " 'ALSHAMMAA, Majed': 2,\n", + " 'ALSHATTI, Yaqoub, Dr': 2,\n", + " 'ALSHEMALI, Abdulrahim': 2,\n", + " 'ALSUBAIE, Naji Fahad': 2,\n", + " 'ALTAWHEED, Elham': 2,\n", + " 'ALYAHYA, Ahmad': 2,\n", + " 'ALYAQOUB, Amina': 2,\n", + " 'ALYAQOUB, Khaledah': 2,\n", + " 'ALYAQOUB, Naheda': 2,\n", + " 'ALYAQOUT, Wafa': 2,\n", + " 'ALZAID, Ibrahim': 2,\n", + " 'ALZEED, Fahad': 2,\n", + " 'AMANKWAA, Cosmos': 2,\n", + " 'AMJAD, Muhammad': 2,\n", + " 'ANDERSON, Jemma': 2,\n", + " 'ANDREEV, Nikolay': 2,\n", + " 'ANDREEVA, Elena': 2,\n", + " 'ANIEBONAM, Uche Snr.': 2,\n", + " 'ANNAN, Kenneth, Dr': 2,\n", + " 'ANTKOWIAK, Aneta': 2,\n", + " 'ARNELL, Katherine Ann': 2,\n", + " 'ASCOTT, Marcus': 2,\n", + " 'ASHCROFT, Frank': 2,\n", + " 'ASHTON, Michael': 2,\n", + " 'SECRETARIAT OFFICERS LIMITED': 2,\n", + " 'AYRES, Richard Desmond': 2,\n", + " 'AZIZ, Tariq': 2,\n", + " 'TRUTA, Lavinia': 2,\n", + " 'BAARS, Raymond': 2,\n", + " 'BACHAS, Paul': 2,\n", + " 'BAGLEY, Mark': 2,\n", + " 'BAILEY, Jamie': 2,\n", + " 'BAKHTADZE, Nina': 2,\n", + " 'BALALA, Maha-Hanaan, Dr': 2,\n", + " 'BALANDIN, Sergey': 2,\n", + " 'BALDWIN, Keith': 2,\n", + " 'BALL, Jonathan': 2,\n", + " 'BALTAZZI, Gianluigi': 2,\n", + " 'BAMBER, Claire': 2,\n", + " 'BANGALORE VENKATARAMU, Chandan': 2,\n", + " 'BANJOKO, Adekunle': 2,\n", + " 'BANKS, David': 2,\n", + " 'BARBARIOLI CUNHA, Raianny': 2,\n", + " 'BARBER, Mark': 2,\n", + " 'BARRETT, Nicolas': 2,\n", + " 'BARTRAM, Richard': 2,\n", + " 'BARWICK, Elizabeth': 2,\n", + " 'BARZEY, Alexandra': 2,\n", + " 'COLA, Vincent Patrice': 2,\n", + " 'BAWA, Sanmukh': 2,\n", + " 'BAYLISS, Simon': 2,\n", + " 'BEAGLES, Edwin': 2,\n", + " 'BECKFORD, Carleen Nicole': 2,\n", + " 'BEDDING, James': 2,\n", + " 'BEGLAN, Peter': 2,\n", + " 'BELL, Adam': 2,\n", + " 'BELOV, Alexander': 2,\n", + " 'BELTJES, Steven Adriaan Johan': 2,\n", + " 'BENJAMIN, Michael': 2,\n", + " 'BENNETT, Kyle': 2,\n", + " 'BERGMAN, Maxine': 2,\n", + " 'BERRY, Matthew': 2,\n", + " 'BHEEMARASETTY, Chalam Santosh Ram Mohan': 2,\n", + " 'SWABY, James': 2,\n", + " 'BIRCH, Harvey': 2,\n", + " 'BIRLEY, Adam': 2,\n", + " 'BLACKABY, Paul': 2,\n", + " 'BLISS, Jonathan Douglas': 2,\n", + " 'BOLENGE-CARTIERÈ, Fabian': 2,\n", + " 'BOLT, Bonnie': 2,\n", + " 'BOUKARABILA, Abdellah': 2,\n", + " 'BOURLOT, Caireen': 2,\n", + " 'BOWIE, Andrew': 2,\n", + " 'BRANNAN, Calum': 2,\n", + " 'BRITTON, Adam': 2,\n", + " 'BROWN, Alexander James': 2,\n", + " 'BROWN, Malcolm Peter': 2,\n", + " 'BUKVIC, Alan James': 2,\n", + " 'BULLEN, Joel': 2,\n", + " 'BULU, Tugce': 2,\n", + " 'BUNKER, Miles': 2,\n", + " 'BURASZ, Artur': 2,\n", + " 'BURNS, Richard': 2,\n", + " 'LE BAIL, Bruno': 2,\n", + " 'CADDICK, Rebecca': 2,\n", + " 'CALDERWOOD, Ryan': 2,\n", + " 'CALIN, George': 2,\n", + " 'CAMERON, James': 2,\n", + " 'CAMPBELL, Peter': 2,\n", + " 'CAMPBELL, Robert': 2,\n", + " 'CANNON, Janice Lesley': 2,\n", + " 'CAPEWELL, William': 2,\n", + " 'CASH, Daniel': 2,\n", + " 'CAWTHORNE, Ben': 2,\n", + " 'CHAPMAN, Virginia Wangari': 2,\n", + " 'CHAPMAN, William David': 2,\n", + " 'CHARLES, David': 2,\n", + " 'CHEN, Wen Hao': 2,\n", + " 'CHERICHI PURAYIL, Saleema': 2,\n", + " 'CHOMUZINDA, Ngoni': 2,\n", + " 'CHOWDHURY, Jahanara': 2,\n", + " 'CHRISTMAS, James Stephens': 2,\n", + " 'CHRISTOU, Stefan Yiannis': 2,\n", + " 'THAMNUSARN, Pariya': 2,\n", + " 'CLARIDGE, Matthew-James': 2,\n", + " 'CLARKE, Hayley': 2,\n", + " 'CLARKE, Jade': 2,\n", + " 'CLEMENT, Paul': 2,\n", + " 'CODJO, Sarah': 2,\n", + " 'DONNE, Richard': 2,\n", + " 'CONNERTON, Dylan': 2,\n", + " 'CONWAY, Mark': 2,\n", + " 'COOKE, Julian David': 2,\n", + " 'CORDERO, Vanessa': 2,\n", + " 'COTTET, Renaud': 2,\n", + " 'CRADDOCK, Michael': 2,\n", + " 'CRAIG, Darren': 2,\n", + " 'ABDURRAHMAN, Umar': 2,\n", + " 'ALAMUTU, Adeolu': 2,\n", + " 'FAYOMI, Oloruntoba': 2,\n", + " 'WAHLE, Fabian Felix, Dr': 2,\n", + " 'ZHANG, Hong Zhen': 2,\n", + " 'BOETTCHER, Ludmila': 2,\n", + " 'LARSEN, Kristian Sveen': 2,\n", + " 'CUDWORTH, Philip Stephen': 2,\n", + " 'HAYWARD, Philip John': 2,\n", + " 'CYD TRENCH, Abigail': 2,\n", + " 'DAHAR, Mohsin': 2,\n", + " 'DALTON, Mark Andrew': 2,\n", + " 'DALVERNY, Celine': 2,\n", + " 'DAMIAN, Lica Marcel': 2,\n", + " 'DAVEY, Patrick': 2,\n", + " 'DAVID, Daniel': 2,\n", + " 'DAVIES, Jamie': 2,\n", + " 'DE ANDRADE, Marcos': 2,\n", + " 'DE MENDONCA, Patrica': 2,\n", + " 'DEMIREL, Abdulkadir': 2,\n", + " 'DENNENY, Simon': 2,\n", + " 'DOBROWOLSKI, Agnieszka': 2,\n", + " 'DOGAN, Engin': 2,\n", + " 'DOLAN, Max': 2,\n", + " 'DORMAN, Ben': 2,\n", + " 'DOSSO, Mamadou': 2,\n", + " 'DOUGHTY, Lynn': 2,\n", + " 'DOUGLAS, Jeffery': 2,\n", + " 'LEWIS, Paul David': 2,\n", + " 'DRISCOLL, Peter': 2,\n", + " 'DUFFY, David William': 2,\n", + " 'DUNFORD, Paul': 2,\n", + " 'DUNN, Daniel': 2,\n", + " 'DWYER, Brent': 2,\n", + " 'DYER, David': 2,\n", + " 'EBANKS-BLAKE, Sylvan': 2,\n", + " 'EBRAHIM, Suad': 2,\n", + " 'EDWARDS, Natasha Dawn': 2,\n", + " 'EL MARNISSI, Mouhcine': 2,\n", + " 'EL-HADDAD, Otman': 2,\n", + " 'ELIAS, Mozelle': 2,\n", + " 'ELLIOTT, Nicholas': 2,\n", + " 'ELLISSON, Pam': 2,\n", + " 'ENNIS, Kara Lois': 2,\n", + " 'ENWELIM, Miriam': 2,\n", + " 'ETE, Malik': 2,\n", + " 'ETIENNE, Leona': 2,\n", + " 'EUGENE, Cora': 2,\n", + " 'EVANS, John Albert Charles': 2,\n", + " 'FACEY, Kyle': 2,\n", + " 'FAIRCLOUGH, Rupert': 2,\n", + " 'FAPOHUNDA, Damilola': 2,\n", + " 'FARHANG, Tahmina': 2,\n", + " 'FAULKNALL, Mark': 2,\n", + " 'FELSTEAD, Nicholas': 2,\n", + " 'FERNANDO, Angelo': 2,\n", + " 'FERRIS, Glynn': 2,\n", + " 'FIRBANK, Jeremy Kenneth': 2,\n", + " 'FLEGG, Scott': 2,\n", + " 'FLOUHOUSE, James': 2,\n", + " 'FORBES, Jordan': 2,\n", + " 'FRAMPTON, Fred': 2,\n", + " 'FRANCEY, Tim': 2,\n", + " 'FROST, Lee': 2,\n", + " 'FUGMANN, Peter Ulrik': 2,\n", + " 'FUJIYAMA, Teruo': 2,\n", + " 'MURAKAMI, Shuji': 2,\n", + " 'FURNESS, Isabel': 2,\n", + " 'GABSI, Alexandra': 2,\n", + " 'GAIKWAD, Sushil': 2,\n", + " 'GARDNER, Amie': 2,\n", + " 'GATES, Lee Stuart': 2,\n", + " 'GEALS, Ngo Mukum': 2,\n", + " 'GIROUX, Guillaume': 2,\n", + " 'GIVANS, Sharon Emma': 2,\n", + " 'GLEESON, Paul': 2,\n", + " 'GOAUDER, Jeannette': 2,\n", + " 'GOLDBERGER, David': 2,\n", + " 'GOMEZ, Arnaud Clement': 2,\n", + " 'GOODMAN-SIMPSON, Paul': 2,\n", + " 'GORBAN, Alexandra': 2,\n", + " 'GOREN, Erel Antoine': 2,\n", + " 'GRAHAM, Thomas': 2,\n", + " 'GREASLEY, Sharnie': 2,\n", + " 'GREGORY, Phillip Nathan': 2,\n", + " 'GRICE, Arthur, Dr': 2,\n", + " 'GROSART, Barry': 2,\n", + " 'GUEYE, Serigne': 2,\n", + " 'HAAFEDH, Harbaoui': 2,\n", + " 'ZAHRAN, Hashem': 2,\n", + " 'HAINSLEY, Jimell': 2,\n", + " 'HAJAMOHIDEEN, Mohamednazeem': 2,\n", + " 'HAMILTON, Anthony': 2,\n", + " 'HANFI, Farrukh': 2,\n", + " 'HANSKI, Nita': 2,\n", + " 'HAQ, Abdul Rehman': 2,\n", + " 'HARDING, James': 2,\n", + " 'HARRIS, Sidney': 2,\n", + " 'HARRISON, Ann': 2,\n", + " 'HARRISON-BURTON, Thomas Hayden': 2,\n", + " 'HARSANT, Clair': 2,\n", + " 'HASAN, Metin Fikri': 2,\n", + " 'HASELEY, Jamie': 2,\n", + " 'HENDRY, Melissa': 2,\n", + " 'HERHOLDT, Linda': 2,\n", + " 'HESKETH, Emma': 2,\n", + " 'HIBBELER, Zhizhen': 2,\n", + " 'HIBBERT, Zowie': 2,\n", + " 'HILLS, Maureen': 2,\n", + " 'HINSLEY, William': 2,\n", + " 'HLEIHEL, Mustapha': 2,\n", + " 'HOGG, Terrence': 2,\n", + " 'HOLLINGSWORTH, Arron': 2,\n", + " 'HOLLOWAY, David': 2,\n", + " 'HOOLEY, Terence': 2,\n", + " 'HOPKINS, James': 2,\n", + " 'HOTINCEANU, Augustin Mircea': 2,\n", + " 'HU, Keren': 2,\n", + " 'HUGHES, Benjamin': 2,\n", + " 'HUMPHREYS, James': 2,\n", + " 'HUNT, Bernard': 2,\n", + " 'HUSSAIN, Adnan': 2,\n", + " 'HUSSAIN, Mohsin': 2,\n", + " 'HUSSEIN, Cise': 2,\n", + " 'IBROUCHEN, Lylia': 2,\n", + " 'IDOWU, Ilemobayo': 2,\n", + " 'INGLOT, Janusz': 2,\n", + " 'ISHARC, Laeeth': 2,\n", + " 'ISPAS, Dorel': 2,\n", + " 'JACKSON, Paul': 2,\n", + " 'JAMES-PERRY, Janice': 2,\n", + " 'JANDU, Suneal': 2,\n", + " 'JAWAD, Rand': 2,\n", + " 'JENKINS, Edward': 2,\n", + " 'JENKINS, Luke': 2,\n", + " 'JERMYN, Rupert': 2,\n", + " 'JHEETA, Manjeet': 2,\n", + " 'JOHN BAPTISTE, Glenford': 2,\n", + " 'JOHNSON, Francis': 2,\n", + " 'JOHNSON, Marcus': 2,\n", + " 'JOHNSON, Mark': 2,\n", + " 'JOSHI, Rajinder': 2,\n", + " 'JOSLIN, Adam': 2,\n", + " 'KALLURI, Kartheeka': 2,\n", + " 'KANAGASAPATHY, Gayathri': 2,\n", + " 'KARNAM, Prabhakar': 2,\n", + " 'KASANDA, Richard': 2,\n", + " 'KASASA, Moses': 2,\n", + " 'KAULBACH, Nick Ian': 2,\n", + " 'KAZLOUSKAYA, Alena': 2,\n", + " 'KEITA, Marvin': 2,\n", + " 'KELLY, Nicole': 2,\n", + " 'KENDRICK, Matthew': 2,\n", + " 'KENNELL, James': 2,\n", + " 'KENT, Calvin': 2,\n", + " 'KENTACHE, Atman': 2,\n", + " 'KENYON, Richard Pearce': 2,\n", + " 'KHALIGHI, Azadeh': 2,\n", + " 'KHAN, Farah': 2,\n", + " 'KHAN, Khayyam Shezad': 2,\n", + " 'KHAN, Mohammed': 2,\n", + " 'KHAN, Salma': 2,\n", + " 'KHAN, Yassar': 2,\n", + " 'KHLIFI, Faouzi': 2,\n", + " 'KNIGHT, Adam': 2,\n", + " 'KNIGHT, Victoria': 2,\n", + " 'KOLEV, Gospodin': 2,\n", + " 'KONG, Dae Chul': 2,\n", + " 'KRLJES, Sanya, Dr': 2,\n", + " 'KROOGLIK, Wilhelmina': 2,\n", + " 'KUPERHOLZ, Rael': 2,\n", + " 'KUTLU, Taner': 2,\n", + " 'KWIATKOWSKI, Sophie': 2,\n", + " 'KWIDINI, Anastasia Tabona': 2,\n", + " 'LAI, Hsin-Yi': 2,\n", + " 'LAINE, Guillaume': 2,\n", + " 'LANG, Jing': 2,\n", + " 'CAO, Dongpu, Dr': 2,\n", + " 'LANGASCHEK, Ionut Cosmin': 2,\n", + " 'LAVERY, George Clifford': 2,\n", + " 'LAWAL, Taiwo Ademola': 2,\n", + " 'LAWRENCE, Andria': 2,\n", + " 'LENNOX-NAPIER, Emily': 2,\n", + " ...}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8dd58dff", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.9.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/assets/candyy.jpeg b/assets/candyy.jpeg new file mode 100644 index 0000000..2f98744 Binary files /dev/null and b/assets/candyy.jpeg differ diff --git a/assets/consultancy_house.png b/assets/consultancy_house.png new file mode 100644 index 0000000..0bbdee3 Binary files /dev/null and b/assets/consultancy_house.png differ diff --git a/assets/diamond.png b/assets/diamond.png new file mode 100644 index 0000000..3554f01 Binary files /dev/null and b/assets/diamond.png differ diff --git a/assets/dm.png b/assets/dm.png new file mode 100644 index 0000000..1849ad7 Binary files /dev/null and b/assets/dm.png differ diff --git a/assets/euro.png b/assets/euro.png new file mode 100644 index 0000000..694ba75 Binary files /dev/null and b/assets/euro.png differ diff --git a/assets/exclusive.png b/assets/exclusive.png new file mode 100644 index 0000000..266916b Binary files /dev/null and b/assets/exclusive.png differ diff --git a/assets/hold.png b/assets/hold.png new file mode 100644 index 0000000..490920c Binary files /dev/null and b/assets/hold.png differ diff --git a/assets/review.png b/assets/review.png new file mode 100644 index 0000000..f69343d Binary files /dev/null and b/assets/review.png differ diff --git a/environment.yml b/environment.yml new file mode 100644 index 0000000..890d6a9 --- /dev/null +++ b/environment.yml @@ -0,0 +1,111 @@ +name: candystore +channels: + - anaconda + - defaults +dependencies: + - appnope=0.1.2=py39hecd8cb5_1001 + - argon2-cffi=21.3.0=pyhd3eb1b0_0 + - argon2-cffi-bindings=21.2.0=py39hca72f7f_0 + - asttokens=2.0.5=pyhd3eb1b0_0 + - attrs=21.4.0=pyhd3eb1b0_0 + - backcall=0.2.0=pyhd3eb1b0_0 + - beautifulsoup4=4.11.1=py39hecd8cb5_0 + - blas=1.0=mkl + - bleach=4.1.0=pyhd3eb1b0_0 + - bottleneck=1.3.4=py39h67323c0_0 + - ca-certificates=2022.4.26=hecd8cb5_0 + - certifi=2022.6.15=py39hecd8cb5_0 + - cffi=1.15.0=py39hc55c11b_1 + - debugpy=1.5.1=py39he9d5cce_0 + - decorator=5.1.1=pyhd3eb1b0_0 + - defusedxml=0.7.1=pyhd3eb1b0_0 + - entrypoints=0.4=py39hecd8cb5_0 + - executing=0.8.3=pyhd3eb1b0_0 + - icu=58.2=h0a44026_3 + - intel-openmp=2021.4.0=hecd8cb5_3538 + - ipykernel=6.9.1=py39hecd8cb5_0 + - ipython=8.3.0=py39hecd8cb5_0 + - ipython_genutils=0.2.0=pyhd3eb1b0_1 + - ipywidgets=7.6.5=pyhd3eb1b0_1 + - jedi=0.18.1=py39hecd8cb5_1 + - jinja2=3.0.3=pyhd3eb1b0_0 + - jpeg=9e=hca72f7f_0 + - jsonschema=4.4.0=py39hecd8cb5_0 + - jupyter=1.0.0=py39hecd8cb5_7 + - jupyter_client=7.2.2=py39hecd8cb5_0 + - jupyter_console=6.4.3=pyhd3eb1b0_0 + - jupyter_core=4.10.0=py39hecd8cb5_0 + - jupyterlab_pygments=0.1.2=py_0 + - jupyterlab_widgets=1.0.0=pyhd3eb1b0_1 + - libcxx=12.0.0=h2f01273_0 + - libffi=3.3=hb1e8313_2 + - libpng=1.6.37=ha441bb4_0 + - libsodium=1.0.18=h1de35cc_0 + - markupsafe=2.1.1=py39hca72f7f_0 + - matplotlib-inline=0.1.2=pyhd3eb1b0_2 + - mistune=0.8.4=py39h9ed2024_1000 + - mkl=2021.4.0=hecd8cb5_637 + - mkl-service=2.4.0=py39h9ed2024_0 + - mkl_fft=1.3.1=py39h4ab4a9b_0 + - mkl_random=1.2.2=py39hb2f4e1b_0 + - nbclient=0.5.13=py39hecd8cb5_0 + - nbconvert=6.4.4=py39hecd8cb5_0 + - nbformat=5.3.0=py39hecd8cb5_0 + - ncurses=6.3=hca72f7f_3 + - nest-asyncio=1.5.5=py39hecd8cb5_0 + - notebook=6.4.11=py39hecd8cb5_0 + - numexpr=2.8.1=py39h2e5f0a9_2 + - numpy=1.22.3=py39h2e5f0a9_0 + - numpy-base=1.22.3=py39h3b1a694_0 + - openssl=1.1.1o=hca72f7f_0 + - packaging=21.3=pyhd3eb1b0_0 + - pandas=1.4.2=py39he9d5cce_0 + - pandocfilters=1.5.0=pyhd3eb1b0_0 + - parso=0.8.3=pyhd3eb1b0_0 + - pexpect=4.8.0=pyhd3eb1b0_3 + - pickleshare=0.7.5=pyhd3eb1b0_1003 + - pip=22.1.2=py39hecd8cb5_0 + - prometheus_client=0.13.1=pyhd3eb1b0_0 + - prompt-toolkit=3.0.20=pyhd3eb1b0_0 + - prompt_toolkit=3.0.20=hd3eb1b0_0 + - ptyprocess=0.7.0=pyhd3eb1b0_2 + - pure_eval=0.2.2=pyhd3eb1b0_0 + - pycparser=2.21=pyhd3eb1b0_0 + - pygments=2.11.2=pyhd3eb1b0_0 + - pyparsing=3.0.4=pyhd3eb1b0_0 + - pyqt=5.9.2=py39h23ab428_6 + - pyrsistent=0.18.0=py39hca72f7f_0 + - python=3.9.12=hdfd78df_1 + - python-dateutil=2.8.2=pyhd3eb1b0_0 + - python-fastjsonschema=2.15.1=pyhd3eb1b0_0 + - pytz=2022.1=py39hecd8cb5_0 + - pyzmq=22.3.0=py39he9d5cce_2 + - qt=5.9.7=h468cd18_1 + - qtconsole=5.3.0=pyhd3eb1b0_0 + - qtpy=2.0.1=pyhd3eb1b0_0 + - readline=8.1.2=hca72f7f_1 + - send2trash=1.8.0=pyhd3eb1b0_1 + - setuptools=63.4.1=py39hecd8cb5_0 + - sip=4.19.13=py39h23ab428_0 + - six=1.16.0=pyhd3eb1b0_1 + - soupsieve=2.3.1=pyhd3eb1b0_0 + - sqlite=3.39.2=h707629a_0 + - stack_data=0.2.0=pyhd3eb1b0_0 + - terminado=0.13.1=py39hecd8cb5_0 + - testpath=0.6.0=py39hecd8cb5_0 + - tk=8.6.12=h5d9f67b_0 + - tornado=6.1=py39h9ed2024_0 + - traitlets=5.1.1=pyhd3eb1b0_0 + - typing-extensions=4.1.1=hd3eb1b0_0 + - typing_extensions=4.1.1=pyh06a4308_0 + - tzdata=2022a=hda174b7_0 + - wcwidth=0.2.5=pyhd3eb1b0_0 + - webencodings=0.5.1=py39hecd8cb5_1 + - wheel=0.37.1=pyhd3eb1b0_0 + - widgetsnbextension=3.5.2=py39hecd8cb5_0 + - xz=5.2.5=hca72f7f_1 + - zeromq=4.3.4=h23ab428_0 + - zlib=1.2.12=h4dc903c_2 + - pip: + - chwrapper==0.3.0 + - requests==2.8.1 diff --git a/sugartrail.py b/sugartrail.py new file mode 100644 index 0000000..7040f2d --- /dev/null +++ b/sugartrail.py @@ -0,0 +1,147 @@ +from requests.auth import HTTPBasicAuth +import requests +import pandas as pd +import sys +from IPython.display import clear_output +import time +import collections +from datetime import datetime +import math +access_token = "" +username = access_token +password = "" +size = "5000" +basic = HTTPBasicAuth(username, password) + +def get_appointments(officer_id): + url = "https://api.company-information.service.gov.uk/officers/" + officer_id + "/appointments?size=" + size + response = requests.get(url, auth=basic) + # print metadata + df = pd.DataFrame(response.json()['items']) + appointments = len(df) + print(str(appointments) + " appointments") + print(str(appointments - df["resigned_on"].count()) + " active appointments") + return response.json() + +def get_locations(companies, address_type: str): + df = pd.DataFrame(companies['items']) + if address_type == "correspondance": + postcode = [address['postal_code'] for address in df['address']] + addresses = [address['premises'] + ", " + address['address_line_1'] + ", " + address['locality'] + ", " + address['country'] + ", " + address['postal_code'] for address in df['address']] + elif address_type == "registered": + addresses = [] + keys = ["address_line_1","address_line_2","country","locality","postal_code"] + for link in df['links']: + url = "https://api.company-information.service.gov.uk" + link['company'] + "/registered-office-address" + response = requests.get(url, auth=basic) + address = [] + postcode = [] + for key in keys: + if key in response.json(): + address += [response.json()[key]] + if key == "postal_code": + postcode += [response.json()[key]] + address = ", ".join(address) + addresses += [address] + else: + print("unrecognised address type: should be either corresponance or registered") + return None + postcode_frequency = dict(collections.Counter(postcode).items(), key=lambda item: item[1], reverse=True) + print(str(len(postcode_frequency)) + " unique postcodes") + frequency = dict(sorted(collections.Counter(addresses).items(), key=lambda item: item[1], reverse=True)) + print(str(len(frequency)) + " unique " + address_type + " addresses") + print(frequency) + return addresses + +def year_of_creation(companies): + years = [address['date_of_creation'][0:4] for address in companies] + frequency = collections.Counter(years) + return dict(sorted(frequency.items(), key=lambda item: item[1], reverse=True)) + +def age(creation: str, cessation: str): + delta = datetime.strptime(cessation, "%Y-%m-%d")-datetime.strptime(creation, "%Y-%m-%d") + return math.floor(delta.days/365) + + +def get_companies(addresses): + companies = {} + companies_summary = {} + for address in addresses: + url = "https://api.company-information.service.gov.uk/advanced-search/companies?location=" + address + "&size=" + size + response = requests.get(url, auth=basic) + if response.status_code == 200: + companies[address] = response.json()['items'] + companies_summary[address] = {} + companies_summary[address]["frequency"] = response.json()['hits'] + all_companies = [address for address in response.json()['items']] + active_companies = [address for address in response.json()['items'] if address['company_status'] == 'active'] + dead_companies = [address for address in response.json()['items'] if address['company_status'] == 'dissolved'] + companies_summary[address]["active_companies"] = len(active_companies) + years = year_of_creation(all_companies) + survival_months = [age(address['date_of_creation'],address['date_of_cessation']) for address in dead_companies] + survival_frequency = collections.Counter(survival_months) + survival_frequency = dict(sorted(survival_frequency.items(), key=lambda item: item[1], reverse=True)) + active_years = year_of_creation(active_companies) + companies_summary[address]["3_years_active"] = {k: active_years[k] for k in list(active_years)[:3]} + companies_summary[address]["3_years_all"] = {k: years[k] for k in list(years)[:3]} + companies_summary[address]["3_survival"] = {k: survival_frequency[k] for k in list(survival_frequency)[:3]} + companies_summary = dict(sorted(companies_summary.items(), key=lambda item: item[1]["frequency"],reverse=True)) + for i,company in enumerate(companies_summary): + print("Index: " + str(i)) + print(company) + print(str(companies_summary[company]['frequency']) + " companies registered or corresponding here, " + str(companies_summary[company]['active_companies']) + " are active.") + keys = list(companies_summary[company]['3_years_active'].keys()) + life_keys = list(companies_summary[company]['3_survival'].keys()) + for key in keys: + print(str(companies_summary[company]['3_years_active'][key]) + " currently active companies registered in " + str(key)) + for key in life_keys: + print(str(companies_summary[company]['3_survival'][key]) + " companies dissolved between years " + str(key+1) + "-" + str(key)) + print("") + + return {key: companies[key] for key in companies_summary if key in companies} + +def get_officers(company_locations, indices): + officers = {} + for index in indices: + # get businesses at location + company_name = list(company_locations.keys())[index] + officers[str(company_name)] = [] + companies = company_locations[company_name] + length = len(companies) + for i, business in enumerate(companies): + company_number = business['company_number'] + url = "https://api.company-information.service.gov.uk/company/" + company_number + "/officers?size=" + size + while True: + try: + clear_output(wait=True) + print("completion: " + str(100*i/length) + ", index:" + str(i)) + leadership = requests.get(url, auth=basic) + print(leadership) + if leadership.json(): + officers[str(company_name)] += [[officer['name'] for officer in leadership.json()['items']]] + clear_output(wait=True) + time.sleep(0.41) + break + else: + officers[str(company_name)] += [[]] + clear_output(wait=True) + time.sleep(0.41) + break + except: + print(sys.exc_info()[0]) + print("taking a 10 second timeout") + time.sleep(10) + clear_output(wait=True) + for location in list(officers.keys()): + directors = [] + for business in officers[location]: + directors += business + frequency = collections.Counter(directors) + frequency = dict(sorted(frequency.items(), key=lambda item: item[1], reverse=True)) + print(location) + print("-") + print("Most prolific officers:") + for officer in list(frequency): + print(str(officer) + " runs " + str(frequency[str(officer)]) + " businesses") + print("") + return officers