{
 * Copyright (C) 2005 MaxMind LLC  All Rights Reserved.
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

 * ChangeLog
 * 2003-04-09 Translation of C# class to Pascal provided by W. Tracz
 * 2005-07-20 Added support for GeoIP Region, City, ISP and Organization (Yvan Schwab/esoftys)
 * 2009-10-18 Compatible with Delphi 2009 and above (AnsiString) + regions added
}

{ Thanks to W. Tracz/Yvan Schwab for contributing this class }

unit GeoIP;

interface

uses Classes, SysUtils, WinSock;

type
  TGeoIPResult = (
    GEOIP_SUCCESS                 = 0,
    GEOIP_NODATA                  = 1,
    GEOIP_ERROR_IPADDR            = 2,
    GEOIP_ERROR_DBTYPE            = 3,
    GEOIP_ERROR_IO                = 4
  );

  TGeoIPDBTypes = (
    GEOIP_COUNTRY_EDITION     = 1,
    GEOIP_REGION_EDITION_REV0 = 7,
    GEOIP_CITY_EDITION_REV0   = 6,
    GEOIP_ORG_EDITION         = 5,
    GEOIP_ISP_EDITION         = 4,
    GEOIP_CITY_EDITION_REV1   = 2,
    GEOIP_REGION_EDITION_REV1 = 3,
    GEOIP_PROXY_EDITION       = 8,
    GEOIP_ASNUM_EDITION       = 9
  );

  TGeoIPCountry = record
    CountryCode: ansistring;
    CountryName: ansistring;
  end;

  TGeoIPRegion = record
    CountryCode: ansistring;
    Region: ansistring;
  end;

  TGeoIPCity = record
    CountryCode: ansistring;
    CountryName: ansistring;
    Region: ansistring;
    City: ansistring;
    PostalCode: ansistring;
    Latitude: Double;
    Longitude: Double;
    DmaCode: Integer;
    AreaCode: Integer;
  end;

  TGeoIPOrg = record
    Name: ansistring;
  end;

  TGeoIP = class
  private
    FInputFile: TFileStream;
    FDatabaseType: TGeoIPDBTypes;
    FDatabaseSegments: array of Cardinal;
    FDatabaseInfo: string;
    FRecordLength: Cardinal;
    slRegions : TStringList;
    function  _GetCity(IPNum: Cardinal; var GeoIPCity: TGeoIPCity): TGeoIPResult;
    function  _GetCountry(IPNum: Cardinal; var GeoIPCountry: TGeoIPCountry): TGeoIPResult;
    function  _GetOrg(IPNum: Cardinal; var GeoIPOrg: TGeoIPOrg): TGeoIPResult;
    function  _GetRegion(IPNum: Cardinal; var GeoIPRegion: TGeoIPRegion): TGeoIPResult;
    function  AddrToNum(const IPAddr: ansistring): Cardinal;
    procedure InitDBFile;
    function  SeekRecord(IPNum: Cardinal): Cardinal;
    procedure InitRegions;
  public
    constructor Create(const FileName: string);
    destructor Destroy; override;
    function GetCity(const IPAddr: ansistring; var GeoIPCity: TGeoIPCity): TGeoIPResult;
    function GetCountry(const IPAddr: ansistring; var GeoIPCountry: TGeoIPCountry): TGeoIPResult;
    function GetDatabaseInfo: string;
    function GetOrg(const IPAddr: ansistring; var GeoIPOrg: TGeoIPOrg): TGeoIPResult;
    function GetRegion(const IPAddr: ansistring; var GeoIPRegion: TGeoIPRegion): TGeoIPResult;
  end;

const
  CountryCodes:array [0..252] of ansistring = ('--','AP','EU','AD','AE','AF','AG','AI','AL','AM','AN','AO','AQ','AR','AS','AT','AU','AW','AZ','BA','BB','BD','BE','BF','BG','BH','BI','BJ','BM','BN','BO','BR','BS','BT','BV','BW','BY','BZ','CA','CC','CD','CF','CG','CH','CI','CK','CL','CM','CN','CO','CR','CU','CV','CX','CY','CZ','DE','DJ','DK','DM','DO','DZ','EC','EE','EG','EH','ER','ES','ET','FI','FJ','FK','FM','FO','FR','FX','GA','GB','GD','GE','GF','GH','GI','GL','GM','GN','GP','GQ','GR','GS','GT','GU','GW',
                                                'GY','HK','HM','HN','HR','HT','HU','ID','IE','IL','IN','IO','IQ','IR','IS','IT','JM','JO','JP','KE','KG','KH','KI','KM','KN','KP','KR','KW','KY','KZ','LA','LB','LC','LI','LK','LR','LS','LT','LU','LV','LY','MA','MC','MD','MG','MH','MK','ML','MM','MN','MO','MP','MQ','MR','MS','MT','MU','MV','MW','MX','MY','MZ','NA','NC','NE','NF','NG','NI','NL','NO','NP','NR','NU','NZ','OM','PA','PE','PF','PG','PH','PK','PL','PM','PN','PR','PS','PT','PW','PY','QA','RE','RO','RU',
                                                'RW','SA','SB','SC','SD','SE','SG','SH','SI','SJ','SK','SL','SM','SN','SO','SR','ST','SV','SY','SZ','TC','TD','TF','TG','TH','TJ','TK','TM','TN','TO','TL','TR','TT','TV','TW','TZ','UA','UG','UM','US','UY','UZ','VA','VC','VE','VG','VI','VN','VU','WF','WS','YE','YT','RS','ZA','ZM','ME','ZW','A1','A2','O1','AX','GG','IM','JE','BL','MF');

  CountryNames:array [0..252] of ansistring = ('ND', 'Région Asie / Pacifique', 'Europe', 'Andorre', 'Émirats Arabes Unis',
                                                'Afghanistan', 'Antigua-et-Barbuda', 'Anguilla', 'Albanie', 'Arménie',
                                                'Antilles néerlandaises', 'Angola', 'Antarctique', 'Argentine', 'Samoa Américaine',
                                                'Autriche', 'Australie', 'Aruba', 'Azerbaïdjan', 'Bosnie-Herzégovine',
                                                'Barbade', 'Bangladesh', 'Belgique', 'Burkina Faso', 'Bulgarie', 'Bahreïn',
                                                'Burundi', 'Bénin', 'Bermudes', 'Brunei Darussalam', 'Bolivie', 'Brésil',
                                                'Bahamas', 'Bhoutan', 'Îles Bouvet', 'Botswana', 'Belarus', 'Belize',
                                                'Canada', 'Îles Cocos (Keeling)', 'République Démocratique du Congo',
                                                'République Centrafricaine', 'Congo', 'Suisse', 'Côte d''Ivoire', 'Îles Cook',
                                                'Chili', 'Cameroun', 'Chine', 'Colombie', 'Costa Rica', 'Cuba', 'Cap Vert',
                                                'Île Christmas', 'Chypre', 'République Tchèque', 'Allemagne', 'Djibouti',
                                                'Danemark', 'Dominique', 'République Dominicaine', 'Algérie', 'Équateur', 'Estonie',
                                                'Égypte', 'Sahara Occidental', 'Erythrée', 'Espagne', 'Éthiopie', 'Finlande', 'Fidji',
                                                'Îles Falkland (Malvinas)', 'États Fédérés de Micronésie', 'Îles Faroe',
                                                'France', 'France Métropolitaine', 'Gabon', 'Royaume-Uni',
                                                'Grenade', 'Géorgie', 'Guyane française', 'Ghana', 'Gibraltar', 'Groenland',
                                                'Gambie', 'Guinée', 'Guadeloupe', 'Guinée Équatoriale', 'Grèce', 'Géorgie du Sud et les îles Sandwich du Sud',
                                                'Guatemala', 'Guam', 'Guinée-Bissau',
                                                'Guyana', 'Hong Kong', 'Les îles Heard et McDonald', 'Honduras',
                                                'Croatie', 'Haïti', 'Hongrie', 'Indonésie', 'Irlande', 'Israël', 'Inde',
                                                'Territoire Britannique de l''Océan Indien', 'République d''Irak', 'Iran',
                                                'Islande', 'Italie', 'Jamaïque', 'Jordanie', 'Japon', 'Kenya', 'Kirghizistan',
                                                'Cambodge', 'Kiribati', 'Comores', 'Saint-Kitts-et-Nevis', 'République populaire démocratique de Corée',
                                                'République de Corée', 'Koweït', 'Îles Cayman',
                                                'Kazakhstan', 'République Démocratique du peuple du Lao', 'Liban', 'Sainte Lucie',
                                                'Liechtenstein', 'Sri Lanka', 'Libéria', 'Lesotho', 'Lituanie', 'Luxembourg',
                                                'Lettonie', 'Grande Jamahiriya arabe libyenne populaire et socialiste', 'Maroc', 'Monaco', 'République de Moldovie',
                                                'Madagascar', 'Îles Marshall', 'Macédoine',
                                                'Mali', 'Myanmar', 'Mongolie', 'Macao', 'Îles Mariannes du Nord',
                                                'Martinique', 'Mauritanie', 'Montserrat', 'Malte', 'Île Maurice', 'Maldives',
                                                'Malawi', 'Mexique', 'Malaysie', 'Mozambique', 'Namibie', 'Nouvelle-Calédonie',
                                                'Niger', 'Île de Norfolk', 'Nigeria', 'Nicaragua', 'Pays-Bas', 'Norvège',
                                                'Népal', 'Nauru', 'Niue', 'Nouvelle-Zélande', 'Oman', 'Panama', 'Pérou', 'Polynésie Française',
                                                'Papouasie-Nouvelle-Guinée', 'Philippines', 'Pakistan', 'Pologne', 'Saint-Pierre-et-Miquelon',
                                                'Îles Pitcairn', 'Puerto Rico', 'Territoire Palestinien',
                                                'Portugal', 'Palau', 'Paraguay', 'Qatar', 'Réunion', 'Roumanie',
                                                'Fédération de Russie', 'Rwanda', 'Arabie Saoudite', 'Îles Solomon',
                                                'Les Seychelles', 'Soudan', 'Suède', 'Singapour', 'Sainte-Hélène', 'Slovénie',
                                                'Svalbard et Jan Mayen', 'Slovaquie', 'Sierra Leone', 'Saint-Marin', 'Sénégal',
                                                'Somalie', 'Suriname', 'Sao Tomé et Principe', 'El Salvador', 'République Arabe Syrienne',
                                                'Swaziland', 'Îles Turques et Caicos', 'Tchad', 'Terres Australes Françaises',
                                                'Togo', 'Thaïlande', 'Tadjikistan', 'Tokelau', 'Turkmenistan',
                                                'Tunisie', 'Tonga', 'Timor-Leste', 'Turquie', 'Trinidad et Tobago', 'Tuvalu',
                                                'Taïwan', 'République-Unie de Tanzanie', 'Ukraine',
                                                'Ouganda', 'Îles mineures éloignées des États-Unis', 'États-Unis', 'Uruguay',
                                                'Ouzbékistan', 'Saint-Siège (État de la ville du Vatican)', 'Saint-Vincent et les Grenadines',
                                                'Venezuela', 'Îles Vierges britanniques', 'Îles Vierges américaines',
                                                'Vietnam', 'Vanuatu', 'Wallis et Futuna', 'Samoa', 'Yémen', 'Mayotte',
                                                'Serbie', 'Afrique du Sud', 'Zambie', 'Monténégro', 'Zimbabwe',
                                                'Proxy Anonyme', 'Fournisseur par Satellite', 'Autre',
                                                'Îles Aland', 'Guernesey', 'Île de Man', 'Jersey', 'Saint-Barthélemy', 'Saint Martin');
  RegionNames:array [0..4209] of ansistring = ('AD02=Canillo', 'AD03=Encamp', 'AD04=La Massana', 'AD05=Ordino', 'AD06=Sant Julia de Loria', 'AD07=Andorra la Vella', 'AD08=Escaldes-Engordany', 'AE01=Abu Dhabi', 'AE02=Ajman', 'AE03=Dubai',
                                                'AE04=Fujairah', 'AE05=Ras Al Khaimah', 'AE06=Sharjah', 'AE07=Umm Al Quwain', 'AF01=Badakhshan', 'AF02=Badghis', 'AF03=Baghlan', 'AF05=Bamian', 'AF06=Farah', 'AF07=Faryab',
                                                'AF08=Ghazni', 'AF09=Ghowr', 'AF10=Helmand', 'AF11=Herat', 'AF13=Kabol', 'AF14=Kapisa', 'AF15=Konar', 'AF16=Laghman', 'AF17=Lowgar', 'AF18=Nangarhar',
                                                'AF19=Nimruz', 'AF21=Paktia', 'AF22=Parvan', 'AF23=Kandahar', 'AF24=Kondoz', 'AF26=Takhar', 'AF27=Vardak', 'AF28=Zabol', 'AF29=Paktika', 'AF30=Balkh',
                                                'AF31=Jowzjan', 'AF32=Samangan', 'AF33=Sar-e Pol', 'AF34=Konar', 'AF35=Laghman', 'AF36=Paktia', 'AF37=Khowst', 'AF38=Nurestan', 'AF39=Oruzgan', 'AF40=Parvan',
                                                'AF41=Daykondi', 'AF42=Panjshir', 'AG01=Barbuda', 'AG03=Saint George', 'AG04=Saint John', 'AG05=Saint Mary', 'AG06=Saint Paul', 'AG07=Saint Peter', 'AG08=Saint Philip', 'AL40=Berat',
                                                'AL41=Diber', 'AL42=Durres', 'AL43=Elbasan', 'AL44=Fier', 'AL45=Gjirokaster', 'AL46=Korce', 'AL47=Kukes', 'AL48=Lezhe', 'AL49=Shkoder', 'AL50=Tirane',
                                                'AL51=Vlore', 'AM01=Aragatsotn', 'AM02=Ararat', 'AM03=Armavir', 'AM04=Geghark''unik''', 'AM05=Kotayk''', 'AM06=Lorri', 'AM07=Shirak', 'AM08=Syunik''', 'AM09=Tavush',
                                                'AM10=Vayots'' Dzor', 'AM11=Yerevan', 'AO01=Benguela', 'AO02=Bie', 'AO03=Cabinda', 'AO04=Cuando Cubango', 'AO05=Cuanza Norte', 'AO06=Cuanza Sul', 'AO07=Cunene', 'AO08=Huambo',
                                                'AO09=Huila', 'AO10=Luanda', 'AO12=Malanje', 'AO14=Moxico', 'AO15=Uige', 'AO16=Zaire', 'AO17=Lunda Norte', 'AO18=Lunda Sul', 'AO19=Bengo', 'AO20=Luanda',
                                                'AR01=Buenos Aires', 'AR02=Catamarca', 'AR03=Chaco', 'AR04=Chubut', 'AR05=Cordoba', 'AR06=Corrientes', 'AR07=Distrito Federal', 'AR08=Entre Rios', 'AR09=Formosa', 'AR10=Jujuy',
                                                'AR11=La Pampa', 'AR12=La Rioja', 'AR13=Mendoza', 'AR14=Misiones', 'AR15=Neuquen', 'AR16=Rio Negro', 'AR17=Salta', 'AR18=San Juan', 'AR19=San Luis', 'AR20=Santa Cruz',
                                                'AR21=Santa Fe', 'AR22=Santiago del Estero', 'AR23=Tierra del Fuego', 'AR24=Tucuman', 'AT01=Burgenland', 'AT02=Karnten', 'AT03=Niederosterreich', 'AT04=Oberosterreich', 'AT05=Salzburg', 'AT06=Steiermark',
                                                'AT07=Tirol', 'AT08=Vorarlberg', 'AT09=Wien', 'AU01=Australian Capital Territory', 'AU02=New South Wales', 'AU03=Northern Territory', 'AU04=Queensland', 'AU05=South Australia', 'AU06=Tasmania', 'AU07=Victoria',
                                                'AU08=Western Australia', 'AZ01=Abseron', 'AZ02=Agcabadi', 'AZ03=Agdam', 'AZ04=Agdas', 'AZ05=Agstafa', 'AZ06=Agsu', 'AZ07=Ali Bayramli', 'AZ08=Astara', 'AZ09=Baki',
                                                'AZ10=Balakan', 'AZ11=Barda', 'AZ12=Beylaqan', 'AZ13=Bilasuvar', 'AZ14=Cabrayil', 'AZ15=Calilabad', 'AZ16=Daskasan', 'AZ17=Davaci', 'AZ18=Fuzuli', 'AZ19=Gadabay',
                                                'AZ20=Ganca', 'AZ21=Goranboy', 'AZ22=Goycay', 'AZ23=Haciqabul', 'AZ24=Imisli', 'AZ25=Ismayilli', 'AZ26=Kalbacar', 'AZ27=Kurdamir', 'AZ28=Lacin', 'AZ29=Lankaran',
                                                'AZ30=Lankaran', 'AZ31=Lerik', 'AZ32=Masalli', 'AZ33=Mingacevir', 'AZ34=Naftalan', 'AZ35=Naxcivan', 'AZ36=Neftcala', 'AZ37=Oguz', 'AZ38=Qabala', 'AZ39=Qax',
                                                'AZ40=Qazax', 'AZ41=Qobustan', 'AZ42=Quba', 'AZ43=Qubadli', 'AZ44=Qusar', 'AZ45=Saatli', 'AZ46=Sabirabad', 'AZ47=Saki', 'AZ48=Saki', 'AZ49=Salyan',
                                                'AZ50=Samaxi', 'AZ51=Samkir', 'AZ52=Samux', 'AZ53=Siyazan', 'AZ54=Sumqayit', 'AZ55=Susa', 'AZ56=Susa', 'AZ57=Tartar', 'AZ58=Tovuz', 'AZ59=Ucar',
                                                'AZ60=Xacmaz', 'AZ61=Xankandi', 'AZ62=Xanlar', 'AZ63=Xizi', 'AZ64=Xocali', 'AZ65=Xocavand', 'AZ66=Yardimli', 'AZ67=Yevlax', 'AZ68=Yevlax', 'AZ69=Zangilan',
                                                'AZ70=Zaqatala', 'AZ71=Zardab', 'BA01=Federation of Bosnia and Herzegovina', 'BA02=Republika Srpska', 'BB01=Christ Church', 'BB02=Saint Andrew', 'BB03=Saint George', 'BB04=Saint James', 'BB05=Saint John', 'BB06=Saint Joseph',
                                                'BB07=Saint Lucy', 'BB08=Saint Michael', 'BB09=Saint Peter', 'BB10=Saint Philip', 'BB11=Saint Thomas', 'BD01=Barisal', 'BD04=Bandarban', 'BD05=Comilla', 'BD12=Mymensingh', 'BD13=Noakhali',
                                                'BD15=Patuakhali', 'BD22=Bagerhat', 'BD23=Bhola', 'BD24=Bogra', 'BD25=Barguna', 'BD26=Brahmanbaria', 'BD27=Chandpur', 'BD28=Chapai Nawabganj', 'BD29=Chattagram', 'BD30=Chuadanga',
                                                'BD31=Cox''s Bazar', 'BD32=Dhaka', 'BD33=Dinajpur', 'BD34=Faridpur', 'BD35=Feni', 'BD36=Gaibandha', 'BD37=Gazipur', 'BD38=Gopalganj', 'BD39=Habiganj', 'BD40=Jaipurhat',
                                                'BD41=Jamalpur', 'BD42=Jessore', 'BD43=Jhalakati', 'BD44=Jhenaidah', 'BD45=Khagrachari', 'BD46=Khulna', 'BD47=Kishorganj', 'BD48=Kurigram', 'BD49=Kushtia', 'BD50=Laksmipur',
                                                'BD51=Lalmonirhat', 'BD52=Madaripur', 'BD53=Magura', 'BD54=Manikganj', 'BD55=Meherpur', 'BD56=Moulavibazar', 'BD57=Munshiganj', 'BD58=Naogaon', 'BD59=Narail', 'BD60=Narayanganj',
                                                'BD61=Narsingdi', 'BD62=Nator', 'BD63=Netrakona', 'BD64=Nilphamari', 'BD65=Pabna', 'BD66=Panchagar', 'BD67=Parbattya Chattagram', 'BD68=Pirojpur', 'BD69=Rajbari', 'BD70=Rajshahi',
                                                'BD71=Rangpur', 'BD72=Satkhira', 'BD73=Shariyatpur', 'BD74=Sherpur', 'BD75=Sirajganj', 'BD76=Sunamganj', 'BD77=Sylhet', 'BD78=Tangail', 'BD79=Thakurgaon', 'BD81=Dhaka',
                                                'BD82=Khulna', 'BD83=Rajshahi', 'BD84=Chittagong', 'BD85=Barisal', 'BD86=Sylhet', 'BE01=Antwerpen', 'BE02=Brabant', 'BE03=Hainaut', 'BE04=Liege', 'BE05=Limburg',
                                                'BE06=Luxembourg', 'BE07=Namur', 'BE08=Oost-Vlaanderen', 'BE09=West-Vlaanderen', 'BE10=Brabant Wallon', 'BE11=Brussels Hoofdstedelijk Gewest', 'BE12=Vlaams-Brabant', 'BF15=Bam', 'BF19=Boulkiemde', 'BF20=Ganzourgou',
                                                'BF21=Gnagna', 'BF28=Kouritenga', 'BF33=Oudalan', 'BF34=Passore', 'BF36=Sanguie', 'BF40=Soum', 'BF42=Tapoa', 'BF44=Zoundweogo', 'BF45=Bale', 'BF46=Banwa',
                                                'BF47=Bazega', 'BF48=Bougouriba', 'BF49=Boulgou', 'BF50=Gourma', 'BF51=Houet', 'BF52=Ioba', 'BF53=Kadiogo', 'BF54=Kenedougou', 'BF55=Komoe', 'BF56=Komondjari',
                                                'BF57=Kompienga', 'BF58=Kossi', 'BF59=Koulpelogo', 'BF60=Kourweogo', 'BF61=Leraba', 'BF62=Loroum', 'BF63=Mouhoun', 'BF64=Namentenga', 'BF65=Naouri', 'BF66=Nayala',
                                                'BF67=Noumbiel', 'BF68=Oubritenga', 'BF69=Poni', 'BF70=Sanmatenga', 'BF71=Seno', 'BF72=Sissili', 'BF73=Sourou', 'BF74=Tuy', 'BF75=Yagha', 'BF76=Yatenga',
                                                'BF77=Ziro', 'BF78=Zondoma', 'BG33=Mikhaylovgrad', 'BG38=Blagoevgrad', 'BG39=Burgas', 'BG40=Dobrich', 'BG41=Gabrovo', 'BG42=Grad Sofiya', 'BG43=Khaskovo', 'BG44=Kurdzhali',
                                                'BG45=Kyustendil', 'BG46=Lovech', 'BG47=Montana', 'BG48=Pazardzhik', 'BG49=Pernik', 'BG50=Pleven', 'BG51=Plovdiv', 'BG52=Razgrad', 'BG53=Ruse', 'BG54=Shumen',
                                                'BG55=Silistra', 'BG56=Sliven', 'BG57=Smolyan', 'BG58=Sofiya', 'BG59=Stara Zagora', 'BG60=Turgovishte', 'BG61=Varna', 'BG62=Veliko Turnovo', 'BG63=Vidin', 'BG64=Vratsa',
                                                'BG65=Yambol', 'BH01=Al Hadd', 'BH02=Al Manamah', 'BH03=Al Muharraq', 'BH05=Jidd Hafs', 'BH06=Sitrah', 'BH08=Al Mintaqah al Gharbiyah', 'BH09=Mintaqat Juzur Hawar', 'BH10=Al Mintaqah ash Shamaliyah', 'BH11=Al Mintaqah al Wusta',
                                                'BH12=Madinat', 'BH13=Ar Rifa', 'BH14=Madinat Hamad', 'BH15=Al Muharraq', 'BH16=Al Asimah', 'BH17=Al Janubiyah', 'BH18=Ash Shamaliyah', 'BH19=Al Wusta', 'BI02=Bujumbura', 'BI09=Bubanza',
                                                'BI10=Bururi', 'BI11=Cankuzo', 'BI12=Cibitoke', 'BI13=Gitega', 'BI14=Karuzi', 'BI15=Kayanza', 'BI16=Kirundo', 'BI17=Makamba', 'BI18=Muyinga', 'BI19=Ngozi',
                                                'BI20=Rutana', 'BI21=Ruyigi', 'BI22=Muramvya', 'BI23=Mwaro', 'BJ01=Atakora', 'BJ02=Atlantique', 'BJ03=Borgou', 'BJ04=Mono', 'BJ05=Oueme', 'BJ06=Zou',
                                                'BJ14=Littoral', 'BM01=Devonshire', 'BM02=Hamilton', 'BM03=Hamilton', 'BM04=Paget', 'BM05=Pembroke', 'BM06=Saint George', 'BM07=Saint George''s', 'BM08=Sandys', 'BM09=Smiths',
                                                'BM10=Southampton', 'BM11=Warwick', 'BN07=Alibori', 'BN08=Belait', 'BN09=Brunei and Muara', 'BN10=Temburong', 'BN11=Collines', 'BN12=Kouffo', 'BN13=Donga', 'BN14=Littoral',
                                                'BN15=Tutong', 'BN16=Oueme', 'BN17=Plateau', 'BN18=Zou', 'BO01=Chuquisaca', 'BO02=Cochabamba', 'BO03=El Beni', 'BO04=La Paz', 'BO05=Oruro', 'BO06=Pando',
                                                'BO07=Potosi', 'BO08=Santa Cruz', 'BO09=Tarija', 'BR01=Acre', 'BR02=Alagoas', 'BR03=Amapa', 'BR04=Amazonas', 'BR05=Bahia', 'BR06=Ceara', 'BR07=Distrito Federal',
                                                'BR08=Espirito Santo', 'BR11=Mato Grosso do Sul', 'BR13=Maranhao', 'BR14=Mato Grosso', 'BR15=Minas Gerais', 'BR16=Para', 'BR17=Paraiba', 'BR18=Parana', 'BR20=Piaui', 'BR21=Rio de Janeiro',
                                                'BR22=Rio Grande do Norte', 'BR23=Rio Grande do Sul', 'BR24=Rondonia', 'BR25=Roraima', 'BR26=Santa Catarina', 'BR27=Sao Paulo', 'BR28=Sergipe', 'BR29=Goias', 'BR30=Pernambuco', 'BR31=Tocantins',
                                                'BS05=Bimini', 'BS06=Cat Island', 'BS10=Exuma', 'BS13=Inagua', 'BS15=Long Island', 'BS16=Mayaguana', 'BS18=Ragged Island', 'BS22=Harbour Island', 'BS23=New Providence', 'BS24=Acklins and Crooked Islands',
                                                'BS25=Freeport', 'BS26=Fresh Creek', 'BS27=Governor''s Harbour', 'BS28=Green Turtle Cay', 'BS29=High Rock', 'BS30=Kemps Bay', 'BS31=Marsh Harbour', 'BS32=Nichollstown and Berry Islands', 'BS33=Rock Sound', 'BS34=Sandy Point',
                                                'BS35=San Salvador and Rum Cay', 'BT05=Bumthang', 'BT06=Chhukha', 'BT07=Chirang', 'BT08=Daga', 'BT09=Geylegphug', 'BT10=Ha', 'BT11=Lhuntshi', 'BT12=Mongar', 'BT13=Paro',
                                                'BT14=Pemagatsel', 'BT15=Punakha', 'BT16=Samchi', 'BT17=Samdrup', 'BT18=Shemgang', 'BT19=Tashigang', 'BT20=Thimphu', 'BT21=Tongsa', 'BT22=Wangdi Phodrang', 'BW01=Central',
                                                'BW03=Ghanzi', 'BW04=Kgalagadi', 'BW05=Kgatleng', 'BW06=Kweneng', 'BW08=North-East', 'BW09=South-East', 'BW10=Southern', 'BW11=North-West', 'BY01=Brestskaya Voblasts''', 'BY02=Homyel''skaya Voblasts''',
                                                'BY03=Hrodzyenskaya Voblasts''', 'BY04=Minsk', 'BY05=Minskaya Voblasts''', 'BY06=Mahilyowskaya Voblasts''', 'BY07=Vitsyebskaya Voblasts''', 'BZ01=Belize', 'BZ02=Cayo', 'BZ03=Corozal', 'BZ04=Orange Walk', 'BZ05=Stann Creek',
                                                'BZ06=Toledo', 'CAAB=Alberta', 'CABC=British Columbia', 'CAMB=Manitoba', 'CANB=New Brunswick', 'CANL=Newfoundland', 'CANS=Nova Scotia', 'CANT=Northwest Territories', 'CANU=Nunavut', 'CAON=Ontario',
                                                'CAPE=Prince Edward Island', 'CAQC=Quebec', 'CASK=Saskatchewan', 'CAYT=Yukon Territory', 'CD01=Bandundu', 'CD02=Equateur', 'CD04=Kasai-Oriental', 'CD05=Katanga', 'CD06=Kinshasa', 'CD07=Kivu',
                                                'CD08=Bas-Congo', 'CD09=Orientale', 'CD10=Maniema', 'CD11=Nord-Kivu', 'CD12=Sud-Kivu', 'CD13=Cuvette', 'CF01=Bamingui-Bangoran', 'CF02=Basse-Kotto', 'CF03=Haute-Kotto', 'CF04=Mambere-Kadei',
                                                'CF05=Haut-Mbomou', 'CF06=Kemo', 'CF07=Lobaye', 'CF08=Mbomou', 'CF09=Nana-Mambere', 'CF11=Ouaka', 'CF12=Ouham', 'CF13=Ouham-Pende', 'CF14=Cuvette-Ouest', 'CF15=Nana-Grebizi',
                                                'CF16=Sangha-Mbaere', 'CF17=Ombella-Mpoko', 'CF18=Bangui', 'CG01=Bouenza', 'CG03=Cuvette', 'CG04=Kouilou', 'CG05=Lekoumou', 'CG06=Likouala', 'CG07=Niari', 'CG08=Plateaux',
                                                'CG10=Sangha', 'CG11=Pool', 'CG12=Brazzaville', 'CH01=Aargau', 'CH02=Ausser-Rhoden', 'CH03=Basel-Landschaft', 'CH04=Basel-Stadt', 'CH05=Bern', 'CH06=Fribourg', 'CH07=Geneve',
                                                'CH08=Glarus', 'CH09=Graubunden', 'CH10=Inner-Rhoden', 'CH11=Luzern', 'CH12=Neuchatel', 'CH13=Nidwalden', 'CH14=Obwalden', 'CH15=Sankt Gallen', 'CH16=Schaffhausen', 'CH17=Schwyz',
                                                'CH18=Solothurn', 'CH19=Thurgau', 'CH20=Ticino', 'CH21=Uri', 'CH22=Valais', 'CH23=Vaud', 'CH24=Zug', 'CH25=Zurich', 'CH26=Jura', 'CI51=Sassandra',
                                                'CI61=Abidjan', 'CI74=Agneby', 'CI75=Bafing', 'CI76=Bas-Sassandra', 'CI77=Denguele', 'CI78=Dix-Huit Montagnes', 'CI79=Fromager', 'CI80=Haut-Sassandra', 'CI81=Lacs', 'CI82=Lagunes',
                                                'CI83=Marahoue', 'CI84=Moyen-Cavally', 'CI85=Moyen-Comoe', 'CI86=N''zi-Comoe', 'CI87=Savanes', 'CI88=Sud-Bandama', 'CI89=Sud-Comoe', 'CI90=Vallee du Bandama', 'CI91=Worodougou', 'CI92=Zanzan',
                                                'CL01=Valparaiso', 'CL02=Aisen del General Carlos Ibanez del Campo', 'CL03=Antofagasta', 'CL04=Araucania', 'CL05=Atacama', 'CL06=Bio-Bio', 'CL07=Coquimbo', 'CL08=Libertador General Bernardo O''Higgins', 'CL09=Los Lagos', 'CL10=Magallanes y de la Antartica Chilena',
                                                'CL11=Maule', 'CL12=Region Metropolitana', 'CL13=Tarapaca', 'CM04=Est', 'CM05=Littoral', 'CM07=Nord-Ouest', 'CM08=Ouest', 'CM09=Sud-Ouest', 'CM10=Adamaoua', 'CM11=Centre',
                                                'CM12=Extreme-Nord', 'CM13=Nord', 'CM14=Sud', 'CN01=Anhui', 'CN02=Zhejiang', 'CN03=Jiangxi', 'CN04=Jiangsu', 'CN05=Jilin', 'CN06=Qinghai', 'CN07=Fujian',
                                                'CN08=Heilongjiang', 'CN09=Henan', 'CN10=Hebei', 'CN11=Hunan', 'CN12=Hubei', 'CN13=Xinjiang', 'CN14=Xizang', 'CN15=Gansu', 'CN16=Guangxi', 'CN18=Guizhou',
                                                'CN19=Liaoning', 'CN20=Nei Mongol', 'CN21=Ningxia', 'CN22=Beijing', 'CN23=Shanghai', 'CN24=Shanxi', 'CN25=Shandong', 'CN26=Shaanxi', 'CN28=Tianjin', 'CN29=Yunnan',
                                                'CN30=Guangdong', 'CN31=Hainan', 'CN32=Sichuan', 'CN33=Chongqing', 'CO01=Amazonas', 'CO02=Antioquia', 'CO03=Arauca', 'CO04=Atlantico', 'CO05=Bol?var Department', 'CO06=Boyac? Department',
                                                'CO07=Caldas Department', 'CO08=Caqueta', 'CO09=Cauca', 'CO10=Cesar', 'CO11=Choco', 'CO12=Cordoba', 'CO14=Guaviare', 'CO15=Guainia', 'CO16=Huila', 'CO17=La Guajira',
                                                'CO18=Magdalena Department', 'CO19=Meta', 'CO20=Narino', 'CO21=Norte de Santander', 'CO22=Putumayo', 'CO23=Quindio', 'CO24=Risaralda', 'CO25=San Andres y Providencia', 'CO26=Santander', 'CO27=Sucre',
                                                'CO28=Tolima', 'CO29=Valle del Cauca', 'CO30=Vaupes', 'CO31=Vichada', 'CO32=Casanare', 'CO33=Cundinamarca', 'CO34=Distrito Especial', 'CO35=Bolivar', 'CO36=Boyaca', 'CO37=Caldas',
                                                'CO38=Magdalena', 'CR01=Alajuela', 'CR02=Cartago', 'CR03=Guanacaste', 'CR04=Heredia', 'CR06=Limon', 'CR07=Puntarenas', 'CR08=San Jose', 'CU01=Pinar del Rio', 'CU02=Ciudad de la Habana',
                                                'CU03=Matanzas', 'CU04=Isla de la Juventud', 'CU05=Camaguey', 'CU07=Ciego de Avila', 'CU08=Cienfuegos', 'CU09=Granma', 'CU10=Guantanamo', 'CU11=La Habana', 'CU12=Holguin', 'CU13=Las Tunas',
                                                'CU14=Sancti Spiritus', 'CU15=Santiago de Cuba', 'CU16=Villa Clara', 'CV01=Boa Vista', 'CV02=Brava', 'CV04=Maio', 'CV05=Paul', 'CV07=Ribeira Grande', 'CV08=Sal', 'CV10=Sao Nicolau',
                                                'CV11=Sao Vicente', 'CV13=Mosteiros', 'CV14=Praia', 'CV15=Santa Catarina', 'CV16=Santa Cruz', 'CV17=Sao Domingos', 'CV18=Sao Filipe', 'CV19=Sao Miguel', 'CV20=Tarrafal', 'CY01=Famagusta',
                                                'CY02=Kyrenia', 'CY03=Larnaca', 'CY04=Nicosia', 'CY05=Limassol', 'CY06=Paphos', 'CZ03=Blansko', 'CZ04=Breclav', 'CZ20=Hradec Kralove', 'CZ21=Jablonec nad Nisou', 'CZ23=Jiein',
                                                'CZ24=Jihlava', 'CZ30=Kolin', 'CZ33=Liberec', 'CZ36=Melnik', 'CZ37=Mlada Boleslav', 'CZ39=Nachod', 'CZ41=Nymburk', 'CZ45=Pardubice', 'CZ52=Hlavni Mesto Praha', 'CZ61=Semily',
                                                'CZ70=Trutnov', 'CZ78=Jihomoravsky Kraj', 'CZ79=Jihocesky Kraj', 'CZ80=Vysocina', 'CZ81=Karlovarsky Kraj', 'CZ82=Kralovehradecky Kraj', 'CZ83=Liberecky Kraj', 'CZ84=Olomoucky Kraj', 'CZ85=Moravskoslezsky Kraj', 'CZ86=Pardubicky Kraj',
                                                'CZ87=Plzensky Kraj', 'CZ88=Stredocesky Kraj', 'CZ89=Ustecky Kraj', 'CZ90=Zlinsky Kraj', 'DE01=Baden-Wurttemberg', 'DE02=Bayern', 'DE03=Bremen', 'DE04=Hamburg', 'DE05=Hessen', 'DE06=Niedersachsen',
                                                'DE07=Nordrhein-Westfalen', 'DE08=Rheinland-Pfalz', 'DE09=Saarland', 'DE10=Schleswig-Holstein', 'DE11=Brandenburg', 'DE12=Mecklenburg-Vorpommern', 'DE13=Sachsen', 'DE14=Sachsen-Anhalt', 'DE15=Thuringen', 'DE16=Berlin',
                                                'DJ01=Ali Sabieh', 'DJ04=Obock', 'DJ05=Tadjoura', 'DJ06=Dikhil', 'DJ07=Djibouti', 'DJ08=Arta', 'DK01=Arhus', 'DK02=Bornholm', 'DK03=Frederiksborg', 'DK04=Fyn',
                                                'DK05=Kobenhavn', 'DK06=Staden Kobenhavn', 'DK07=Nordjylland', 'DK08=Ribe', 'DK09=Ringkobing', 'DK10=Roskilde', 'DK11=Sonderjylland', 'DK12=Storstrom', 'DK13=Vejle', 'DK14=Vestsjalland',
                                                'DK15=Viborg', 'DK17=Hovedstaden', 'DK18=Midtjyllen', 'DK19=Nordjylland', 'DK20=Sjelland', 'DK21=Syddanmark', 'DM02=Saint Andrew', 'DM03=Saint David', 'DM04=Saint George', 'DM05=Saint John',
                                                'DM06=Saint Joseph', 'DM07=Saint Luke', 'DM08=Saint Mark', 'DM09=Saint Patrick', 'DM10=Saint Paul', 'DM11=Saint Peter', 'DO01=Azua', 'DO02=Baoruco', 'DO03=Barahona', 'DO04=Dajabon',
                                                'DO05=Distrito Nacional', 'DO06=Duarte', 'DO08=Espaillat', 'DO09=Independencia', 'DO10=La Altagracia', 'DO11=Elias Pina', 'DO12=La Romana', 'DO14=Maria Trinidad Sanchez', 'DO15=Monte Cristi', 'DO16=Pedernales',
                                                'DO17=Peravia', 'DO18=Puerto Plata', 'DO19=Salcedo', 'DO20=Samana', 'DO21=Sanchez Ramirez', 'DO23=San Juan', 'DO24=San Pedro De Macoris', 'DO25=Santiago', 'DO26=Santiago Rodriguez', 'DO27=Valverde',
                                                'DO28=El Seibo', 'DO29=Hato Mayor', 'DO30=La Vega', 'DO31=Monsenor Nouel', 'DO32=Monte Plata', 'DO33=San Cristobal', 'DO34=Distrito Nacional', 'DO35=Peravia', 'DO36=San Jose de Ocoa', 'DO37=Santo Domingo',
                                                'DZ01=Alger', 'DZ03=Batna', 'DZ04=Constantine', 'DZ06=Medea', 'DZ07=Mostaganem', 'DZ09=Oran', 'DZ10=Saida', 'DZ12=Setif', 'DZ13=Tiaret', 'DZ14=Tizi Ouzou',
                                                'DZ15=Tlemcen', 'DZ18=Bejaia', 'DZ19=Biskra', 'DZ20=Blida', 'DZ21=Bouira', 'DZ22=Djelfa', 'DZ23=Guelma', 'DZ24=Jijel', 'DZ25=Laghouat', 'DZ26=Mascara',
                                                'DZ27=M''sila', 'DZ29=Oum el Bouaghi', 'DZ30=Sidi Bel Abbes', 'DZ31=Skikda', 'DZ33=Tebessa', 'DZ34=Adrar', 'DZ35=Ain Defla', 'DZ36=Ain Temouchent', 'DZ37=Annaba', 'DZ38=Bechar',
                                                'DZ39=Bordj Bou Arreridj', 'DZ40=Boumerdes', 'DZ41=Chlef', 'DZ42=El Bayadh', 'DZ43=El Oued', 'DZ44=El Tarf', 'DZ45=Ghardaia', 'DZ46=Illizi', 'DZ47=Khenchela', 'DZ48=Mila',
                                                'DZ49=Naama', 'DZ50=Ouargla', 'DZ51=Relizane', 'DZ52=Souk Ahras', 'DZ53=Tamanghasset', 'DZ54=Tindouf', 'DZ55=Tipaza', 'DZ56=Tissemsilt', 'EC01=Galapagos', 'EC02=Azuay',
                                                'EC03=Bolivar', 'EC04=Canar', 'EC05=Carchi', 'EC06=Chimborazo', 'EC07=Cotopaxi', 'EC08=El Oro', 'EC09=Esmeraldas', 'EC10=Guayas', 'EC11=Imbabura', 'EC12=Loja',
                                                'EC13=Los Rios', 'EC14=Manabi', 'EC15=Morona-Santiago', 'EC17=Pastaza', 'EC18=Pichincha', 'EC19=Tungurahua', 'EC20=Zamora-Chinchipe', 'EC22=Sucumbios', 'EC23=Napo', 'EC24=Orellana',
                                                'EE01=Harjumaa', 'EE02=Hiiumaa', 'EE03=Ida-Virumaa', 'EE04=Jarvamaa', 'EE05=Jogevamaa', 'EE06=Kohtla-Jarve', 'EE07=Laanemaa', 'EE08=Laane-Virumaa', 'EE09=Narva', 'EE10=Parnu',
                                                'EE11=Parnumaa', 'EE12=Polvamaa', 'EE13=Raplamaa', 'EE14=Saaremaa', 'EE15=Sillamae', 'EE16=Tallinn', 'EE17=Tartu', 'EE18=Tartumaa', 'EE19=Valgamaa', 'EE20=Viljandimaa',
                                                'EE21=Vorumaa', 'EG01=Ad Daqahliyah', 'EG02=Al Bahr al Ahmar', 'EG03=Al Buhayrah', 'EG04=Al Fayyum', 'EG05=Al Gharbiyah', 'EG06=Al Iskandariyah', 'EG07=Al Isma''iliyah', 'EG08=Al Jizah', 'EG09=Al Minufiyah',
                                                'EG10=Al Minya', 'EG11=Al Qahirah', 'EG12=Al Qalyubiyah', 'EG13=Al Wadi al Jadid', 'EG14=Ash Sharqiyah', 'EG15=As Suways', 'EG16=Aswan', 'EG17=Asyut', 'EG18=Bani Suwayf', 'EG19=Bur Sa''id',
                                                'EG20=Dumyat', 'EG21=Kafr ash Shaykh', 'EG22=Matruh', 'EG23=Qina', 'EG24=Suhaj', 'EG26=Janub Sina''', 'EG27=Shamal Sina''', 'ER01=Anseba', 'ER02=Debub', 'ER03=Debubawi K''eyih Bahri',
                                                'ER04=Gash Barka', 'ER05=Ma''akel', 'ER06=Semenawi K''eyih Bahri', 'ES07=Islas Baleares', 'ES27=La Rioja', 'ES29=Madrid', 'ES31=Murcia', 'ES32=Navarra', 'ES34=Asturias', 'ES39=Cantabria',
                                                'ES51=Andalucia', 'ES52=Aragon', 'ES53=Canarias', 'ES54=Castilla-La Mancha', 'ES55=Castilla y Leon', 'ES56=Catalonia', 'ES57=Extremadura', 'ES58=Galicia', 'ES59=Pais Vasco', 'ES60=Comunidad Valenciana',
                                                'ET02=Amhara', 'ET07=Somali', 'ET08=Gambella', 'ET10=Addis Abeba', 'ET11=Southern', 'ET12=Tigray', 'ET13=Benishangul', 'ET14=Afar', 'ET44=Adis Abeba', 'ET45=Afar',
                                                'ET46=Amara', 'ET47=Binshangul Gumuz', 'ET48=Dire Dawa', 'ET49=Gambela Hizboch', 'ET50=Hareri Hizb', 'ET51=Oromiya', 'ET52=Sumale', 'ET53=Tigray', 'ET54=YeDebub Biheroch Bihereseboch na Hizboch', 'FI01=Aland',
                                                'FI06=Lapland', 'FI08=Oulu', 'FI13=Southern Finland', 'FI14=Eastern Finland', 'FI15=Western Finland', 'FJ01=Central', 'FJ02=Eastern', 'FJ03=Northern', 'FJ04=Rotuma', 'FJ05=Western',
                                                'FM01=Kosrae', 'FM02=Pohnpei', 'FM03=Chuuk', 'FM04=Yap', 'FR97=Aquitaine', 'FR98=Auvergne', 'FR99=Basse-Normandie', 'FRA1=Bourgogne', 'FRA2=Bretagne', 'FRA3=Centre',
                                                'FRA4=Champagne-Ardenne', 'FRA5=Corse', 'FRA6=Franche-Comte', 'FRA7=Haute-Normandie', 'FRA8=Île-de-France', 'FRA9=Languedoc-Roussillon', 'FRB1=Limousin', 'FRB2=Lorraine', 'FRB3=Midi-Pyrénées', 'FRB4=Nord-Pas-de-Calais',
                                                'FRB5=Pays de la Loire', 'FRB6=Picardie', 'FRB7=Poitou-Charentes', 'FRB8=Provence-Alpes-Côte d''Azur', 'FRB9=Rhône-Alpes', 'FRC1=Alsace', 'GA01=Estuaire', 'GA02=Haut-Ogooue', 'GA03=Moyen-Ogooue', 'GA04=Ngounie',
                                                'GA05=Nyanga', 'GA06=Ogooue-Ivindo', 'GA07=Ogooue-Lolo', 'GA08=Ogooue-Maritime', 'GA09=Woleu-Ntem', 'GB01=Avon', 'GB03=Berkshire', 'GB07=Cleveland', 'GB17=Greater London', 'GB18=Greater Manchester',
                                                'GB20=Hereford and Worcester', 'GB22=Humberside', 'GB28=Merseyside', 'GB37=South Yorkshire', 'GB41=Tyne and Wear', 'GB43=West Midlands', 'GB45=West Yorkshire', 'GB79=Central', 'GB82=Grampian', 'GB84=Lothian',
                                                'GB87=Strathclyde', 'GB88=Tayside', 'GB90=Clwyd', 'GB91=Dyfed', 'GB92=Gwent', 'GB94=Mid Glamorgan', 'GB96=South Glamorgan', 'GB97=West Glamorgan', 'GBA1=Barking and Dagenham', 'GBA2=Barnet',
                                                'GBA3=Barnsley', 'GBA4=Bath and North East Somerset', 'GBA5=Bedfordshire', 'GBA6=Bexley', 'GBA7=Birmingham', 'GBA8=Blackburn with Darwen', 'GBA9=Blackpool', 'GBB1=Bolton', 'GBB2=Bournemouth', 'GBB3=Bracknell Forest',
                                                'GBB4=Bradford', 'GBB5=Brent', 'GBB6=Brighton and Hove', 'GBB7=Bristol, City of', 'GBB8=Bromley', 'GBB9=Buckinghamshire', 'GBC1=Bury', 'GBC2=Calderdale', 'GBC3=Cambridgeshire', 'GBC4=Camden',
                                                'GBC5=Cheshire', 'GBC6=Cornwall', 'GBC7=Coventry', 'GBC8=Croydon', 'GBC9=Cumbria', 'GBD1=Darlington', 'GBD2=Derby', 'GBD3=Derbyshire', 'GBD4=Devon', 'GBD5=Doncaster',
                                                'GBD6=Dorset', 'GBD7=Dudley', 'GBD8=Durham', 'GBD9=Ealing', 'GBE1=East Riding of Yorkshire', 'GBE2=East Sussex', 'GBE3=Enfield', 'GBE4=Essex', 'GBE5=Gateshead', 'GBE6=Gloucestershire',
                                                'GBE7=Greenwich', 'GBE8=Hackney', 'GBE9=Halton', 'GBF1=Hammersmith and Fulham', 'GBF2=Hampshire', 'GBF3=Haringey', 'GBF4=Harrow', 'GBF5=Hartlepool', 'GBF6=Havering', 'GBF7=Herefordshire',
                                                'GBF8=Hertford', 'GBF9=Hillingdon', 'GBG1=Hounslow', 'GBG2=Isle of Wight', 'GBG3=Islington', 'GBG4=Kensington and Chelsea', 'GBG5=Kent', 'GBG6=Kingston upon Hull, City of', 'GBG7=Kingston upon Thames', 'GBG8=Kirklees',
                                                'GBG9=Knowsley', 'GBH1=Lambeth', 'GBH2=Lancashire', 'GBH3=Leeds', 'GBH4=Leicester', 'GBH5=Leicestershire', 'GBH6=Lewisham', 'GBH7=Lincolnshire', 'GBH8=Liverpool', 'GBH9=London, City of',
                                                'GBI1=Luton', 'GBI2=Manchester', 'GBI3=Medway', 'GBI4=Merton', 'GBI5=Middlesbrough', 'GBI6=Milton Keynes', 'GBI7=Newcastle upon Tyne', 'GBI8=Newham', 'GBI9=Norfolk', 'GBJ1=Northamptonshire',
                                                'GBJ2=North East Lincolnshire', 'GBJ3=North Lincolnshire', 'GBJ4=North Somerset', 'GBJ5=North Tyneside', 'GBJ6=Northumberland', 'GBJ7=North Yorkshire', 'GBJ8=Nottingham', 'GBJ9=Nottinghamshire', 'GBK1=Oldham', 'GBK2=Oxfordshire',
                                                'GBK3=Peterborough', 'GBK4=Plymouth', 'GBK5=Poole', 'GBK6=Portsmouth', 'GBK7=Reading', 'GBK8=Redbridge', 'GBK9=Redcar and Cleveland', 'GBL1=Richmond upon Thames', 'GBL2=Rochdale', 'GBL3=Rotherham',
                                                'GBL4=Rutland', 'GBL5=Salford', 'GBL6=Shropshire', 'GBL7=Sandwell', 'GBL8=Sefton', 'GBL9=Sheffield', 'GBM1=Slough', 'GBM2=Solihull', 'GBM3=Somerset', 'GBM4=Southampton',
                                                'GBM5=Southend-on-Sea', 'GBM6=South Gloucestershire', 'GBM7=South Tyneside', 'GBM8=Southwark', 'GBM9=Staffordshire', 'GBN1=St. Helens', 'GBN2=Stockport', 'GBN3=Stockton-on-Tees', 'GBN4=Stoke-on-Trent', 'GBN5=Suffolk',
                                                'GBN6=Sunderland', 'GBN7=Surrey', 'GBN8=Sutton', 'GBN9=Swindon', 'GBO1=Tameside', 'GBO2=Telford and Wrekin', 'GBO3=Thurrock', 'GBO4=Torbay', 'GBO5=Tower Hamlets', 'GBO6=Trafford',
                                                'GBO7=Wakefield', 'GBO8=Walsall', 'GBO9=Waltham Forest', 'GBP1=Wandsworth', 'GBP2=Warrington', 'GBP3=Warwickshire', 'GBP4=West Berkshire', 'GBP5=Westminster', 'GBP6=West Sussex', 'GBP7=Wigan',
                                                'GBP8=Wiltshire', 'GBP9=Windsor and Maidenhead', 'GBQ1=Wirral', 'GBQ2=Wokingham', 'GBQ3=Wolverhampton', 'GBQ4=Worcestershire', 'GBQ5=York', 'GBQ6=Antrim', 'GBQ7=Ards', 'GBQ8=Armagh',
                                                'GBQ9=Ballymena', 'GBR1=Ballymoney', 'GBR2=Banbridge', 'GBR3=Belfast', 'GBR4=Carrickfergus', 'GBR5=Castlereagh', 'GBR6=Coleraine', 'GBR7=Cookstown', 'GBR8=Craigavon', 'GBR9=Down',
                                                'GBS1=Dungannon', 'GBS2=Fermanagh', 'GBS3=Larne', 'GBS4=Limavady', 'GBS5=Lisburn', 'GBS6=Derry', 'GBS7=Magherafelt', 'GBS8=Moyle', 'GBS9=Newry and Mourne', 'GBT1=Newtownabbey',
                                                'GBT2=North Down', 'GBT3=Omagh', 'GBT4=Strabane', 'GBT5=Aberdeen City', 'GBT6=Aberdeenshire', 'GBT7=Angus', 'GBT8=Argyll and Bute', 'GBT9=Scottish Borders, The', 'GBU1=Clackmannanshire', 'GBU2=Dumfries and Galloway',
                                                'GBU3=Dundee City', 'GBU4=East Ayrshire', 'GBU5=East Dunbartonshire', 'GBU6=East Lothian', 'GBU7=East Renfrewshire', 'GBU8=Edinburgh, City of', 'GBU9=Falkirk', 'GBV1=Fife', 'GBV2=Glasgow City', 'GBV3=Highland',
                                                'GBV4=Inverclyde', 'GBV5=Midlothian', 'GBV6=Moray', 'GBV7=North Ayrshire', 'GBV8=North Lanarkshire', 'GBV9=Orkney', 'GBW1=Perth and Kinross', 'GBW2=Renfrewshire', 'GBW3=Shetland Islands', 'GBW4=South Ayrshire',
                                                'GBW5=South Lanarkshire', 'GBW6=Stirling', 'GBW7=West Dunbartonshire', 'GBW8=Eilean Siar', 'GBW9=West Lothian', 'GBX1=Isle of Anglesey', 'GBX2=Blaenau Gwent', 'GBX3=Bridgend', 'GBX4=Caerphilly', 'GBX5=Cardiff',
                                                'GBX6=Ceredigion', 'GBX7=Carmarthenshire', 'GBX8=Conwy', 'GBX9=Denbighshire', 'GBY1=Flintshire', 'GBY2=Gwynedd', 'GBY3=Merthyr Tydfil', 'GBY4=Monmouthshire', 'GBY5=Neath Port Talbot', 'GBY6=Newport',
                                                'GBY7=Pembrokeshire', 'GBY8=Powys', 'GBY9=Rhondda Cynon Taff', 'GBZ1=Swansea', 'GBZ2=Torfaen', 'GBZ3=Vale of Glamorgan, The', 'GBZ4=Wrexham', 'GD01=Saint Andrew', 'GD02=Saint David', 'GD03=Saint George',
                                                'GD04=Saint John', 'GD05=Saint Mark', 'GD06=Saint Patrick', 'GE01=Abashis Raioni', 'GE02=Abkhazia', 'GE03=Adigenis Raioni', 'GE04=Ajaria', 'GE05=Akhalgoris Raioni', 'GE06=Akhalk''alak''is Raioni', 'GE07=Akhalts''ikhis Raioni',
                                                'GE08=Akhmetis Raioni', 'GE09=Ambrolauris Raioni', 'GE10=Aspindzis Raioni', 'GE11=Baghdat''is Raioni', 'GE12=Bolnisis Raioni', 'GE13=Borjomis Raioni', 'GE14=Chiat''ura', 'GE15=Ch''khorotsqus Raioni', 'GE16=Ch''okhatauris Raioni', 'GE17=Dedop''listsqaros Raioni',
                                                'GE18=Dmanisis Raioni', 'GE19=Dushet''is Raioni', 'GE20=Gardabanis Raioni', 'GE21=Gori', 'GE22=Goris Raioni', 'GE23=Gurjaanis Raioni', 'GE24=Javis Raioni', 'GE25=K''arelis Raioni', 'GE26=Kaspis Raioni', 'GE27=Kharagaulis Raioni',
                                                'GE28=Khashuris Raioni', 'GE29=Khobis Raioni', 'GE30=Khonis Raioni', 'GE31=K''ut''aisi', 'GE32=Lagodekhis Raioni', 'GE33=Lanch''khut''is Raioni', 'GE34=Lentekhis Raioni', 'GE35=Marneulis Raioni', 'GE36=Martvilis Raioni', 'GE37=Mestiis Raioni',
                                                'GE38=Mts''khet''is Raioni', 'GE39=Ninotsmindis Raioni', 'GE40=Onis Raioni', 'GE41=Ozurget''is Raioni', 'GE42=P''ot''i', 'GE43=Qazbegis Raioni', 'GE44=Qvarlis Raioni', 'GE45=Rust''avi', 'GE46=Sach''kheris Raioni', 'GE47=Sagarejos Raioni',
                                                'GE48=Samtrediis Raioni', 'GE49=Senakis Raioni', 'GE50=Sighnaghis Raioni', 'GE51=T''bilisi', 'GE52=T''elavis Raioni', 'GE53=T''erjolis Raioni', 'GE54=T''et''ritsqaros Raioni', 'GE55=T''ianet''is Raioni', 'GE56=Tqibuli', 'GE57=Ts''ageris Raioni',
                                                'GE58=Tsalenjikhis Raioni', 'GE59=Tsalkis Raioni', 'GE60=Tsqaltubo', 'GE61=Vanis Raioni', 'GE62=Zestap''onis Raioni', 'GE63=Zugdidi', 'GE64=Zugdidis Raioni', 'GH01=Greater Accra', 'GH02=Ashanti', 'GH03=Brong-Ahafo',
                                                'GH04=Central', 'GH05=Eastern', 'GH06=Northern', 'GH08=Volta', 'GH09=Western', 'GH10=Upper East', 'GH11=Upper West', 'GL01=Nordgronland', 'GL02=Ostgronland', 'GL03=Vestgronland',
                                                'GM01=Banjul', 'GM02=Lower River', 'GM03=Central River', 'GM04=Upper River', 'GM05=Western', 'GM07=North Bank', 'GN01=Beyla', 'GN02=Boffa', 'GN03=Boke', 'GN04=Conakry',
                                                'GN05=Dabola', 'GN06=Dalaba', 'GN07=Dinguiraye', 'GN09=Faranah', 'GN10=Forecariah', 'GN11=Fria', 'GN12=Gaoual', 'GN13=Gueckedou', 'GN15=Kerouane', 'GN16=Kindia',
                                                'GN17=Kissidougou', 'GN18=Koundara', 'GN19=Kouroussa', 'GN21=Macenta', 'GN22=Mali', 'GN23=Mamou', 'GN25=Pita', 'GN27=Telimele', 'GN28=Tougue', 'GN29=Yomou',
                                                'GN30=Coyah', 'GN31=Dubreka', 'GN32=Kankan', 'GN33=Koubia', 'GN34=Labe', 'GN35=Lelouma', 'GN36=Lola', 'GN37=Mandiana', 'GN38=Nzerekore', 'GN39=Siguiri',
                                                'GQ03=Annobon', 'GQ04=Bioko Norte', 'GQ05=Bioko Sur', 'GQ06=Centro Sur', 'GQ07=Kie-Ntem', 'GQ08=Litoral', 'GQ09=Wele-Nzas', 'GR01=Evros', 'GR02=Rodhopi', 'GR03=Xanthi',
                                                'GR04=Drama', 'GR05=Serrai', 'GR06=Kilkis', 'GR07=Pella', 'GR08=Florina', 'GR09=Kastoria', 'GR10=Grevena', 'GR11=Kozani', 'GR12=Imathia', 'GR13=Thessaloniki',
                                                'GR14=Kavala', 'GR15=Khalkidhiki', 'GR16=Pieria', 'GR17=Ioannina', 'GR18=Thesprotia', 'GR19=Preveza', 'GR20=Arta', 'GR21=Larisa', 'GR22=Trikala', 'GR23=Kardhitsa',
                                                'GR24=Magnisia', 'GR25=Kerkira', 'GR26=Levkas', 'GR27=Kefallinia', 'GR28=Zakinthos', 'GR29=Fthiotis', 'GR30=Evritania', 'GR31=Aitolia kai Akarnania', 'GR32=Fokis', 'GR33=Voiotia',
                                                'GR34=Evvoia', 'GR35=Attiki', 'GR36=Argolis', 'GR37=Korinthia', 'GR38=Akhaia', 'GR39=Ilia', 'GR40=Messinia', 'GR41=Arkadhia', 'GR42=Lakonia', 'GR43=Khania',
                                                'GR44=Rethimni', 'GR45=Iraklion', 'GR46=Lasithi', 'GR47=Dhodhekanisos', 'GR48=Samos', 'GR49=Kikladhes', 'GR50=Khios', 'GR51=Lesvos', 'GT01=Alta Verapaz', 'GT02=Baja Verapaz',
                                                'GT03=Chimaltenango', 'GT04=Chiquimula', 'GT05=El Progreso', 'GT06=Escuintla', 'GT07=Guatemala', 'GT08=Huehuetenango', 'GT09=Izabal', 'GT10=Jalapa', 'GT11=Jutiapa', 'GT12=Peten',
                                                'GT13=Quetzaltenango', 'GT14=Quiche', 'GT15=Retalhuleu', 'GT16=Sacatepequez', 'GT17=San Marcos', 'GT18=Santa Rosa', 'GT19=Solola', 'GT20=Suchitepequez', 'GT21=Totonicapan', 'GT22=Zacapa',
                                                'GW01=Bafata', 'GW02=Quinara', 'GW04=Oio', 'GW05=Bolama', 'GW06=Cacheu', 'GW07=Tombali', 'GW10=Gabu', 'GW11=Bissau', 'GW12=Biombo', 'GY10=Barima-Waini',
                                                'GY11=Cuyuni-Mazaruni', 'GY12=Demerara-Mahaica', 'GY13=East Berbice-Corentyne', 'GY14=Essequibo Islands-West Demerara', 'GY15=Mahaica-Berbice', 'GY16=Pomeroon-Supenaam', 'GY17=Potaro-Siparuni', 'GY18=Upper Demerara-Berbice', 'GY19=Upper Takutu-Upper Essequibo', 'HN01=Atlantida',
                                                'HN02=Choluteca', 'HN03=Colon', 'HN04=Comayagua', 'HN05=Copan', 'HN06=Cortes', 'HN07=El Paraiso', 'HN08=Francisco Morazan', 'HN09=Gracias a Dios', 'HN10=Intibuca', 'HN11=Islas de la Bahia',
                                                'HN12=La Paz', 'HN13=Lempira', 'HN14=Ocotepeque', 'HN15=Olancho', 'HN16=Santa Barbara', 'HN17=Valle', 'HN18=Yoro', 'HR01=Bjelovarsko-Bilogorska', 'HR02=Brodsko-Posavska', 'HR03=Dubrovacko-Neretvanska',
                                                'HR04=Istarska', 'HR05=Karlovacka', 'HR06=Koprivnicko-Krizevacka', 'HR07=Krapinsko-Zagorska', 'HR08=Licko-Senjska', 'HR09=Medimurska', 'HR10=Osjecko-Baranjska', 'HR11=Pozesko-Slavonska', 'HR12=Primorsko-Goranska', 'HR13=Sibensko-Kninska',
                                                'HR14=Sisacko-Moslavacka', 'HR15=Splitsko-Dalmatinska', 'HR16=Varazdinska', 'HR17=Viroviticko-Podravska', 'HR18=Vukovarsko-Srijemska', 'HR19=Zadarska', 'HR20=Zagrebacka', 'HR21=Grad Zagreb', 'HT03=Nord-Ouest', 'HT06=Artibonite',
                                                'HT07=Centre', 'HT09=Nord', 'HT10=Nord-Est', 'HT11=Ouest', 'HT12=Sud', 'HT13=Sud-Est', 'HT14=Grand'' Anse', 'HT15=Nippes', 'HU01=Bacs-Kiskun', 'HU02=Baranya',
                                                'HU03=Bekes', 'HU04=Borsod-Abauj-Zemplen', 'HU05=Budapest', 'HU06=Csongrad', 'HU07=Debrecen', 'HU08=Fejer', 'HU09=Gyor-Moson-Sopron', 'HU10=Hajdu-Bihar', 'HU11=Heves', 'HU12=Komarom-Esztergom',
                                                'HU13=Miskolc', 'HU14=Nograd', 'HU15=Pecs', 'HU16=Pest', 'HU17=Somogy', 'HU18=Szabolcs-Szatmar-Bereg', 'HU19=Szeged', 'HU20=Jasz-Nagykun-Szolnok', 'HU21=Tolna', 'HU22=Vas',
                                                'HU23=Veszprem', 'HU24=Zala', 'HU25=Gyor', 'HU26=Bekescsaba', 'HU27=Dunaujvaros', 'HU28=Eger', 'HU29=Hodmezovasarhely', 'HU30=Kaposvar', 'HU31=Kecskemet', 'HU32=Nagykanizsa',
                                                'HU33=Nyiregyhaza', 'HU34=Sopron', 'HU35=Szekesfehervar', 'HU36=Szolnok', 'HU37=Szombathely', 'HU38=Tatabanya', 'HU39=Veszprem', 'HU40=Zalaegerszeg', 'HU41=Salgotarjan', 'HU42=Szekszard',
                                                'ID01=Aceh', 'ID02=Bali', 'ID03=Bengkulu', 'ID04=Jakarta Raya', 'ID05=Jambi', 'ID06=Jawa Barat', 'ID07=Jawa Tengah', 'ID08=Jawa Timur', 'ID09=Papua', 'ID10=Yogyakarta',
                                                'ID11=Kalimantan Barat', 'ID12=Kalimantan Selatan', 'ID13=Kalimantan Tengah', 'ID14=Kalimantan Timur', 'ID15=Lampung', 'ID16=Maluku', 'ID17=Nusa Tenggara Barat', 'ID18=Nusa Tenggara Timur', 'ID19=Riau', 'ID20=Sulawesi Selatan',
                                                'ID21=Sulawesi Tengah', 'ID22=Sulawesi Tenggara', 'ID23=Sulawesi Utara', 'ID24=Sumatera Barat', 'ID25=Sumatera Selatan', 'ID26=Sumatera Utara', 'ID28=Maluku', 'ID29=Maluku Utara', 'ID30=Jawa Barat', 'ID31=Sulawesi Utara',
                                                'ID32=Sumatera Selatan', 'ID33=Banten', 'ID34=Gorontalo', 'ID35=Kepulauan Bangka Belitung', 'ID36=Papua', 'ID37=Riau', 'ID38=Sulawesi Selatan', 'ID39=Irian Jaya Barat', 'ID40=Kepulauan Riau', 'ID41=Sulawesi Barat',
                                                'IE01=Carlow', 'IE02=Cavan', 'IE03=Clare', 'IE04=Cork', 'IE06=Donegal', 'IE07=Dublin', 'IE10=Galway', 'IE11=Kerry', 'IE12=Kildare', 'IE13=Kilkenny',
                                                'IE14=Leitrim', 'IE15=Laois', 'IE16=Limerick', 'IE18=Longford', 'IE19=Louth', 'IE20=Mayo', 'IE21=Meath', 'IE22=Monaghan', 'IE23=Offaly', 'IE24=Roscommon',
                                                'IE25=Sligo', 'IE26=Tipperary', 'IE27=Waterford', 'IE29=Westmeath', 'IE30=Wexford', 'IE31=Wicklow', 'IL01=HaDarom', 'IL02=HaMerkaz', 'IL03=HaZafon', 'IL04=Hefa',
                                                'IL05=Tel Aviv', 'IL06=Yerushalayim', 'IN01=Andaman and Nicobar Islands', 'IN02=Andhra Pradesh', 'IN03=Assam', 'IN05=Chandigarh', 'IN06=Dadra and Nagar Haveli', 'IN07=Delhi', 'IN09=Gujarat', 'IN10=Haryana',
                                                'IN11=Himachal Pradesh', 'IN12=Jammu and Kashmir', 'IN13=Kerala', 'IN14=Lakshadweep', 'IN16=Maharashtra', 'IN17=Manipur', 'IN18=Meghalaya', 'IN19=Karnataka', 'IN20=Nagaland', 'IN21=Orissa',
                                                'IN22=Puducherry', 'IN23=Punjab', 'IN24=Rajasthan', 'IN25=Tamil Nadu', 'IN26=Tripura', 'IN28=West Bengal', 'IN29=Sikkim', 'IN30=Arunachal Pradesh', 'IN31=Mizoram', 'IN32=Daman and Diu',
                                                'IN33=Goa', 'IN34=Bihar', 'IN35=Madhya Pradesh', 'IN36=Uttar Pradesh', 'IN37=Chhattisgarh', 'IN38=Jharkhand', 'IN39=Uttarakhand', 'IQ01=Al Anbar', 'IQ02=Al Basrah', 'IQ03=Al Muthanna',
                                                'IQ04=Al Qadisiyah', 'IQ05=As Sulaymaniyah', 'IQ06=Babil', 'IQ07=Baghdad', 'IQ08=Dahuk', 'IQ09=Dhi Qar', 'IQ10=Diyala', 'IQ11=Arbil', 'IQ12=Karbala''', 'IQ13=At Ta''mim',
                                                'IQ14=Maysan', 'IQ15=Ninawa', 'IQ16=Wasit', 'IQ17=An Najaf', 'IQ18=Salah ad Din', 'IR01=Azarbayjan-e Bakhtari', 'IR02=Azarbayjan-e Khavari', 'IR03=Chahar Mahall va Bakhtiari', 'IR04=Sistan va Baluchestan', 'IR05=Kohkiluyeh va Buyer Ahmadi',
                                                'IR07=Fars', 'IR08=Gilan', 'IR09=Hamadan', 'IR10=Ilam', 'IR11=Hormozgan', 'IR12=Kerman', 'IR13=Bakhtaran', 'IR15=Khuzestan', 'IR16=Kordestan', 'IR17=Mazandaran',
                                                'IR18=Semnan Province', 'IR19=Markazi', 'IR21=Zanjan', 'IR22=Bushehr', 'IR23=Lorestan', 'IR24=Markazi', 'IR25=Semnan', 'IR26=Tehran', 'IR27=Zanjan', 'IR28=Esfahan',
                                                'IR29=Kerman', 'IR30=Khorasan', 'IR31=Yazd', 'IR32=Ardabil', 'IR33=East Azarbaijan', 'IR34=Markazi', 'IR35=Mazandaran', 'IR36=Zanjan', 'IR37=Golestan', 'IR38=Qazvin',
                                                'IR39=Qom', 'IR40=Yazd', 'IR41=Khorasan-e Janubi', 'IR42=Khorasan-e Razavi', 'IR43=Khorasan-e Shemali', 'IS03=Arnessysla', 'IS05=Austur-Hunavatnssysla', 'IS06=Austur-Skaftafellssysla', 'IS07=Borgarfjardarsysla', 'IS09=Eyjafjardarsysla',
                                                'IS10=Gullbringusysla', 'IS15=Kjosarsysla', 'IS17=Myrasysla', 'IS20=Nordur-Mulasysla', 'IS21=Nordur-Tingeyjarsysla', 'IS23=Rangarvallasysla', 'IS28=Skagafjardarsysla', 'IS29=Snafellsnes- og Hnappadalssysla', 'IS31=Sudur-Mulasysla', 'IS32=Sudur-Tingeyjarsysla',
                                                'IS34=Vestur-Bardastrandarsysla', 'IS35=Vestur-Hunavatnssysla', 'IS36=Vestur-Isafjardarsysla', 'IS37=Vestur-Skaftafellssysla', 'IS40=Norourland Eystra', 'IS41=Norourland Vestra', 'IS42=Suourland', 'IS43=Suournes', 'IS44=Vestfiroir', 'IS45=Vesturland',
                                                'IT01=Abruzzi', 'IT02=Basilicata', 'IT03=Calabria', 'IT04=Campania', 'IT05=Emilia-Romagna', 'IT06=Friuli-Venezia Giulia', 'IT07=Lazio', 'IT08=Liguria', 'IT09=Lombardia', 'IT10=Marche',
                                                'IT11=Molise', 'IT12=Piemonte', 'IT13=Puglia', 'IT14=Sardegna', 'IT15=Sicilia', 'IT16=Toscana', 'IT17=Trentino-Alto Adige', 'IT18=Umbria', 'IT19=Valle d''Aosta', 'IT20=Veneto',
                                                'JM01=Clarendon', 'JM02=Hanover', 'JM04=Manchester', 'JM07=Portland', 'JM08=Saint Andrew', 'JM09=Saint Ann', 'JM10=Saint Catherine', 'JM11=Saint Elizabeth', 'JM12=Saint James', 'JM13=Saint Mary',
                                                'JM14=Saint Thomas', 'JM15=Trelawny', 'JM16=Westmoreland', 'JM17=Kingston', 'JO02=Al Balqa''', 'JO07=Ma', 'JO09=Al Karak', 'JO10=Al Mafraq', 'JO11=Amman Governorate', 'JO12=At Tafilah',
                                                'JO13=Az Zarqa', 'JO14=Irbid', 'JO16=Amman', 'JP01=Aichi', 'JP02=Akita', 'JP03=Aomori', 'JP04=Chiba', 'JP05=Ehime', 'JP06=Fukui', 'JP07=Fukuoka',
                                                'JP08=Fukushima', 'JP09=Gifu', 'JP10=Gumma', 'JP11=Hiroshima', 'JP12=Hokkaido', 'JP13=Hyogo', 'JP14=Ibaraki', 'JP15=Ishikawa', 'JP16=Iwate', 'JP17=Kagawa',
                                                'JP18=Kagoshima', 'JP19=Kanagawa', 'JP20=Kochi', 'JP21=Kumamoto', 'JP22=Kyoto', 'JP23=Mie', 'JP24=Miyagi', 'JP25=Miyazaki', 'JP26=Nagano', 'JP27=Nagasaki',
                                                'JP28=Nara', 'JP29=Niigata', 'JP30=Oita', 'JP31=Okayama', 'JP32=Osaka', 'JP33=Saga', 'JP34=Saitama', 'JP35=Shiga', 'JP36=Shimane', 'JP37=Shizuoka',
                                                'JP38=Tochigi', 'JP39=Tokushima', 'JP40=Tokyo', 'JP41=Tottori', 'JP42=Toyama', 'JP43=Wakayama', 'JP44=Yamagata', 'JP45=Yamaguchi', 'JP46=Yamanashi', 'JP47=Okinawa',
                                                'KE01=Central', 'KE02=Coast', 'KE03=Eastern', 'KE05=Nairobi Area', 'KE06=North-Eastern', 'KE07=Nyanza', 'KE08=Rift Valley', 'KE09=Western', 'KG01=Bishkek', 'KG02=Chuy',
                                                'KG03=Jalal-Abad', 'KG04=Naryn', 'KG05=Osh', 'KG06=Talas', 'KG07=Ysyk-Kol', 'KG08=Osh', 'KG09=Batken', 'KH02=Kampong Cham', 'KH03=Kampong Chhnang', 'KH04=Kampong Spoe',
                                                'KH05=Kampong Thum', 'KH06=Kampot', 'KH07=Kandal', 'KH08=Kaoh Kong', 'KH09=Kracheh', 'KH10=Mondol Kiri', 'KH11=Phnum Penh', 'KH12=Pouthisat', 'KH13=Preah Vihear', 'KH14=Prey Veng',
                                                'KH15=Rotanokiri', 'KH16=Siemreab-Otdar Meanchey', 'KH17=Stoeng Treng', 'KH18=Svay Rieng', 'KH19=Takev', 'KH29=Batdambang', 'KH30=Pailin', 'KI01=Gilbert Islands', 'KI02=Line Islands', 'KI03=Phoenix Islands',
                                                'KM01=Anjouan', 'KM02=Grande Comore', 'KM03=Moheli', 'KN01=Christ Church Nichola Town', 'KN02=Saint Anne Sandy Point', 'KN03=Saint George Basseterre', 'KN04=Saint George Gingerland', 'KN05=Saint James Windward', 'KN06=Saint John Capisterre', 'KN07=Saint John Figtree',
                                                'KN08=Saint Mary Cayon', 'KN09=Saint Paul Capisterre', 'KN10=Saint Paul Charlestown', 'KN11=Saint Peter Basseterre', 'KN12=Saint Thomas Lowland', 'KN13=Saint Thomas Middle Island', 'KN15=Trinity Palmetto Point', 'KP01=Chagang-do', 'KP03=Hamgyong-namdo', 'KP06=Hwanghae-namdo',
                                                'KP07=Hwanghae-bukto', 'KP08=Kaesong-si', 'KP09=Kangwon-do', 'KP11=P''yongan-bukto', 'KP12=P''yongyang-si', 'KP13=Yanggang-do', 'KP14=Namp''o-si', 'KP15=P''yongan-namdo', 'KP17=Hamgyong-bukto', 'KP18=Najin Sonbong-si',
                                                'KR01=Cheju-do', 'KR03=Cholla-bukto', 'KR05=Ch''ungch''ong-bukto', 'KR06=Kangwon-do', 'KR10=Pusan-jikhalsi', 'KR11=Seoul-t''ukpyolsi', 'KR12=Inch''on-jikhalsi', 'KR13=Kyonggi-do', 'KR14=Kyongsang-bukto', 'KR15=Taegu-jikhalsi',
                                                'KR16=Cholla-namdo', 'KR17=Ch''ungch''ong-namdo', 'KR18=Kwangju-jikhalsi', 'KR19=Taejon-jikhalsi', 'KR20=Kyongsang-namdo', 'KR21=Ulsan-gwangyoksi', 'KW01=Al Ahmadi', 'KW02=Al Kuwayt', 'KW05=Al Jahra', 'KW07=Al Farwaniyah',
                                                'KW08=Hawalli', 'KW09=Mubarak al Kabir', 'KY01=Creek', 'KY02=Eastern', 'KY03=Midland', 'KY04=South Town', 'KY05=Spot Bay', 'KY06=Stake Bay', 'KY07=West End', 'KY08=Western',
                                                'KZ01=Almaty', 'KZ02=Almaty City', 'KZ03=Aqmola', 'KZ04=Aqtobe', 'KZ05=Astana', 'KZ06=Atyrau', 'KZ07=West Kazakhstan', 'KZ08=Bayqonyr', 'KZ09=Mangghystau', 'KZ10=South Kazakhstan',
                                                'KZ11=Pavlodar', 'KZ12=Qaraghandy', 'KZ13=Qostanay', 'KZ14=Qyzylorda', 'KZ15=East Kazakhstan', 'KZ16=North Kazakhstan', 'KZ17=Zhambyl', 'LA01=Attapu', 'LA02=Champasak', 'LA03=Houaphan',
                                                'LA04=Khammouan', 'LA05=Louang Namtha', 'LA07=Oudomxai', 'LA08=Phongsali', 'LA09=Saravan', 'LA10=Savannakhet', 'LA11=Vientiane', 'LA13=Xaignabouri', 'LA14=Xiangkhoang', 'LA17=Louangphrabang',
                                                'LB01=Beqaa', 'LB03=Liban-Nord', 'LB04=Beyrouth', 'LB05=Mont-Liban', 'LB06=Liban-Sud', 'LB07=Nabatiye', 'LB08=Beqaa', 'LB09=Liban-Nord', 'LB10=Aakk,r', 'LB11=Baalbek-Hermel',
                                                'LC01=Anse-la-Raye', 'LC02=Dauphin', 'LC03=Castries', 'LC04=Choiseul', 'LC05=Dennery', 'LC06=Gros-Islet', 'LC07=Laborie', 'LC08=Micoud', 'LC09=Soufriere', 'LC10=Vieux-Fort',
                                                'LC11=Praslin', 'LI01=Balzers', 'LI02=Eschen', 'LI03=Gamprin', 'LI04=Mauren', 'LI05=Planken', 'LI06=Ruggell', 'LI07=Schaan', 'LI08=Schellenberg', 'LI09=Triesen',
                                                'LI10=Triesenberg', 'LI11=Vaduz', 'LI21=Gbarpolu', 'LI22=River Gee', 'LK01=Amparai', 'LK02=Anuradhapura', 'LK03=Badulla', 'LK04=Batticaloa', 'LK06=Galle', 'LK07=Hambantota',
                                                'LK09=Kalutara', 'LK10=Kandy', 'LK11=Kegalla', 'LK12=Kurunegala', 'LK14=Matale', 'LK15=Matara', 'LK16=Moneragala', 'LK17=Nuwara Eliya', 'LK18=Polonnaruwa', 'LK19=Puttalam',
                                                'LK20=Ratnapura', 'LK21=Trincomalee', 'LK23=Colombo', 'LK24=Gampaha', 'LK25=Jaffna', 'LK26=Mannar', 'LK27=Mullaittivu', 'LK28=Vavuniya', 'LK29=Central', 'LK30=North Central',
                                                'LK31=Northern', 'LK32=North Western', 'LK33=Sabaragamuwa', 'LK34=Southern', 'LK35=Uva', 'LK36=Western', 'LR01=Bong', 'LR04=Grand Cape Mount', 'LR06=Maryland', 'LR07=Monrovia',
                                                'LR09=Nimba', 'LR10=Sino', 'LR11=Grand Bassa', 'LR14=Montserrado', 'LR19=Grand Gedeh', 'LR20=Lofa', 'LS10=Berea', 'LS11=Butha-Buthe', 'LS12=Leribe', 'LS13=Mafeteng',
                                                'LS14=Maseru', 'LS15=Mohales Hoek', 'LS16=Mokhotlong', 'LS17=Qachas Nek', 'LS18=Quthing', 'LS19=Thaba-Tseka', 'LT56=Alytaus Apskritis', 'LT57=Kauno Apskritis', 'LT58=Klaipedos Apskritis', 'LT59=Marijampoles Apskritis',
                                                'LT60=Panevezio Apskritis', 'LT61=Siauliu Apskritis', 'LT62=Taurages Apskritis', 'LT63=Telsiu Apskritis', 'LT64=Utenos Apskritis', 'LT65=Vilniaus Apskritis', 'LU01=Diekirch', 'LU02=Grevenmacher', 'LU03=Luxembourg', 'LV01=Aizkraukles',
                                                'LV02=Aluksnes', 'LV03=Balvu', 'LV04=Bauskas', 'LV05=Cesu', 'LV06=Daugavpils', 'LV07=Daugavpils', 'LV08=Dobeles', 'LV09=Gulbenes', 'LV10=Jekabpils', 'LV11=Jelgava',
                                                'LV12=Jelgavas', 'LV13=Jurmala', 'LV14=Kraslavas', 'LV15=Kuldigas', 'LV16=Liepaja', 'LV17=Liepajas', 'LV18=Limbazu', 'LV19=Ludzas', 'LV20=Madonas', 'LV21=Ogres',
                                                'LV22=Preilu', 'LV23=Rezekne', 'LV24=Rezeknes', 'LV25=Riga', 'LV26=Rigas', 'LV27=Saldus', 'LV28=Talsu', 'LV29=Tukuma', 'LV30=Valkas', 'LV31=Valmieras',
                                                'LV32=Ventspils', 'LV33=Ventspils', 'LY03=Al Aziziyah', 'LY05=Al Jufrah', 'LY08=Al Kufrah', 'LY13=Ash Shati''', 'LY30=Murzuq', 'LY34=Sabha', 'LY41=Tarhunah', 'LY42=Tubruq',
                                                'LY45=Zlitan', 'LY47=Ajdabiya', 'LY48=Al Fatih', 'LY49=Al Jabal al Akhdar', 'LY50=Al Khums', 'LY51=An Nuqat al Khams', 'LY52=Awbari', 'LY53=Az Zawiyah', 'LY54=Banghazi', 'LY55=Darnah',
                                                'LY56=Ghadamis', 'LY57=Gharyan', 'LY58=Misratah', 'LY59=Sawfajjin', 'LY60=Surt', 'LY61=Tarabulus', 'LY62=Yafran', 'MA01=Agadir', 'MA02=Al Hoceima', 'MA03=Azilal',
                                                'MA04=Ben Slimane', 'MA05=Beni Mellal', 'MA06=Boulemane', 'MA07=Casablanca', 'MA08=Chaouen', 'MA09=El Jadida', 'MA10=El Kelaa des Srarhna', 'MA11=Er Rachidia', 'MA12=Essaouira', 'MA13=Fes',
                                                'MA14=Figuig', 'MA15=Kenitra', 'MA16=Khemisset', 'MA17=Khenifra', 'MA18=Khouribga', 'MA19=Marrakech', 'MA20=Meknes', 'MA21=Nador', 'MA22=Ouarzazate', 'MA23=Oujda',
                                                'MA24=Rabat-Sale', 'MA25=Safi', 'MA26=Settat', 'MA27=Tanger', 'MA29=Tata', 'MA30=Taza', 'MA32=Tiznit', 'MA33=Guelmim', 'MA34=Ifrane', 'MA35=Laayoune',
                                                'MA36=Tan-Tan', 'MA37=Taounate', 'MA38=Sidi Kacem', 'MA39=Taroudannt', 'MA40=Tetouan', 'MA41=Larache', 'MA45=Grand Casablanca', 'MA46=Fes-Boulemane', 'MA47=Marrakech-Tensift-Al Haouz', 'MA48=Meknes-Tafilalet',
                                                'MA49=Rabat-Sale-Zemmour-Zaer', 'MA50=Chaouia-Ouardigha', 'MA51=Doukkala-Abda', 'MA52=Gharb-Chrarda-Beni Hssen', 'MA53=Guelmim-Es Smara', 'MA54=Oriental', 'MA55=Souss-Massa-Dr,a', 'MA56=Tadla-Azilal', 'MA57=Tanger-Tetouan', 'MA58=Taza-Al Hoceima-Taounate',
                                                'MA59=La,youne-Boujdour-Sakia El Hamra', 'MC01=La Condamine', 'MC02=Monaco', 'MC03=Monte-Carlo', 'MD46=Balti', 'MD47=Cahul', 'MD48=Chisinau', 'MD49=Stinga Nistrului', 'MD50=Edinet', 'MD51=Gagauzia',
                                                'MD52=Lapusna', 'MD53=Orhei', 'MD54=Soroca', 'MD55=Tighina', 'MD56=Ungheni', 'MD58=Stinga Nistrului', 'MD59=Anenii Noi', 'MD60=Balti', 'MD61=Basarabeasca', 'MD62=Bender',
                                                'MD63=Briceni', 'MD64=Cahul', 'MD65=Cantemir', 'MD66=Calarasi', 'MD67=Causeni', 'MD68=Cimislia', 'MD69=Criuleni', 'MD70=Donduseni', 'MD71=Drochia', 'MD72=Dubasari',
                                                'MD73=Edinet', 'MD74=Falesti', 'MD75=Floresti', 'MD76=Glodeni', 'MD77=Hincesti', 'MD78=Ialoveni', 'MD79=Leova', 'MD80=Nisporeni', 'MD81=Ocnita', 'MD83=Rezina',
                                                'MD84=Riscani', 'MD85=Singerei', 'MD86=Soldanesti', 'MD87=Soroca', 'MD88=Stefan-Voda', 'MD89=Straseni', 'MD90=Taraclia', 'MD91=Telenesti', 'MD92=Ungheni', 'MG01=Antsiranana',
                                                'MG02=Fianarantsoa', 'MG03=Mahajanga', 'MG04=Toamasina', 'MG05=Antananarivo', 'MG06=Toliara', 'MK01=Aracinovo', 'MK02=Bac', 'MK03=Belcista', 'MK04=Berovo', 'MK05=Bistrica',
                                                'MK06=Bitola', 'MK07=Blatec', 'MK08=Bogdanci', 'MK09=Bogomila', 'MK10=Bogovinje', 'MK11=Bosilovo', 'MK12=Brvenica', 'MK13=Cair', 'MK14=Capari', 'MK15=Caska',
                                                'MK16=Cegrane', 'MK17=Centar', 'MK18=Centar Zupa', 'MK19=Cesinovo', 'MK20=Cucer-Sandevo', 'MK21=Debar', 'MK22=Delcevo', 'MK23=Delogozdi', 'MK24=Demir Hisar', 'MK25=Demir Kapija',
                                                'MK26=Dobrusevo', 'MK27=Dolna Banjica', 'MK28=Dolneni', 'MK29=Dorce Petrov', 'MK30=Drugovo', 'MK31=Dzepciste', 'MK32=Gazi Baba', 'MK33=Gevgelija', 'MK34=Gostivar', 'MK35=Gradsko',
                                                'MK36=Ilinden', 'MK37=Izvor', 'MK38=Jegunovce', 'MK39=Kamenjane', 'MK40=Karbinci', 'MK41=Karpos', 'MK42=Kavadarci', 'MK43=Kicevo', 'MK44=Kisela Voda', 'MK45=Klecevce',
                                                'MK46=Kocani', 'MK47=Konce', 'MK48=Kondovo', 'MK49=Konopiste', 'MK50=Kosel', 'MK51=Kratovo', 'MK52=Kriva Palanka', 'MK53=Krivogastani', 'MK54=Krusevo', 'MK55=Kuklis',
                                                'MK56=Kukurecani', 'MK57=Kumanovo', 'MK58=Labunista', 'MK59=Lipkovo', 'MK60=Lozovo', 'MK61=Lukovo', 'MK62=Makedonska Kamenica', 'MK63=Makedonski Brod', 'MK64=Mavrovi Anovi', 'MK65=Meseista',
                                                'MK66=Miravci', 'MK67=Mogila', 'MK68=Murtino', 'MK69=Negotino', 'MK70=Negotino-Polosko', 'MK71=Novaci', 'MK72=Novo Selo', 'MK73=Oblesevo', 'MK74=Ohrid', 'MK75=Orasac',
                                                'MK76=Orizari', 'MK77=Oslomej', 'MK78=Pehcevo', 'MK79=Petrovec', 'MK80=Plasnica', 'MK81=Podares', 'MK82=Prilep', 'MK83=Probistip', 'MK84=Radovis', 'MK85=Rankovce',
                                                'MK86=Resen', 'MK87=Rosoman', 'MK88=Rostusa', 'MK89=Samokov', 'MK90=Saraj', 'MK91=Sipkovica', 'MK92=Sopiste', 'MK93=Sopotnica', 'MK94=Srbinovo', 'MK95=Staravina',
                                                'MK96=Star Dojran', 'MK97=Staro Nagoricane', 'MK98=Stip', 'MK99=Struga', 'MKA1=Strumica', 'MKA2=Studenicani', 'MKA3=Suto Orizari', 'MKA4=Sveti Nikole', 'MKA5=Tearce', 'MKA6=Tetovo',
                                                'MKA7=Topolcani', 'MKA8=Valandovo', 'MKA9=Vasilevo', 'MKB1=Veles', 'MKB2=Velesta', 'MKB3=Vevcani', 'MKB4=Vinica', 'MKB5=Vitoliste', 'MKB6=Vranestica', 'MKB7=Vrapciste',
                                                'MKB8=Vratnica', 'MKB9=Vrutok', 'MKC1=Zajas', 'MKC2=Zelenikovo', 'MKC3=Zelino', 'MKC4=Zitose', 'MKC5=Zletovo', 'MKC6=Zrnovci', 'ML01=Bamako', 'ML03=Kayes',
                                                'ML04=Mopti', 'ML05=Segou', 'ML06=Sikasso', 'ML07=Koulikoro', 'ML08=Tombouctou', 'ML09=Gao', 'ML10=Kidal', 'MM01=Rakhine State', 'MM02=Chin State', 'MM03=Irrawaddy',
                                                'MM04=Kachin State', 'MM05=Karan State', 'MM06=Kayah State', 'MM07=Magwe', 'MM08=Mandalay', 'MM09=Pegu', 'MM10=Sagaing', 'MM11=Shan State', 'MM12=Tenasserim', 'MM13=Mon State',
                                                'MM14=Rangoon', 'MM17=Yangon', 'MN01=Arhangay', 'MN02=Bayanhongor', 'MN03=Bayan-Olgiy', 'MN05=Darhan', 'MN06=Dornod', 'MN07=Dornogovi', 'MN08=Dundgovi', 'MN09=Dzavhan',
                                                'MN10=Govi-Altay', 'MN11=Hentiy', 'MN12=Hovd', 'MN13=Hovsgol', 'MN14=Omnogovi', 'MN15=Ovorhangay', 'MN16=Selenge', 'MN17=Suhbaatar', 'MN18=Tov', 'MN19=Uvs',
                                                'MN20=Ulaanbaatar', 'MN21=Bulgan', 'MN22=Erdenet', 'MN23=Darhan-Uul', 'MN24=Govisumber', 'MN25=Orhon', 'MO01=Ilhas', 'MO02=Macau', 'MR01=Hodh Ech Chargui', 'MR02=Hodh El Gharbi',
                                                'MR03=Assaba', 'MR04=Gorgol', 'MR05=Brakna', 'MR06=Trarza', 'MR07=Adrar', 'MR08=Dakhlet Nouadhibou', 'MR09=Tagant', 'MR10=Guidimaka', 'MR11=Tiris Zemmour', 'MR12=Inchiri',
                                                'MS01=Saint Anthony', 'MS02=Saint Georges', 'MS03=Saint Peter', 'MU12=Black River', 'MU13=Flacq', 'MU14=Grand Port', 'MU15=Moka', 'MU16=Pamplemousses', 'MU17=Plaines Wilhems', 'MU18=Port Louis',
                                                'MU19=Riviere du Rempart', 'MU20=Savanne', 'MU21=Agalega Islands', 'MU22=Cargados Carajos', 'MU23=Rodrigues', 'MV01=Seenu', 'MV02=Aliff', 'MV03=Laviyani', 'MV04=Waavu', 'MV05=Laamu',
                                                'MV07=Haa Aliff', 'MV08=Thaa', 'MV12=Meemu', 'MV13=Raa', 'MV14=Faafu', 'MV17=Daalu', 'MV20=Baa', 'MV23=Haa Daalu', 'MV24=Shaviyani', 'MV25=Noonu',
                                                'MV26=Kaafu', 'MV27=Gaafu Aliff', 'MV28=Gaafu Daalu', 'MV29=Naviyani', 'MV40=Male', 'MW02=Chikwawa', 'MW03=Chiradzulu', 'MW04=Chitipa', 'MW05=Thyolo', 'MW06=Dedza',
                                                'MW07=Dowa', 'MW08=Karonga', 'MW09=Kasungu', 'MW11=Lilongwe', 'MW12=Mangochi', 'MW13=Mchinji', 'MW15=Mzimba', 'MW16=Ntcheu', 'MW17=Nkhata Bay', 'MW18=Nkhotakota',
                                                'MW19=Nsanje', 'MW20=Ntchisi', 'MW21=Rumphi', 'MW22=Salima', 'MW23=Zomba', 'MW24=Blantyre', 'MW25=Mwanza', 'MW26=Balaka', 'MW27=Likoma', 'MW28=Machinga',
                                                'MW29=Mulanje', 'MW30=Phalombe', 'MX01=Aguascalientes', 'MX02=Baja California', 'MX03=Baja California Sur', 'MX04=Campeche', 'MX05=Chiapas', 'MX06=Chihuahua', 'MX07=Coahuila de Zaragoza', 'MX08=Colima',
                                                'MX09=Distrito Federal', 'MX10=Durango', 'MX11=Guanajuato', 'MX12=Guerrero', 'MX13=Hidalgo', 'MX14=Jalisco', 'MX15=Mexico', 'MX16=Michoacan de Ocampo', 'MX17=Morelos', 'MX18=Nayarit',
                                                'MX19=Nuevo Leon', 'MX20=Oaxaca', 'MX21=Puebla', 'MX22=Queretaro de Arteaga', 'MX23=Quintana Roo', 'MX24=San Luis Potosi', 'MX25=Sinaloa', 'MX26=Sonora', 'MX27=Tabasco', 'MX28=Tamaulipas',
                                                'MX29=Tlaxcala', 'MX30=Veracruz-Llave', 'MX31=Yucatan', 'MX32=Zacatecas', 'MY01=Johor', 'MY02=Kedah', 'MY03=Kelantan', 'MY04=Melaka', 'MY05=Negeri Sembilan', 'MY06=Pahang',
                                                'MY07=Perak', 'MY08=Perlis', 'MY09=Pulau Pinang', 'MY11=Sarawak', 'MY12=Selangor', 'MY13=Terengganu', 'MY14=Kuala Lumpur', 'MY15=Labuan', 'MY16=Sabah', 'MY17=Putrajaya',
                                                'MZ01=Cabo Delgado', 'MZ02=Gaza', 'MZ03=Inhambane', 'MZ04=Maputo', 'MZ05=Sofala', 'MZ06=Nampula', 'MZ07=Niassa', 'MZ08=Tete', 'MZ09=Zambezia', 'MZ10=Manica',
                                                'MZ11=Maputo', 'NA01=Bethanien', 'NA02=Caprivi Oos', 'NA03=Boesmanland', 'NA04=Gobabis', 'NA05=Grootfontein', 'NA06=Kaokoland', 'NA07=Karibib', 'NA08=Keetmanshoop', 'NA09=Luderitz',
                                                'NA10=Maltahohe', 'NA11=Okahandja', 'NA12=Omaruru', 'NA13=Otjiwarongo', 'NA14=Outjo', 'NA15=Owambo', 'NA16=Rehoboth', 'NA17=Swakopmund', 'NA18=Tsumeb', 'NA20=Karasburg',
                                                'NA21=Windhoek', 'NA22=Damaraland', 'NA23=Hereroland Oos', 'NA24=Hereroland Wes', 'NA25=Kavango', 'NA26=Mariental', 'NA27=Namaland', 'NA28=Caprivi', 'NA29=Erongo', 'NA30=Hardap',
                                                'NA31=Karas', 'NA32=Kunene', 'NA33=Ohangwena', 'NA34=Okavango', 'NA35=Omaheke', 'NA36=Omusati', 'NA37=Oshana', 'NA38=Oshikoto', 'NA39=Otjozondjupa', 'NE01=Agadez',
                                                'NE02=Diffa', 'NE03=Dosso', 'NE04=Maradi', 'NE05=Niamey', 'NE06=Tahoua', 'NE07=Zinder', 'NE08=Niamey', 'NG05=Lagos', 'NG10=Rivers', 'NG11=Federal Capital Territory',
                                                'NG16=Ogun', 'NG17=Ondo', 'NG21=Akwa Ibom', 'NG22=Cross River', 'NG23=Kaduna', 'NG24=Katsina', 'NG25=Anambra', 'NG26=Benue', 'NG27=Borno', 'NG28=Imo',
                                                'NG29=Kano', 'NG30=Kwara', 'NG31=Niger', 'NG32=Oyo', 'NG35=Adamawa', 'NG36=Delta', 'NG37=Edo', 'NG39=Jigawa', 'NG40=Kebbi', 'NG41=Kogi',
                                                'NG42=Osun', 'NG43=Taraba', 'NG44=Yobe', 'NG45=Abia', 'NG46=Bauchi', 'NG47=Enugu', 'NG48=Ondo', 'NG49=Plateau', 'NG50=Rivers', 'NG51=Sokoto',
                                                'NG52=Bayelsa', 'NG53=Ebonyi', 'NG54=Ekiti', 'NG55=Gombe', 'NG56=Nassarawa', 'NG57=Zamfara', 'NI01=Boaco', 'NI02=Carazo', 'NI03=Chinandega', 'NI04=Chontales',
                                                'NI05=Esteli', 'NI06=Granada', 'NI07=Jinotega', 'NI08=Leon', 'NI09=Madriz', 'NI10=Managua', 'NI11=Masaya', 'NI12=Matagalpa', 'NI13=Nueva Segovia', 'NI14=Rio San Juan',
                                                'NI15=Rivas', 'NI16=Zelaya', 'NL01=Drenthe', 'NL02=Friesland', 'NL03=Gelderland', 'NL04=Groningen', 'NL05=Limburg', 'NL06=Noord-Brabant', 'NL07=Noord-Holland', 'NL08=Overijssel',
                                                'NL09=Utrecht', 'NL10=Zeeland', 'NL11=Zuid-Holland', 'NL12=Dronten', 'NL13=Zuidelijke IJsselmeerpolders', 'NL14=Lelystad', 'NL15=Overijssel', 'NL16=Flevoland', 'NO01=Akershus', 'NO02=Aust-Agder',
                                                'NO04=Buskerud', 'NO05=Finnmark', 'NO06=Hedmark', 'NO07=Hordaland', 'NO08=More og Romsdal', 'NO09=Nordland', 'NO10=Nord-Trondelag', 'NO11=Oppland', 'NO12=Oslo', 'NO13=Ostfold',
                                                'NO14=Rogaland', 'NO15=Sogn og Fjordane', 'NO16=Sor-Trondelag', 'NO17=Telemark', 'NO18=Troms', 'NO19=Vest-Agder', 'NO20=Vestfold', 'NP01=Bagmati', 'NP02=Bheri', 'NP03=Dhawalagiri',
                                                'NP04=Gandaki', 'NP05=Janakpur', 'NP06=Karnali', 'NP07=Kosi', 'NP08=Lumbini', 'NP09=Mahakali', 'NP10=Mechi', 'NP11=Narayani', 'NP12=Rapti', 'NP13=Sagarmatha',
                                                'NP14=Seti', 'NR01=Aiwo', 'NR02=Anabar', 'NR03=Anetan', 'NR04=Anibare', 'NR05=Baiti', 'NR06=Boe', 'NR07=Buada', 'NR08=Denigomodu', 'NR09=Ewa',
                                                'NR10=Ijuw', 'NR11=Meneng', 'NR12=Nibok', 'NR13=Uaboe', 'NR14=Yaren', 'NZ10=Chatham Islands', 'NZE7=Auckland', 'NZE8=Bay of Plenty', 'NZE9=Canterbury', 'NZF1=Gisborne',
                                                'NZF2=Hawke''s Bay', 'NZF3=Manawatu-Wanganui', 'NZF4=Marlborough', 'NZF5=Nelson', 'NZF6=Northland', 'NZF7=Otago', 'NZF8=Southland', 'NZF9=Taranaki', 'NZG1=Waikato', 'NZG2=Wellington',
                                                'NZG3=West Coast', 'OM01=Ad Dakhiliyah', 'OM02=Al Batinah', 'OM03=Al Wusta', 'OM04=Ash Sharqiyah', 'OM05=Az Zahirah', 'OM06=Masqat', 'OM07=Musandam', 'OM08=Zufar', 'PA01=Bocas del Toro',
                                                'PA02=Chiriqui', 'PA03=Cocle', 'PA04=Colon', 'PA05=Darien', 'PA06=Herrera', 'PA07=Los Santos', 'PA08=Panama', 'PA09=San Blas', 'PA10=Veraguas', 'PE01=Amazonas',
                                                'PE02=Ancash', 'PE03=Apurimac', 'PE04=Arequipa', 'PE05=Ayacucho', 'PE06=Cajamarca', 'PE07=Callao', 'PE08=Cusco', 'PE09=Huancavelica', 'PE10=Huanuco', 'PE11=Ica',
                                                'PE12=Junin', 'PE13=La Libertad', 'PE14=Lambayeque', 'PE15=Lima', 'PE16=Loreto', 'PE17=Madre de Dios', 'PE18=Moquegua', 'PE19=Pasco', 'PE20=Piura', 'PE21=Puno',
                                                'PE22=San Martin', 'PE23=Tacna', 'PE24=Tumbes', 'PE25=Ucayali', 'PG01=Central', 'PG02=Gulf', 'PG03=Milne Bay', 'PG04=Northern', 'PG05=Southern Highlands', 'PG06=Western',
                                                'PG07=North Solomons', 'PG08=Chimbu', 'PG09=Eastern Highlands', 'PG10=East New Britain', 'PG11=East Sepik', 'PG12=Madang', 'PG13=Manus', 'PG14=Morobe', 'PG15=New Ireland', 'PG16=Western Highlands',
                                                'PG17=West New Britain', 'PG18=Sandaun', 'PG19=Enga', 'PG20=National Capital', 'PH01=Abra', 'PH02=Agusan del Norte', 'PH03=Agusan del Sur', 'PH04=Aklan', 'PH05=Albay', 'PH06=Antique',
                                                'PH07=Bataan', 'PH08=Batanes', 'PH09=Batangas', 'PH10=Benguet', 'PH11=Bohol', 'PH12=Bukidnon', 'PH13=Bulacan', 'PH14=Cagayan', 'PH15=Camarines Norte', 'PH16=Camarines Sur',
                                                'PH17=Camiguin', 'PH18=Capiz', 'PH19=Catanduanes', 'PH20=Cavite', 'PH21=Cebu', 'PH22=Basilan', 'PH23=Eastern Samar', 'PH24=Davao', 'PH25=Davao del Sur', 'PH26=Davao Oriental',
                                                'PH27=Ifugao', 'PH28=Ilocos Norte', 'PH29=Ilocos Sur', 'PH30=Iloilo', 'PH31=Isabela', 'PH32=Kalinga-Apayao', 'PH33=Laguna', 'PH34=Lanao del Norte', 'PH35=Lanao del Sur', 'PH36=La Union',
                                                'PH37=Leyte', 'PH38=Marinduque', 'PH39=Masbate', 'PH40=Mindoro Occidental', 'PH41=Mindoro Oriental', 'PH42=Misamis Occidental', 'PH43=Misamis Oriental', 'PH44=Mountain', 'PH46=Negros Oriental', 'PH47=Nueva Ecija',
                                                'PH48=Nueva Vizcaya', 'PH49=Palawan', 'PH50=Pampanga', 'PH51=Pangasinan', 'PH53=Rizal', 'PH54=Romblon', 'PH55=Samar', 'PH56=Maguindanao', 'PH57=North Cotabato', 'PH58=Sorsogon',
                                                'PH59=Southern Leyte', 'PH60=Sulu', 'PH61=Surigao del Norte', 'PH62=Surigao del Sur', 'PH63=Tarlac', 'PH64=Zambales', 'PH65=Zamboanga del Norte', 'PH66=Zamboanga del Sur', 'PH67=Northern Samar', 'PH68=Quirino',
                                                'PH69=Siquijor', 'PH70=South Cotabato', 'PH71=Sultan Kudarat', 'PH72=Tawitawi', 'PHA1=Angeles', 'PHA2=Bacolod', 'PHA3=Bago', 'PHA4=Baguio', 'PHA5=Bais', 'PHA6=Basilan City',
                                                'PHA7=Batangas City', 'PHA8=Butuan', 'PHA9=Cabanatuan', 'PHB1=Cadiz', 'PHB2=Cagayan de Oro', 'PHB3=Calbayog', 'PHB4=Caloocan', 'PHB5=Canlaon', 'PHB6=Cavite City', 'PHB7=Cebu City',
                                                'PHB8=Cotabato', 'PHB9=Dagupan', 'PHC1=Danao', 'PHC2=Dapitan', 'PHC3=Davao City', 'PHC4=Dipolog', 'PHC5=Dumaguete', 'PHC6=General Santos', 'PHC7=Gingoog', 'PHC8=Iligan',
                                                'PHC9=Iloilo City', 'PHD1=Iriga', 'PHD2=La Carlota', 'PHD3=Laoag', 'PHD4=Lapu-Lapu', 'PHD5=Legaspi', 'PHD6=Lipa', 'PHD7=Lucena', 'PHD8=Mandaue', 'PHD9=Manila',
                                                'PHE1=Marawi', 'PHE2=Naga', 'PHE3=Olongapo', 'PHE4=Ormoc', 'PHE5=Oroquieta', 'PHE6=Ozamis', 'PHE7=Pagadian', 'PHE8=Palayan', 'PHE9=Pasay', 'PHF1=Puerto Princesa',
                                                'PHF2=Quezon City', 'PHF3=Roxas', 'PHF4=San Carlos', 'PHF5=San Carlos', 'PHF6=San Jose', 'PHF7=San Pablo', 'PHF8=Silay', 'PHF9=Surigao', 'PHG1=Tacloban', 'PHG2=Tagaytay',
                                                'PHG3=Tagbilaran', 'PHG4=Tangub', 'PHG5=Toledo', 'PHG6=Trece Martires', 'PHG7=Zamboanga', 'PHG8=Aurora', 'PHH2=Quezon', 'PHH3=Negros Occidental', 'PK01=Federally Administered Tribal Areas', 'PK02=Balochistan',
                                                'PK03=North-West Frontier', 'PK04=Punjab', 'PK05=Sindh', 'PK06=Azad Kashmir', 'PK07=Northern Areas', 'PK08=Islamabad', 'PL23=Biala Podlaska', 'PL24=Bialystok', 'PL25=Bielsko', 'PL26=Bydgoszcz',
                                                'PL27=Chelm', 'PL28=Ciechanow', 'PL29=Czestochowa', 'PL30=Elblag', 'PL31=Gdansk', 'PL32=Gorzow', 'PL33=Jelenia Gora', 'PL34=Kalisz', 'PL35=Katowice', 'PL36=Kielce',
                                                'PL37=Konin', 'PL38=Koszalin', 'PL39=Krakow', 'PL40=Krosno', 'PL41=Legnica', 'PL42=Leszno', 'PL43=Lodz', 'PL44=Lomza', 'PL45=Lublin', 'PL46=Nowy Sacz',
                                                'PL47=Olsztyn', 'PL48=Opole', 'PL49=Ostroleka', 'PL50=Pila', 'PL51=Piotrkow', 'PL52=Plock', 'PL53=Poznan', 'PL54=Przemysl', 'PL55=Radom', 'PL56=Rzeszow',
                                                'PL57=Siedlce', 'PL58=Sieradz', 'PL59=Skierniewice', 'PL60=Slupsk', 'PL61=Suwalki', 'PL62=Szczecin', 'PL63=Tarnobrzeg', 'PL64=Tarnow', 'PL65=Torun', 'PL66=Walbrzych',
                                                'PL67=Warszawa', 'PL68=Wloclawek', 'PL69=Wroclaw', 'PL70=Zamosc', 'PL71=Zielona Gora', 'PL72=Dolnoslaskie', 'PL73=Kujawsko-Pomorskie', 'PL74=Lodzkie', 'PL75=Lubelskie', 'PL76=Lubuskie',
                                                'PL77=Malopolskie', 'PL78=Mazowieckie', 'PL79=Opolskie', 'PL80=Podkarpackie', 'PL81=Podlaskie', 'PL82=Pomorskie', 'PL83=Slaskie', 'PL84=Swietokrzyskie', 'PL85=Warminsko-Mazurskie', 'PL86=Wielkopolskie',
                                                'PL87=Zachodniopomorskie', 'PSGZ=Gaza', 'PSWE=West Bank', 'PT02=Aveiro', 'PT03=Beja', 'PT04=Braga', 'PT05=Braganca', 'PT06=Castelo Branco', 'PT07=Coimbra', 'PT08=Evora',
                                                'PT09=Faro', 'PT10=Madeira', 'PT11=Guarda', 'PT13=Leiria', 'PT14=Lisboa', 'PT16=Portalegre', 'PT17=Porto', 'PT18=Santarem', 'PT19=Setubal', 'PT20=Viana do Castelo',
                                                'PT21=Vila Real', 'PT22=Viseu', 'PT23=Azores', 'PY01=Alto Parana', 'PY02=Amambay', 'PY03=Boqueron', 'PY04=Caaguazu', 'PY05=Caazapa', 'PY06=Central', 'PY07=Concepcion',
                                                'PY08=Cordillera', 'PY10=Guaira', 'PY11=Itapua', 'PY12=Misiones', 'PY13=Neembucu', 'PY15=Paraguari', 'PY16=Presidente Hayes', 'PY17=San Pedro', 'PY19=Canindeyu', 'PY20=Chaco',
                                                'PY21=Nueva Asuncion', 'PY23=Alto Paraguay', 'QA01=Ad Dawhah', 'QA02=Al Ghuwariyah', 'QA03=Al Jumaliyah', 'QA04=Al Khawr', 'QA05=Al Wakrah Municipality', 'QA06=Ar Rayyan', 'QA08=Madinat ach Shamal', 'QA09=Umm Salal',
                                                'QA10=Al Wakrah', 'QA11=Jariyan al Batnah', 'QA12=Umm Sa''id', 'RO01=Alba', 'RO02=Arad', 'RO03=Arges', 'RO04=Bacau', 'RO05=Bihor', 'RO06=Bistrita-Nasaud', 'RO07=Botosani',
                                                'RO08=Braila', 'RO09=Brasov', 'RO10=Bucuresti', 'RO11=Buzau', 'RO12=Caras-Severin', 'RO13=Cluj', 'RO14=Constanta', 'RO15=Covasna', 'RO16=Dambovita', 'RO17=Dolj',
                                                'RO18=Galati', 'RO19=Gorj', 'RO20=Harghita', 'RO21=Hunedoara', 'RO22=Ialomita', 'RO23=Iasi', 'RO25=Maramures', 'RO26=Mehedinti', 'RO27=Mures', 'RO28=Neamt',
                                                'RO29=Olt', 'RO30=Prahova', 'RO31=Salaj', 'RO32=Satu Mare', 'RO33=Sibiu', 'RO34=Suceava', 'RO35=Teleorman', 'RO36=Timis', 'RO37=Tulcea', 'RO38=Vaslui',
                                                'RO39=Valcea', 'RO40=Vrancea', 'RO41=Calarasi', 'RO42=Giurgiu', 'RO43=Ilfov', 'RS00=Serbia proper', 'RS01=Kosovo', 'RS02=Vojvodina', 'RU01=Adygeya, Republic of', 'RU02=Aginsky Buryatsky AO',
                                                'RU03=Gorno-Altay', 'RU04=Altaisky krai', 'RU05=Amur', 'RU06=Arkhangel''sk', 'RU07=Astrakhan''', 'RU08=Bashkortostan', 'RU09=Belgorod', 'RU10=Bryansk', 'RU11=Buryat', 'RU12=Chechnya',
                                                'RU13=Chelyabinsk', 'RU14=Chita', 'RU15=Chukot', 'RU16=Chuvashia', 'RU17=Dagestan', 'RU18=Evenk', 'RU19=Ingush', 'RU20=Irkutsk', 'RU21=Ivanovo', 'RU22=Kabardin-Balkar',
                                                'RU23=Kaliningrad', 'RU24=Kalmyk', 'RU25=Kaluga', 'RU26=Kamchatka', 'RU27=Karachay-Cherkess', 'RU28=Karelia', 'RU29=Kemerovo', 'RU30=Khabarovsk', 'RU31=Khakass', 'RU32=Khanty-Mansiy',
                                                'RU33=Kirov', 'RU34=Komi', 'RU35=Komi-Permyak', 'RU36=Koryak', 'RU37=Kostroma', 'RU38=Krasnodar', 'RU39=Krasnoyarsk', 'RU40=Kurgan', 'RU41=Kursk', 'RU42=Leningrad',
                                                'RU43=Lipetsk', 'RU44=Magadan', 'RU45=Mariy-El', 'RU46=Mordovia', 'RU47=Moskva', 'RU48=Moscow City', 'RU49=Murmansk', 'RU50=Nenets', 'RU51=Nizhegorod', 'RU52=Novgorod',
                                                'RU53=Novosibirsk', 'RU54=Omsk', 'RU55=Orenburg', 'RU56=Orel', 'RU57=Penza', 'RU58=Perm''', 'RU59=Primor''ye', 'RU60=Pskov', 'RU61=Rostov', 'RU62=Ryazan''',
                                                'RU63=Sakha', 'RU64=Sakhalin', 'RU65=Samara', 'RU66=Saint Petersburg City', 'RU67=Saratov', 'RU68=North Ossetia', 'RU69=Smolensk', 'RU70=Stavropol''', 'RU71=Sverdlovsk', 'RU72=Tambovskaya oblast',
                                                'RU73=Tatarstan', 'RU74=Taymyr', 'RU75=Tomsk', 'RU76=Tula', 'RU77=Tver''', 'RU78=Tyumen''', 'RU79=Tuva', 'RU80=Udmurt', 'RU81=Ul''yanovsk', 'RU82=Ust-Orda Buryat',
                                                'RU83=Vladimir', 'RU84=Volgograd', 'RU85=Vologda', 'RU86=Voronezh', 'RU87=Yamal-Nenets', 'RU88=Yaroslavl''', 'RU89=Yevrey', 'RU90=Permskiy Kray', 'RU91=Krasnoyarskiy Kray', 'RW01=Butare',
                                                'RW06=Gitarama', 'RW09=Kigali', 'RW11=Est', 'RW12=Kigali', 'RW13=Nord', 'RW14=Ouest', 'RW15=Sud', 'SA02=Al Bahah', 'SA03=Al Jawf', 'SA05=Al Madinah',
                                                'SA06=Ash Sharqiyah', 'SA08=Al Qasim', 'SA09=Al Qurayyat', 'SA10=Ar Riyad', 'SA13=Ha''il', 'SA14=Makkah', 'SA15=Al Hudud ash Shamaliyah', 'SA16=Najran', 'SA17=Jizan', 'SA19=Tabuk',
                                                'SA20=Al Jawf', 'SB03=Malaita', 'SB06=Guadalcanal', 'SB07=Isabel', 'SB08=Makira', 'SB09=Temotu', 'SB10=Central', 'SB11=Western', 'SB12=Choiseul', 'SB13=Rennell and Bellona',
                                                'SC01=Anse aux Pins', 'SC02=Anse Boileau', 'SC03=Anse Etoile', 'SC04=Anse Louis', 'SC05=Anse Royale', 'SC06=Baie Lazare', 'SC07=Baie Sainte Anne', 'SC08=Beau Vallon', 'SC09=Bel Air', 'SC10=Bel Ombre',
                                                'SC11=Cascade', 'SC12=Glacis', 'SC13=Grand'' Anse', 'SC14=Grand'' Anse', 'SC15=La Digue', 'SC16=La Riviere Anglaise', 'SC17=Mont Buxton', 'SC18=Mont Fleuri', 'SC19=Plaisance', 'SC20=Pointe La Rue',
                                                'SC21=Port Glaud', 'SC22=Saint Louis', 'SC23=Takamaka', 'SD27=Al Wusta', 'SD28=Al Istiwa''iyah', 'SD29=Al Khartum', 'SD30=Ash Shamaliyah', 'SD31=Ash Sharqiyah', 'SD32=Bahr al Ghazal', 'SD33=Darfur',
                                                'SD34=Kurdufan', 'SD35=Upper Nile', 'SE01=Alvsborgs Lan', 'SE02=Blekinge Lan', 'SE03=Gavleborgs Lan', 'SE04=Goteborgs och Bohus Lan', 'SE05=Gotlands Lan', 'SE06=Hallands Lan', 'SE07=Jamtlands Lan', 'SE08=Jonkopings Lan',
                                                'SE09=Kalmar Lan', 'SE10=Dalarnas Lan', 'SE11=Kristianstads Lan', 'SE12=Kronobergs Lan', 'SE13=Malmohus Lan', 'SE14=Norrbottens Lan', 'SE15=Orebro Lan', 'SE16=Ostergotlands Lan', 'SE17=Skaraborgs Lan', 'SE18=Sodermanlands Lan',
                                                'SE21=Uppsala Lan', 'SE22=Varmlands Lan', 'SE23=Vasterbottens Lan', 'SE24=Vasternorrlands Lan', 'SE25=Vastmanlands Lan', 'SE26=Stockholms Lan', 'SE27=Skane Lan', 'SE28=Vastra Gotaland', 'SH01=Ascension', 'SH02=Saint Helena',
                                                'SH03=Tristan da Cunha', 'SI01=Ajdovscina', 'SI02=Beltinci', 'SI03=Bled', 'SI04=Bohinj', 'SI05=Borovnica', 'SI06=Bovec', 'SI07=Brda', 'SI08=Brezice', 'SI09=Brezovica',
                                                'SI11=Celje', 'SI12=Cerklje na Gorenjskem', 'SI13=Cerknica', 'SI14=Cerkno', 'SI15=Crensovci', 'SI16=Crna na Koroskem', 'SI17=Crnomelj', 'SI19=Divaca', 'SI20=Dobrepolje', 'SI22=Dol pri Ljubljani',
                                                'SI24=Dornava', 'SI25=Dravograd', 'SI26=Duplek', 'SI27=Gorenja Vas-Poljane', 'SI28=Gorisnica', 'SI29=Gornja Radgona', 'SI30=Gornji Grad', 'SI31=Gornji Petrovci', 'SI32=Grosuplje', 'SI34=Hrastnik',
                                                'SI35=Hrpelje-Kozina', 'SI36=Idrija', 'SI37=Ig', 'SI38=Ilirska Bistrica', 'SI39=Ivancna Gorica', 'SI40=Izola-Isola', 'SI42=Jursinci', 'SI44=Kanal', 'SI45=Kidricevo', 'SI46=Kobarid',
                                                'SI47=Kobilje', 'SI49=Komen', 'SI50=Koper-Capodistria', 'SI51=Kozje', 'SI52=Kranj', 'SI53=Kranjska Gora', 'SI54=Krsko', 'SI55=Kungota', 'SI57=Lasko', 'SI61=Ljubljana',
                                                'SI62=Ljubno', 'SI64=Logatec', 'SI66=Loski Potok', 'SI68=Lukovica', 'SI71=Medvode', 'SI72=Menges', 'SI73=Metlika', 'SI74=Mezica', 'SI76=Mislinja', 'SI77=Moravce',
                                                'SI78=Moravske Toplice', 'SI79=Mozirje', 'SI80=Murska Sobota', 'SI81=Muta', 'SI82=Naklo', 'SI83=Nazarje', 'SI84=Nova Gorica', 'SI86=Odranci', 'SI87=Ormoz', 'SI88=Osilnica',
                                                'SI89=Pesnica', 'SI91=Pivka', 'SI92=Podcetrtek', 'SI94=Postojna', 'SI97=Puconci', 'SI98=Racam', 'SI99=Radece', 'SIA1=Radenci', 'SIA2=Radlje ob Dravi', 'SIA3=Radovljica',
                                                'SIA6=Rogasovci', 'SIA7=Rogaska Slatina', 'SIA8=Rogatec', 'SIB1=Semic', 'SIB2=Sencur', 'SIB3=Sentilj', 'SIB4=Sentjernej', 'SIB6=Sevnica', 'SIB7=Sezana', 'SIB8=Skocjan',
                                                'SIB9=Skofja Loka', 'SIC1=Skofljica', 'SIC2=Slovenj Gradec', 'SIC4=Slovenske Konjice', 'SIC5=Smarje pri Jelsah', 'SIC6=Smartno ob Paki', 'SIC7=Sostanj', 'SIC8=Starse', 'SIC9=Store', 'SID1=Sveti Jurij',
                                                'SID2=Tolmin', 'SID3=Trbovlje', 'SID4=Trebnje', 'SID5=Trzic', 'SID6=Turnisce', 'SID7=Velenje', 'SID8=Velike Lasce', 'SIE1=Vipava', 'SIE2=Vitanje', 'SIE3=Vodice',
                                                'SIE5=Vrhnika', 'SIE6=Vuzenica', 'SIE7=Zagorje ob Savi', 'SIE9=Zavrc', 'SIF1=Zelezniki', 'SIF2=Ziri', 'SIF3=Zrece', 'SIG4=Dobrova-Horjul-Polhov Gradec', 'SIG7=Domzale', 'SIH4=Jesenice',
                                                'SIH6=Kamnik', 'SIH7=Kocevje', 'SII2=Kuzma', 'SII3=Lenart', 'SII5=Litija', 'SII6=Ljutomer', 'SII7=Loska Dolina', 'SII9=Luce', 'SIJ1=Majsperk', 'SIJ2=Maribor',
                                                'SIJ5=Miren-Kostanjevica', 'SIJ7=Novo Mesto', 'SIJ9=Piran', 'SIK5=Preddvor', 'SIK7=Ptuj', 'SIL1=Ribnica', 'SIL3=Ruse', 'SIL7=Sentjur pri Celju', 'SIL8=Slovenska Bistrica', 'SIN2=Videm',
                                                'SIN3=Vojnik', 'SIN5=Zalec', 'SK01=Banska Bystrica', 'SK02=Bratislava', 'SK03=Kosice', 'SK04=Nitra', 'SK05=Presov', 'SK06=Trencin', 'SK07=Trnava', 'SK08=Zilina',
                                                'SL01=Eastern', 'SL02=Northern', 'SL03=Southern', 'SL04=Western Area', 'SM01=Acquaviva', 'SM02=Chiesanuova', 'SM03=Domagnano', 'SM04=Faetano', 'SM05=Fiorentino', 'SM06=Borgo Maggiore',
                                                'SM07=San Marino', 'SM08=Monte Giardino', 'SM09=Serravalle', 'SN01=Dakar', 'SN03=Diourbel', 'SN04=Saint-Louis', 'SN05=Tambacounda', 'SN07=Thies', 'SN09=Fatick', 'SN10=Kaolack',
                                                'SN11=Kolda', 'SN12=Ziguinchor', 'SN13=Louga', 'SN14=Saint-Louis', 'SN15=Matam', 'SO01=Bakool', 'SO02=Banaadir', 'SO03=Bari', 'SO04=Bay', 'SO05=Galguduud',
                                                'SO06=Gedo', 'SO07=Hiiraan', 'SO08=Jubbada Dhexe', 'SO09=Jubbada Hoose', 'SO10=Mudug', 'SO11=Nugaal', 'SO12=Sanaag', 'SO13=Shabeellaha Dhexe', 'SO14=Shabeellaha Hoose', 'SO16=Woqooyi Galbeed',
                                                'SO18=Nugaal', 'SO19=Togdheer', 'SO20=Woqooyi Galbeed', 'SO21=Awdal', 'SO22=Sool', 'SR10=Brokopondo', 'SR11=Commewijne', 'SR12=Coronie', 'SR13=Marowijne', 'SR14=Nickerie',
                                                'SR15=Para', 'SR16=Paramaribo', 'SR17=Saramacca', 'SR18=Sipaliwini', 'SR19=Wanica', 'ST01=Principe', 'ST02=Sao Tome', 'SV01=Ahuachapan', 'SV02=Cabanas', 'SV03=Chalatenango',
                                                'SV04=Cuscatlan', 'SV05=La Libertad', 'SV06=La Paz', 'SV07=La Union', 'SV08=Morazan', 'SV09=San Miguel', 'SV10=San Salvador', 'SV11=Santa Ana', 'SV12=San Vicente', 'SV13=Sonsonate',
                                                'SV14=Usulutan', 'SY01=Al Hasakah', 'SY02=Al Ladhiqiyah', 'SY03=Al Qunaytirah', 'SY04=Ar Raqqah', 'SY05=As Suwayda''', 'SY06=Dar', 'SY07=Dayr az Zawr', 'SY08=Rif Dimashq', 'SY09=Halab',
                                                'SY10=Hamah', 'SY11=Hims', 'SY12=Idlib', 'SY13=Dimashq', 'SY14=Tartus', 'SZ01=Hhohho', 'SZ02=Lubombo', 'SZ03=Manzini', 'SZ04=Shiselweni', 'SZ05=Praslin',
                                                'TD01=Batha', 'TD02=Biltine', 'TD03=Borkou-Ennedi-Tibesti', 'TD04=Chari-Baguirmi', 'TD05=Guera', 'TD06=Kanem', 'TD07=Lac', 'TD08=Logone Occidental', 'TD09=Logone Oriental', 'TD10=Mayo-Kebbi',
                                                'TD11=Moyen-Chari', 'TD12=Ouaddai', 'TD13=Salamat', 'TD14=Tandjile', 'TG09=Lama-Kara', 'TG18=Tsevie', 'TG22=Centrale', 'TG23=Kara', 'TG24=Maritime', 'TG25=Plateaux',
                                                'TG26=Savanes', 'TH01=Mae Hong Son', 'TH02=Chiang Mai', 'TH03=Chiang Rai', 'TH04=Nan', 'TH05=Lamphun', 'TH06=Lampang', 'TH07=Phrae', 'TH08=Tak', 'TH09=Sukhothai',
                                                'TH10=Uttaradit', 'TH11=Kamphaeng Phet', 'TH12=Phitsanulok', 'TH13=Phichit', 'TH14=Phetchabun', 'TH15=Uthai Thani', 'TH16=Nakhon Sawan', 'TH17=Nong Khai', 'TH18=Loei', 'TH20=Sakon Nakhon',
                                                'TH21=Nakhon Phanom', 'TH22=Khon Kaen', 'TH23=Kalasin', 'TH24=Maha Sarakham', 'TH25=Roi Et', 'TH26=Chaiyaphum', 'TH27=Nakhon Ratchasima', 'TH28=Buriram', 'TH29=Surin', 'TH30=Sisaket',
                                                'TH31=Narathiwat', 'TH32=Chai Nat', 'TH33=Sing Buri', 'TH34=Lop Buri', 'TH35=Ang Thong', 'TH36=Phra Nakhon Si Ayutthaya', 'TH37=Saraburi', 'TH38=Nonthaburi', 'TH39=Pathum Thani', 'TH40=Krung Thep',
                                                'TH41=Phayao', 'TH42=Samut Prakan', 'TH43=Nakhon Nayok', 'TH44=Chachoengsao', 'TH45=Prachin Buri', 'TH46=Chon Buri', 'TH47=Rayong', 'TH48=Chanthaburi', 'TH49=Trat', 'TH50=Kanchanaburi',
                                                'TH51=Suphan Buri', 'TH52=Ratchaburi', 'TH53=Nakhon Pathom', 'TH54=Samut Songkhram', 'TH55=Samut Sakhon', 'TH56=Phetchaburi', 'TH57=Prachuap Khiri Khan', 'TH58=Chumphon', 'TH59=Ranong', 'TH60=Surat Thani',
                                                'TH61=Phangnga', 'TH62=Phuket', 'TH63=Krabi', 'TH64=Nakhon Si Thammarat', 'TH65=Trang', 'TH66=Phatthalung', 'TH67=Satun', 'TH68=Songkhla', 'TH69=Pattani', 'TH70=Yala',
                                                'TH71=Ubon Ratchathani', 'TH72=Yasothon', 'TH75=Ubon Ratchathani', 'TH76=Udon Thani', 'TH78=Mukdahan', 'TJ01=Kuhistoni Badakhshon', 'TJ02=Khatlon', 'TJ03=Sughd', 'TM01=Ahal', 'TM02=Balkan',
                                                'TM03=Dashoguz', 'TM04=Lebap', 'TM05=Mary', 'TN02=Al Qasrayn', 'TN03=Al Qayrawan', 'TN06=Jundubah', 'TN10=Qafsah', 'TN14=Kef', 'TN15=Al Mahdiyah', 'TN16=Al Munastir',
                                                'TN17=Bajah', 'TN18=Banzart', 'TN19=Nabul', 'TN22=Silyanah', 'TN23=Susah', 'TN27=Bin', 'TN28=Madanin', 'TN29=Qabis', 'TN30=Qafsah', 'TN31=Qibili',
                                                'TN32=Safaqis', 'TN33=Sidi Bu Zayd', 'TN34=Tatawin', 'TN35=Tawzar', 'TN36=Tunis', 'TN37=Zaghwan', 'TN38=Ariana', 'TN39=Manouba', 'TO01=Ha', 'TO02=Tongatapu',
                                                'TO03=Vava', 'TR02=Adiyaman', 'TR03=Afyonkarahisar', 'TR04=Agri', 'TR05=Amasya', 'TR07=Antalya', 'TR08=Artvin', 'TR09=Aydin', 'TR10=Balikesir', 'TR11=Bilecik',
                                                'TR12=Bingol', 'TR13=Bitlis', 'TR14=Bolu', 'TR15=Burdur', 'TR16=Bursa', 'TR17=Canakkale', 'TR19=Corum', 'TR20=Denizli', 'TR21=Diyarbakir', 'TR22=Edirne',
                                                'TR23=Elazig', 'TR24=Erzincan', 'TR25=Erzurum', 'TR26=Eskisehir', 'TR28=Giresun', 'TR31=Hatay', 'TR32=Icel', 'TR33=Isparta', 'TR34=Istanbul', 'TR35=Izmir',
                                                'TR37=Kastamonu', 'TR38=Kayseri', 'TR39=Kirklareli', 'TR40=Kirsehir', 'TR41=Kocaeli', 'TR43=Kutahya', 'TR44=Malatya', 'TR45=Manisa', 'TR46=Kahramanmaras', 'TR48=Mugla',
                                                'TR49=Mus', 'TR50=Nevsehir', 'TR52=Ordu', 'TR53=Rize', 'TR54=Sakarya', 'TR55=Samsun', 'TR57=Sinop', 'TR58=Sivas', 'TR59=Tekirdag', 'TR60=Tokat',
                                                'TR61=Trabzon', 'TR62=Tunceli', 'TR63=Sanliurfa', 'TR64=Usak', 'TR65=Van', 'TR66=Yozgat', 'TR68=Ankara', 'TR69=Gumushane', 'TR70=Hakkari', 'TR71=Konya',
                                                'TR72=Mardin', 'TR73=Nigde', 'TR74=Siirt', 'TR75=Aksaray', 'TR76=Batman', 'TR77=Bayburt', 'TR78=Karaman', 'TR79=Kirikkale', 'TR80=Sirnak', 'TR81=Adana',
                                                'TR82=Cankiri', 'TR83=Gaziantep', 'TR84=Kars', 'TR85=Zonguldak', 'TR86=Ardahan', 'TR87=Bartin', 'TR88=Igdir', 'TR89=Karabuk', 'TR90=Kilis', 'TR91=Osmaniye',
                                                'TR92=Yalova', 'TR93=Duzce', 'TT01=Arima', 'TT02=Caroni', 'TT03=Mayaro', 'TT04=Nariva', 'TT05=Port-of-Spain', 'TT06=Saint Andrew', 'TT07=Saint David', 'TT08=Saint George',
                                                'TT09=Saint Patrick', 'TT10=San Fernando', 'TT11=Tobago', 'TT12=Victoria', 'TW01=Fu-chien', 'TW02=Kao-hsiung', 'TW03=T''ai-pei', 'TW04=T''ai-wan', 'TZ02=Pwani', 'TZ03=Dodoma',
                                                'TZ04=Iringa', 'TZ05=Kigoma', 'TZ06=Kilimanjaro', 'TZ07=Lindi', 'TZ08=Mara', 'TZ09=Mbeya', 'TZ10=Morogoro', 'TZ11=Mtwara', 'TZ12=Mwanza', 'TZ13=Pemba North',
                                                'TZ14=Ruvuma', 'TZ15=Shinyanga', 'TZ16=Singida', 'TZ17=Tabora', 'TZ18=Tanga', 'TZ19=Kagera', 'TZ20=Pemba South', 'TZ21=Zanzibar Central', 'TZ22=Zanzibar North', 'TZ23=Dar es Salaam',
                                                'TZ24=Rukwa', 'TZ25=Zanzibar Urban', 'TZ26=Arusha', 'TZ27=Manyara', 'UA01=Cherkas''ka Oblast''', 'UA02=Chernihivs''ka Oblast''', 'UA03=Chernivets''ka Oblast''', 'UA04=Dnipropetrovs''ka Oblast''', 'UA05=Donets''ka Oblast''', 'UA06=Ivano-Frankivs''ka Oblast''',
                                                'UA07=Kharkivs''ka Oblast''', 'UA08=Khersons''ka Oblast''', 'UA09=Khmel''nyts''ka Oblast''', 'UA10=Kirovohrads''ka Oblast''', 'UA11=Krym', 'UA12=Kyyiv', 'UA13=Kyyivs''ka Oblast''', 'UA14=Luhans''ka Oblast''', 'UA15=L''vivs''ka Oblast''', 'UA16=Mykolayivs''ka Oblast''',
                                                'UA17=Odes''ka Oblast''', 'UA18=Poltavs''ka Oblast''', 'UA19=Rivnens''ka Oblast''', 'UA20=Sevastopol''', 'UA21=Sums''ka Oblast''', 'UA22=Ternopil''s''ka Oblast''', 'UA23=Vinnyts''ka Oblast''', 'UA24=Volyns''ka Oblast''', 'UA25=Zakarpats''ka Oblast''', 'UA26=Zaporiz''ka Oblast''',
                                                'UA27=Zhytomyrs''ka Oblast''', 'UG05=Busoga', 'UG08=Karamoja', 'UG12=South Buganda', 'UG18=Central', 'UG20=Eastern', 'UG21=Nile', 'UG22=North Buganda', 'UG23=Northern', 'UG24=Southern',
                                                'UG25=Western', 'UG37=Kampala', 'UG56=Mubende', 'UG65=Adjumani', 'UG66=Bugiri', 'UG67=Busia', 'UG69=Katakwi', 'UG73=Nakasongola', 'UG74=Sembabule', 'UG77=Arua',
                                                'UG78=Iganga', 'UG79=Kabarole', 'UG80=Kaberamaido', 'UG81=Kamwenge', 'UG82=Kanungu', 'UG83=Kayunga', 'UG84=Kitgum', 'UG85=Kyenjojo', 'UG86=Mayuge', 'UG87=Mbale',
                                                'UG88=Moroto', 'UG89=Mpigi', 'UG90=Mukono', 'UG91=Nakapiripirit', 'UG92=Pader', 'UG93=Rukungiri', 'UG94=Sironko', 'UG95=Soroti', 'UG96=Wakiso', 'UG97=Yumbe',
                                                'USAA=Forces armées américaines', 'USAE=Armed Forces Europe, Middle East, & Canada', 'USAK=Alaska', 'USAL=Alabama', 'USAP=Armed Forces Pacific', 'USAR=Arkansas', 'USAS=American Samoa', 'USAZ=Arizona', 'USCA=Californie', 'USCO=Colorado',
                                                'USCT=Connecticut', 'USDC=District of Columbia', 'USDE=Delaware', 'USFL=Floride', 'USFM=Federated States of Micronesia', 'USGA=Georgia', 'USGU=Guam', 'USHI=Hawaï', 'USIA=Iowa', 'USID=Idaho',
                                                'USIL=Illinois', 'USIN=Indiana', 'USKS=Kansas', 'USKY=Kentucky', 'USLA=Louisiane', 'USMA=Massachusetts', 'USMD=Maryland', 'USME=Maine', 'USMH=Îles Marshall', 'USMI=Michigan',
                                                'USMN=Minnesota', 'USMO=Missouri', 'USMP=Northern Mariana Islands', 'USMS=Mississippi', 'USMT=Montana', 'USNC=Caroline du Nord', 'USND=Dakota du Nord', 'USNE=Nebraska', 'USNH=New Hampshire', 'USNJ=New Jersey',
                                                'USNM=Nouveau Mexique', 'USNV=Nevada', 'USNY=New York', 'USOH=Ohio', 'USOK=Oklahoma', 'USOR=Oregon', 'USPA=Pennsylvania', 'USPR=Puerto Rico', 'USPW=Palau', 'USRI=Rhode Island',
                                                'USSC=Caroline du Sud', 'USSD=Dakota du Sud', 'USTN=Tennessee', 'USTX=Texas', 'USUT=Utah', 'USVA=Virginia', 'USVI=Îles vierges', 'USVT=Vermont', 'USWA=Washington', 'USWI=Wisconsin',
                                                'USWV=West Virginia', 'USWY=Wyoming', 'UY01=Artigas', 'UY02=Canelones', 'UY03=Cerro Largo', 'UY04=Colonia', 'UY05=Durazno', 'UY06=Flores', 'UY07=Florida', 'UY08=Lavalleja',
                                                'UY09=Maldonado', 'UY10=Montevideo', 'UY11=Paysandu', 'UY12=Rio Negro', 'UY13=Rivera', 'UY14=Rocha', 'UY15=Salto', 'UY16=San Jose', 'UY17=Soriano', 'UY18=Tacuarembo',
                                                'UY19=Treinta y Tres', 'UZ01=Andijon', 'UZ02=Bukhoro', 'UZ03=Farghona', 'UZ04=Jizzakh', 'UZ05=Khorazm', 'UZ06=Namangan', 'UZ07=Nawoiy', 'UZ08=Qashqadaryo', 'UZ09=Qoraqalpoghiston',
                                                'UZ10=Samarqand', 'UZ11=Sirdaryo', 'UZ12=Surkhondaryo', 'UZ13=Toshkent', 'UZ14=Toshkent', 'VC01=Charlotte', 'VC02=Saint Andrew', 'VC03=Saint David', 'VC04=Saint George', 'VC05=Saint Patrick',
                                                'VC06=Grenadines', 'VE01=Amazonas', 'VE02=Anzoategui', 'VE03=Apure', 'VE04=Aragua', 'VE05=Barinas', 'VE06=Bolivar', 'VE07=Carabobo', 'VE08=Cojedes', 'VE09=Delta Amacuro',
                                                'VE11=Falcon', 'VE12=Guarico', 'VE13=Lara', 'VE14=Merida', 'VE15=Miranda', 'VE16=Monagas', 'VE17=Nueva Esparta', 'VE18=Portuguesa', 'VE19=Sucre', 'VE20=Tachira',
                                                'VE21=Trujillo', 'VE22=Yaracuy', 'VE23=Zulia', 'VE24=Dependencias Federales', 'VE25=Distrito Federal', 'VE26=Vargas', 'VN01=An Giang', 'VN02=Bac Thai', 'VN03=Ben Tre', 'VN04=Binh Tri Thien',
                                                'VN05=Cao Bang', 'VN07=Dac Lac', 'VN09=Dong Thap', 'VN11=Ha Bac', 'VN12=Hai Hung', 'VN13=Hai Phong', 'VN14=Ha Nam Ninh', 'VN16=Ha Son Binh', 'VN17=Ha Tuyen', 'VN19=Hoang Lien Son',
                                                'VN20=Ho Chi Minh', 'VN21=Kien Giang', 'VN22=Lai Chau', 'VN23=Lam Dong', 'VN24=Long An', 'VN25=Minh Hai', 'VN26=Nghe Tinh', 'VN27=Nghia Binh', 'VN28=Phu Khanh', 'VN29=Quang Nam-Da Nang',
                                                'VN30=Quang Ninh', 'VN31=Song Be', 'VN32=Son La', 'VN33=Tay Ninh', 'VN34=Thanh Hoa', 'VN35=Thai Binh', 'VN36=Thuan Hai', 'VN37=Tien Giang', 'VN38=Vinh Phu', 'VN39=Lang Son',
                                                'VN40=Dong Nai', 'VN43=An Giang', 'VN44=Dac Lac', 'VN45=Dong Nai', 'VN46=Dong Thap', 'VN47=Kien Giang', 'VN48=Minh Hai', 'VN49=Song Be', 'VN50=Vinh Phu', 'VN51=Ha Noi',
                                                'VN52=Ho Chi Minh', 'VN53=Ba Ria-Vung Tau', 'VN54=Binh Dinh', 'VN55=Binh Thuan', 'VN56=Can Tho', 'VN57=Gia Lai', 'VN58=Ha Giang', 'VN59=Ha Tay', 'VN60=Ha Tinh', 'VN61=Hoa Binh',
                                                'VN62=Khanh Hoa', 'VN63=Kon Tum', 'VN64=Quang Tri', 'VN65=Nam Ha', 'VN66=Nghe An', 'VN67=Ninh Binh', 'VN68=Ninh Thuan', 'VN69=Phu Yen', 'VN70=Quang Binh', 'VN71=Quang Ngai',
                                                'VN72=Quang Tri', 'VN73=Soc Trang', 'VN74=Thua Thien', 'VN75=Tra Vinh', 'VN76=Tuyen Quang', 'VN77=Vinh Long', 'VN78=Da Nang', 'VN79=Hai Duong', 'VN80=Ha Nam', 'VN81=Hung Yen',
                                                'VN82=Nam Dinh', 'VN83=Phu Tho', 'VN84=Quang Nam', 'VN85=Thai Nguyen', 'VN87=Can Tho', 'VN88=Dak Lak', 'VN89=Lai Chau', 'VN90=Lao Cai', 'VN91=Dak Nong', 'VN92=Dien Bien',
                                                'VN93=Hau Giang', 'VU05=Ambrym', 'VU06=Aoba', 'VU07=Torba', 'VU08=Efate', 'VU09=Epi', 'VU10=Malakula', 'VU11=Paama', 'VU12=Pentecote', 'VU13=Sanma',
                                                'VU14=Shepherd', 'VU15=Tafea', 'VU16=Malampa', 'VU17=Penama', 'VU18=Shefa', 'WS02=Aiga-i-le-Tai', 'WS03=Atua', 'WS04=Fa', 'WS05=Gaga', 'WS06=Va',
                                                'WS07=Gagaifomauga', 'WS08=Palauli', 'WS09=Satupa', 'WS10=Tuamasaga', 'WS11=Vaisigano', 'YE01=Abyan', 'YE02=Adan', 'YE03=Al Mahrah', 'YE04=Hadramawt', 'YE05=Shabwah',
                                                'YE08=Al Hudaydah', 'YE10=Al Mahwit', 'YE11=Dhamar', 'YE14=Ma''rib', 'YE15=Sa', 'YE16=San', 'YE20=Al Bayda''', 'YE21=Al Jawf', 'YE22=Hajjah', 'YE23=Ibb',
                                                'YE24=Lahij', 'YE25=Ta', 'ZA02=KwaZulu-Natal', 'ZA03=Free State', 'ZA05=Eastern Cape', 'ZA06=Gauteng', 'ZA07=Mpumalanga', 'ZA08=Northern Cape', 'ZA09=Limpopo', 'ZA10=North-West',
                                                'ZA11=Western Cape', 'ZM01=Western', 'ZM02=Central', 'ZM03=Eastern', 'ZM04=Luapula', 'ZM05=Northern', 'ZM06=North-Western', 'ZM07=Southern', 'ZM08=Copperbelt', 'ZM09=Lusaka',
                                                'ZW01=Manicaland', 'ZW02=Midlands', 'ZW03=Mashonaland Central', 'ZW04=Mashonaland East', 'ZW05=Mashonaland West', 'ZW06=Matabeleland North', 'ZW07=Matabeleland South', 'ZW08=Masvingo', 'ZW09=Bulawayo', 'ZW10=Harare');

implementation

const
  COUNTRY_BEGIN = 16776960;
  STATE_BEGIN_REV0 = 16700000;
  STATE_BEGIN_REV1  = 16000000;
  STRUCTURE_INFO_MAX_SIZE = 20;
  DATABASE_INFO_MAX_SIZE = 100;
  SEGMENT_RECORD_LENGTH = 3;
  STANDARD_RECORD_LENGTH = 3;
  ORG_RECORD_LENGTH = 4;
  MAX_RECORD_LENGTH = 4;
  MAX_ORG_RECORD_LENGTH = 300;
  FULL_RECORD_LENGTH = 50;
  US_OFFSET = 1;
  CANADA_OFFSET = 677;
  WORLD_OFFSET = 1353;
  FIPS_RANGE = 360;

{ TGeoIP }

constructor TGeoIP.Create(const FileName: string);
begin
  inherited Create;
  FInputFile := TFileStream.Create(FileName, fmOpenRead or fmShareDenyNone);
  InitDBFile;
  InitRegions;
end;

destructor TGeoIP.Destroy;
begin
  if Assigned(FInputFile) then
    FInputFile.Free;
  if Assigned(slRegions) then
    slRegions.Free;
  inherited Destroy;
end;

function TGeoIP._GetCity(IPNum: Cardinal; var GeoIPCity: TGeoIPCity): TGeoIPResult;
var
   SeekCity: Cardinal;
   RecordPointer: Cardinal;
   StrLen: Cardinal;
   buf: array[0..FULL_RECORD_LENGTH-1] of Byte;
   p: PAnsiChar;
   i: Integer;
   DmaAreaCombo: Integer;
begin
  if (FDatabaseType <> GEOIP_CITY_EDITION_REV0) and (FDatabaseType <> GEOIP_CITY_EDITION_REV1) then
  begin
    Result := GEOIP_ERROR_DBTYPE;
    Exit;
  end;
  SeekCity := SeekRecord(IPNum);
  if SeekCity = FDatabaseSegments[0] then
  begin
    Result := GEOIP_NODATA;
    Exit;
  end;
  RecordPointer := SeekCity + (2 * FRecordLength - 1) * FDatabaseSegments[0];
  FInputFile.Seek(RecordPointer, soFromBeginning);
  FInputFile.Read(buf, FULL_RECORD_LENGTH);

  // get country
  GeoIPCity.CountryCode := CountryCodes[buf[0]];
  GeoIPCity.CountryName := CountryNames[buf[0]];

  // get region
  p := @buf[1];
  StrLen := 0;
  while (p[StrLen] <> #0) do
    Inc(StrLen);
  GeoIPCity.Region := Copy(p, 0, StrLen);

  // Region label
  if ((GeoIPCity.Region <> '') and (slRegions.IndexOfName(string(GeoIPCity.CountryCode + GeoIPCity.Region)) <> -1)) then
  begin
    GeoIPCity.Region := AnsiString(slRegions.Values[string(GeoIPCity.CountryCode + GeoIPCity.Region)]);
  end;

  // get city
  Inc(p, StrLen + 1);
  StrLen := 0;
  while (p[StrLen] <> #0) do
    Inc(StrLen);
  GeoIPCity.City := Copy(p, 0, StrLen);

  // get postal code
  Inc(p, StrLen + 1);
  StrLen := 0;
  while (p[StrLen] <> #0) do
    Inc(StrLen);
  GeoIPCity.PostalCode := Copy(p, 0, StrLen);

  // get latitude
  Inc(p, StrLen + 1);
  GeoIPCity.Latitude := 0.0;
  for i:=0 to 2 do
  begin
    GeoIPCity.Latitude := GeoIPCity.Latitude + (Integer(p[i]) shl (i*8));
  end;
  GeoIPCity.Latitude := GeoIPCity.Latitude/10000 - 180;

  // get longitude
  Inc(p, 3);
  GeoIPCity.Longitude := 0.0;
  for i:=0 to 2 do
  begin
    GeoIPCity.Longitude := GeoIPCity.Longitude + (Integer(p[i]) shl (i*8));
  end;
  GeoIPCity.Longitude := GeoIPCity.Longitude/10000 - 180;

  // get area code and dma code for post April 2002 databases and for US locations
  GeoIPCity.DmaCode := 0;
  GeoIPCity.AreaCode := 0;
  if FDatabaseType = GEOIP_CITY_EDITION_REV1 then
  begin
    if GeoIPCity.CountryCode = 'US' then
    begin
      Inc(p, 3);
      DmaAreaCombo := 0;
      for i:=0 to 2 do
      begin
        DmaAreaCombo := DmaAreaCombo + (Integer(p[i]) shl (i*8));
      end;
      GeoIPCity.DmaCode := DmaAreaCombo div 1000;
      GeoIPCity.AreaCode := DmaAreaCombo mod 1000;
    end;
  end;
  Result := GEOIP_SUCCESS;
end;

function TGeoIP._GetCountry(IPNum: Cardinal; var GeoIPCountry: TGeoIPCountry): TGeoIPResult;
var
   ret: Cardinal;
begin
  if (FDatabaseType <> GEOIP_COUNTRY_EDITION) and (FDatabaseType <> GEOIP_PROXY_EDITION) then
  begin
    Result := GEOIP_ERROR_DBTYPE;
    Exit;
  end;
  ret := SeekRecord(IPNum) - COUNTRY_BEGIN;
  if ret > 0 then
  begin
    GeoIPCountry.CountryCode := CountryCodes[ret];
    GeoIPCountry.CountryName := CountryNames[ret];
    Result := GEOIP_SUCCESS;
  end
  else
  begin
    Result := GEOIP_NODATA;
  end;
end;

function TGeoIP._GetOrg(IPNum: Cardinal; var GeoIPOrg: TGeoIPOrg): TGeoIPResult;
var
   SeekOrg: Cardinal;
   RecordPointer: Cardinal;
   StrLen: Cardinal;
   buf: array[0..MAX_ORG_RECORD_LENGTH-1] of Byte;
   p: PAnsiChar;
begin
  if (FDatabaseType <> GEOIP_ORG_EDITION) and (FDatabaseType <> GEOIP_ISP_EDITION) and (FDatabaseType <> GEOIP_ASNUM_EDITION) then
  begin
    Result := GEOIP_ERROR_DBTYPE;
    Exit;
  end;
  SeekOrg := SeekRecord(IPNum);
  if SeekOrg = FDatabaseSegments[0] then
  begin
    Result := GEOIP_NODATA;
    Exit;
  end;
  RecordPointer := SeekOrg + (2 * FRecordLength - 1) * FDatabaseSegments[0];
  FInputFile.Seek(RecordPointer, soFromBeginning);
  FInputFile.Read(buf, FULL_RECORD_LENGTH);

  p := @buf[0];
  StrLen := 0;
  while (p[StrLen] <> #0) do
    Inc(StrLen);
  GeoIPOrg.Name := Copy(p, 0, StrLen);
  Result := GEOIP_SUCCESS;
end;

function TGeoIP._GetRegion(IPNum: Cardinal; var GeoIPRegion: TGeoIPRegion): TGeoIPResult;
var
   SeekRegion: Cardinal;
begin
  if (FDatabaseType <> GEOIP_REGION_EDITION_REV0) and (FDatabaseType <> GEOIP_REGION_EDITION_REV1) then
  begin
    Result := GEOIP_ERROR_DBTYPE;
    Exit;
  end;
  SeekRegion := SeekRecord(IPNum);
  if FDatabaseType = GEOIP_REGION_EDITION_REV0 then
  begin
    // Region Edition, pre June 2003
    Dec(SeekRegion, STATE_BEGIN_REV0);
    if SeekRegion >= 1000 then
    begin
      GeoIPRegion.CountryCode := 'US';
      GeoIPRegion.Region := AnsiString(Chr((SeekRegion - 1000) div 26 + 65) + Chr((SeekRegion - 1000) mod 26 + 65));
    end
    else
    begin
      GeoIPRegion.CountryCode := CountryCodes[SeekRegion];
      GeoIPRegion.Region := '';
    end;
  end
  else if FDatabaseType = GEOIP_REGION_EDITION_REV1 then
  begin
    // Region Edition, post June 2003
    Dec(SeekRegion, STATE_BEGIN_REV1);
    if SeekRegion < US_OFFSET then
    begin
      // Unknown
      GeoIPRegion.CountryCode := '';
      GeoIPRegion.Region := '';
    end
    else if SeekRegion < CANADA_OFFSET then
    begin
      // USA State
      GeoIPRegion.CountryCode := 'US';
      GeoIPRegion.Region := AnsiString(Chr((SeekRegion - US_OFFSET) div 26 + 65) + Chr((SeekRegion - US_OFFSET) mod 26 + 65));
    end
    else if SeekRegion < WORLD_OFFSET then
    begin
      // Canada Province
      GeoIPRegion.CountryCode := 'CA';
      GeoIPRegion.Region := AnsiString(Chr((SeekRegion - CANADA_OFFSET) div 26 + 65) + Chr((SeekRegion - CANADA_OFFSET) mod 26 + 65));
    end
    else
    begin
      // Not US or Canada
      GeoIPRegion.CountryCode := CountryCodes[(SeekRegion - WORLD_OFFSET) div FIPS_RANGE];
      GeoIPRegion.Region := '';
    end;
  end;
  Result := GEOIP_SUCCESS;
end;

function TGeoIP.AddrToNum(const IPAddr: ansistring): Cardinal;
var
   netlong: Cardinal;
   temp: PAnsiChar;
begin
temp := PAnsiChar(IPAddr);
  netlong := inet_addr(temp);
  if netlong <> INADDR_NONE then
    Result := ntohl(netlong)
  else
    Result := 0;
end;

function TGeoIP.GetCity(const IPAddr: ansistring; var GeoIPCity: TGeoIPCity): TGeoIPResult;
var
   IPNum: Cardinal;
begin
  IPNum := AddrToNum(IPAddr);
  if IPNum = 0 then
  begin
    Result := GEOIP_ERROR_IPADDR;
    Exit;
  end;
  Result := _GetCity(IPNum, GeoIPCity);
end;

function TGeoIP.GetCountry(const IPAddr: ansistring; var GeoIPCountry: TGeoIPCountry): TGeoIPResult;
var
   IPNum: Cardinal;
begin
  IPNum := AddrToNum(IPAddr);
  if IPNum = 0 then
  begin
    Result := GEOIP_ERROR_IPADDR;
    Exit;
  end;
  Result := _GetCountry(IPNum, GeoIPCountry);
end;

function TGeoIP.GetDatabaseInfo: string;
var
   i: Integer;
   delim: array[0..2] of Byte;
   HasStructureInfo: Boolean;
begin
  FDatabaseInfo := '';
  HasStructureInfo := False;
  FInputFile.Seek(-3, soFromEnd);
  for i:=0 to STRUCTURE_INFO_MAX_SIZE-1 do
  begin
    FInputFile.Read(delim, 3);
    if (delim[0] = 255) and (delim[1] = 255) and (delim[2] = 255) then
    begin
      HasStructureInfo := True;
      Break;
    end;
    FInputFile.Seek(-4, soFromCurrent);
  end;
  if HasStructureInfo then
    FInputFile.Seek(-3, soFromCurrent)
  else
    // no structure info, must be pre Sep 2002 database, go back to end
    FInputFile.Seek(-3, soFromEnd);
  for i:=0 to DATABASE_INFO_MAX_SIZE-1 do
  begin
    FInputFile.Read(delim, 3);
    if (delim[0] = 0) and (delim[1] = 0) and (delim[2] = 0) then
    begin
      SetLength(FDatabaseInfo, i);
      FInputFile.Read(PChar(FDatabaseInfo)^, i);
      Break;
    end;
    FInputFile.Seek(-4, soFromCurrent);
  end;
  Result := FDatabaseInfo;
end;

function TGeoIP.GetOrg(const IPAddr: ansistring; var GeoIPOrg: TGeoIPOrg): TGeoIPResult;
var
   IPNum: Cardinal;
begin
  IPNum := AddrToNum(IPAddr);
  if IPNum = 0 then
  begin
    Result := GEOIP_ERROR_IPADDR;
    Exit;
  end;
  Result := _GetOrg(IPNum, GeoIPOrg);
end;

function TGeoIP.GetRegion(const IPAddr: ansistring; var GeoIPRegion: TGeoIPRegion): TGeoIPResult;
var
   IPNum: Cardinal;
begin
  IPNum := AddrToNum(IPAddr);
  if IPNum = 0 then
  begin
    Result := GEOIP_ERROR_IPADDR;
    Exit;
  end;
  Result := _GetRegion(IPNum, GeoIPRegion);
end;

procedure TGeoIP.InitDBFile;
var
   i,j: Integer;
   delim: array[0..2] of Byte;
   buf: array[0..SEGMENT_RECORD_LENGTH-1] of Byte;
begin
  // default to GeoIP Country Edition
  FDatabaseType := GEOIP_COUNTRY_EDITION;
  FRecordLength := STANDARD_RECORD_LENGTH;
  FInputFile.Seek(-3, soFromEnd);
  for i:=0 to STRUCTURE_INFO_MAX_SIZE-1 do
  begin
    FInputFile.Read(delim, 3);
    if (delim[0] = 255) and (delim[1] = 255) and (delim[2] = 255) then
    begin
      FInputFile.Read(FDatabaseType, 1);
      if Byte(FDatabaseType) >= 106 then
      begin
        // Backward compatibility with databases from April 2003 and earlier
        Dec(FDatabaseType, 105);
      end;
      if FDatabaseType = GEOIP_REGION_EDITION_REV0 then
      begin
        // Region Edition, pre June 2003
        SetLength(FDatabaseSegments, 1);
        FDatabaseSegments[0] := STATE_BEGIN_REV0;
      end
      else if FDatabaseType = GEOIP_REGION_EDITION_REV1 then
      begin
        // Region Edition, post June 2003
        SetLength(FDatabaseSegments, 1);
        FDatabaseSegments[0] := STATE_BEGIN_REV1;
      end
      else if (FDatabaseType = GEOIP_CITY_EDITION_REV0) or
              (FDatabaseType = GEOIP_CITY_EDITION_REV1) or
              (FDatabaseType = GEOIP_ORG_EDITION) or
              (FDatabaseType = GEOIP_ISP_EDITION) or
              (FDatabaseType = GEOIP_ASNUM_EDITION) then
      begin
        // City/Org Editions have two segments, read offset of second segment
        SetLength(FDatabaseSegments, 1);
        FDatabaseSegments[0] := 0;
        FInputFile.Read(buf, SEGMENT_RECORD_LENGTH);
        for j:=0 to SEGMENT_RECORD_LENGTH-1 do
        begin
          Inc(FDatabaseSegments[0], Integer(buf[j]) shl (j*8));
        end;
        if (FDatabaseType = GEOIP_ORG_EDITION) or
           (FDatabaseType = GEOIP_ISP_EDITION) then
             FRecordLength := ORG_RECORD_LENGTH;
      end;
      Break;
    end
    else
    begin
      FInputFile.Seek(-4, soFromCurrent);
    end;
  end;
  if (FDatabaseType = GEOIP_COUNTRY_EDITION) or
     (FDatabaseType = GEOIP_PROXY_EDITION) then
  begin
    SetLength(FDatabaseSegments, 1);
    FDatabaseSegments[0] := COUNTRY_BEGIN;
  end;
end;

procedure TGeoIP.InitRegions;
var
  f,t,loop: Integer;
begin
	slRegions := TStringList.Create;

  f := Low(RegionNames);
  t := High(RegionNames);

  for loop := f to t do
  begin
    slRegions.Add(string(RegionNames[loop]));
  end;
end;

function TGeoIP.SeekRecord(IPNum: Cardinal): Cardinal;
var
   depth: Cardinal;
   offset: Cardinal;
   i,j: Cardinal;
   x: array[0..1] of Cardinal;
   y: Cardinal;
   buf: array[0..2*MAX_RECORD_LENGTH-1] of Byte;
begin
  offset := 0;
  for depth:=31 downto 0 do
  begin
    FInputFile.Seek(2 * FRecordLength * offset, soFromBeginning);
    FInputFile.Read(buf, 2 * FRecordLength);
    for i:=0 to 1 do
    begin
      x[i] := 0;
      for j:=0 to FRecordLength-1 do
      begin
        y := buf[i*FRecordLength+j];
        x[i] := x[i] + (y shl (j*8));
      end;
    end;
    if (IPNum and (1 shl depth)) <> 0 then
    begin
      if x[1] >= FDatabaseSegments[0] then
      begin
        Result := x[1];
        Exit;
      end
      else
      begin
        Offset := x[1];
      end;
    end
    else
    begin
      if x[0] >= FDatabaseSegments[0] then
      begin
        Result := x[0];
        Exit;
      end
      else
      begin
        Offset := x[0];
      end;
    end;
  end;
  Result := 0;
end;

end.

