From 7c09710cbf634c8e9d429c086fef700a8f75cb24 Mon Sep 17 00:00:00 2001 From: skodak Date: Wed, 2 Jan 2008 16:47:57 +0000 Subject: [PATCH] MDL-12796 iplookup rewrite --- admin/settings/location.php | 10 +- course/lib.php | 4 +- iplookup/README.txt | 31 +- iplookup/earth.jpeg | Bin 0 -> 60163 bytes iplookup/hostip/lib.php | 22 - iplookup/index.php | 176 +- iplookup/ipatlas/COPYING | 340 -- iplookup/ipatlas/MOODLECHANGES | 7 - iplookup/ipatlas/README | 60 - iplookup/ipatlas/README.MOODLE.txt | 4 - iplookup/ipatlas/countries.txt | 243 - iplookup/ipatlas/earth_620.jpg | Bin 42938 -> 0 bytes iplookup/ipatlas/footer.inc | 4 - iplookup/ipatlas/hr.gif | Bin 35 -> 0 bytes iplookup/ipatlas/ip-atlas.css | 5 - iplookup/ipatlas/ip-atlas_prefs.php | 246 - iplookup/ipatlas/languages/messages.blank.inc | 182 - iplookup/ipatlas/languages/messages.it.inc | 185 - iplookup/ipatlas/lib.php | 13 - iplookup/ipatlas/plot.inc | 398 -- iplookup/ipatlas/plot.php | 139 - iplookup/ipatlas/plotconf.inc | 61 - iplookup/ipatlas/plotimage.php | 91 - iplookup/ipatlas/reddot.gif | Bin 53 -> 0 bytes iplookup/ipatlas/translate.inc | 14 - iplookup/ipatlas/yellowdot.gif | Bin 53 -> 0 bytes iplookup/marker.gif | Bin 0 -> 649 bytes lang/en_utf8/admin.php | 10 + lang/en_utf8/error.php | 3 + lib/geoip/ChangeLog.htm | 44 + lib/geoip/README.htm | 43 + lib/geoip/geoip.inc | 498 ++ lib/geoip/geoipcity.inc | 205 + lib/geoip/geoipregionvars.php | 4119 +++++++++++++++++ theme/standard/styles_fonts.css | 8 + theme/standard/styles_layout.css | 8 + 36 files changed, 5129 insertions(+), 2044 deletions(-) create mode 100644 iplookup/earth.jpeg delete mode 100644 iplookup/hostip/lib.php delete mode 100644 iplookup/ipatlas/COPYING delete mode 100644 iplookup/ipatlas/MOODLECHANGES delete mode 100644 iplookup/ipatlas/README delete mode 100644 iplookup/ipatlas/README.MOODLE.txt delete mode 100644 iplookup/ipatlas/countries.txt delete mode 100644 iplookup/ipatlas/earth_620.jpg delete mode 100644 iplookup/ipatlas/footer.inc delete mode 100644 iplookup/ipatlas/hr.gif delete mode 100644 iplookup/ipatlas/ip-atlas.css delete mode 100644 iplookup/ipatlas/ip-atlas_prefs.php delete mode 100644 iplookup/ipatlas/languages/messages.blank.inc delete mode 100644 iplookup/ipatlas/languages/messages.it.inc delete mode 100644 iplookup/ipatlas/lib.php delete mode 100644 iplookup/ipatlas/plot.inc delete mode 100644 iplookup/ipatlas/plot.php delete mode 100644 iplookup/ipatlas/plotconf.inc delete mode 100644 iplookup/ipatlas/plotimage.php delete mode 100644 iplookup/ipatlas/reddot.gif delete mode 100644 iplookup/ipatlas/translate.inc delete mode 100644 iplookup/ipatlas/yellowdot.gif create mode 100644 iplookup/marker.gif create mode 100644 lib/geoip/ChangeLog.htm create mode 100644 lib/geoip/README.htm create mode 100644 lib/geoip/geoip.inc create mode 100644 lib/geoip/geoipcity.inc create mode 100644 lib/geoip/geoipregionvars.php diff --git a/admin/settings/location.php b/admin/settings/location.php index 61fa0712084..1b91a210f23 100644 --- a/admin/settings/location.php +++ b/admin/settings/location.php @@ -13,13 +13,9 @@ if ($hassiteconfig) { // speedup for non-admins, add all caps used on this page $options[0] = get_string('choose') .'...'; $temp->add(new admin_setting_configselect('country', get_string('country', 'admin'), get_string('configcountry', 'admin'), 0, $options)); - $iplookups = array(); - if ($plugins = get_list_of_plugins('iplookup')) { - foreach ($plugins as $plugin) { - $iplookups[$plugin] = $plugin; - } - } - $temp->add(new admin_setting_configselect('iplookup', get_string('iplookup', 'admin'), get_string('configiplookup', 'admin'), 'hostip', $iplookups)); + $temp->add(new admin_setting_heading('iplookup', get_string('iplookup', 'admin'), get_string('iplookupinfo', 'admin'))); + $temp->add(new admin_setting_configfile('geoipfile', get_string('geoipfile', 'admin'), get_string('configgeoipfile', 'admin', $CFG->dataroot.'/geoip/'), $CFG->dataroot.'/geoip/GeoLiteCity.dat')); + $temp->add(new admin_setting_configtext('googlemapkey', get_string('googlemapkey', 'admin'), get_string('configgooglemapkey', 'admin', $CFG->wwwroot), '')); $ADMIN->add('location', $temp); diff --git a/course/lib.php b/course/lib.php index 67c4662e733..250fb31577d 100644 --- a/course/lib.php +++ b/course/lib.php @@ -530,14 +530,14 @@ function print_log($course, $user=0, $date=0, $order="l.time ASC", $page=0, $per echo "".userdate($log->time, '%a'). ' '.userdate($log->time, $strftimedatetime)."\n"; echo "\n"; - link_to_popup_window("/iplookup/index.php?ip=$log->ip&user=$log->userid", 'iplookup',$log->ip, 400, 700); + link_to_popup_window("/iplookup/index.php?ip=$log->ip&user=$log->userid", 'iplookup',$log->ip, 440, 700); echo "\n"; $fullname = fullname($log, has_capability('moodle/site:viewfullnames', get_context_instance(CONTEXT_COURSE, $course->id))); echo "\n"; echo " wwwroot/user/view.php?id={$log->userid}&course={$log->course}\">$fullname\n"; echo "\n"; echo "\n"; - link_to_popup_window( make_log_url($log->module,$log->url), 'fromloglive',"$log->module $log->action", 400, 600); + link_to_popup_window( make_log_url($log->module,$log->url), 'fromloglive',"$log->module $log->action", 440, 700); echo "\n";; echo "{$log->info}\n"; echo "\n"; diff --git a/iplookup/README.txt b/iplookup/README.txt index 2a80b38db57..eb92351876e 100644 --- a/iplookup/README.txt +++ b/iplookup/README.txt @@ -1,18 +1,25 @@ -iplookup --------- +iplookup info +------------- -These plugins will show you something about an IP address. +1/ old plugins are not supported anymore -Moodle scripts call the index.php in this directory like this: - - /iplookup/index.php?ip=222.222.222.222&user=1 +2/ general information in admin settings "Site Administration/Location/Location settings" -Both parameters are optional, they default to the current user. +3/ technical info: -index.php loads the lib.php from a specified subdirectory -to actually display some sort of map or description. +xplanet commadline + xplanet -projection rectangular -latitude 0.00 -longitude 0.00 -num_times 1 -geometry 620x310 -output earth.jpeg -quality 90 -config config.txt -The current plugin is selected using $CFG->iplookup. +config.txt + [earth] + shade=100 -Cheers, -Martin +original Earth map from: + http://www.radcyberzine.com/xglobe/ + +marker.gif + custom made in Inkscape + +Petr Skoda (skodak), January 2008 + +$Id$ \ No newline at end of file diff --git a/iplookup/earth.jpeg b/iplookup/earth.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..411d59b96e38dd9a883d9e6c87d6118fee36fbc0 GIT binary patch literal 60163 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, $user->country", 'center', '4'); - } - } - - echo 'Search results: '; - - echo ''; - - close_window_button(); - print_footer('none'); -} - -?> diff --git a/iplookup/index.php b/iplookup/index.php index 68bd95fb97f..7e75bd80df3 100644 --- a/iplookup/index.php +++ b/iplookup/index.php @@ -1,19 +1,177 @@ libdir.'/filelib.php'); +require_once($CFG->libdir.'/geoip/geoipcity.inc'); - require_login(); +require_login(); - $ip = optional_param('ip', getremoteaddr()); - $user = optional_param('user', $USER->id); +$ip = optional_param('ip', getremoteaddr(), PARAM_HOST); +$user = optional_param('user', $USER->id, PARAM_INT); - if (empty($CFG->iplookup)) { - set_config('iplookup', 'hostip'); +if (isset($CFG->iplookup)) { + //clean up of old settings + set_config('iplookup', NULL); +} + +$info = array($ip); +$note = array(); + +if (!preg_match('/(^\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/', $ip, $match)) { + print_error('invalidipformat', 'error'); +} + +if ($match[1] > 255 or $match[2] > 255 or $match[3] > 255 or $match[4] > 255) { + print_error('invalidipformat', 'error'); +} + +if ($match[1] == '127' or $match[1] == '10' or ($match[1] == '172' and $match[2] >= '16' and $match[2] <= '31') or ($match[1] == '192' and $match[2] == '168')) { + print_error('iplookupprivate', 'error'); +} + +if ($user) { + if ($user = get_record('user', 'id', $user, 'deleted', 0)) { + $info[] = fullname($user); + } +} + +if (!empty($CFG->geoipfile) and file_exists($CFG->geoipfile)) { + $gi = geoip_open($CFG->geoipfile, GEOIP_STANDARD); + $location = geoip_record_by_addr($gi, $ip); + geoip_close($gi); + + if (empty($location)) { + print_error('iplookupfailed', 'error', '', $ip); + } + if (!empty($location->city)) { + $info[] = $location->city; } - require("$CFG->dirroot/iplookup/$CFG->iplookup/lib.php"); + if (!empty($location->country_code)) { + $countries = get_list_of_countries(); + if (isset($countries[$location->country_code])) { + // prefer our localized country names + $info[] = $countries[$location->country_code]; + } else { + $info[] = $location->country_name; + } + } + $longitude = $location->longitude; + $latitude = $location->latitude; + $note[] = get_string('iplookupmaxmindnote', 'admin'); - iplookup_display($ip, $user); +} else { + $ipdata = download_file_content('http://netgeo.caida.org/perl/netgeo.cgi?target='.$ip); + if ($ipdata === false) { + error('Can not connect to NetGeo server at http://netgeo.caida.org, please check proxy settings or better install MaxMind GeoLite City data file.'); + } + $matches = null; + if (!preg_match('/LAT:\s*(-?\d+\.\d+)/s', $ipdata, $matches)) { + print_error('iplookupfailed', 'error', '', $ip); + } + $latitude = (float)$matches[1]; + if (!preg_match('/LONG:\s*(-?\d+\.\d+)/s', $ipdata, $matches)) { + print_error('iplookupfailed', 'error', '', $ip); + } + $longitude = (float)$matches[1]; + + if (preg_match('/CITY:\s*([^<]*)/', $ipdata, $matches)) { + if (!empty($matches[1])) { + $info[] = s($matches[1]); + } + } + + if (preg_match('/COUNTRY:\s*([^<]*)/', $ipdata, $matches)) { + if (!empty($matches[1])) { + $countrycode = $matches[1]; + $countries = get_list_of_countries(); + if (isset($countries[$countrycode])) { + // prefer our localized country names + $info[] = $countries[$countrycode]; + } else { + $info[] = $countrycode; + } + } + } + $note[] = get_string('iplookupnetgeonote', 'admin'); +} + + + +if (empty($CFG->googlemapkey)) { + $info = implode(' - ', $info); + $note = implode('
', $note); + + $imgwidth = 620; + $imgheight = 310; + $dotwidth = 18; + $dotheight = 30; + + $dx = round((($longitude + 180) * ($imgwidth / 360)) - $imgwidth - $dotwidth/2); + $dy = round((($latitude + 90) * ($imgheight / 180))); + + print_header(get_string('iplookup', 'admin').': '.$info, $info); + + echo '
'; + echo ''; + echo ''; + echo '
'; + echo '
'.$note.'
'; + print_footer('empty'); + +} else { + $info = implode(' - ', $info); + $note = implode('
', $note); + + $meta = ' + + +'; + + print_header(get_string('iplookup', 'admin').': '.$info, $info, '', '', $meta, false, ' ', '', false, 'onload="load()" onunload="GUnload()"'); + + echo '
'; + echo '
'.$note.'
'; + print_footer('empty'); +} ?> diff --git a/iplookup/ipatlas/COPYING b/iplookup/ipatlas/COPYING deleted file mode 100644 index d60c31a97a5..00000000000 --- a/iplookup/ipatlas/COPYING +++ /dev/null @@ -1,340 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program 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 program 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 program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/iplookup/ipatlas/MOODLECHANGES b/iplookup/ipatlas/MOODLECHANGES deleted file mode 100644 index 1bba99f209f..00000000000 --- a/iplookup/ipatlas/MOODLECHANGES +++ /dev/null @@ -1,7 +0,0 @@ -To make this program fit into Moodle, I: - - - deleted the black and white earth image - - modified plotconf.inc slightly to use Moodle configs - - modified plot.php slightly to use Moodle's background colour - -Martin Dougiamas, 26/8/2002 diff --git a/iplookup/ipatlas/README b/iplookup/ipatlas/README deleted file mode 100644 index 1487d259441..00000000000 --- a/iplookup/ipatlas/README +++ /dev/null @@ -1,60 +0,0 @@ -IP-Atlas version 1.0 --=----=- - -Description ------------ -This script uses NetGeo to plot a host on the globe. - -Requirements ------------- -PHP 4 and GD (Optional). - -The GD library is available at http://www.boutell.com/gd/ and PHP is at -http://www.php.net/ - -Installation ------------- -Put these files somewhere on your webserver, and point your browser to plot.php - -Note: You can symlink "ln -s plot.php index.php" if you need to. If you -have any problems running it, send an email to ivan@xpenguin.com - -Configuration -------------- -All options can be edited in plotconf.inc. - -If you want to integrate IP-Atlas into your website, open up plot.php and -ip-atlas_prefs.php and edit the parts where it starts writing the html -(find for "") and where it ends (). You should replace theses -with your site template headers/footers. - -You can create a new language file for IP-Atlas if you follow the directions -inside any language file in the languages/ directory. - -If you create a new language file, please email it to ivan@xpenguin.com so -it can be included in the next version. - -Bugs ----- -1. The famous windows bug (also happens in other cirumstances) - -If nothing appears when running the script on windows, open up plotconf.inc -and change the $trygd variable to "0". - -Contributions -------------- -Thanks to Sten Kalenda (sten@ipjam.com) for adding security features and -cleaning up the code. - -Thanks to Armin Kunaschik (Armin.Kunaschik@varetis.de) for his proxy patch -that enables this program to run behind a firewall. - -Thanks to Daniel Quinlan (daniel@chaosengine.net) for a patch that fixes -many problems on windows. - -Also thanks to many users for reporting bugs. - -Copyright ---------- -IP-Atlas is Copyright (c) 2002 Ivan Kozik, and can be redistributed under -the GPL. diff --git a/iplookup/ipatlas/README.MOODLE.txt b/iplookup/ipatlas/README.MOODLE.txt deleted file mode 100644 index 31e5835bcea..00000000000 --- a/iplookup/ipatlas/README.MOODLE.txt +++ /dev/null @@ -1,4 +0,0 @@ -The database for this is REALLY old now and this service is -next to useless. - -Included here for backward compatibility. diff --git a/iplookup/ipatlas/countries.txt b/iplookup/ipatlas/countries.txt deleted file mode 100644 index d827611489f..00000000000 --- a/iplookup/ipatlas/countries.txt +++ /dev/null @@ -1,243 +0,0 @@ -AD Andorra -AE United Arab Emirates -AF Afghanistan -AG Antigua and Barbuda -AI Anguilla -AL Albania -AM Armenia -AN Netherlands Antilles -AO Angola -AQ Antarctica -AR Argentina -AS American Samoa -AT Austria -AU Australia -AW Aruba -AZ Azerbaijan -BA Bosnia and Herzegovina -BB Barbados -BD Bangladesh -BE Belgium -BF Burkina Faso -BG Bulgaria -BH Bahrain -BI Burundi -BJ Benin -BM Bermuda -BN Brunei Darussalam -BO Bolivia -BR Brazil -BS Bahamas -BT Bhutan -BV Bouvet Island -BW Botswana -BY Belarus -BZ Belize -CA Canada -CC Cocos (Keeling) Islands -CF Central African Republic -CG Congo -CH Switzerland -CI Cote D'Ivoire (Ivory Coast) -CK Cook Islands -CL Chile -CM Cameroon -CN China -CO Colombia -CR Costa Rica -CS Czechoslovakia (former) -CU Cuba -CV Cape Verde -CX Christmas Island -CY Cyprus -CZ Czech Republic -DE Germany -DJ Djibouti -DK Denmark -DM Dominica -DO Dominican Republic -DZ Algeria -EC Ecuador -EE Estonia -EG Egypt -EH Western Sahara -ER Eritrea -ES Spain -ET Ethiopia -FI Finland -FJ Fiji -FK Falkland Islands (Malvinas) -FM Micronesia -FO Faroe Islands -FR France -FX France, Metropolitan -GA Gabon -GB Great Britain (UK) -GD Grenada -GE Georgia -GF French Guiana -GH Ghana -GI Gibraltar -GL Greenland -GM Gambia -GN Guinea -GP Guadeloupe -GQ Equatorial Guinea -GR Greece -GS S. Georgia and S. Sandwich Isls. -GT Guatemala -GU Guam -GW Guinea-Bissau -GY Guyana -HK Hong Kong -HM Heard and McDonald Islands -HN Honduras -HR Croatia (Hrvatska) -HT Haiti -HU Hungary -ID Indonesia -IE Ireland -IL Israel -IN India -IO British Indian Ocean Territory -IQ Iraq -IR Iran -IS Iceland -IT Italy -JM Jamaica -JO Jordan -JP Japan -KE Kenya -KG Kyrgyzstan -KH Cambodia -KI Kiribati -KM Comoros -KN Saint Kitts and Nevis -KP Korea (North) -KR Korea (South) -KW Kuwait -KY Cayman Islands -KZ Kazakhstan -LA Laos -LB Lebanon -LC Saint Lucia -LI Liechtenstein -LK Sri Lanka -LR Liberia -LS Lesotho -LT Lithuania -LU Luxembourg -LV Latvia -LY Libya -MA Morocco -MC Monaco -MD Moldova -MG Madagascar -MH Marshall Islands -MK Macedonia -ML Mali -MM Myanmar -MN Mongolia -MO Macau -MP Northern Mariana Islands -MQ Martinique -MR Mauritania -MS Montserrat -MT Malta -MU Mauritius -MV Maldives -MW Malawi -MX Mexico -MY Malaysia -MZ Mozambique -NA Namibia -NC New Caledonia -NE Niger -NF Norfolk Island -NG Nigeria -NI Nicaragua -NL Netherlands -NO Norway -NP Nepal -NR Nauru -NT Neutral Zone -NU Niue -NZ New Zealand (Aotearoa) -OM Oman -PA Panama -PE Peru -PF French Polynesia -PG Papua New Guinea -PH Philippines -PK Pakistan -PL Poland -PM St. Pierre and Miquelon -PN Pitcairn -PR Puerto Rico -PT Portugal -PW Palau -PY Paraguay -QA Qatar -RE Reunion -RO Romania -RU Russian Federation -RW Rwanda -SA Saudi Arabia -Sb Solomon Islands -SC Seychelles -SD Sudan -SE Sweden -SG Singapore -SH St. Helena -SI Slovenia -SJ Svalbard and Jan Mayen Islands -SK Slovak Republic -SL Sierra Leone -SM San Marino -SN Senegal -SO Somalia -SR Suriname -ST Sao Tome and Principe -SU USSR (former) -SV El Salvador -SY Syria -SZ Swaziland -TC Turks and Caicos Islands -TD Chad -TF French Southern Territories -TG Togo -TH Thailand -TJ Tajikistan -TK Tokelau -TM Turkmenistan -TN Tunisia -TO Tonga -TP East Timor -TR Turkey -TT Trinidad and Tobago -TV Tuvalu -TW Taiwan -TZ Tanzania -UA Ukraine -UG Uganda -UK United Kingdom -UM US Minor Outlying Islands -US United States -UY Uruguay -UZ Uzbekistan -VA Vatican City State (Holy See) -VC Saint Vincent and the Grenadines -VE Venezuela -VG Virgin Islands (British) -VI Virgin Islands (U.S.) -VN Viet Nam -VU Vanuatu -WF Wallis and Futuna Islands -WS Samoa -YE Yemen -YT Mayotte -YU Yugoslavia -ZA South Africa -ZM Zambia -ZR Zaire -ZW Zimbabwe diff --git a/iplookup/ipatlas/earth_620.jpg b/iplookup/ipatlas/earth_620.jpg deleted file mode 100644 index fcb2743ccccf0bdb668929e044e382d165538436..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42938 zcmb4qRa6|$6Yipm6Wrb1-N_FR?oN;p+#P}jU1V`x+}$<7-8HzoyUXSObYJevtvP2N zx~jWs&Y7OBs_&bR#g9$E7kOzpX#f-y6hQX#0(`s!@V+`*e0Q}lC-<;&{YkFz(}G+^ zPEqA!1@ILB2LlTW3j_CggM)*E2cjSVKLs5b84(2o9TO7+9RmXkmlzKVn-B*B1D^t) zkc5Pcj0_8plA4l~nwXS~^nZ&$eNF|!1JMu=&`7Z{uu1>F<)aILfdIt|Z3_cM34q3c zg290L=mU@d007|s9^?NC6f_L%XOswtpK8S~0B9%}80i1S4-XB5hXsCW0k9Zwm=qim z@K~zfDV+krKy1!j$=YrNDz)jYOB_>NYOb&9&R2Lr@p(Nn_%z)ANt>Cwh9uN|E=L3f zfQI>hdizvzVE~|^pga?+3R@`eE|A_etK1SO0F#lb}vk4)dKYgKv0aLz!AsZjNm9XWX^}_a{AritAk_q zmS?Z#LXt=wt5igj#RcIO!UtgVu7r0ANX(Z3O$`nJA}Kk&OcVL3FmX*Hfn2-aTFdo) z%H8?9mw_rR{n+JLUk+ouHi=Q@_}Cd@lAPQNI|X}*9XZ9ErD$ByS(-&|XZXHB!;3uP z6yU*@<@b1zHmt~)_i>kutd|YOHnN<$swos3==bmQ^m5*I5jbSYp!$;<67D(ud&!S& zDPKvj-?c-(yeC1GZPoyLFo20j5I+EnB7JeH$u?)=xF3KD!K=VHM=|SInzbp%4?w0a zFfWsAm+5E8DLhh(FzAbaYKb;PvT1ncOY89nyk9H++mTN=eU8lzIe`rI&FI0C8jUJB zT7515#BA(!`49_pfvIBI*#`jAB=Afjv*tVdw)O zZ$e!mA0jaLi%Bm6Hc*@#;APAPe87J0wIy=|!HdrGWWmqkUQVFDC0u%MZb#!vD)%fs zY2}@0Po1sJ9H`g*PM}Gan|C)cKcEAlS+m@CZjJJXG~-<|Cf$4~KWELcWCYS3DLjWi zp;nYBcrE##W*-*?*0xho0tZL3XI`zg?4;Fkit-6tn2{9PgfadJ)kbEyl&^%V`KVhs zR)X7atn&ezJAealr16|gmz@Pg&>p|1f$!WDBFB)1vtMBG{*}(_V$d?O+-0%*N(wCd z`xoJkyJK%8`;&e(X^7g<^r&A=YlLN=YT#0VIV@=wUg`79dl|hC{!-{J=t<3Kz|o49 zDFo2q40VnwnKCGQP9FTVBi=+s9%`A28I98&f`*0&AQg1a6jnqC+PLv1dE`SG`i733 zYi?BL{#RMpQ8YL`evXzUA1<6O(?xC=SbZV4aKWNSo4mfEC%r1J{OIFOc4Jm0l%5l3 zJyVZBdWi`mU2Q+2Pkl8DQ|t_+N^cS{{b!mlsT+Icbd#^zS4>>9Le59`8kcTyjfA10IPBQ-GhiGdxPxoWeV?2)Xt4I~aFLmBJcqT|r@WzRr zoIjSEjgW<4RfI@GyLaR3*Hc97x6-(nYN8t%=k@iX_%UUI?T+IQK=ebctQHX-Sp4{g zp85@5v@w6ypYT?tY&mHTj0+<~?v8vG#~`fsUw&ynYk|9@JUBQKE<%9WCSC6r*CXL( z98XXIO4j`~+l^kTKdvxtZ3J37+Uz0~);)51%!0yN*oYuzb{4&W$hb>{7``uBfTg~A z_T`Ga|Fczu7@;ppSo9B>L3~{255T=@<16q_?7QqSAoEg@ALOU#y!AM{8NpGn1r~L8 z&VElPd$G85ilhHWEpcqS3-h4IJGv=y>Q8^%KEyw{p40-l8_#*wx&)g5!_Ub0->gSO z9}Cxhu|4uG1tjP<+54a8#~XhDb_sbq10I}S^Yd`&if;-q{gKmRp*t?r zqwh8tzt~(#41NI8?mhs|UY?(G@@@aZYsz-ME{q(9~m(um;)&E*>h*?HmrX}WX@beo((y$UR z@UPeVPfy8SJP*Io2tV#Sg$(Dw$Kd#`E`!-gd#KRiSj9AA@>3j_<-p z10oNkcndh{cXe-f9pD8ZG#g%RH^OObY0?P-V?e1nZ@YH&HPAB zfE2~c0ZYr$gcb5in3sRo1#o&O1(W^x+Idy|+cra|I^{7vI;A(fe*C#x}p1Qs$Wa(xra32`_V0OB4GqndYqytAwUU7pYBa z9AITAM}M=-SydDEjijN~Yna1vx$zbg;RS+2U1$1<*fQC|G3K(~5dOh)YhiEPB7&%; za?k@HP)qIU%k!}1zO7BW$>JL`yYfsyVTWCG9`JU%Z2L0nwI0(Jl(v~DUf^R6u|A&d zeGaGOy~$m9r`beL9mia5GYKK0`99tt9&7gQ+8sJY%t;CU2OE2$-PC5DJ7(trzq8^5 z`^KTBln4e5W25;voV?6ozwhL8?Jmc_Jlsv*7Nd4}!s(N{Goo4V>)2vyVoKQy`2;Hu z79U-o3q&KFjT_V>fgWRsx01!0=)F{S!Y9X_^x$VU$?jdu_5vksxW1?zJIcUTaj89M z2ikGj*J47;avhE;$WB4aeZ4F92wI9+!m<(u4r2Q!V#vh>RBg;uIH>q9knr#2+`=qT5dlo>|=%P8@yl8#^1_|iZf1a+D6?04*<3lsbR4oofkaN2YNFsjk2zz(P{%sM+2r!KEHL%$*yw+M9}5IEPD<7n4*aMkJ8?+ zZEEh+Q#Vo#uP{dtdU~f?&B=wFVT=Q?MthtN8#QIT(@|{kb;0T}qV->Aee55bWzt;WW0yhW zB(>vr-pe1E$VQ&|5=gt%d{@bLr^*fwWPv2viD5ig{|;@aSIJlN z8P_vb0%59>6>Gv0*L4z_pQ_RlT_&8~J|+;Ce&?0!J~q6^6{FBm{e_KdJj~)O+l0yn z3hjM_hXVo8MsvsEV!9qFta(XJRfFbB?+<{=6@082GS65P#`ic?kJ{U#%$ZYRxWLV{1Veo333_x*+IcPMZ^h8;`*K!xK>N#CaC&voTe zU27oS2BieCQ-p3%sNIwBPV2A$75{#%&s7Rjb@!j|zm#grY?fE26N;?ZF-LR>&c!iJ zHh&Kr+>?WXAvrUzLRF&qKfCvuAm=bmM=VtYJsgJ!lfdF{|HK+PE?w4oY3ASmSW(f( z^jJm>v|(E_elI*IAT(x&l+9h*FXshR{_lc*qRYxj0JYlkLnR*}K6U}$x|gzGE} zb>8;2zDFz>0!Pp{#i3nz<0Fp(R&cqe(ng=^VRXsUp8HBaTgL7e-W?mVV0-qFs5qAZ zFP=#^RQu%>HFdTS%0NsHzG>>ZhLH-SAaD&V6I1|i4B{qMWM)%YHMNKli_-WH_8A?MrwgWzf6efx|_s-7|ZYa_~xNDR^{2U6#SRGRjAC4(1X9!O&%Pt zzZg8re-g(F!E2pi=@6lAi)m@nKB0*Gsc#j;Ocp{e{F@4xu+e0bef;@0#o+Y~%GX}8 z6!vz>JX97vMH9u&4-_jh1c?%sbdT}i>Zt$J}?$OYq-Er_?g1K za*S?`U)ENR4TNyb3X|0q8t^t38Rkzs+}GPdk)(pEZFwDKj39UTM`kne%-&0yBh1gN z_4<8z+~%4_(ACyI6y?_>-V{#)jig@%UVkpwNmZqk_p>|?Kr=^ODNqJ(h{%$>>|7i= zpgd+s{WH;O_#>4<+)J@S{#1JKcJ;NlahBU`lsIy__5%>P0)GC?gF->p?r#syK1k)) zFZZH}guS*!h5<$vM!%hyY;r5j0QlA-YC`6 zMrc8)4+kY#q9Vv9U;2;PSB%(BG~dQ%pL55B@{OdvHT1C78U$S+^UJW zqbREku{M=}S!)E{db4p9sc=}ocMy@G2+L+b(}K&N2oWa;$7~JHq(!{+WJ=fFAkVDw zZ_DhlxuW}9S!%Qv=+xw&a~K`wFLRdCrXCz(T(Z}4hrfEF$n%1!ISz~WB$Q^mo$hid z$PefuweZ?^U)1sp&g$;~b$9Ae?fDe*v8_%-=`S$1st-H4%8h`Jf|-b5@*eSn_?Ax8q( zs8vI=VwaFyrshi>_clJ4@ZPee6oyDxeLGGm6c&zwvDETC{6OT_nic3}I>vfgAt-cZ zucmuIT*Q-GCqHkT15JW^O7xM&GvigZk8HU>x%8N8zzlM2r2+cB;&D^rJClgnEj}y^ zU}R;uo~B`7#UhJ&e`YCUqci-&L9w0erYJA2ev`uLk{L?<_B_|_$BMuLcb<1%3c(P} z&Mw4mTRkjd5#??S%UKqsx~q8KwPXyj?|5We-2U6Dy;!YNwa>5f!&zCpU_WMm`iXkrd0?YVgZSdnjo%1?BIgf`7I>uq+Mc@zyI&`h{{h1qH_pOhi_q=X9* zlm0iI*s0jPfo%C$mc;4If^TSCmo;WD>i%hInaQmg_MS*x{_=hVsmY)bjUDn4O_v*T zjr>ZFZn{uTgTD%7@Sgdamoa7br)Qg%?=&re20M%37IZMqD!0Sn2I?p_oyJVHU9k%1 z^gvbG{bS%@qoaV`@&%&Ecw2zDdfec}$xMbJsUyBuc&-xg=|wC2*lF^PJ0#iG*KE&k z((sTB^b79_ZduoAISRR$48_j8i`ebt-ObNsM-gdynW$3XTd1jkmN`oCu8R?E%&2Ok z-~A1aDbl&j3i#%>WFt9Yn@bj)Bz%4#W;>VB)w-%^?Oa9dC6eIrn6Oon^*y7njr2hb zA(@AcbWaB>?%6#+{`vluQw-z3v7Fr&8QxDCoi-<+=Ec zKdbbX`sebzPsXo!b4F}Cr1FLkd!E$KCr5+FW#wKyibiVxmKHVb^o+WG$HN@=YH2eSdNX zF0&0nxU?#6agr{g&V$CE3^^@+ARukXG{zQpj`H|f!IwlchJ{%z7$J zr2C8FKQ;H+R3i3Ay|DORx;RXT3C-RO`A zs!#Pp)J=J7vQMm+#6dGwVVcLPlaKE$T{afq<^7Af3gZ2^O?3M?zY4s6gtpj3zMZ>1 zfwV!frPw9kj(?zVk<1j$sS7GYU*c=wZ&`G*7C!LLchdweQPwl>$bx()BUXAHS z`h|TQPqRe*UB^}!MvfpZ&;i6*8QxFtsfS4(<>yPEh4kvn^P9EJ$?r2=%1L3&29q0u2&QCDmpT_G@@JL-C}JV?09g-u}{ zsnsv9b>ur`)n7R=pi3IQ{{SRZBVG-@k>D9*@hFmVRCxYwpDj>$zIz@Jylq4y?=qk&OUzhMWK5j`D+>GvA}ssSI3BdaUp?ISO4Zzmpf+0 zR4o)jB>4(-VenzHdSM_!E~*dCtQp4b*gFL6R-9FaWC}m%d~1VOO@2Q;l#J)Ebf=M? z6^1z)M^}J}yV(nwChLru1# z76%ag82HsGUlaQ+dGptIeQ(Q7Iv$0gs>7*b-g1vO60*w&J$>Cx8-IMmBdsE}3wt|r zM(1BFW$jb7#Mc5Z3m<^~>YB(dya1i6J8}yYm;i|g)>nWE;x*L0-v1bAS8Z_gY#DjG!muB&R&>37 zR{4!yM*6YFkt?%CO?F41N_s)HFPb*jky3VoU|Rk+!47ro!JBox%9V7mdEN5z^6KhH z&hJ$DcKl3lG#RqiawnhGPDxz3?V#47mB-JnRJ~_}es2m^Q~LC&M@yEP1pTT$+Aiy= z9n7&8tcD*^7b*J{UKs8C?H}hEx0ubZ*kq~j7KdbPEz-OP{0EeE?$1?V+N|$1iSb6( zFGK0n&72J(B>nfDJ$S@une;;wauxHh#$~@Oz6U+7E)V{}ARdFIh+&sLYY*i_m_S!b zt>kx|arPiPwHz)V$b;n=WKC|u!8gjrcRR7qJeS5wzZujrAlh*I?e(5dX9cCYCh z(6OwWQZV(An`(5^l0satCph_?;zl7)wjh)AgN1dTdF~9MO3q$+-htcV{S7pl79^L( zj8gRpnXg*QN}ZM!>>%TJMFOx|k0b^`*w@U>Y)PrF%$(f@+OReIgYgT_r zVf>L1PHp_~r<-c~^CUuDGZX14yx(LPcRcy<0+Y7!40AsQ;pm&3`l!e+oyP4OqQ>RK zXiARKovlU*P^hKdyMcE>@Z$Kpn9f4lVqEle33`*zk8%1fGex|T3}hU`PDstki(-8e z{B(`3Zb(YF?J`VqG{lJ;DE9|p_WmM;`m0ZYec|}*=Li#C{W{n@hMV+f8$HXm$y2>3 zc6J09{XKL&{4iBOB`Z>qE82uDLyC(=g~n#1D9D{+e)UY*8+544&8@gNBEtVA?;dl(DLh#V?Ycygt$~1E}tn!syi0*1hj`PdkS;k&pFP_!~BO zeDB1wRj#G1RES)EmQu!G0_4FBWN}qKShZq!R5KM7tlNz(y42Am-q@~MJE9Wk>?OJh%IQmGL)rbc*CDv4GRM#|=Z^HFW ztHdXK?r{9K%GBzD+A_FJT#s@7F`E*z*Q>-_dR0 z0Q31dH^(WU^=IC!Uka-rlVUULUL)>P6T z;{`kSWi6Gj!@8tP;r1RLC7Z+iH@05bbp04HsYv?*bFYJUB@evXxF>B=L@v=I&W!th z@b)xKS!QZnHBAURD^G;p$TW@1*Ru9xwN9BZH~f{HcQ{d>HN7_Nw^RzvrtIB<oFRm>sKB`pKG;hw@}(SeD(gq#eeb5;E(^Yp-l9 zbM^~J62z#Q_irM`ti<(@imr7y7_#(JdyB$NW^2+I%<SJBbsWtFu34=}%22?-eqa z9v<-8oK0!wQizkYbpr$dm-FAXxCp)nLZrQsDo>n8gnpdMZ&*-YKwT0&16K<{J^wuKLA4J>MWh*$d!}> z6{!q_oxf-@Wht4l&FB`Q)z~?)F*39D^4;!ras1-B z??T;}m@Ska!2^un+Wayo1B_wd>bwf9YS~e!)UuxMimS}8=b$?gh@C(h8f6BUJHx7_ zOU(SZPv2L~Nc^m6&*Ctc;RY?#wVX$3ZyEy7#Wzk=iZjEOM>g*sm2vVo4ROvK64`IY zSus_p?!Qj?mHwn5O6EMqze!jqU`yV>z@J2tKj6N}D<#H?afHJh>Yym$gw~Uzbz!P~ z$d8;K4dIFp*@3E6PfRhXEr%A21fwv9@cnf}_b&GzQV3k)j>2b-uo%r&hgfF}BaKl? z{)v#M?9D8z^hX$s6;D8 z#o1~`uD$$ z|CY~8ax<)p6V#Te|6lM_4tDU?ixo*0D?P7+}nn2vqfL zL|-Y@{>^`M%0E^Q(R}R-Kb-({4O^K0x*M%l-V5CaOWv=xzRa6H7c5-t^|36oi(*ze zMRwx)KD8ZO4@)}@v}jn8x2xrkQS}BL|)hRm;0% z{zB$v#K(n=HT%RtT)&ol|4nS!a!@^y+gBghW&-^Ih!~Q1nbEr+;iV`-^TXpWtJ@g_ zYqXLImKImjd`s*UIRttP+8w1l%bVWe+#P=l7R?NN!%kk?> zV#1+~t80sOQ{u}Ko={9>@h{rLW?UP~@<%r11V)T1v!uTA?olSpUzBpfnLZvRbuzhz z4bm&x0dkaK+OFpR@tdl)Y+i~;D;M)jsBGSrCa0icVOI8{u-})}d;emnE>vd@ZKo!i zAK~$6!c!HJq339abESrs2gkV_oeN&6aj)^Iw708bM{$)rYX3r$QC*pRE#nOUtovz=LyuKIf8~!&vj^Kv8t{4WK+Wj@p$^KBEHGmvdv5TmT7T_`)=l6;I zIq!Q?Mo`2mu#0(*mp@>r95EzK(ixd)b}$IQ$0 zVB6Ov)9fGd0u0qcJ59s%h%RlTWC(F6vDqxJiQ}v4jH{hIN$hu+S^(ZsZK7p8(#g*^ zRg=h&{K3WUl9`SfXHcsp@nE9>vH%l8#;A-NOKZ5ejHJ_1!b4?M`KCU*^MLKnS(RXi?QcVIJcIl@F?--Z7<>ki1 zsLKl9e*_Nb)~Bol2Cn)%YZ>0J{wg+M#(Ns2EGnN__ zc7oeDgZ{1v<0&)VkKk}FCc2D=~!kfAwsOI#5@0|fTl_(hD2E}pXsUp?6^Zy%YB zzdnNx+||$v$unJ6UG!rKJb^k>6nHMu_O|k&uVV_o0huVlLuU^a=9g#0n4>2~QKUK+ zF^BCklq$)5P4a1_m(|;r(ZT}7qFDteF5T9TtHA_2)3r&@7~0w4WKnI^pbjD2SU;HG zv7@~iL48RRa+~Ja>K7Zu9Ge_N`3Bk6Myno%xIXpEJHF`l;{t>S)Rzo}Ca410TW4BD zmOph8*^bWE<7X_>znZv+e_>Y^6O3z$>HGa8jIOR+Kvi}VYyF>nJ0BluPo{RVZ-G33 zL{@Ae2!;Q8^0!2KI(bVLwh&ht8-WPkEZyqtU*c)jMn!ocA?Hxb2`Cf5ppoKFVVQzh zRBI01%7X*k|CmQggM_@Zvn(b{RebO`&nRDYnptMHeAAo*;ip=-&nlwf#?-6$sKN;D z1)2oi$AvA-t#rO9v#;**H`KwdEdHU0&nK)L zdOND`qtyt(X|)jWKPLi;Kn)#$R}Qol)Wgu=h??&$9B22&Gh8$*4;r$*M`$fmA&Vl2 z?^dgE1>d~=krI1SweUb)9d#oV_FTq>_0OFU@~Aw6#OcvxN{F^;moMjzJgk zJkfamlL}Vdi<`i3hqVXnR61K!Bs?os+>R3e`j(vQ8j=!3f$zwdX%YT#C#K)goZ>aF7h`imTTwSCEGXDjMN}}B#Rv&@|ic! z6zFT<&(-WWSSL8wO1B3mI!N)qCm~EA*Kw?3U+Py%@;=jHK+g-0g;M?HNQZ#Gvee}| z%*ct};qpjItdGf*ZdcfS09dE;7~@XG$CZ7gGD<=goFG)E(tG3Nx?grJVL&gjO4j@5 z_$-zfLZwNGUo>t@F5CbH4L)Gpn zct|PadElUpUF(?-fNbq-AD@K9&#^Sd3C*CLde=|PZ8@JgX^HzxHyc75Lz67@y}8`> z!0O?Xz!)fytO5X%h7m86>(?aDQ>1Tft^WOvP7aq;+Y`qD4*rKDTT4{anGge1y{t>= zp7eEEC`PtEjBVsS%x~djM}q!+e6X-*8 zC*P@hR<>ik=uA*Su`a4^zELZ|*VL=RDi%l}w1P`U$WFg%KkK}g1;8W;hTwVDdp<0@ z5jnYDK}*A+_P;HJvnyir7pLor!agi<^fato6pc_d0TL;9?q6A<)(1>4v_B?GM$stK zrPCd-B~LzCJ!|1dE$9bw#+ZF0hFb_b#oi-`a>oqfp_LziSFMaP|KXJ9iod$w-TeIg z8AQ!P+z`?LTJfV_ef&|IN-Njolh28U8loa-$w}o1dV;&@Hb_uqE;}4aC@tas8*^%H z_j#GOjOdUw4Ln`g9cOq%<`&Oq<%sFujEJ*XEO!SajF=Z82YdW6RTgrz6 zP^Ad@JEFfQMs(is zZR40WQNB%T9rq$```gy)H@hl(aG+S(7hvY&cSHl-M9eS34y3w>)axcf9i;%=Grc!f zaey=_n~kLVPq&=fpw1~_--Zf?-CTFzj{-gbiEt&YJAu+@*4R-;6#vU1Urj->QsX!uWuu2#(3ooi^4GELG&nVe<47+aHd z&_lHxO~gvbO1@J*4bz+tb082VE9ZP=MYOSIMpz0Z-A8YArQbQ%*$jNoezz#o$rB+7 z=zdmT7{p>l6FAfO(M?>t%VC+!;Am~1z996w?Q=)*)R2r22Q!iiCY?-@scKExxCl!x zUm@ezVs?>+-5-0sm396X12=a@C^PimO_r($X4fX#A5Y*4j$4(%aM=>in4mjFNXbUC zO~Nc4NsRcjcGAc@#%fSvZp-wMQVOB14{!Z%q%}FJ=G#&X`a?-O5vWNcu36FddEH!H z1=1v%)gr@+&+OYJt2cH&(=4Xb*gD0G2(L?%>yH^wQ?p zPWreNZZmH>b4t@fU80*-Bwb?d_Xz|jPdZ_=r%Jj|R#x-be=6C^=?hB%u4${-PLPA< zuP1RbqRo4u--I&BNc>;XecbG&6Z%kDvuqsT8fOS@u3*K}cAcFzNZ!h%Vsb5blekkZ zrKy|3d^$p)fd+R6jU2A7`n&oIEiqcmSk7Xp1(&jq-dC^vmUoYpJDJ0XgDF=8KYZbg zvP6w1YD!n+sua=Hc7}nfS4vg2LFv914ul_o>ld=v+v57Lt_ zNA%w#6?}y~E0Sox0r+Glca&;mDXyA?T~O;DoX+w@FiP4n6F?rsp|El&@uW8IB!y+G zLX?s-IT9y9nynWH-ZY;wUlkypWm=WC#aPa4YVnLvktT}qQIiKaN-Gy)0Ep54JaPkn zWcTXLpT|1iEE-6spb~(ZrurC8Ky#^VRct((t)215_XZ{a*chKp`yrCaue$hKoHaVV zTyC3=jCQ$mc82Dvym&><9M>XcrCT8xNlexiSn+bk!2g=s7VcnU=(!ssd4vegsR8jo z^(3;I($X#byyp08x_FyJf~?fvnr3sXGNmQ!Pz%MaP01sBq&rsVM7T8Fw{-kn{Xbc0 zgNCSv2p-^*X74yXcD2Ft3bfhGwPtd^gx{6^5?c*$oqqsovm4R(Ips(?EHZChCl}d-4Sp#^lMlC-MfQD9^@}gh~_jJ-&2y+|Ly7@)4QK8V}=!jYuP-5Z~@V>kAfKzc|&vAVmsQi5H~>zt+vEUPeM9gz<4Zb%hh~9&~31a3AOyB#K?(kV5XHi;aPhYCUW7O z(trAh%q@DCR#Gm(3_4Ww&P zs3z}P$9>Sc|54!LE?U)fls5?1jj?|Rt|>-|>r7d(_#toA+c0IXmslNS{&E~y$*YCZ zN``Uj^P}2!+v{BX6W|Sj8JuWK6h*I1`_{~RHRy~dwb>!^t6Db4&8Ld%bpVdQ_G zKS@9mE8Cd4LL+TTdwDgH;91c}bDlLf5b-_?Rsz)j#IkYBA*#X{|>GE8`m7CC)pgKg&xX`jzOxyukzk_36}^!w#~34$oN zZW(I#$!|NY74<8mYTTPM()OogdY+WD$pk+T85=TS?5q&*`5#>-ZOxiRYSr(Ip;ng+ zSjJ50Da7$xP}=>J1S+|mmwW7H%;V`mOjI5Jo!ySQ^6zBcm)mLUL@LtkcLX7qf9=aA zodSM4f687icge88?oUiqfo7%=y}z-t-=qznNvqQ%gSUuoAZ zx`SzBToRlFG!w54vPM1tNVf)iZ5l&%jv46$Suwn4B4VR&OqI%yW(6$Zme8qO0|3S% zp9rV2>ZEmE+a+#oaZa)bv&B1ZoD$KN2%2CO@MS;efWV6p5=QN>{*LmcE^?nCFh+I_ zTdw6{((Fi$Tam&XusSp{=Be15K6|u|G9O}`7(XMEwuhSO6qDsAH20?5{XnQka1Oue zRC5lf=HK-=(@@BeOY1Bcre4EXnCKCq`K(Yd><4rXW~WG#pa*)c3N-b-urYdTx=5cY zNi%*1nW|tO=a@jk-mJA+sTYHZ>PeH z*A8cWsfan)R6jfPqmA!^%*zidHtzoAP68rt4Tv-P5b~{bfzEI`@i7lD<{s#RDbrDUlW9~%aptAH2-m%L|N)scIe+#Y|Jus1uJ~v z2;x{gI2rdc)Iv1P0Ck$p9C9+pZ6>(D7tOi z!0FD#@~CKmnc*sP6(p1-*xe66q54n0^boEm7s+zM-7|?GuHoTH5vSWqH3OJpMHk)+ z=2DE91G0z%!f?42oT(5+dy{^EhXvG4yuX8p(I2LSPgtV%2*nGb14Be&!W?sUUe6 zoMyyi|Ah+oFwFNo`%Gd;l1DqZc+%m4B1QB#QbQTCJt;n`I5$pM@C`kIlyi)u>kJ}s zvfkPWdewEPEYmN{-czGp75l?#+}z*w0Z_8KAX|%IHCmoI{nP3~JL8EC!W7Lq!9NUe zcD7k~RxUIHQ9-PCpR_l-vxQP-+R*kl!Qm1Qw7DZR_7!7)(@GI?CA#x$-46~7--^sn z@<^u}?w(XjEeO;!o+I75PL_kByKaI6ofaZ#T5NHghE4tV^O%AMyV|6ppad`{PZjJm9BES3G6uy?!_k%A+qB3ryCK>b~h@>kLikzO-9*ouTgmcHu{ zgz*}TOHjgDzgsL^&5V|K&S>ap`cmuN+Sa zKWLHS(#a@~uo(MU$881S=sJ2Wk2qfBGDMCg#Io{TV!n zcR(?MJJo-_H|2i^qlv08AFr&Rpwo5WsxLM-3dTEvtXF9?4tT z^LRkfTZ@mEPdMzn`8-t(370L?V&tTuG|U7Bybl`XKiPojJcg=@eYi6`EdvMC^y)`3 zjS>!}VuJ^v;+ zd%a;J9M$pIAMsxH2LW7VkZ7UXDi2xA4OWf|m2i_&%*T!C-)TT-@@V}T*BmIO0wX*4Eu zi)qq<^)dOi-4E4r-Tu{9_RpgXLQPx!egp1wz(soVKJ4NR?`oFqH|hF;}w#jl~zi+Zfmk` z4$2Xyy`+Q~CjWrk2LO=(TT4%Ipwh#t0#yrpE{_KLFLl&+Q_0lp0*p*(5upW}PjdgE zFcw+Z9f=6vAnRkArB0SMvE|QRUOD2d)lIjeS233=t5AAf*6k+yuY!o|eNI8WMM8e9 zg(ZtCi;ui!!*mE05m{{Nt+g2{cC;FJc#f{KJXJ?DvMUVGaQ_d-lYv>;Qkss9#lp3E-Ey%%HEo?>;1SokgjCK*ir zima2pf)uDLF<-x(5e(B9d-S2n-Q5pWTC=J){OB$YJ+bcw2EXzVquO(uL{TvA?K1C> z@Yd|AgCB+DvC8$AmZk7Fg9u_L-95#;8s5-@(Ex|95;=gvC<6xVKyt^E8PZ+q8e_;D(3d*Y{wzL=R$vtsTZepkTbBH@- z7^H*C@60tk2vdEgS8#<3#;mIxW1&OpPeA^cNm>jMO)~WHFE}3i-jT@C(Ta?TDR4&z zak<^jy!MT7>JDqTEUX+s4!29oUxnsR@fgFHx__Bph$eh=l)vhQ;gYL0(q<1)Uj=X~ zH;E<5$0`K(p1YC2d;GK;dOd3&8ISY7;ElCgz1<{sQh$~3+j^59nb@arpt;?E`#%80 zKs&#(klzV7V~{!MKb2Q3u3hvA#VhHRb9kRzv`MG`0EZ-iIQYE$0uSlN?4HJ<-1zfQ zzE-q@PmX3I;#3=oj^}o80Kw~4TCS0Qd!yUi-?gk)$W_wWZbP_pz$cM_2JX4-!K?2G zcv|;I@Xwb#Q5i<&ML1!GIp+f%DwiaeL|bjrd>Ff5#ZUM>q;{7Pq?1nDVvaUObCMUI ziwpH4pkDa8+WTA)-Rdy;Vj`~$ZXMBp$v7NjW1LlA;&zMST@ja3z0-`hSBS|CwXB9X zgKi|sSPs07KWgSWe6zu;EZSs#RF3;2L5Dae8+jbpXHV&vwHSB8*B!qs;A(Z*Fl2b; zU$=B^yi53pb*9@~$EHq#_FM>9#kj=3<0Rl@gTUt<>zLi@`u?S8*0-9~?DoaCG;&PE zN%s}fzZX0?rs>efc?IlEe)H^>+sq8;yK}gK&}3tuZnccE@Xn=u60~;eRnNj+MNP-I z3_-4kr(n}!z@*Yw<^27QUa93-92Y-=gGqp`{4OI&0ysNZWlufFdXcW)-N5D5_Ojz{ z2GX4N$Dyr^dS0EQOuw2Xrc?y50ID`Q2J+g^UfZZgKXe3gQK0zXem1dlCL=WsbV?M{L-`b9d4<|8ikPzLOJ(s8n0 z;v$&I=c@7Z#wyBNc2s6{;SL)F98`UQh-DN|DG-XUr3FAc zRHuw*(wp+|MJgWQuPia(QHaiY;+)zuOI%W+*vO1}(S!rGY0{i=NgkiI6c#tMcUl<7 zPL#58a&beU%_Ki@?FAXBv-KE`I+2W3O4y7`S-sy!Vw8U|9)Z zMmmNaNXB}1=}*{d5gA3h{1HYl$Vb8teD^1w^_9Mo+V;##6~eO_l*$o;JW4Ql$px}= z)3?7%3!On?@V=veV{rhvgdDTTGFUb;0qfVH!Od~9>7_ZwG4kk^rS0W(jOM$jK{fP| zi6RGfR}2SEaq4(K%Co=mm%F+RF38can>TI5dy5W!x$jgLnv9cOOEmB1O6*yj_b07K zlHk5Z0+Kq8_3AMH0ON6tQk=iB=4G#Z(mFlVntk4r9E*C4|n-S1FeInQre^le#0Ujn1rr{Yq; zj+w{%6n5%5;Di7HNTz*&Y0+!Bqk;#5(hvy1Ky$>vvMc~Q_1W6 zscVjUeJUeJQhYz80#B_xz{ugYq-uI9^!|CGfEuaHtP) zB7zD(*PI&p$XC(-^OQbw-mPx2ZTV;2IH0xWvWh1-XQB<)Cxy^Ln26$aA^~80u ze<23tR*1MA@^Zj^xapeLXkG%b({)0&mPsX;+61Ow?+F;)xZ|Nch6f(`u8lp#mXM+- zw4yhF08^ZCf=?X!`q!1$Y96B{#`dotWO^(P%W z@z%6jU5r+^NFz|aP6s)v*dw_A0EIQ(zxQ&uEOy{v{{UQ7GV0T5*B)i|p}C}Tp%4;D z=mt+2Keb{}OQWXLq@N}3ziAD{oYu_@N{zWnl^a1L6~}eY!ygUmcW*2Ot!921E#H8D z#1xDVm2^A(dcyM5S;-~Lb4YnjrB7Vs9D91yb<>vOe=gQLm69|L%z(0yo-)}SkPbl4 z9M!8nOm5=Z6tH5+8pxA8{jYu#c(TOHHLZ{QN(FoaYeKN50Kw+XWAI;EfnG~3PQu|sl~jWMG0w%XI@E zKt1cFTX@e-xruDFt7ehVDVgV76W69Xo(KEshgXXt$mK5IKgqvEEK3@WK9?WBjZgj~ zq%8Ak)?c58hFAs`MZf?7&;UP`BSO}6-Dc^n?xV!Okvu`jWjtrFJ%HU>TQah!OzmbF z>C@|6+s7Uk)ciBzmGMS^qIHnTB(RnER|~nbf-(*X$6SsxMw?HMGjVREW@%uG zlw)zee#_++ekJhZ=&;EmOEkJ>cLpGp0FZXJ1{8zezDGhi$47T@E~~cQXm(tdM8Htn zj|4Yv1~5+*w6pw4(sh3hO=BjHsL6b>v%GNNs;FGEZ_f%b+*Ts`*H7{qEgsf8o0&L{ zXs_eMfw=-m@txlh2asyX=rc!|M9#I?XImthz0$lJp-VePZ=Gg)b>A5QL$Sv@y5p`u z$3JSO)?${%*3(Y4fupy!y;QiBR0fe4<8UB?yb^fsc_h|Y$%c6OlHk!7k0tCm z2ES(=z1v>t3o?kK0c1tsWPD0aFhJyU=~jLi*EFp{;!JLeR#{$Qhoo#?e64b62587=JY-JF#+?qZX1vHY|AF zBv&7#o}lBmewA^o_+LnhOVzp3qqS9pv}q)!MpL(q$G^ps+cihwQwEyYe zBtHrgK+ZR0oOC!G)SR*TW-PO*^34R7x}mbVy0tPA6ML{HYoHwGY3Bg+=jGm$;V%#A zX<*Unma$JO$kMuu7~<>jqA()>lg>WFiq~7;ML&e&vTI8*Zn+I2E>r^Kg)5Fa1NF^g zyf3KC+LXF(pn%#zE5{i{+a}OX(9AGc0mnUuN)wDzNVgk`X-mmv;45U4#ZYP1vDsbP z!mQ!HCebKBcq6FDJ^0V1ZT0^E5Vn}`+T1CS79wYYP&}cG{6Vq6_0Q6?c9AxpdlsP& zn*<|!`H>K-kMJHw2hZwzntQvug_Bm*md-OR#Ii;n;2((qAEk5Ze`?JsMe@l@KeZl5 zJV~i&UMtcr^tO2#C;0r><1F!za;z5_Z%htIC)T(e(L570QYlwLRfBZ|S5Vir8N4}X z47Tutb#y5#1{oeE-|2mSlgs+1qB*9U zUsC@7)IX)m0J?K_f#Y;w#~i63;fEuk=Buu?tK@Q)v$eVh+!`~3ka9l6Qt86(?S0t9sNUJti2#S{_P+w3;GzuJNZA*B^ zB}$M#!obsI8JB_eqKR0D-Z;o@oc!sDhnU$k{{WT;2RWly#yTIJ8$!sUFlpF^*8L!k z<2cPaRY>W@0-&A+B@o;wZwG3zP=AO0XsU3$P{KrZ&AY+ppXXG*bxc#Xz z?kWku&tXk;?@^#6q%lfVEUK(~KLb9Q_4(jacTvd{hACs(AP13jrhNa`uYQaQyc9f(!$idarZr8yd@10tOA*RDR4)JVAx=~s8UZNRy) zxOiV1PSe9F>Im*Vs^S~tJhHRL98p|xG$=??Ki}G_BLE!W9CkGP2OMxg_o3m0lTCI; zStOSaqpJQLT?J!ne(g1)600Yd)B(UG4tsI_RbAq9G_R^6qoI_m1jZGWPB$qW9u-dq zxvZ_8wQ+3e<|vsI5x9IV0mpIIr}@^$P4O0=s94LVgSDMXLML!cY{H(a%;EdA8>RI42z|L!QM^sBqcR>Q(?ZEl-Tp;&_)mnR)@+>F;tRqKg3 zLll0d*K37m8X7jO&!e0u)2;93Tj^(wqsZF=2FqurdI9bM`Bd9kG@Hp4Ev{~DXDkB# zXOupl9tJ+66;3Q~0cUuEZvH7V$@+Bq(Hlai`|F7c4xtV|ab1Z)+)i@(nzaiIy)-oNsvrQ z+{S#bwig-n?@7PXa>dH2nEV{(!L@m{d}3%atC@S9Dx)Yr^-T2PU%8A9wqVbeUGYmw^{am2ae z&bOm4^`92#+}P>Ob7s$MOln3xIGJ}JQJfrSzeW~^;>OBo<(jF(Kkxo{NmUo}s*v?Ffh>*sO9z`E|$W1Yt*} zdRB5>A`i^XEr|0Nuw~xFjP=j&+OKsB%SX2o1}+zncAlO6`cy43tYb!4WL@|NE%4-E zd;5>QM|Bc~khFasPcc^e$(XKC4Wod4JB**@R`&5doDE@Yq%4{E*x;wI`gHkKd#0r> zqa2n zq`Idc5E)=|oqVrGmfi_5I)ryx^!qgiJW5^(Y3iIi^7$XE4()eaeRGDw) zo)}=fNM?=*#^A-n1`0F4R~YY)N}1w~J}qX+(KnC*4w=A@<=6e1=Q=FY==$5~9$;u5 zWf8mNd2gSE#t#Pv2d`7;E3XLu09Ap-eyINdbaC@f`aMdQ`(@wR{Ql>E(5>V%F=-@d zK==!sa5z6M!|7L-_O{xEn_JHpn*@om(Z}isgH*qVI*7c{SYD$Glw+1<$t&1y?~D=j ztLU#HnVhB-RO6G+&mNV=Q`;*#&ZQb;4KKrbCZ7exwVs=AZw(1UH)^7FvV&_-BDsFBVGlg6Mz#I>ydS6PxsCgbqwwK?@<~?6gruNn> zX*c%pMM8nPZeVydyYN5a2CJd@P^6L16akDeN-~O1%c$p}u70hKl(?j5+&Ynw+t#~! zjWjhF+$Os`{tZS=G}PevI)910Yd*Cb&i3#5mH|nO^cl$>-974)Nxi+E>EgGa$t-!^ z#N>LKqJr!!Sl_i|AxI-QJoCk9ya}Y-O>=jDd;qgm9$c*3LrLfca&ywWRi0 z44i?IbH^sR{-ffXZ6`|njz!$)2#FPs!r9JT`+9#W!CvYYm-CtLZX})iZ)}D31F-fL zcc%IzwJ&~NBmLO*-m@J%c4FpV%12GR@n8KRhFv`jimL&U%N%cE&?x!$KeazDfew)^ zh1RJx!!6CCKHOzvk-CGAZgOjsTU<*F=`1W&(SZaUb6sBYdtFCQwNt9cCB%_LQWGF{ zM^HOh-sI}1Unn>ibx179T!>)J)?(g#$ z;~lY9OQcz8Ms0fTc;bsCu4IwH+)3+?Q=T!;HAmrul`m~j9|i zS9iJ%pNFHdvb2uTnn#gSYskPHmnW&~{`jnw*qb4X{3MXL92)gnZ$Z;0!!Y8P@q=>(44MTMft+Z1f%fshCs1M@XcsoTai3$3!NDoV-<@*4#5E3t+cqmjZ3nqR@r zo5`_CT{g;~g+MCYp1qxUAAKs>XanG~8Gm91?uvj;**?gb3G$idWZ_ZY=Zy;c_rWBov6k<@WbNF!h| zBOG9EDti9_zpX}zCNN{;IZzKmSYXf*mLuZa4?~O!1Z`qD=i8{IuI%kO86D`NT#OjV zC)$Vso|PkhGt;Iq#R#QD+zflk=t1d41+doKG7s+*G3S%Or2brg42Z+mB9Iue~`PzTm{L0D96@2q6CeI&>Bn#19}3Y7Cr{w~tD7 zL%9bek;f*VNZL#c0^K@sMGJ8QXvTU{f>gJ+Wd(3}{i&^mMrRM{M-=ClDB33>rBR-g>Zl-d$fYWJ z8gvW{RFWXrh|q(YaT5mufM7GvPg*_aJmZRKA}+^(0eL4hnF!m00Un2%E!i3Lq>?>q zc8bvTjorph&tCm+H&Q}Y$7()@Ac##2$VW@EsS8-eaY9=^D&fFR?FHNZI?YaXjX zr_}zq{^i*7&mTzxv5Aa#(cFAjhZPea$!`ubNlyOVoma7gd{F;==>t0k?c zrViR5B>D&+mD(r*mkq-xATV+fRl!xd87M(lJsBaXPPi8qD+0O-8d zw(;Gp&3h&l)dQreND5Q}a-?q=KGmX*(m5r%jOqsM3&*-h$Vm7Y!m9M$gUBT1PXie^ zb$+|;&8SAw`SNVX>Fuwn(>OBN+$_K%hZ)904E?jkPx53`lg*5Ua=djQ4*vkZ?_Hxr z(Y!wQ&?c>K4Ux8*H_MeiVBL_MgMv?9PJfk`jrP&R0+VZk{V2j@)~$>6BRu&V+Uy8wN~A)wDpHAiSE5Q6RX$n~e~?xln>AyTdS zl&Co#hLm9(@CV9`Avx($alRQX!fn)v6!F*RU5>}bw+*7$*?=Mz@hT4}?9Sdg5A&`` zx62`r42qv+s4}?|ZABv)1lBK5(Ek8Yj+5nbjaofiw9~cI?CSRZFVv;DEN1xefIuJm zeQRi%@<*q{(is`I0#zRb(O@YbEoM`AYItZb`+x&HuFL)H9f*6}OZ zHMGpGJlNmiC2@m-GsxiQ2Y^R<+$$&PoGUQ}-3Ppv_N#0)16sr}-v%n|y&l;WIx zj#(phBzGCSaU6ukZVVxLW*9jgv5rWhPZLEh`7GxWyKt$~pMKz143kk~AaS@h1~NhB ztgLmHhb1O;Vsc+Rnr%MGM)?%0XgT6 zgWs)D_?8&1C;sl-EP^p1lzyy_=~kW}8<icvyIa0 zP%858z$qG@NdW%<697Jk+PfM(Mj2&{abo56-#?R=uG43ZDN80_rF4?7!Nso{D56%5 z?%rp7?u|DSAErqd=h&Kq=Ce0E3X1_H#z+3OIb#d~?ma8ht30bo0b3%Jt%ekmxT9W3 zsiZ-_1*|NpQzL_e^{$Uveii)fK6M>Km$lVRAn1hD70rB^W zv9prW2W4x92uW;&Q`CXj^sXPP`h2w#j!5^@{Cu51OV%tKqb{HQl$T6DH7hA%3z7?U z>rI9^>r=Jsb+^3u7&18Cq;pl(+QT@@99(*%mzFY&+I^EOz-DGA8&@Mfy{f}Pyl8c6 zdys-b6sp@nz+s+7YO>6OA%%_vgBc#RGfFYXbrVUrMkG?j22KIz9`v(8N)n6a(6PE{ zokITr#1UC|qGel$j^!hcIGBJz$P9NL$AAVp=C@uNlJ@2{y1tQtKL9Me6OuR>9l_@V z^!isE@w^E>u_m))=gnn$eASiH8(q0%&rS~*>@nA^A};iR#t?j2Zrl!jRqC-~criu|-6XH@ zjwVdL$1P(~Z8O0~W`Y@WtY2dYMd2LWjDnG(P zcM&* zzSWacFJ@ly;`{tB!KVyfSo?3sMGx)$y3mZ62=lnK)|Z80FFlnpSOesXDql2 z)Q~gs&sym!YRsNSkxLQVoKuT&ZjK`j=Q^K>6P72_+N21h8b2*vK^TlF z;IHWa07_KYTJl!N(#r2N<7+YD2O&q#{r=R^1oS60Y#_FBL6aqi7#!4jZQ&}-32s>6 zF&P8iqt^tJ@<9r5xSsuc{pskUm7`_|N}$eqU}qo9kG(uCS(_2!LKk-(xXJra8B_zf z9-XMKf?I^Gtg=SZBqh;C<^zxiOq27d^Txvs{vpR0sg~YP0(grlCy>}9jt@@9ns!*D zk`_R*i6S4V7y#p(pL5ftMYf+KOsZ1BNZK>&ibh9#{i;JQ4_s4i8O=(EXpo9JoRR68 zTPVgj$E743K09~fiGeIaWc-Cprh)K|l;X(Bz~|~Ij9};b(T&5tK2#E-XaaQ`Mr0jS z4x*#TGuo0JhfMtFGY~-s8K{Cm?IX4`>qBV%DoJyUaY!Vdr}w2}+C7CB82i$J8O=ue z(v^tdQDbP6xcbpEaZF_AIW$=(y%sH_f?OJOKNT8_CW{{1ByQYsM2>UEN?;NxL5?v| zvF#*>I63J+l6V;V(+bBNngzY6+%2S}8S32oQkM#HO+yUJ$UM~R>FgPSv|EHy2g2YI z4}L`_K4><18kR!Mlfd+;8g-r4seKKFgcDp`O2JhV;w*iIK;ItkiHKCe?87@XO5p99O0MAKhgTh26{D*oQm zHqxw;-sb6T#Ii<0ZFurKsV$xe1P;|ZUY|p`W`fe+^C3qpvUyR0Pe1|x0GN-jO2^sW z&u4Y!xnQiw!;W2X@9UCJT%Nh97IW>qUm-*hG=PKyI03Q;KA%k2&U0r|n{4jKH7%%W zbY;|+MEO{)Wnfv-LcKZQ@B#L~ zIix(dQ-!fcNYdf{B`UkJdzL4TefjOyqiV^h$!g04vooPW3vEKVAE*L)5I$Ub3X7f4 zqx8wkv5Wi5d#SBidMU^9s^(C6V19Mgrtl=U zPa|1hruXFA+>j3A&N4dp#sREXhKc7Q`X-zB z@^PLFkXF|QbS@A1(~uA6LB6rZQT;4f>If z!rw~2yz%zAJZl^+4YXi>kh{qqgr2`@$hvJm=}8Phswbtvl3S$|*?ct_p$)N~cFujk_g@ttt0cExl%;GC3BaNnd{Is+ zDJCgq$l8;Wv~J(UEvZhC8)c1IfE!69l4<-vREWsWO~cl*{vDPBdRkcuZ9-5C;E~%s zyPCMMI1+q8gAM}mpQU+!Siz4B(#ETUucX!G$eWwKO9K-e0NG=nYGsm;z-DK7c#~KQ3LTYJY){vI?;_hxl|&#W~Hdd z6z47y6?x*jZ6+zM^#L3)L~yFD@yW*k4Dx^9O5xrx*RH%vuFtDpaU_QbnaGU?0Y}oJ z>spQ0r+oK!lJAkpJPZXMfOZuCHaV|jp!E3ZR_Dx_<-JGLXR3Qw5kli%h#yXsCNf4k z0rIBfI2i+<*KFk+s70 zWj#kquTh2Mg+;XfP-2>dlWNh~{1a?!zct~#UMOUOb`nPYQdM9BC?_8l0+2d_I%gHm zuApcxW`;#EG)_>X{-J}6R@*|kwA8fso<)XO;rK2>G5+yS2{d4g@pCc;Fv@n63||=5f^IhDS}+uMPa8r>(-C7|tA}{g>RUhRyCL z@~x1}PF+C*^p5AAD|z^Hr&#ItqV71>Yt@Xhxo?IxJp4Rl5IghK)ISYs7Omm&XCEfw% z_h#=;(Bgy^X77vq9OLl^SG&3K4eCc^mIur#=?LVIc{v<)tnQk#2_*|Gk)cz)Ll7H- zjE?-8-Dz-YdhGYw$DIsrCshwT0rsKJKpRNtN2xf#^sMfycw}R39qqAFa_F$EO}G=m zz#M(6y{5|*1%{QRllvTeu#pv~lb&ZlKNhlxquzHX8*wYdXzyJUPp{-TL z<&E4LY!V0jv=D@pmFIc=L^e4cDZB3v+sCJ+{8wgZl{4AhBE$kYzLx#q5Kd^f3B!41Tax0g0dTi0ti7~~GU{=C!$gu9e-Bgb9f@${>q zni)S!vbp1&9Z6AK7?6EWb3)v)e2%>dAR4oiO;H-iZX;B4fI$b5{{Sc?fl=hJySA9` zL9}zbkUe{VMNZJU3(MLF8NsIBFb5re;-&$)0X&mY?o^S-K~9LKMhHhChuV!D{KWy7 zXW{C49^WcZ8OZC!Ck0p)BrxO}O%g*hNAWTcLwoh6b{d&B*%!HlXW3 z*xd?o!tLM+KwQwl0aqv5oC*hO3Id7_*q}U!EsiNYPg+Y7O$Ff6BpIQ|6b}QgDGt~j zc{I2IGBz8nb^idt+3YU-GZmC33wx+0dyB^qw36&z6|g-wU}GQ?oM(~89OUy>{tMS1 zLGc6^nPUlUvZz0)4-7uvxE0U!9W&Hmaf_$_0K6J>nN~cBwZYjnJLo08X(CviV<01< z{1PtER~hTiUcD-^Yqv>~HerT2JBS$PA3Bq%TdWboByOLTXan0$I7t*U5V-(zwC&0N z00`!*ZWW|x)JKxQj-ZAf#C796IIo@L#MJ5ZZp|4+PRo_Mm56^nL~IU0+wpfibHzv( za;h^dm}Ui7>|BN1NFL)Is-2iAEVv2>1oC?0{JYcAG1#s8m5(3+oYs42hUSSES5sa% z{Msy;UJgLUJ;#2%DT5;kRxzrpf!(%~|xf;H!200NJG z0IysB0FLC;OLCKL3+LzTW%Zb8<4z0eef|nJG~NbiGi3UEQci2tS;HRya0X2}gPakM zV^QN~AaVsth1g`|?LBecf-M3-r>1l5QQtiA_orlVNAVF%y8+w!QDBn>00gsBVY5hi z2|3OP>CGfRbInH4Dkj2quwY7&(2COOrKLrf$(K{{f1PCDlQpaGdt1HJLo{yN(+h$| z2)7BOnvGsY$n{L!n+ItKZN!^o$6v*TNRQ>H#D2_%-sA-k&*N`$m%M& zMN>p21f9o$R}UDBNia}bfVc-e#~AhR+OS?Uxw*K%#lvUIK^hG37pTYHwiYsruo=RZ zS7^_sRk8HxS-&3Xt8aA`(##oW1QgHdE05`l?D{0sbz5cKHT#%7QMutwbeW4`pPds1 z+7G@eTf))EL0^b*+MDu(N?usphXf!s>)SX8k!Ns-1Z@(?tT`ld549A_uCWBm42xdNPvRJ zmN=+6!RtceOuwx%WXZ-U*eDVe$jBJxoQ1!=UT||!6rZ4{tyr{!2kK1$jRk*O>*&#HXp%(}GUufRNrfY@f5L(?x$?-cv3lE-Gtwxge{wrB69%%$kg2>&+ZoK1~ z&RJ`E#k&`R>gF69pIy8ztua}4jACnbe_rd)b4zAM?<7-S+*KH=gqr=$ z2Aiv!3t4U9l6JW=$24F#z}QJVd*}A5pAp_ceXKqFNbtzSJ0R#EsUYN@xu*2}V%Auu z{Kc$ZaUTO4WN7;IAgCjZ^OATKai;1Pwzh^>vWo8YoBOtS#Bjv87$HyxXY17C=Sf9I zZzN;O3wu;txJ3ir>JpO4JmrZycQMIh=re=Y_p6;g>iXNt-8Ro87I+;2LdO{ZdViPB zkpPqy=o(=P587FL%wtQ`U9Mk+eenk45aM{e~%TbvmL5z*d!TOB#6-TM+x=ps6H0?Ddzsv7?r&f$8;|m%w z9kZN)*N)XH!^Kw5r?#E1M>YIP!J(a8d6D}Z^&W#YS#~trhht?uoS0F!%sU^BzJu4V z@7B857G5KryIy#w@Xmf$kC|dipXCak-GEtb0lJ0INFFn|fO|0Nq!Es4CDf7ca{w(E zZVL<_wF^tzn>3U1_bIi<#5V2(`i?kZkJLFHwC1aS4c)rP@c9=22Hu;TN)HFO7{+<` z_zNN#`ja2{_>Qri?_6y!wO9 zTBT%m(2?;Ilh1B5NFkTAbI(e2Tgnvvl1E^}KWdW=rt}6`Vp2E(hU1T&Cc$zlMB040 z6r&C}Oqj$RoN}jYlPvWq`+_sekapC8(O$6R9}(SQ0*BtCr!`CX8S! z5J(^%N4_YMNeAhbmz;r|eScw4d%Q8F@=ACWR~v@m)B+7LxDrQ0N9UO~?%J#gJGy86 z<3CeD%N165z7x^LdHVOMC-N#1PrVqy9GYn3wJ1}uIE&+qb4nj7Kr4<-C^r}sStNku zfyFjSr7^`ZBV=Gy8?l5~=NwUI)u|=%%T@%E< zABgGgC8%p#v|lm-5m$~)*}w-Jsq98^lg9@hU2+?S8-eSZ>R*A{)}u6+-X3Yput#ie zZ3D@J3x`tMPi(I5Y~b~;Kk7c29&<(0?W47#)vSqN$s13L@@Q-?V}!{J(Yl!1W@TIk zY@da)I6mIp@lRX6`8MDwTxCaJzh2d8P|`ci34fIJ;CSNyv}S6oRNI=jyyMMbYER065dU=AsWf>H#@hE zzMXq?sHp@|Nwzq^3UYU3oO@@bIbtN5_T?hp>k%7RjzB6KjQskKdMQ~%EXo+;zA^|k zpOweSQiNpFVM{NRBw_HDLc9-Ajw;JYy-2i?5E+#+?udVfBc7S+N3CZrZa0uK@d1Dj zW9vt!-o+!lEu2Te1muC)y-3e*Z>?PjR|f1dP~jE-0E~K#^!N7mZ+7o)v8(w(u%-F< zw)*?mJYnA^v_2}-*HFKa#EKO_MI;3qM`88ms2C6NAJYf~vh@#j5(r`3QMX6BA-d#LYy)QlBWXW6 zW=R{%#y}pKrz8Uz%|(&2PoSk>gf{^5nnvOQ8KpA}ds0*q-7`g!p~&B-71BHpW8`Sd ze&`F_$W}Adguk-e< zcc{j4!6g%+>BG*1#Uv{dGbYkVSbH8fT|?X##3eV-UYz>M_!)Qh=oza=9qs%9tj05URtdQm6~*`(P^WdVhxRUZqv zah}_WC-*1sRDXzq*^i(=sfJQ#W4={IkvL^=hSsBHKss{-LP6KxH9w`q=P2efm|W;tiFZ zmW^c;I1L++3C>&)2|q*p>i+=3MrH8yWX3~afHBJg-G6Guej?tRjb&}Q3jzU*pVWCj z(yzy>%cCZ z`_koL50-@O7$*&poL7Hw&uCDlX0t+k6J z&k}`jz;4e$pL*c>pR7j|c42AB`S?2io#`{pJ=v2{{{XX%_>b`6bPYi+V!js^gaWGL z4jUc&W73(r2voxaYL0p%3}lY=*LB@7H4u@`$8P=GlZ~WSOT>D8wT0Yq%#hBda#(fe z`Ey=pF0UqbrIFi5qh6nf5^4&QIF6-nc?HXUayMBICp_l2`d^2JyWkr;7sMHFI7zoB ztA8+aS_`c%(8SYEXfCbg!n(*eDjuKZRx)|;*k;}}Fvc*dpZ9ByFg-C{4OgpAHYi3a zr5AR(;Khg0mMKb2+Gz9T^^9>{O=?(%ibhS~b;0Y3g*~jXd_xXBM_TC~Ht@~F*E8!7 z%&w(($ru=Q!hlb|O2XX3AdQ$a5WVxodW{yc8mvl5^XKf(FQ~yhIU16$f*LfetGM7V z-jOZAW(s~Fqa609tx!!eEX1m3lD?jlyIAewyNT`)Np7!+K^b7Z&H)+w*2d_eE8vl! z#U1_IKpFutjEK_=Jj0R48RQJNzS29?1_c?0NML#Osd|o)G#3T!UOR*b%!Sb8NWDWS zJ$iCG9t}skl_zmJZrtEAt79R*i}%md6$ndotv(qkMwKulHb5UtRkfypuH8Vh+UVEP z#N4YSZG-Zvi%Y3(E@HWbw!AJKNgM(XdYP(gmwJWSxGWo^+ zpHeC=BjulSfk-L`aDKF|{7@_b;B)U$BqT1}FzcS?nqWyM zIXUZ|w4yS4b3o@EP7i7c2?_utkUy<-f51kH4R=+%c@`&ILlQeKP;Lhx@;eTh=DEQm zo;j}H{hn-=-@*FEv|}6E;YQ~KZYh9@4{%G6Mh{H^>8{qb;;LhrO~C~$H{Jq|r;F0p-W8U;xi*qo9Z z2tYXHha7Xzk;Pe98x2>&W#mn*BCurG3rB|Na!)@G9^CO+`K>&SL_=%{v_Qg7Gbaa* zjKe%0zdomm$qa5>d>Nje)vk=@tE$SAG;v1hBDOcl$-wj(!O8DbpPQCB8dP#*eC~b6 zzi*X0;v1;tyMH9Fl)nUJS7<6dz3P>wAat)~q4fMXv8hTwQ|`|zv1#9qliq&Vll`Zb=kz;l&Sg{H);A4#7@$72b#Tw+YY0DLr!aUo6-Ub(L4ssis z@>%dWNvGNFaAt;FYH{hA{c})Jf3;%@%aQQ#2>$?Lqubuw`SLuDsGe~BcIWN@wvGuB(jb149>6Z=W&NirHj1GjK+*EL2d8VMem~}e1;!?Is{6N+0 zbvv6;Vhbz~?0E{2yzVFM&1C%1yBR!t(k`5|1p1nY7>)tt*RR8lII*ZMk>oN?S!U+@ zXL9hCui?e;oH~Z9tHtJs{I|Cci4lV1A$y(%IK^?jUib5Qg!gVRW|5@EbBvtPLRn+L z3!HLD%|f|lX$}WH{&km2p~t42vL|j|*t<5OSyW=zLWHWz^5{(gFa*;W<0?V-qm6%v z^!2UQQM7zNIpln)#5o-FsK!t*0?_kMPRG)g;MzWT#}y@DVtWvJ;*7$o>JC8f#TFb4 z1Z9Xb3>M{SYb%ykk;&WblZq)o4#x+ROtS+;j;yq_jv41)h!p;H-MkrNr%(8Lk=Zmx z`45>OX!f%m$KlB5fza2Tt>$>84upa~dhFkW+SHO-&G|&%djQVHBm2cYhqyWW*CW=W zDQWILA16oBoME1%yHsfONbYSfWRC9Yb@eJK?mg~Xo(?< zmBtixANtl>_gb>Jy_8--EH{dLu#zqgF_ZCo^!n78qkH*nt+ttWW;Fq~XPkqd^RFE# zH2FuPhFbb#$+bQrvYdI1EQz@WNPWZ-InF!QUsv__D=^JY%g5Pe{49 zoo(c>xK~gWT&7jC?lV>PuuEyECBqQ}OMu6AWQ_MDbQL(oNgBDxw#%bir)k%=_D;oEXgl#8{6Q86~uQJGAMAv2MT&JpKsc+UOdpw zp7P$Inov2H9A;;B?MG;-GlfPzOi5j_Hd={{Rvbfr2*R ze5+rkXUT_A6&J&4GtFxDWybfex;ePG2P?O09&ir^qzBv&#gci=S4838H~?b@H8LQ< zM&pxS_Rl)d{k7E527pL>mOJ)mfJbrYed;aKe|TOtU|aQV#t+_`LVWIc9OvahO0nRE z`qH#IVj4!z#Oz0GntCz{=M@%QE3hM{N_HjOnE-w0u%fE&Q!T?B{3tez(p9nnJ0`^0 zdY*XVos|@h2QT6P18D@|yL-}pv{<%^B++j;p}}6GG@N7jsIc0{ z1My1T?NQE0G_Az*MUQCql^p0t2}YD*9eJ0nAzxuV=@lGr)P%^JBUAI^&& z);c(%W12156qAm<=>V^#5g>OzK}pEZUT7AebP+f?!N;NC*J}J3@e^2hKJ&w~SVeFy z7+gf{A;@UmPQt#0yXU_{isM$wUf~BFbCc4#Pl27K)MnGf>k=)jNxd6x;s)X~>z8Kv zisgEyN`i;aCsWd6{d~g=$B+;x9PRbO7^sOrRm&2N6j1%5o z%@x#;2UL+xNZdgiRZ8_zJwpenqPYgQwUPq_6R&qvi zd($m3>}ok;$NAB-0bT1kN+atl2FPM5#-2h?#=st+9<>i};($E+(y{F&GXkIkp7a6r zG{)cuQV-6Sr-742i)$X<0RyL{FL+VUT47E(+(4z4UUN>xKz7`D=7|^RJxwH)EOGXv z$-?dH=e-1!2SGfJ)Uf0M(xZpsml-GZ z912!FhPS~Qymoi&W|iYtiKDLCB>WVbU3ZeJG*k{rAJePQV^(&vE{ueBH}mGx6+m7Y(k@r-Dw1pdGAT)f$a-`+mvAX zfle&*DE(!z({Rl%UQn&?(zV}* zx3<JX}@fXB8hS=^kd##JmWGDyeQ?$<)YQk`4zLs6s8{M);zdRb|{2DbSc~&C_ zJQ~$4CJ9Gw)W2d2K6NYH{{WM?=sqXAxzrKkog|h9Zy{7{Es=&J(>MaQ4SV^k2`!{1 z+IbMh^QK#2Im(Lju7|E%Y5Ig0GN7GeaK(CV9l`mE={CMN(&VycwMn9IcL+SC+7GTl z{r>=+aCN?$I7xeHw9d|t)Y5}loqv;Ar)dporpswM#_HtmbT~446VFpzr^i}^-<^Fq z-Cd(4OD|>50FPW_HEpYSuIZ!_q~3gM@p)l3s`2i6=lNC=>T_{(EyD~nj#z?yYX1OB z^w~o%yODlBCqG-P$B}KsxCvM(=t-*!d4s3~<*}1h4*BS5P`id4f)A;$M`taf%}7$O~M1&a;TLJOc%VU`c7*Q7Tv3M4N*ibZ zDRMha3kQz0YQP-P0h&-1E=X9gLH__MQuf9v3NStCz%hzsY;k&0Tdrtl0+FA31ek1T zz1X15=}nVL$qtDPC^#aR%^I*%&mx5ED3Ayvr2&pO%`&Vy{?y_z2Y@Mvz3_OnI@C>i zRbf!ysxu&F+IFtcMsnLnQP#S*jC>n?;T?F#eW(kWwHV=ZaIPC@KMr5lArfWspv zid!;~(xU^%G~%%D%{{~@QDS;A9-}nV1Dx;$J&}$-YHh(i0sB$d2?Z48m7nX1OOQz_ z3Xe({ZlqBaJad|jl1T#?>Us3V8pzAQIQJcX^sR^#0tj!PT4;d_K_{G3Qn5HBNQp8tj-Bb?#XnC| z#}yaPBeqATXvNEez)|c*Y3?g=WBa5$oa5$c4%r=P9(kinov2jAjJeKFS}Zn*l1@5P zWctvNgK`EvsUwq1aWxTYdE<&&wrO#|Hx2xcQC60ERQIq;C8ebEBmgw65*FAAz$YC! z;-r}eBC&So;y50|G@!%|c%zynR`^)`Mkx&64k)nfTDZ1IRtaG-Eh4aj66mo;|2&S7pu3>@RA{ssl3+ zxIFFcnyHb1_;L+8tplhIaNV&{=8U6Y^!2D?g2t&aaM*bm&uSn+q#ira1oo>3NSA7M z$^sM59V=hq-8$J-wGCy8SfF4wk-49;<2m&|O3difeqKQ-jxxiN923P))U`Xi*dn!J z7TOY7BVK@>Prq|nbH^;&gm_Q4=k^G^aeJRH;C}N_k>R?tv~{+zoz;p3%Qn%0ll9I$ zYOl$M{{R?$sSKoyWPwTY6aN4hk8QPlAs8x1skZxNR^|#o=|rUW6kr@;fXVlu)4~=A z$678=G(b{-?N5?67Blms+Cb@%>q=2h0n(ijY-9sV3z1HNp4p&6j)V86E3v;Vh&U92 zj6a7o=wPR%10W}^K6I@Qk)SYo;+CTaJ*X4tX(hqU1?MgCdVUl!6aZF`j5-j`Zqrikoi=7X!vqU&02wQm~DHl2323mY760E~>|Bd1Z*uWG!}Z7(HR zR@(E-f*6`bblw3N{a96FfJo071HEE|halvFJJg#?>zjSTH!2&Gw1Mf*OlN`ita^+d z>)jJppHVDJYc3})WM+0PBQY$*sw7L7AYoucAQft05iCd!`M{2JKMWiM3z@l!u>u6#(j-3JDFQ_%8cLgu0NG0 z%Nn#Z!kmWYfg!nG4{=IZEtuh>Y#u%qJW?c$?WHlX+`NEDpAVq3&stKNZ`&v3 zO2PjCTv1@+JcLuqz>H)3sv@x;#ZC!;>cj6+Qb>z~W93G2*goAUETrdP8U9qkoZ|t& zA3908A$H^tImU86)H$G7*y&Oa#KMMS9*5^qo_9U*^u;&kXRq_9Z$+Nl@=YNRN=ZZ+ z8>%|Lu>gC~`GW_7O+Cn48XO@ki$AReREr&wzj_CiIpySTPlS8SpwSvQYEj-!)RsM}6R&#|XLftVf6 zhyMUBN8dFiBDqHV7IBq$%MzIG2^srTTZqDjbZ$KlT5T{6BW7dV;+_cPVZA*ncV$~^ zq8xyO$i`_P;+Hf}87CQEQB86^>J679njBUg>1y8jrZOnO^roaoX#QwsncRJ7w|mpx zg|U(|ib-tKIW$CpOK|oMmd-F~JB=fC0^Zd3k6`-900W9pZ1fcub~{n4dT~badt|`M zMh(}^w*H7)3agF&_f5ypKekIOV=gK{yEM9gu}{V3dkNl-}sRC!b! z09bnVG?ikmq-1l{(i;Qk?ae1DB%@`WlaUE5xo0^nbDDjMj&}@qs%5yDMgtG1rsa2# z=0`2;dQhf_`z^jnmzO(^*qed;K=r7s@1A6n{{V>62NZZTuFE3?xE%}aO4>8qK9sG% z4p(U(Y63t<7@=3$9)y}YEwvkDl0XfE?en56bHStALv1cea3>~) zGfKe&triU`W3(1Mg$_+CX+3&S#yHIs!qALjhaTS;T;q?I(z}m>zW_D;MW&Nmy0_9Jf<;zED=~HIek5!UPW8I+ zH-S6{_<7;GzY?~K{{R<~1PGDb;nRCJ9|7Y4o~I`R=}l23j&*N?%YX3K49mOCDl*13 z$OGq0%L<_QQbKX*$KJHM{{V>fO=@lT4Fo8;+ZC({3~D$S+JFPozH2pfNMn{`^x~OI ze2u~(4t&LR_fm2xQVUV>EV4Ux40HZf9D;kAPSH_iiC>ZPI)jt6`T#LWGlFxqPqshS znJNL`iXsX3rEF>_cw7}30e;!0x02hKv!7PQCmz&3l(}S*LcGET02!o~W1R44#R4-? zV@OXYsiO7fm5flveQ2SHqTB6Gs0zT5)7v!b$+>t{9^_L|BIR8oDIE084*2g*h1_x6 z(}opM@dnKs2fZRUB95FZ=ng2h(X=-R`q2T7f}IF{wB!&pjsP5YIO#^#4rwAjJ*aJ| z62-NcC?pQ}#T0QlzzR-%1sg@V3~eX14Yhk?;mv01;9J}2SJO&!{n}f*Hv=btGt-}y zZ2TwqH{$Jn_86Z}Z8{l{NVDBW>YGo<6Q1}WQ`!nm^p0Rhtr#C_^iux-W$ju^R-JrN zr{O^-bPfm7uwFF$7xAx#uG%rDzNu}3%W+{F%Da8WG7q&SS5`@>C2btgDDp)KupKHqH)yL{v$1tJq5{_OirRuJj`xI>W?XyV!Mxv{{RB-^rcAjyM1F;d8J*m#}q;+<0RxT z-MN?ybAUS4uZKUgZT0S_aUQF!t)-Gk76~JOJd%uLlDn{;olieZr%70Boz)(BDkuf7 zR57S{{{Utf#iN@K6I+{uFCUqNqAY(UVs{U* z^c4;9`6caS_&mL|lf@36xvxRre`bwhIGDrYO)^<=@S%=H1pff$!Twd3)&Bqh{CQ+g zlVxjsxxi>HkZ0)SO-)nigN)Z`r(R2+Cf%jm*Jn7Vt@JHYdzh``vXDt51W?0h$?1}K6sT%eRpT@7CcAlz#{mszJ4^gvqYJ5Nane}_-{{XG{pG=KF_`fcXAye28cJc2?(&dv; zlj$4+fK#7Z^?i@_Wbo7yM7R3Zqaz^=ApsIO2N?r`MtSevrQiPmXFmhaD*jsMR<&P? zDwhh`J%=c9^UW>MCGAY|Kvq4e&nWg#ezoi*`~dJ0T0;@G)I8K(tsuI?N&f&d3}Zhm z3fX9$1n`cLqsODcpy{)~i_hjDNnTG<%)_rV_b&oir2A)sRxkemm!Fvb03%BLu_N?t z{{Y_pn6GPJ{u=%sU6PV`UciJUf4FChX*~5pGxg0?N%%GRZzQB07I>Mk0wvtI9{ja2 zdouYvefd`%2%`L>XOqXbHSAbF1$-A{sKarmwxw#zjmVd$WSBYl!zsu(h9PjBK&i`Z^3OfLyV3_pwY5Kaa< zcCLwUb#SU$RT6*Yr6l`AO4Ut8);E%EQK7EUL zf5K1Jowu^{pJW#AD*#(+g2w~C2Ws}Gh`$ZI39IcB_}p#K2yzS4e~tWK@r{dY-`lTy+zZAk9$uv79l!K*01<0aZN zZEY~@aZNN#I;pE}M|@Eg2d)hiB{qtJ4HgOQR*f88*X>F2qCdiZ^tO}t3fy~8BOR+n zrg(Q#)Z706%XDk&!<-)`29OV)2Nl(P3HTFzs7z(?HOgt0tq^#`1AMH<9}6iT45B~rQd@bP^FZ zC#yC-bXTwuf7zc!QpV%NnuBAYj@br2e4f=Z*ZVy9PAjDI?zMZUkc_XGim&s+ z0td+EyKWGkg!|@<5Eu=de)QCs);N3|hg19m{6D(3*>7omV#A}uc1siTeZ%&w#pm{Q z@bFM!*R>cq#$*vm_24afFC%6de`;x=ib0bapXWlzyr6K4@Oj41`#xv_bz7ekUPz#v z?15v>53e=8(?14038z{|3h9YF%0n4$WNBH5^%)9&SjWz~V7G}d6#ycG#&eycH7)DG z6$tzoyYB$_4&v=?T(80QB!wdP`VmS}lT?dhqwqI`%yDE<7oO-TX`heGjc3`UgQg&f|;G5!mpg54@Ii^=b26f1do+4&n$xm z23&e`Q;shsc21h%5ekDFkNJQfy-?h15zBb?!Wi}_<&)y%c06^b=F`08`24}1+s!9W z(=4>+W`-iH+_N`1@BK|*2*NAmIVmsv1L3a|PcEaaXqL@9z$uWXC15xNk%QCgPk0yb z+rqvNypr=su~)i&4AZxm@s4;xe@|R-*S%>&=Ky0Trxg9PSZHNJqe*b5yrr_U7fa*`yL(QR>pr8xfpT6=VO z=uIblOZ*hlu7R^JefVwQE8A%;?)){Tg_S~=f)Ny)dNSaH?kgdx{{Uy70?VdJEwR-t zrd1_;nfGVYA%Xp|T{`_?y@8-6c*Z~O+i5>hRkn7kro%GDb#m@-+a+;=0pxM>>rAiRjuR*ps)$MGm! z`);oB_><$;@P3Axj8+SK=1H(1$W>sZlEp)97!|}d&&Tfh8)s{TGRgt} z0GYV|0OhFM-$hf7IB?ES;x7*Bx(=fHez9pKozh^mZorTaAn;EIwN?2o{x90DH7o1Q zO8RT-`#7 zGH?F?hS7ij04jg}`qa-Q*pL3N15DY#UBG`jRB-Byx%{*%$48eR$QqN1?#_nDzR{FF zgdc{aapCCk{{Z(h{{Z*Zjj!R~;r)=zUKG8=goo$xXC|)NOQ?<}w2@aFvf+UH z9MYn=hC!I+RyoGdr$1~`abF~qA>j;Z78+iNvZjxvY5H=@g8u-Pfg;{VLUxXElh&QQ z)Fq8nlrym4WR|9zQn3@X2H||fI4g$Ee$XFUn z3l0u5@E`T1CyFJGM%!%ZBja{(xyRF*TWS!MVjKknpNnoN?Pv3knGA0E{yn9?dXtPR zn1y}EZ1s6>U4)CVm!K`4ze<_svYo4f*vK6-Q4g4|u2Mij=r>^e#wl#_GPdZ5Ub)(M z`&1f_ganf;q%beBhfd(oYmK3Bxo_e=wG3Pc*N5ZKDJS_-#lT_!SIOiJgnvqo#1uHf zGrRPKW5^t4ja3&5!1e-*EEhgg5%;FrSM3XD+!~TZT0`tra0F~~=}n!aa9KyW6oqFz zx*+?~S(xx5Q}v-CP@;)}x%Xn7Sz}S~pv@*Yq+$q<{{WQ#0F^)GP5e=D>J-#lUPVJf zUo(KC>rFfnw{g3v10(rVuPuQ6EPa3<=Sh?S*FXF;C-4+Uky&C`#@(y>OEJj$(+bn0 z5~OYJGs*j6mp_Gba}!I`qhz01D;YCF=izC@@gZ_?8Fco&*~Lb0GOK85O3FNtQAMawx~DigWT)kg z5CGJH47vURp7|7BT)}}GNFMZ@kPgN#cHs(rNBUFH8A&T}jh|H+AIhSGa+oixSZ!*YE>~0>FTGL%H$yVd(P3B-uLuc8LUqUJSXbIx)9qD5EK^0iR$68A{9q9I=$rh&Z4>%e5Q8n5grm72` zct2`Sn8mp)7uqw=){kili)Oe}(9%TM91)L7t9c5hell^;DW+q%xhEplL-Rep)g_21 zxSC>A{8%3>(`#@e#&CAOT>&j zntPE&mmkBLRunWMW7i^_NO9O_7ROmhsfcvNh=`egyxNjfn)iCIyOG0mHDRs0L0*WRdVkfl*#T0%{s1B zaGd*!PZ|Nq?h70YpK(opd)EgZ)aLhY3J;|i$i@j6p>fa%%N6b@!m;jYd1K%9quPCF zvCx$vM<$UZ@QzHMLr(d5q?nZd01BU&qk$FIdWFnVe{%xLhq{BGu5pS$TU+TCOUO`6 zqX4UnkCqKhmdTismlDQ*qIQqJe>V#P@{VR zUzJZm_o8b^v-%XDdK4+!0KX?6Wl={V2a74_&MFp+cj+Umzdk;~an}eo-5O1qu{zm&p(d7*ACcKPM18DErW%L!7=q zF=~R8kS}g1P^WB&enN^f0`{Roqim2~LId81ksrMZ6)RvFf-H12MhJ&R`_Q3LwgD_L z4ypE~2;%49=|Y7Tz#Aja=pSkxQW5$`+Jy=&k`Q2z{3Go|ZQ}GlY7{C-uoL-s{pi0g zo~DHgm9i)X*$?qG56dP$Q&6E!*Z|uvbNf&h$HftE6t^*l z0kMik4g%-dg0_KP1m)3;}Er4H@U-24G - - -
IP-Atlas
diff --git a/iplookup/ipatlas/hr.gif b/iplookup/ipatlas/hr.gif deleted file mode 100644 index 56203a0b1ca32933ed28bec387e0bc2cdb670361..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35 ncmZ?wbhEHbWMp7uXkcJCbLPzd|NnIufB+=Iz{KRj$Y2csuEPjE diff --git a/iplookup/ipatlas/ip-atlas.css b/iplookup/ipatlas/ip-atlas.css deleted file mode 100644 index a00970df6b3..00000000000 --- a/iplookup/ipatlas/ip-atlas.css +++ /dev/null @@ -1,5 +0,0 @@ -A:link { font-weight: bold; text-decoration: none; color: #005177; } -A:visited { text-decoration: none; color: #005177; font-weight: bold; } -A:hover { text-decoration: underline; } -BODY { font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12px; } -TD { font-family: Verdana, Helvetica, Arial, sans-serif; color: #000000; font-size: 12px; } diff --git a/iplookup/ipatlas/ip-atlas_prefs.php b/iplookup/ipatlas/ip-atlas_prefs.php deleted file mode 100644 index 589ba98c66b..00000000000 --- a/iplookup/ipatlas/ip-atlas_prefs.php +++ /dev/null @@ -1,246 +0,0 @@ - - - - - -<?php echo t("IP-Atlas Preferences") ?> - - - - - - - -

- -
">"."

"; -} - - -?> - -
" method="POST"> - -

"; - -} else { - - print ""; - -} - -?> - -
- - - - -
'.t("Shape:").'
".t("Size:")."
".t("Color:")."
-"; - -} elseif($drawmode == "CSS") { - -print t("Pointer:")."
"; - -print ' - - - -'; - -} - -?> - -
- - - -
-  - -

-"> - -
-[ "> ]

-
- - diff --git a/iplookup/ipatlas/languages/messages.blank.inc b/iplookup/ipatlas/languages/messages.blank.inc deleted file mode 100644 index 11a5f78b550..00000000000 --- a/iplookup/ipatlas/languages/messages.blank.inc +++ /dev/null @@ -1,182 +0,0 @@ -.inc. - -please email new language files to ivan@xpenguin.com -copy a language file to messages..inc and \ -edit what $p is on encountering an english phrase. - -please notice the punctuation and capitilization. - -change the $language variable in plotconf.inc after -creating a language file. - -*/ - -function lookup($phrase) { - switch($phrase) { - - # start translating the $p here - - case "Plotting" : - $p = ""; break; - - case "preferences" : - $p = ""; break; - - case "locate me" : - $p = ""; break; - - case "IP/Hostname:" : - $p = ""; break; - - case "You at" : - $p = ""; break; - - case "Submit" : - $p = ""; break; - - case "main" : - $p = ""; break; - -# Used in context "(host) is located in" - case "is" : - $p = ""; break; - -# Used in context "You at (host) are located in" - case "are" : - $p = ""; break; - - case "located in" : - $p = ""; break; - - case "cannot be located." : - $p = ""; break; - - case "cannot be resolved." : - $p = ""; break; - - case "is a host in the private IP address range." : - $p = ""; break; - - case "does not resolve." : - $p = ""; break; - - case "is not a valid IP address." : - $p = ""; break; - - case "Temporary lookup failure." : - $p = ""; break; - - case "IP-Atlas Preferences" : - $p = ""; break; - -# make the 'p' lowercase if possible in your language - - case "IP-Atlas preferences" : - $p = ""; break; - - case "(cookie based)" : - $p = ""; break; - - case "Draw mode (defaults guessed for your browser):" : - $p = ""; break; - - // next two phrases are combined - case "Your settings have been saved. You can now try" : - $p = ""; break; - - case "plotting something." : - $p = ""; break; - - case "Pointer Preferences (the dot that marks lat/lon):" : - $p = ""; break; - - case "Shape:" : - $p = ""; break; - - case "Size:" : - $p = ""; break; - - case "Color:" : - $p = ""; break; - - case "Pointer:" : - $p = ""; break; - - case "Other Preferences:" : - $p = ""; break; - - case "Earth Image:" : - $p = ""; break; - - case "Color" : - $p = ""; break; - - case "Grayscale" : - $p = ""; break; - - case "Save" : - $p = ""; break; - -# shape names: - case "Diamond" : - $p = ""; break; - - case "Diamond Outline" : - $p = ""; break; - - case "Square" : - $p = ""; break; - - case "Square Outline" : - $p = ""; break; - - case "Cross" : - $p = ""; break; - -# colors: - - case "red" : - $p = ""; break; - - case "white" : - $p = ""; break; - - case "yellow" : - $p = ""; break; - - case "magenta" : - $p = ""; break; - - case "cyan" : - $p = ""; break; - - case "green" : - $p = ""; break; - - case "violet" : - $p = ""; break; - - # stop here - - // return in english if the phrase couldn't be found - default: - $p = $phrase; break; - - - } - - // return english if match was blank - if($p == "") { $p = $phrase; } - - return $p; - -} - -?> diff --git a/iplookup/ipatlas/languages/messages.it.inc b/iplookup/ipatlas/languages/messages.it.inc deleted file mode 100644 index b460ffddb05..00000000000 --- a/iplookup/ipatlas/languages/messages.it.inc +++ /dev/null @@ -1,185 +0,0 @@ -.inc and \ -edit what $p is on encountering an english phrase. - -you can start off with messages.blank.inc - -please notice the punctuation and capitilization. - -change the $language variable in plotconf.inc after -creating a language file. - -*/ - -function lookup($phrase) { - switch($phrase) { - - # start translating the $p here - - case "Plotting" : - $p = "Mappa di"; break; - - case "preferences" : - $p = "preferenze"; break; - - case "locate me" : - $p = "localizzami"; break; - - case "IP/Hostname:" : - $p = "IP/Nome host:"; break; - - case "You at" : - $p = "Tu"; break; - - case "Submit" : - $p = ""; break; - - case "main" : - $p = ""; break; - -# Used in context "(host) is located in" - case "is" : - $p = "è"; break; - -# Used in context "You at (host) are located in" - case "are" : - $p = "sei"; break; - - case "located in" : - $p = "stato localizzato in"; break; - - case "cannot be located." : - $p = "non può essere localizzato."; break; - - case "cannot be resolved." : - $p = "non può essere risolto."; break; - - case "is a host in the private IP address range." : - $p = "è un host in un range di IP privati."; break; - - case "does not resolve." : - $p = "irrisolvibile."; break; - - case "is not a valid IP address." : - $p = "non è un indirizzo IP valido."; break; - - case "Temporary lookup failure." : - $p = "Errore temporaneo di lookup."; break; - - case "IP-Atlas Preferences" : - $p = "Preferenze IP-Atlas"; break; - -# make the 'p' lowercase if possible in your language - - case "IP-Atlas preferences" : - $p = "Preferenze IP-Atlas"; break; - - case "(cookie based)" : - $p = "(basato su cookie)"; break; - - case "Draw mode (defaults guessed for your browser):" : - $p = ""; break; - - // next two phrases are combined - case "Your settings have been saved. You can now try" : - $p = "Le tue impostazioni sono state salvate "; break; - - case "plotting something." : - $p = "torna indietro."; break; - - case "Pointer Preferences (the dot that marks lat/lon):" : - $p = "Preferenze puntatore (il simbolo che indica la lat/lon):"; break; - - case "Shape:" : - $p = "Forma:"; break; - - case "Size:" : - $p = "Dimensione:"; break; - - case "Color:" : - $p = "Colore:"; break; - - case "Pointer:" : - $p = "Puntatore:"; break; - -# any help here? - - case "Other Preferences:" : - $p = ""; break; - - case "Earth Image:" : - $p = ""; break; - - case "Color" : - $p = "Colore"; break; - - case "Grayscale" : - $p = ""; break; - - case "Save" : - $p = ""; break; - -# shape names: - case "Diamond" : - $p = ""; break; - - case "Diamond Outline" : - $p = ""; break; - - case "Square" : - $p = ""; break; - - case "Square Outline" : - $p = ""; break; - - case "Cross" : - $p = ""; break; - -# colors: - - case "red" : - $p = ""; break; - - case "white" : - $p = ""; break; - - case "yellow" : - $p = ""; break; - - case "magenta" : - $p = ""; break; - - case "cyan" : - $p = ""; break; - - case "green" : - $p = ""; break; - - case "violet" : - $p = ""; break; - - # stop here - - // return in english if the phrase couldn't be found - default: - $p = $phrase; break; - - - } - - if($p == "") { $p = $phrase; } - - return $p; - -} - -?> diff --git a/iplookup/ipatlas/lib.php b/iplookup/ipatlas/lib.php deleted file mode 100644 index 2d64512c664..00000000000 --- a/iplookup/ipatlas/lib.php +++ /dev/null @@ -1,13 +0,0 @@ -wwwroot.'/iplookup/ipatlas/plot.php?address='.$ip.'&user='.$user); -} - -?> diff --git a/iplookup/ipatlas/plot.inc b/iplookup/ipatlas/plot.inc deleted file mode 100644 index 4a003e94256..00000000000 --- a/iplookup/ipatlas/plot.inc +++ /dev/null @@ -1,398 +0,0 @@ - 15) and ($part[2] < 32)) { - return TRUE; - } - } - - return FALSE; - -} - -function stuffanalyze($stuff) { - -$stuff2[0] = array_values(preg_grep ("/CITY:/", $stuff)) or die("Sorry, but the lookup for this IP address failed! (CITY)"); -$stuff2[1] = array_values(preg_grep ("/STATE:/", $stuff)) or die("Sorry, but the lookup for this IP address failed! (STATE)"); -$stuff2[2] = array_values(preg_grep ("/COUNTRY:/", $stuff)) or die("Sorry, but the lookup for this IP address failed! (COUNTRY)"); -$stuff2[3] = array_values(preg_grep ("/LAT:/", $stuff)) or die("Sorry, but the lookup for this IP address failed! (LAT)"); -$stuff2[4] = array_values(preg_grep ("/LONG:/", $stuff)) or die("Sorry, but the lookup for this IP address failed! (LONG)"); - -// all the stuff2 values are actually arrays, making the following code look like crap - -// the power of $count - - if(isset($stuff2[0][0])) { - -for ($count = 0; $count < count($stuff2); $count++) { - $stuff2[$count] = $stuff2[$count][0]; - $stuff2[$count] = ucwords(strtolower(trim(substr(substr($stuff2[$count], 15), 0, -5)))); -} - - } else { - - // if no data was found - $stuff2 = array("bad", "bad", "bad", "bad", "bad"); - - } - -$count = 0; - - return $stuff2; - -} - -function getlatdata($ip) { - -global $firewall_host; -global $firewall_port; -global $use_firewall; - - - $data = array(""); - -if ($use_firewall) { - - $fp = fsockopen ($firewall_host, $firewall_port, $errno, $errstr, 30) or die("Could not open socket to proxy"); - if (!$fp) { - echo "$errstr ($errno)
\n"; - } else { - fputs ($fp, "GET http://netgeo.caida.org/perl/netgeo.cgi?target=$ip HTTP/1.0\r\nHost: netgeo.caida.org\r\n\r\n") or die("Could not write to socket"); - while (!feof($fp)) { - $packet = fgets ($fp,128) or die("Could not read from socket"); - array_push($data, $packet) or die("Could not push data into array"); - } - fclose ($fp); - } - -} else { - -$fp = fsockopen ("netgeo.caida.org", 80, $errno, $errstr, 30) or die("Could not open socket to caida.org"); -if (!$fp) { - echo "$errstr ($errno)
\n"; -} else { - fputs ($fp, "GET /perl/netgeo.cgi?target=$ip HTTP/1.0\r\nHost: netgeo.caida.org\r\n\r\n") or die("Could not write to socket"); - while (!feof($fp)) { - $packet = fgets ($fp,128) or die("Could not read from socket"); - array_push($data, $packet) or die("Could not push socket data into array"); - } - fclose ($fp); -} - -} - - // make it an array - -return $data; - -} - -function finddot($name, $cssdots, $defaultdot) { - foreach($cssdots as $x) { - list($filename, , $width, $height) = split(":", $x); - if($filename == $name) { $found = 1; $return = array($name, $width, $height); } - } -if(isset($found)) { -return $return; -} else { -$dott = $cssdots[$defaultdot]; -list($dott, , $width, $height) = split(":", $dott); -return array($dott, $width, $height); -} -} - -function getlocationcoords($lat, $lon, $width, $height) { - // some cartographers weren't mathematicians, up is apparently negative to them - $lat = ($lat * -1); - - $lat = ($lat + 90); - $lon = ($lon + 180); - $x = ($lon * ($width / 360)); - $y = ($lat * ($height / 180)); - - $x = round($x); - $y = round($y); - return array($x, $y); -} - -function getimagecoords($earthimages, $image) { - foreach($earthimages as $x) { - list($file, , $width, $height) = split(":", $x); - if($file == $image) { - $coords = array("$width", "$height"); - return $coords; - } - } -} - -function validcookie($cookie) { - if(preg_match("/.*.:.*.:.*.:.*.:.*./", $cookie)) { - return TRUE; - } else { - return FALSE; - } -} - -function isvalidimage($cookie, $earthimages, $defaultimage) { -# list(, , , $setearthimage) = split(":", $cookie); - $setearthimage = $cookie; - if(isset($setearthimage)) { - // check if the image is one actually defined, not a cookie edit - foreach($earthimages as $image) { - list($testearthimage, , , ) = split(":", $image); - if($testearthimage == $setearthimage) { - $found = 1; - } - } - if(isset($found)) { - return $setearthimage; - } else { - return $earthimages[$defaultimage]; - } - } else { - return $earthimages[$defaultimage]; - } -} - - - -function istheregd() { - global $trygd; - if($trygd == 1) { - if (@ImageTypes() & IMG_PNG) { - return TRUE; - } else { - return FALSE; - } - } else { - return FALSE; - } -} - -function checkbrowser($agent) { - if (strstr($agent, "Mozilla/4.7") || strstr($agent, "Opera 6") || strstr($agent, "Opera/6")) { - return FALSE; - } else { - return TRUE; - } -} - -function shouldrun($agent) { - - // could cause probs... dunno - global $HTTP_COOKIE_VARS; - - // check for new format of cookie with 6 parameters - if(@preg_match("/.*.:.*.:.*.:.*.:.*.:.*./", $HTTP_COOKIE_VARS["atlasprefs"])) { - list( , , , , , $drawmode) = split(":", $HTTP_COOKIE_VARS["atlasprefs"]); - } else { - $drawmode = ""; - } - - // don't try to understand below, it figures out whether - // to run it in css or gd based of prefs, server ability, and user agent. - - if(istheregd() && ($drawmode == "1")) { - return TRUE; - } elseif($drawmode == "0") { - return FALSE; - } elseif(checkbrowser($agent) && istheregd()) { - return TRUE; - } elseif(!checkbrowser($agent)) { - return FALSE; - } elseif (!istheregd()) { - return FALSE; - } - - -} - -function s10_validate_ip($in) { - if (is_string($in) && ereg('^([0-9]{1,3})\.([0-9]{1,3})\.' . - '([0-9]{1,3})\.([0-9]{1,3})$' , - $in, $part)) { - if ($part[1] <= 255 && $part[2] <= 255 && - $part[3] <= 255 && $part[4] <= 255) - return TRUE; - } - return FALSE; - } - -function getstuff($address, $local) { - - $address = trim($address); - -# some people still think that urls are hostnames -$address = str_replace("http://", "", $address); -$address = preg_replace("/\/.*$/", "", $address); - -// Security checks -$address = escapeshellcmd($address); - -$values = array(); - -$values["address"] = $address; - -if(eregi("[a-z]", $address)){ -$ipaddress = gethostbyname($address); - - if($ipaddress == $address) { - -$values["validity"] = "no"; - - } - -$values["hostname"] = $address; - -$values["ishost"] = "yes"; - -} else { - -if(s10_validate_ip($address)) { - -$ipaddress = $address; - $values["hostname"] = ""; -} else { -$values["validity"] = "no"; -} - -} - - if(!isset($values["validity"])) { - if(s10_rfc_1918_ip($ipaddress)) { - $private = "yes"; - } else { - $private = "no"; - } - } else { - $private = "no"; - } - - if(!isset($ipaddress)) { $ipaddress = ""; } - -$values["ipaddress"] = $ipaddress; - -if(!isset($values["validity"]) && ($private == "no")) { - -$stuff = getlatdata($ipaddress); - -list( - - $values["city"], - $values["state"], - $values["country"], - $values["lat"], - $values["lon"] - -) = stuffanalyze($stuff); - -$desc = ""; - -// check if it is the user's ip address -if($local == 1) { $desc .= t("You at"); } - -// add the ip address and hostname -$desc .= "$values[hostname] ($values[ipaddress]) "; - -// use "are" if it is the user's ip address -if($local == 1) { $desc .= t("are"); } else { $desc .= t("is"); } - -$desc .= " ".t("located in")." "; - -// add the city if it's there -if($values["city"]) { -$desc .= "$values[city], "; -} - -// add the state if its there -if($values["state"]) { -$desc .= "$values[state], "; -} - -if($values["country"]) { -// make the country code capital so its ready for lookup -$values["country"] = strtoupper($values["country"]); -// convert the country code to a country name -$countries = file("countries.txt") or die("Could not open countries file"); -$precountry = array_values(preg_grep("/$values[country] /", $countries)); -$values["country"] = trim(substr($precountry[0], 4)); -$desc .= "$values[country]."; -} - - $desc .= " ($values[lat], $values[lon])"; - - $state = $values["state"]; - $city = $values["city"]; - -// decide if address can't resolve, be located, or if it's fine -if($values["lat"] == "0.00" && $values["lon"] == "0.00" && (@($state != "bad" && $city != "bad"))) { - $values["desc"] = "$values[address] ".t("cannot be located."); -$values["lat"] = ""; -$values["lon"] = ""; -} elseif($values["lat"] == "" && $values["lon"] == "") { - $values["desc"] = "$values[address] ".t("cannot be located."); -} else { -$values["desc"] = $desc; -} - -} else { - -// check if it was a host before and decide on an error message - -if($private == "yes") { - $values["desc"] = "$address ".t("is a host in the private IP address range."); -} elseif(@($values["state"] == "bad" && $values["city"] == "bad")) { -$values["desc"] = t("Temporary lookup failure."); -} elseif(isset($values["ishost"])) { -$values["desc"] = "$address ".t("does not resolve."); -} else { -$values["desc"] = "$address ".t("is not a valid IP address."); -} - -// some blank lat/lon for the image script or it will plot us in the center -$values["lon"] = ""; -$values["lat"] = ""; - -} - -return($values); -} - -?> diff --git a/iplookup/ipatlas/plot.php b/iplookup/ipatlas/plot.php deleted file mode 100644 index 838469b509a..00000000000 --- a/iplookup/ipatlas/plot.php +++ /dev/null @@ -1,139 +0,0 @@ -$fullname [$user->city, $user->country] : "; -} else { - $username = ""; -} - -// cleanup -if (isset($HTTP_GET_VARS["lastquery"])) { - $HTTP_GET_VARS["lastquery"] = clean_param($HTTP_GET_VARS["lastquery"], PARAM_HOST); -} - -// check if it is the user's ip, or another host - -if(!isset($HTTP_GET_VARS["address"]) || ($HTTP_GET_VARS["address"] == "")) { - $address = $HTTP_SERVER_VARS['REMOTE_ADDR']; - $local = 1; -} else { - $HTTP_GET_VARS["address"] = clean_param($HTTP_GET_VARS["address"], PARAM_HOST); - $address = $HTTP_GET_VARS["address"]; - $local = 0; -} - -// this is the most important function, gets lat/lon and description of location -$values = getstuff($address, $local) or die("Error in plot.inc"); - -if(isset($logging) && is_writable("plotlog.txt")) { - $log = @fopen("plotlog.txt", "a") or print ""; - @fputs($log, $HTTP_SERVER_VARS["REMOTE_ADDR"] ."\t". date("F j, Y, g:i a") . "\t$address\t$values[address]\t$values[lat]\t$values[lon]\n") or print ""; -@fclose($log); -} - -if(isset($HTTP_COOKIE_VARS["atlasprefs"]) && validcookie($HTTP_COOKIE_VARS["atlasprefs"])) { -list( , , , $imagething) = split(":", $HTTP_COOKIE_VARS["atlasprefs"]); -$imagething = clean_param($imagething, PARAM_FILE); -$earthimage = isvalidimage($imagething, $earthimages, $defaultimage); -} else { -$earthimage = $earthimages[$defaultimage]; -} - -if(strstr($earthimage, ":")) { - list($earthimage, , , ) = split(":", $earthimage); -} - -// check if we need to run it in css mode -if(!shouldrun($HTTP_SERVER_VARS['HTTP_USER_AGENT'])) { - -list($width, $height) = getimagecoords($earthimages, $earthimage); - - // make sure some coords were found - if($values["lat"] == "" || $values["lon"] == "") { - - $display = " "; - $extracss = ""; - -} else { - -list($x, $y) = getlocationcoords($values["lat"], $values["lon"], $width, $height); - -if(isset($HTTP_COOKIE_VARS["atlasprefs"])) { -list( , , , , $dotname) = split(":", $HTTP_COOKIE_VARS["atlasprefs"]); -$dotname = clean_param($dotname, PARAM_FILE); -list($thedot, $dotwidth, $dotheight) = finddot($dotname, $cssdots, $defaultdot); -} else { -$dotname = $cssdots[$defaultdot]; -list($dotname, , , ) = split(":", $dotname); -$dotname = clean_param($dotname, PARAM_FILE); -list($thedot, $dotwidth, $dotheight) = finddot($dotname, $cssdots, $defaultdot); -} - -// magical formula for placing the css dot -$x = ($x - floor($dotwidth / 2)); -$y = ($y - floor($dotheight / 2)); - -$extracss = ""; -$display = "
"; - - } - -} else { - - // gd mode - -list($width, $height) = getimagecoords($earthimages, $earthimage) or die("Unable to find width/height for image $earthimage in config file"); -$extracss = ""; -$display = "\"\""; - -} - -# START HTML - -print ' - -'.t("Plotting").' '.$values["address"].' -'.$extracss.' - - - - - - - - -
'.$display.'
- - -
-'; - -if(isset($address)) { -print "$username $values[desc]"; -} - -$PHP_SELF = 'plot.php'; - -print ' -

- -
-'.t("IP/Hostname:").' -[ '.t("preferences").' ] -[ '.t("locate me").' ] -
- -'; - -include("footer.inc"); - -print ""; - -?> diff --git a/iplookup/ipatlas/plotconf.inc b/iplookup/ipatlas/plotconf.inc deleted file mode 100644 index c027565acdb..00000000000 --- a/iplookup/ipatlas/plotconf.inc +++ /dev/null @@ -1,61 +0,0 @@ -gdversion == 1 or $CFG->gdversion == 2) { - $trygd = "1"; -} else { - $trygd = "0"; -} - -# language (look in language/ dir for language files) -$language = "en"; global $language; - -include("translate.inc"); - -# display warnings? set to "0" if there are warnings -# on the screen. report these to ivan@xpenguin.com so -# this option will become unnessessary. -$warnings = "1"; - -# earth images -# url path:name:width:height -# everything must be accurate! -# take new image names out of the t() - -$earthimages = array(); -$earthimages[0] = "earth_620.jpg:".t("Color").":620:310"; - -# which image out of those is the default? -$defaultimage = 0; - -# css dots for netscape 4 users and systems without GD -# url path:name:width:height -$cssdots = array(); -$cssdots[0] = "reddot.gif:Red 7x7:7:7"; -$cssdots[1] = "yellowdot.gif:Yellow 7x7:7:7"; -$defaultdot = 0; - -# block user agents "libwww-perl" "lwp-trivial" "LWP::Simple" "PHP/" -$blockbadagents = 1; - -# log entries? comment the line to disable. -#$logging = "yes"; - -# path to the cookie -$cookiepath = "/"; - -# set $use_firewall to "1" if behind a proxy -if ($CFG->proxyhost and $CFG->proxyport) { - $use_firewall="1"; - $firewall_host=$CFG->proxyhost; - $firewall_port=$CFG->proxyport; -} else { - $use_firewall=""; - $firewall_host="localhost"; - $firewall_port=3128; -} - -?> diff --git a/iplookup/ipatlas/plotimage.php b/iplookup/ipatlas/plotimage.php deleted file mode 100644 index 3ceecb01939..00000000000 --- a/iplookup/ipatlas/plotimage.php +++ /dev/null @@ -1,91 +0,0 @@ - 8 || $setsize < 2) { - $setsize = 2; -} - -$im = @ImageCreate ($width, $height) - or die ("Cannot Initialize new GD image stream"); -$background_color = ImageColorAllocate ($im, 255, 255, 255); - - -// color table -if($setcolor == "red") { $r = "255"; $g = "0"; $b = "0"; } -elseif($setcolor == "white") { $r = "255"; $g = "255"; $b = "254"; } -elseif($setcolor == "yellow") { $r = "255"; $g = "255"; $b = "0"; } -elseif($setcolor == "magenta") { $r = "255"; $g = "0"; $b = "255"; } -elseif($setcolor == "cyan") { $r = "0"; $g = "255"; $b = "255"; } -elseif($setcolor == "green") { $r = "0"; $g = "225"; $b = "0"; } -elseif($setcolor == "violet") { $r = "191"; $g = "0"; $b = "255"; } -else { $r = "255"; $g = "0"; $b = "0"; } - -$loc_color = ImageColorAllocate ($im, $r, $g, $b); - -if($lat == "" && $lon == "") { } else { - -list($x, $y) = getlocationcoords($lat, $lon, $width, $height); - -if($setshape == "Diamond") { - ImageLine($im, ($x - $setsize), $y, $x, ($y + $setsize), $loc_color); - ImageLine($im, ($x - $setsize), $y, $x, ($y - $setsize), $loc_color); - ImageLine($im, ($x + $setsize), $y, $x, ($y + $setsize), $loc_color); - ImageLine($im, ($x + $setsize), $y, $x, ($y - $setsize), $loc_color); - ImageFill($im, $x, $y, $loc_color); -} elseif($setshape == "Diamond Outline") { - ImageLine($im, ($x - $setsize), $y, $x, ($y + $setsize), $loc_color); - ImageLine($im, ($x - $setsize), $y, $x, ($y - $setsize), $loc_color); - ImageLine($im, ($x + $setsize), $y, $x, ($y + $setsize), $loc_color); - ImageLine($im, ($x + $setsize), $y, $x, ($y - $setsize), $loc_color); -} elseif($setshape == "Square") { - ImageFilledRectangle($im, ($x - $setsize), ($y - $setsize), ($x + $setsize), ($y + $setsize), $loc_color); -} elseif($setshape == "Square Outline") { - ImageRectangle($im, ($x - $setsize), ($y - $setsize), ($x + $setsize), ($y + $setsize), $loc_color); -} elseif($setshape == "Cross") { - ImageLine($im, ($x - $setsize), $y, ($x + $setsize), $y, $loc_color); - ImageLine($im, $x, ($y - $setsize), $x, ($y + $setsize), $loc_color); -} else { -// draw a diamond if error - ImageLine($im, ($x - $setsize), $y, $x, ($y + $setsize), $loc_color); - ImageLine($im, ($x - $setsize), $y, $x, ($y - $setsize), $loc_color); - ImageLine($im, ($x + $setsize), $y, $x, ($y + $setsize), $loc_color); - ImageLine($im, ($x + $setsize), $y, $x, ($y - $setsize), $loc_color); - ImageFill($im, $x, $y, $loc_color); -} - -} - - -ImageColorTransparent ($im, $background_color); -Header("Pragma: no-cache"); -Header("Expires: Thu, 26-Oct-1972 12:00:00"); -Header("Content-type: image/png"); -ImagePng ($im); -ImageDestroy($im); - - -?> diff --git a/iplookup/ipatlas/reddot.gif b/iplookup/ipatlas/reddot.gif deleted file mode 100644 index 680195710307eaf174e36641978b718cebd20264..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53 zcmZ?wbhEHbWM^P!XkcLY4@Cd}EB<6*eGD8F72u_xfrYg DQC17^ diff --git a/iplookup/ipatlas/translate.inc b/iplookup/ipatlas/translate.inc deleted file mode 100644 index 7b9197190fe..00000000000 --- a/iplookup/ipatlas/translate.inc +++ /dev/null @@ -1,14 +0,0 @@ - \ No newline at end of file diff --git a/iplookup/ipatlas/yellowdot.gif b/iplookup/ipatlas/yellowdot.gif deleted file mode 100644 index b43029def79f6b1579c29f6c18899e344bbc9ee2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53 zcmZ?wbhEHbWM^P!XkcLY{~w6{EB<6*eGD8F72u_xfrYg DcrOg^ diff --git a/iplookup/marker.gif b/iplookup/marker.gif new file mode 100644 index 0000000000000000000000000000000000000000..f24822dc9d38cd38460058904c04c1aa3a59ed1a GIT binary patch literal 649 zcmZ?wbhEHb6k?ELIOfOz1dI#}OpJ`ojEpRdjI2ydY)nk-OiUci%v{XO+$=2otgM1; zY{G18BJAw4TwL;8T&g@g8oazFf`S&p!VaRMPGVxN;^JPClHQV%Au=+dGBRPZva#~= z2?`2{3JUqEs^uCQ6&f0q8XC1)T6J1l%{n@*IyzI0j24=iEiyA(Y-YC7!eXPf^=2EJ ztu{8h?d%RXI2?3vIN|Jk&eipzo7+tfk9%HT552u#`1-!`^Lyj(|1luoQ()kqkdS|& zq5pwsCD^hUV^OCI%jHMMZHQ2Bw}S7H&<4 zx$`u+S$bGRE$1zFuoPX?#LR28Vuckia}$H!3RBY+dR+{B%T0wD7=(Av<7<^zF5THG zyReW|p1jr*tpBO>Pq4#bO>R~= 4.0.4, +and --enable-shmop passed at configure time, see +http://us2.php.net/manual/en/ref.shmop.php +In addition, you should call geoip_load_shared_mem +before calling geoip_open. See sample_city.php for an +example of shared memory caching. + +Working with PHP5. +geoip_country_code_by_addr should work +with PHP. For help with the other +routines, please contact support@maxmind.com + +Thanks to Jim Winstead. diff --git a/lib/geoip/geoip.inc b/lib/geoip/geoip.inc new file mode 100644 index 00000000000..a0954699575 --- /dev/null +++ b/lib/geoip/geoip.inc @@ -0,0 +1,498 @@ + 0, "AP" => 1, "EU" => 2, "AD" => 3, "AE" => 4, "AF" => 5, +"AG" => 6, "AI" => 7, "AL" => 8, "AM" => 9, "AN" => 10, "AO" => 11, +"AQ" => 12, "AR" => 13, "AS" => 14, "AT" => 15, "AU" => 16, "AW" => 17, +"AZ" => 18, "BA" => 19, "BB" => 20, "BD" => 21, "BE" => 22, "BF" => 23, +"BG" => 24, "BH" => 25, "BI" => 26, "BJ" => 27, "BM" => 28, "BN" => 29, +"BO" => 30, "BR" => 31, "BS" => 32, "BT" => 33, "BV" => 34, "BW" => 35, +"BY" => 36, "BZ" => 37, "CA" => 38, "CC" => 39, "CD" => 40, "CF" => 41, +"CG" => 42, "CH" => 43, "CI" => 44, "CK" => 45, "CL" => 46, "CM" => 47, +"CN" => 48, "CO" => 49, "CR" => 50, "CU" => 51, "CV" => 52, "CX" => 53, +"CY" => 54, "CZ" => 55, "DE" => 56, "DJ" => 57, "DK" => 58, "DM" => 59, +"DO" => 60, "DZ" => 61, "EC" => 62, "EE" => 63, "EG" => 64, "EH" => 65, +"ER" => 66, "ES" => 67, "ET" => 68, "FI" => 69, "FJ" => 70, "FK" => 71, +"FM" => 72, "FO" => 73, "FR" => 74, "FX" => 75, "GA" => 76, "GB" => 77, +"GD" => 78, "GE" => 79, "GF" => 80, "GH" => 81, "GI" => 82, "GL" => 83, +"GM" => 84, "GN" => 85, "GP" => 86, "GQ" => 87, "GR" => 88, "GS" => 89, +"GT" => 90, "GU" => 91, "GW" => 92, "GY" => 93, "HK" => 94, "HM" => 95, +"HN" => 96, "HR" => 97, "HT" => 98, "HU" => 99, "ID" => 100, "IE" => 101, +"IL" => 102, "IN" => 103, "IO" => 104, "IQ" => 105, "IR" => 106, "IS" => 107, +"IT" => 108, "JM" => 109, "JO" => 110, "JP" => 111, "KE" => 112, "KG" => 113, +"KH" => 114, "KI" => 115, "KM" => 116, "KN" => 117, "KP" => 118, "KR" => 119, +"KW" => 120, "KY" => 121, "KZ" => 122, "LA" => 123, "LB" => 124, "LC" => 125, +"LI" => 126, "LK" => 127, "LR" => 128, "LS" => 129, "LT" => 130, "LU" => 131, +"LV" => 132, "LY" => 133, "MA" => 134, "MC" => 135, "MD" => 136, "MG" => 137, +"MH" => 138, "MK" => 139, "ML" => 140, "MM" => 141, "MN" => 142, "MO" => 143, +"MP" => 144, "MQ" => 145, "MR" => 146, "MS" => 147, "MT" => 148, "MU" => 149, +"MV" => 150, "MW" => 151, "MX" => 152, "MY" => 153, "MZ" => 154, "NA" => 155, +"NC" => 156, "NE" => 157, "NF" => 158, "NG" => 159, "NI" => 160, "NL" => 161, +"NO" => 162, "NP" => 163, "NR" => 164, "NU" => 165, "NZ" => 166, "OM" => 167, +"PA" => 168, "PE" => 169, "PF" => 170, "PG" => 171, "PH" => 172, "PK" => 173, +"PL" => 174, "PM" => 175, "PN" => 176, "PR" => 177, "PS" => 178, "PT" => 179, +"PW" => 180, "PY" => 181, "QA" => 182, "RE" => 183, "RO" => 184, "RU" => 185, +"RW" => 186, "SA" => 187, "SB" => 188, "SC" => 189, "SD" => 190, "SE" => 191, +"SG" => 192, "SH" => 193, "SI" => 194, "SJ" => 195, "SK" => 196, "SL" => 197, +"SM" => 198, "SN" => 199, "SO" => 200, "SR" => 201, "ST" => 202, "SV" => 203, +"SY" => 204, "SZ" => 205, "TC" => 206, "TD" => 207, "TF" => 208, "TG" => 209, +"TH" => 210, "TJ" => 211, "TK" => 212, "TM" => 213, "TN" => 214, "TO" => 215, +"TL" => 216, "TR" => 217, "TT" => 218, "TV" => 219, "TW" => 220, "TZ" => 221, +"UA" => 222, "UG" => 223, "UM" => 224, "US" => 225, "UY" => 226, "UZ" => 227, +"VA" => 228, "VC" => 229, "VE" => 230, "VG" => 231, "VI" => 232, "VN" => 233, +"VU" => 234, "WF" => 235, "WS" => 236, "YE" => 237, "YT" => 238, "RS" => 239, +"ZA" => 240, "ZM" => 241, "ME" => 242, "ZW" => 243, "A1" => 244, "A2" => 245, +"O1" => 246, "AX" => 247, "GG" => 248, "IM" => 249, "JE" => 250 +); + var $GEOIP_COUNTRY_CODES = array( +"", "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" +); + var $GEOIP_COUNTRY_CODES3 = array( +"","AP","EU","AND","ARE","AFG","ATG","AIA","ALB","ARM","ANT","AGO","AQ","ARG", +"ASM","AUT","AUS","ABW","AZE","BIH","BRB","BGD","BEL","BFA","BGR","BHR","BDI", +"BEN","BMU","BRN","BOL","BRA","BHS","BTN","BV","BWA","BLR","BLZ","CAN","CC", +"COD","CAF","COG","CHE","CIV","COK","CHL","CMR","CHN","COL","CRI","CUB","CPV", +"CX","CYP","CZE","DEU","DJI","DNK","DMA","DOM","DZA","ECU","EST","EGY","ESH", +"ERI","ESP","ETH","FIN","FJI","FLK","FSM","FRO","FRA","FX","GAB","GBR","GRD", +"GEO","GUF","GHA","GIB","GRL","GMB","GIN","GLP","GNQ","GRC","GS","GTM","GUM", +"GNB","GUY","HKG","HM","HND","HRV","HTI","HUN","IDN","IRL","ISR","IND","IO", +"IRQ","IRN","ISL","ITA","JAM","JOR","JPN","KEN","KGZ","KHM","KIR","COM","KNA", +"PRK","KOR","KWT","CYM","KAZ","LAO","LBN","LCA","LIE","LKA","LBR","LSO","LTU", +"LUX","LVA","LBY","MAR","MCO","MDA","MDG","MHL","MKD","MLI","MMR","MNG","MAC", +"MNP","MTQ","MRT","MSR","MLT","MUS","MDV","MWI","MEX","MYS","MOZ","NAM","NCL", +"NER","NFK","NGA","NIC","NLD","NOR","NPL","NRU","NIU","NZL","OMN","PAN","PER", +"PYF","PNG","PHL","PAK","POL","SPM","PCN","PRI","PSE","PRT","PLW","PRY","QAT", +"REU","ROU","RUS","RWA","SAU","SLB","SYC","SDN","SWE","SGP","SHN","SVN","SJM", +"SVK","SLE","SMR","SEN","SOM","SUR","STP","SLV","SYR","SWZ","TCA","TCD","TF", +"TGO","THA","TJK","TKL","TLS","TKM","TUN","TON","TUR","TTO","TUV","TWN","TZA", +"UKR","UGA","UM","USA","URY","UZB","VAT","VCT","VEN","VGB","VIR","VNM","VUT", +"WLF","WSM","YEM","YT","SRB","ZAF","ZMB","MNE","ZWE","A1","A2","O1", +"ALA","GGY","IMN","JEY" + ); + var $GEOIP_COUNTRY_NAMES = array( +"", "Asia/Pacific Region", "Europe", "Andorra", "United Arab Emirates", +"Afghanistan", "Antigua and Barbuda", "Anguilla", "Albania", "Armenia", +"Netherlands Antilles", "Angola", "Antarctica", "Argentina", "American Samoa", +"Austria", "Australia", "Aruba", "Azerbaijan", "Bosnia and Herzegovina", +"Barbados", "Bangladesh", "Belgium", "Burkina Faso", "Bulgaria", "Bahrain", +"Burundi", "Benin", "Bermuda", "Brunei Darussalam", "Bolivia", "Brazil", +"Bahamas", "Bhutan", "Bouvet Island", "Botswana", "Belarus", "Belize", +"Canada", "Cocos (Keeling) Islands", "Congo, The Democratic Republic of the", +"Central African Republic", "Congo", "Switzerland", "Cote D'Ivoire", "Cook +Islands", "Chile", "Cameroon", "China", "Colombia", "Costa Rica", "Cuba", "Cape +Verde", "Christmas Island", "Cyprus", "Czech Republic", "Germany", "Djibouti", +"Denmark", "Dominica", "Dominican Republic", "Algeria", "Ecuador", "Estonia", +"Egypt", "Western Sahara", "Eritrea", "Spain", "Ethiopia", "Finland", "Fiji", +"Falkland Islands (Malvinas)", "Micronesia, Federated States of", "Faroe +Islands", "France", "France, Metropolitan", "Gabon", "United Kingdom", +"Grenada", "Georgia", "French Guiana", "Ghana", "Gibraltar", "Greenland", +"Gambia", "Guinea", "Guadeloupe", "Equatorial Guinea", "Greece", "South Georgia +and the South Sandwich Islands", "Guatemala", "Guam", "Guinea-Bissau", +"Guyana", "Hong Kong", "Heard Island and McDonald Islands", "Honduras", +"Croatia", "Haiti", "Hungary", "Indonesia", "Ireland", "Israel", "India", +"British Indian Ocean Territory", "Iraq", "Iran, Islamic Republic of", +"Iceland", "Italy", "Jamaica", "Jordan", "Japan", "Kenya", "Kyrgyzstan", +"Cambodia", "Kiribati", "Comoros", "Saint Kitts and Nevis", "Korea, Democratic +People's Republic of", "Korea, Republic of", "Kuwait", "Cayman Islands", +"Kazakstan", "Lao People's Democratic Republic", "Lebanon", "Saint Lucia", +"Liechtenstein", "Sri Lanka", "Liberia", "Lesotho", "Lithuania", "Luxembourg", +"Latvia", "Libyan Arab Jamahiriya", "Morocco", "Monaco", "Moldova, Republic +of", "Madagascar", "Marshall Islands", "Macedonia", +"Mali", "Myanmar", "Mongolia", "Macau", "Northern Mariana Islands", +"Martinique", "Mauritania", "Montserrat", "Malta", "Mauritius", "Maldives", +"Malawi", "Mexico", "Malaysia", "Mozambique", "Namibia", "New Caledonia", +"Niger", "Norfolk Island", "Nigeria", "Nicaragua", "Netherlands", "Norway", +"Nepal", "Nauru", "Niue", "New Zealand", "Oman", "Panama", "Peru", "French +Polynesia", "Papua New Guinea", "Philippines", "Pakistan", "Poland", "Saint +Pierre and Miquelon", "Pitcairn Islands", "Puerto Rico", "Palestinian Territory", +"Portugal", "Palau", "Paraguay", "Qatar", "Reunion", "Romania", +"Russian Federation", "Rwanda", "Saudi Arabia", "Solomon Islands", +"Seychelles", "Sudan", "Sweden", "Singapore", "Saint Helena", "Slovenia", +"Svalbard and Jan Mayen", "Slovakia", "Sierra Leone", "San Marino", "Senegal", +"Somalia", "Suriname", "Sao Tome and Principe", "El Salvador", "Syrian Arab +Republic", "Swaziland", "Turks and Caicos Islands", "Chad", "French Southern +Territories", "Togo", "Thailand", "Tajikistan", "Tokelau", "Turkmenistan", +"Tunisia", "Tonga", "Timor-Leste", "Turkey", "Trinidad and Tobago", "Tuvalu", +"Taiwan", "Tanzania, United Republic of", "Ukraine", +"Uganda", "United States Minor Outlying Islands", "United States", "Uruguay", +"Uzbekistan", "Holy See (Vatican City State)", "Saint Vincent and the +Grenadines", "Venezuela", "Virgin Islands, British", "Virgin Islands, U.S.", +"Vietnam", "Vanuatu", "Wallis and Futuna", "Samoa", "Yemen", "Mayotte", +"Serbia", "South Africa", "Zambia", "Montenegro", "Zimbabwe", +"Anonymous Proxy","Satellite Provider","Other", +"Aland Islands","Guernsey","Isle of Man","Jersey" +); +} +function geoip_load_shared_mem ($file) { + + $fp = fopen($file, "rb"); + if (!$fp) { + print "error opening $file: $php_errormsg\n"; + exit; + } + $s_array = fstat($fp); + $size = $s_array['size']; + if ($shmid = @shmop_open (GEOIP_SHM_KEY, "w", 0, 0)) { + shmop_delete ($shmid); + shmop_close ($shmid); + } + $shmid = shmop_open (GEOIP_SHM_KEY, "c", 0644, $size); + shmop_write ($shmid, fread($fp, $size), 0); + shmop_close ($shmid); +} + +function _setup_segments($gi){ + $gi->databaseType = GEOIP_COUNTRY_EDITION; + $gi->record_length = STANDARD_RECORD_LENGTH; + if ($gi->flags & GEOIP_SHARED_MEMORY) { + $offset = @shmop_size ($gi->shmid) - 3; + for ($i = 0; $i < STRUCTURE_INFO_MAX_SIZE; $i++) { + $delim = @shmop_read ($gi->shmid, $offset, 3); + $offset += 3; + if ($delim == (chr(255).chr(255).chr(255))) { + $gi->databaseType = ord(@shmop_read ($gi->shmid, $offset, 1)); + $offset++; + + if ($gi->databaseType == GEOIP_REGION_EDITION_REV0){ + $gi->databaseSegments = GEOIP_STATE_BEGIN_REV0; + } else if ($gi->databaseType == GEOIP_REGION_EDITION_REV1){ + $gi->databaseSegments = GEOIP_STATE_BEGIN_REV1; + } else if (($gi->databaseType == GEOIP_CITY_EDITION_REV0)|| + ($gi->databaseType == GEOIP_CITY_EDITION_REV1) + || ($gi->databaseType == GEOIP_ORG_EDITION) + || ($gi->databaseType == GEOIP_ISP_EDITION) + || ($gi->databaseType == GEOIP_ASNUM_EDITION)){ + $gi->databaseSegments = 0; + $buf = @shmop_read ($gi->shmid, $offset, SEGMENT_RECORD_LENGTH); + for ($j = 0;$j < SEGMENT_RECORD_LENGTH;$j++){ + $gi->databaseSegments += (ord($buf[$j]) << ($j * 8)); + } + if (($gi->databaseType == GEOIP_ORG_EDITION)|| + ($gi->databaseType == GEOIP_ISP_EDITION)) { + $gi->record_length = ORG_RECORD_LENGTH; + } + } + break; + } else { + $offset -= 4; + } + } + if (($gi->databaseType == GEOIP_COUNTRY_EDITION)|| + ($gi->databaseType == GEOIP_PROXY_EDITION)|| + ($gi->databaseType == GEOIP_NETSPEED_EDITION)){ + $gi->databaseSegments = GEOIP_COUNTRY_BEGIN; + } + } else { + $filepos = ftell($gi->filehandle); + fseek($gi->filehandle, -3, SEEK_END); + for ($i = 0; $i < STRUCTURE_INFO_MAX_SIZE; $i++) { + $delim = fread($gi->filehandle,3); + if ($delim == (chr(255).chr(255).chr(255))){ + $gi->databaseType = ord(fread($gi->filehandle,1)); + if ($gi->databaseType == GEOIP_REGION_EDITION_REV0){ + $gi->databaseSegments = GEOIP_STATE_BEGIN_REV0; + } + else if ($gi->databaseType == GEOIP_REGION_EDITION_REV1){ + $gi->databaseSegments = GEOIP_STATE_BEGIN_REV1; + } else if (($gi->databaseType == GEOIP_CITY_EDITION_REV0) || + ($gi->databaseType == GEOIP_CITY_EDITION_REV1) || + ($gi->databaseType == GEOIP_ORG_EDITION) || + ($gi->databaseType == GEOIP_ISP_EDITION) || + ($gi->databaseType == GEOIP_ASNUM_EDITION)){ + $gi->databaseSegments = 0; + $buf = fread($gi->filehandle,SEGMENT_RECORD_LENGTH); + for ($j = 0;$j < SEGMENT_RECORD_LENGTH;$j++){ + $gi->databaseSegments += (ord($buf[$j]) << ($j * 8)); + } + if ($gi->databaseType == GEOIP_ORG_EDITION || + $gi->databaseType == GEOIP_ISP_EDITION) { + $gi->record_length = ORG_RECORD_LENGTH; + } + } + break; + } else { + fseek($gi->filehandle, -4, SEEK_CUR); + } + } + if (($gi->databaseType == GEOIP_COUNTRY_EDITION)|| + ($gi->databaseType == GEOIP_PROXY_EDITION)|| + ($gi->databaseType == GEOIP_NETSPEED_EDITION)){ + $gi->databaseSegments = GEOIP_COUNTRY_BEGIN; + } + fseek($gi->filehandle,$filepos,SEEK_SET); + } + return $gi; +} + +function geoip_open($filename, $flags) { + $gi = new GeoIP; + $gi->flags = $flags; + if ($gi->flags & GEOIP_SHARED_MEMORY) { + $gi->shmid = @shmop_open (GEOIP_SHM_KEY, "a", 0, 0); + } else { + $gi->filehandle = fopen($filename,"rb"); + if ($gi->flags & GEOIP_MEMORY_CACHE) { + $s_array = fstat($gi->filehandle); + $gi->memory_buffer = fread($gi->filehandle, $s_array['size']); + } + } + + $gi = _setup_segments($gi); + return $gi; +} + +function geoip_close($gi) { + if ($gi->flags & GEOIP_SHARED_MEMORY) { + return true; + } + + return fclose($gi->filehandle); +} + +function geoip_country_id_by_name($gi, $name) { + $addr = gethostbyname($name); + if (!$addr || $addr == $name) { + return false; + } + return geoip_country_id_by_addr($gi, $addr); +} + +function geoip_country_code_by_name($gi, $name) { + $country_id = geoip_country_id_by_name($gi,$name); + if ($country_id !== false) { + return $gi->GEOIP_COUNTRY_CODES[$country_id]; + } + return false; +} + +function geoip_country_name_by_name($gi, $name) { + $country_id = geoip_country_id_by_name($gi,$name); + if ($country_id !== false) { + return $gi->GEOIP_COUNTRY_NAMES[$country_id]; + } + return false; +} + +function geoip_country_id_by_addr($gi, $addr) { + $ipnum = ip2long($addr); + return _geoip_seek_country($gi, $ipnum) - GEOIP_COUNTRY_BEGIN; +} + +function geoip_country_code_by_addr($gi, $addr) { + if ($gi->databaseType == GEOIP_CITY_EDITION_REV1) { + $record = geoip_record_by_addr($gi,$addr); + return $record->country_code; + } else { + $country_id = geoip_country_id_by_addr($gi,$addr); + if ($country_id !== false) { + return $gi->GEOIP_COUNTRY_CODES[$country_id]; + } + } + return false; +} + +function geoip_country_name_by_addr($gi, $addr) { + if ($gi->databaseType == GEOIP_CITY_EDITION_REV1) { + $record = geoip_record_by_addr($gi,$addr); + return $record->country_name; + } else { + $country_id = geoip_country_id_by_addr($gi,$addr); + if ($country_id !== false) { + return $gi->GEOIP_COUNTRY_NAMES[$country_id]; + } + } + return false; +} + +function _geoip_seek_country($gi, $ipnum) { + $offset = 0; + for ($depth = 31; $depth >= 0; --$depth) { + if ($gi->flags & GEOIP_MEMORY_CACHE) { + $buf = substr($gi->memory_buffer, + 2 * $gi->record_length * $offset, + 2 * $gi->record_length); + } elseif ($gi->flags & GEOIP_SHARED_MEMORY) { + $buf = @shmop_read ($gi->shmid, + 2 * $gi->record_length * $offset, + 2 * $gi->record_length ); + } else { + fseek($gi->filehandle, 2 * $gi->record_length * $offset, SEEK_SET) == 0 + or die("fseek failed"); + $buf = fread($gi->filehandle, 2 * $gi->record_length); + } + $x = array(0,0); + for ($i = 0; $i < 2; ++$i) { + for ($j = 0; $j < $gi->record_length; ++$j) { + $x[$i] += ord($buf[$gi->record_length * $i + $j]) << ($j * 8); + } + } + if ($ipnum & (1 << $depth)) { + if ($x[1] >= $gi->databaseSegments) { + return $x[1]; + } + $offset = $x[1]; + } else { + if ($x[0] >= $gi->databaseSegments) { + return $x[0]; + } + $offset = $x[0]; + } + } + trigger_error("error traversing database - perhaps it is corrupt?", E_USER_ERROR); + return false; +} + +function _get_org($gi,$ipnum){ + $seek_org = _geoip_seek_country($gi,$ipnum); + if ($seek_org == $gi->databaseSegments) { + return NULL; + } + $record_pointer = $seek_org + (2 * $gi->record_length - 1) * $gi->databaseSegments; + if ($gi->flags & GEOIP_SHARED_MEMORY) { + $org_buf = @shmop_read ($gi->shmid, $record_pointer, MAX_ORG_RECORD_LENGTH); + } else { + fseek($gi->filehandle, $record_pointer, SEEK_SET); + $org_buf = fread($gi->filehandle,MAX_ORG_RECORD_LENGTH); + } + $org_buf = substr($org_buf, 0, strpos($org_buf, 0)); + return $org_buf; +} + +function geoip_org_by_addr ($gi,$addr) { + if ($addr == NULL) { + return 0; + } + $ipnum = ip2long($addr); + return _get_org($gi, $ipnum); +} + +function _get_region($gi,$ipnum){ + if ($gi->databaseType == GEOIP_REGION_EDITION_REV0){ + $seek_region = _geoip_seek_country($gi,$ipnum) - GEOIP_STATE_BEGIN_REV0; + if ($seek_region >= 1000){ + $country_code = "US"; + $region = chr(($seek_region - 1000)/26 + 65) . chr(($seek_region - 1000)%26 + 65); + } else { + $country_code = $gi->GEOIP_COUNTRY_CODES[$seek_region]; + $region = ""; + } + return array ($country_code,$region); + } else if ($gi->databaseType == GEOIP_REGION_EDITION_REV1) { + $seek_region = _geoip_seek_country($gi,$ipnum) - GEOIP_STATE_BEGIN_REV1; + //print $seek_region; + if ($seek_region < US_OFFSET){ + $country_code = ""; + $region = ""; + } else if ($seek_region < CANADA_OFFSET) { + $country_code = "US"; + $region = chr(($seek_region - US_OFFSET)/26 + 65) . chr(($seek_region - US_OFFSET)%26 + 65); + } else if ($seek_region < WORLD_OFFSET) { + $country_code = "CA"; + $region = chr(($seek_region - CANADA_OFFSET)/26 + 65) . chr(($seek_region - CANADA_OFFSET)%26 + 65); + } else { + $country_code = $gi->GEOIP_COUNTRY_CODES[($seek_region - WORLD_OFFSET) / FIPS_RANGE]; + $region = ""; + } + return array ($country_code,$region); + } +} + +function geoip_region_by_addr ($gi,$addr) { + if ($addr == NULL) { + return 0; + } + $ipnum = ip2long($addr); + return _get_region($gi, $ipnum); +} + +function getdnsattributes ($l,$ip){ + $r = new Net_DNS_Resolver(); + $r->nameservers = array("ws1.maxmind.com"); + $p = $r->search($l."." . $ip .".s.maxmind.com","TXT","IN"); + $str = is_object($p->answer[0])?$p->answer[0]->string():''; + ereg("\"(.*)\"",$str,$regs); + $str = $regs[1]; + return $str; +} + +?> diff --git a/lib/geoip/geoipcity.inc b/lib/geoip/geoipcity.inc new file mode 100644 index 00000000000..836ae93231f --- /dev/null +++ b/lib/geoip/geoipcity.inc @@ -0,0 +1,205 @@ +country_code = $value; + } + if ($key == "ci"){ + $record->city = $value; + } + if ($key == "re"){ + $record->region = $value; + } + if ($key == "ac"){ + $record->areacode = $value; + } + if ($key == "dm"){ + $record->dmacode = $value; + } + if ($key == "is"){ + $record->isp = $value; + } + if ($key == "or"){ + $record->org = $value; + } + if ($key == "zi"){ + $record->postal_code = $value; + } + if ($key == "la"){ + $record->latitude = $value; + } + if ($key == "lo"){ + $record->longitude = $value; + } + } + $number = $GLOBALS['GEOIP_COUNTRY_CODE_TO_NUMBER'][$record->country_code]; + $record->country_code3 = $GLOBALS['GEOIP_COUNTRY_CODES3'][$number]; + $record->country_name = $GLOBALS['GEOIP_COUNTRY_NAMES'][$number]; + if ($record->region != "") { + if (($record->country_code == "US") || ($record->country_code == "CA")){ + $record->regionname = $GLOBALS['ISO'][$record->country_code][$record->region]; + } else { + $record->regionname = $GLOBALS['FIPS'][$record->country_code][$record->region]; + } + } + return $record; +} + +function _get_record($gi,$ipnum){ + $seek_country = _geoip_seek_country($gi,$ipnum); + if ($seek_country == $gi->databaseSegments) { + return NULL; + } + $record_pointer = $seek_country + (2 * $gi->record_length - 1) * $gi->databaseSegments; + + if ($gi->flags & GEOIP_MEMORY_CACHE) { + $record_buf = substr($gi->memory_buffer,$record_pointer,FULL_RECORD_LENGTH); + } elseif ($gi->flags & GEOIP_SHARED_MEMORY){ + $record_buf = @shmop_read($gi->shmid,$record_pointer,FULL_RECORD_LENGTH); + } else { + fseek($gi->filehandle, $record_pointer, SEEK_SET); + $record_buf = fread($gi->filehandle,FULL_RECORD_LENGTH); + } + $record = new geoiprecord; + $record_buf_pos = 0; + $char = ord(substr($record_buf,$record_buf_pos,1)); + $record->country_code = $gi->GEOIP_COUNTRY_CODES[$char]; + $record->country_code3 = $gi->GEOIP_COUNTRY_CODES3[$char]; + $record->country_name = $gi->GEOIP_COUNTRY_NAMES[$char]; + $record_buf_pos++; + $str_length = 0; + // Get region + $char = ord(substr($record_buf,$record_buf_pos+$str_length,1)); + while ($char != 0){ + $str_length++; + $char = ord(substr($record_buf,$record_buf_pos+$str_length,1)); + } + if ($str_length > 0){ + $record->region = substr($record_buf,$record_buf_pos,$str_length); + } + $record_buf_pos += $str_length + 1; + $str_length = 0; + // Get city + $char = ord(substr($record_buf,$record_buf_pos+$str_length,1)); + while ($char != 0){ + $str_length++; + $char = ord(substr($record_buf,$record_buf_pos+$str_length,1)); + } + if ($str_length > 0){ + $record->city = substr($record_buf,$record_buf_pos,$str_length); + } + $record_buf_pos += $str_length + 1; + $str_length = 0; + // Get postal code + $char = ord(substr($record_buf,$record_buf_pos+$str_length,1)); + while ($char != 0){ + $str_length++; + $char = ord(substr($record_buf,$record_buf_pos+$str_length,1)); + } + if ($str_length > 0){ + $record->postal_code = substr($record_buf,$record_buf_pos,$str_length); + } + $record_buf_pos += $str_length + 1; + $str_length = 0; + // Get latitude and longitude + $latitude = 0; + $longitude = 0; + for ($j = 0;$j < 3; ++$j){ + $char = ord(substr($record_buf,$record_buf_pos++,1)); + $latitude += ($char << ($j * 8)); + } + $record->latitude = ($latitude/10000) - 180; + for ($j = 0;$j < 3; ++$j){ + $char = ord(substr($record_buf,$record_buf_pos++,1)); + $longitude += ($char << ($j * 8)); + } + $record->longitude = ($longitude/10000) - 180; + if (GEOIP_CITY_EDITION_REV1 == $gi->databaseType){ + $dmaarea_combo = 0; + if ($record->country_code == "US"){ + for ($j = 0;$j < 3;++$j){ + $char = ord(substr($record_buf,$record_buf_pos++,1)); + $dmaarea_combo += ($char << ($j * 8)); + } + $record->dma_code = floor($dmaarea_combo/1000); + $record->area_code = $dmaarea_combo%1000; + } + } + return $record; +} + +function GeoIP_record_by_addr ($gi,$addr){ + if ($addr == NULL){ + return 0; + } + $ipnum = ip2long($addr); + return _get_record($gi, $ipnum); +} + +?> diff --git a/lib/geoip/geoipregionvars.php b/lib/geoip/geoipregionvars.php new file mode 100644 index 00000000000..8b9a57895c5 --- /dev/null +++ b/lib/geoip/geoipregionvars.php @@ -0,0 +1,4119 @@ + array( +"AB" => "Alberta", +"BC" => "British Columbia", +"MB" => "Manitoba", +"NB" => "New Brunswick", +"NF" => "Newfoundland", +"NS" => "Nova Scotia", +"NU" => "Nunavut", +"ON" => "Ontario", +"PE" => "Prince Edward Island", +"QC" => "Quebec", +"SK" => "Saskatchewan", +"NT" => "Northwest Territories", +"YT" => "Yukon Territory"), +"US" => array( +"AA" => "Armed Forces Americas", +"AE" => "Armed Forces Europe, Middle East, & Canada", +"AK" => "Alaska", +"AL" => "Alabama", +"AP" => "Armed Forces Pacific", +"AR" => "Arkansas", +"AS" => "American Samoa", +"AZ" => "Arizona", +"CA" => "California", +"CO" => "Colorado", +"CT" => "Connecticut", +"DC" => "District of Columbia", +"DE" => "Delaware", +"FL" => "Florida", +"FM" => "Federated States of Micronesia", +"GA" => "Georgia", +"GU" => "Guam", +"HI" => "Hawaii", +"IA" => "Iowa", +"ID" => "Idaho", +"IL" => "Illinois", +"IN" => "Indiana", +"KS" => "Kansas", +"KY" => "Kentucky", +"LA" => "Louisiana", +"MA" => "Massachusetts", +"MD" => "Maryland", +"ME" => "Maine", +"MH" => "Marshall Islands", +"MI" => "Michigan", +"MN" => "Minnesota", +"MO" => "Missouri", +"MP" => "Northern Mariana Islands", +"MS" => "Mississippi", +"MT" => "Montana", +"NC" => "North Carolina", +"ND" => "North Dakota", +"NE" => "Nebraska", +"NH" => "New Hampshire", +"NJ" => "New Jersey", +"NM" => "New Mexico", +"NV" => "Nevada", +"NY" => "New York", +"OH" => "Ohio", +"OK" => "Oklahoma", +"OR" => "Oregon", +"PA" => "Pennsylvania", +"PR" => "Puerto Rico", +"PW" => "Palau", +"RI" => "Rhode Island", +"SC" => "South Carolina", +"SD" => "South Dakota", +"TN" => "Tennessee", +"TX" => "Texas", +"UT" => "Utah", +"VA" => "Virginia", +"VI" => "Virgin Islands", +"VT" => "Vermont", +"WA" => "Washington", +"WV" => "West Virginia", +"WI" => "Wisconsin", +"WY" => "Wyoming"), +"AD" => array( +"02" => "Canillo", +"03" => "Encamp", +"04" => "La Massana", +"05" => "Ordino", +"06" => "Sant Julia de Loria", +"07" => "Andorra la Vella", +"08" => "Escaldes-Engordany"), +"AE" => array( +"01" => "Abu Zaby", +"03" => "Dubayy", +"04" => "Al Fujayrah", +"05" => "Ra's al Khaymah", +"06" => "Ash Shariqah", +"07" => "Umm al Qaywayn"), +"AF" => array( +"01" => "Badakhshan", +"02" => "Badghis", +"03" => "Baghlan", +"05" => "Bamian", +"06" => "Farah", +"07" => "Faryab", +"08" => "Ghazni", +"09" => "Ghowr", +"10" => "Helmand", +"11" => "Herat", +"13" => "Kabol", +"14" => "Kapisa", +"15" => "Konar", +"16" => "Laghman", +"17" => "Lowgar", +"18" => "Nangarhar", +"19" => "Nimruz", +"20" => "Oruzgan", +"21" => "Paktia", +"22" => "Parvan", +"23" => "Kandahar", +"24" => "Kondoz", +"26" => "Takhar", +"27" => "Vardak", +"28" => "Zabol", +"29" => "Paktika", +"30" => "Balkh", +"31" => "Jowzjan", +"32" => "Samangan", +"33" => "Sar-e Pol"), +"AG" => array( +"01" => "Barbuda", +"03" => "Saint George", +"04" => "Saint John", +"05" => "Saint Mary", +"06" => "Saint Paul", +"07" => "Saint Peter", +"08" => "Saint Philip"), +"AL" => array( +"01" => "Berat", +"02" => "Diber", +"03" => "Durres", +"04" => "Elbasan", +"05" => "Fier", +"06" => "Gjirokaster", +"07" => "Gramsh", +"08" => "Kolonje", +"09" => "Korce", +"10" => "Kruje", +"11" => "Kukes", +"12" => "Lezhe", +"13" => "Librazhd", +"14" => "Lushnje", +"15" => "Mat", +"16" => "Mirdite", +"17" => "Permet", +"18" => "Pogradec", +"19" => "Puke", +"20" => "Sarande", +"21" => "Shkoder", +"22" => "Skrapar", +"23" => "Tepelene", +"26" => "Tropoje", +"27" => "Vlore", +"28" => "Tirane", +"29" => "Bulqize", +"30" => "Delvine", +"31" => "Devoll", +"32" => "Has", +"33" => "Kavaje", +"34" => "Kucove", +"35" => "Kurbin", +"36" => "Malesi e Madhe", +"37" => "Mallakaster", +"38" => "Peqin", +"39" => "Tirane"), +"AM" => array( +"01" => "Aragatsotn", +"02" => "Ararat", +"03" => "Armavir", +"04" => "Geghark'unik'", +"05" => "Kotayk'", +"06" => "Lorri", +"07" => "Shirak", +"08" => "Syunik'", +"09" => "Tavush", +"10" => "Vayots' Dzor", +"11" => "Yerevan"), +"AO" => array( +"01" => "Benguela", +"02" => "Bie", +"03" => "Cabinda", +"04" => "Cuando Cubango", +"05" => "Cuanza Norte", +"06" => "Cuanza Sul", +"07" => "Cunene", +"08" => "Huambo", +"09" => "Huila", +"12" => "Malanje", +"14" => "Moxico", +"15" => "Uige", +"16" => "Zaire", +"17" => "Lunda Norte", +"18" => "Lunda Sul", +"19" => "Bengo", +"20" => "Luanda"), +"AR" => array( +"01" => "Buenos Aires", +"02" => "Catamarca", +"03" => "Chaco", +"04" => "Chubut", +"05" => "Cordoba", +"06" => "Corrientes", +"07" => "Distrito Federal", +"08" => "Entre Rios", +"09" => "Formosa", +"10" => "Jujuy", +"11" => "La Pampa", +"12" => "La Rioja", +"13" => "Mendoza", +"14" => "Misiones", +"15" => "Neuquen", +"16" => "Rio Negro", +"17" => "Salta", +"18" => "San Juan", +"19" => "San Luis", +"20" => "Santa Cruz", +"21" => "Santa Fe", +"22" => "Santiago del Estero", +"23" => "Tierra del Fuego", +"24" => "Tucuman"), +"AT" => array( +"01" => "Burgenland", +"02" => "Karnten", +"03" => "Niederosterreich", +"04" => "Oberosterreich", +"05" => "Salzburg", +"06" => "Steiermark", +"07" => "Tirol", +"08" => "Vorarlberg", +"09" => "Wien"), +"AU" => array( +"01" => "Australian Capital Territory", +"02" => "New South Wales", +"03" => "Northern Territory", +"04" => "Queensland", +"05" => "South Australia", +"06" => "Tasmania", +"07" => "Victoria", +"08" => "Western Australia"), +"AZ" => array( +"01" => "Abseron", +"02" => "Agcabadi", +"03" => "Agdam", +"04" => "Agdas", +"05" => "Agstafa", +"06" => "Agsu", +"07" => "Ali Bayramli", +"08" => "Astara", +"09" => "Baki", +"10" => "Balakan", +"11" => "Barda", +"12" => "Beylaqan", +"13" => "Bilasuvar", +"14" => "Cabrayil", +"15" => "Calilabad", +"16" => "Daskasan", +"17" => "Davaci", +"18" => "Fuzuli", +"19" => "Gadabay", +"20" => "Ganca", +"21" => "Goranboy", +"22" => "Goycay", +"23" => "Haciqabul", +"24" => "Imisli", +"25" => "Ismayilli", +"26" => "Kalbacar", +"27" => "Kurdamir", +"28" => "Lacin", +"29" => "Lankaran", +"30" => "Lankaran", +"31" => "Lerik", +"32" => "Masalli", +"33" => "Mingacevir", +"34" => "Naftalan", +"35" => "Naxcivan", +"36" => "Neftcala", +"37" => "Oguz", +"38" => "Qabala", +"39" => "Qax", +"40" => "Qazax", +"41" => "Qobustan", +"42" => "Quba", +"43" => "Qubadli", +"44" => "Qusar", +"45" => "Saatli", +"46" => "Sabirabad", +"47" => "Saki", +"48" => "Saki", +"49" => "Salyan", +"50" => "Samaxi", +"51" => "Samkir", +"52" => "Samux", +"53" => "Siyazan", +"54" => "Sumqayit", +"55" => "Susa", +"56" => "Susa", +"57" => "Tartar", +"58" => "Tovuz", +"59" => "Ucar", +"60" => "Xacmaz", +"61" => "Xankandi", +"62" => "Xanlar", +"63" => "Xizi", +"64" => "Xocali", +"65" => "Xocavand", +"66" => "Yardimli", +"67" => "Yevlax", +"68" => "Yevlax", +"69" => "Zangilan", +"70" => "Zaqatala", +"71" => "Zardab"), +"BA" => array( +"01" => "Federation of Bosnia and Herzegovina", +"02" => "Republika Srpska"), +"BB" => array( +"01" => "Christ Church", +"02" => "Saint Andrew", +"03" => "Saint George", +"04" => "Saint James", +"05" => "Saint John", +"06" => "Saint Joseph", +"07" => "Saint Lucy", +"08" => "Saint Michael", +"09" => "Saint Peter", +"10" => "Saint Philip", +"11" => "Saint Thomas"), +"BD" => array( +"01" => "Barisal", +"04" => "Bandarban", +"05" => "Comilla", +"12" => "Mymensingh", +"13" => "Noakhali", +"15" => "Patuakhali", +"22" => "Bagerhat", +"23" => "Bhola", +"24" => "Bogra", +"25" => "Barguna", +"26" => "Brahmanbaria", +"27" => "Chandpur", +"28" => "Chapai Nawabganj", +"29" => "Chattagram", +"30" => "Chuadanga", +"31" => "Cox's Bazar", +"32" => "Dhaka", +"33" => "Dinajpur", +"34" => "Faridpur", +"35" => "Feni", +"36" => "Gaibandha", +"37" => "Gazipur", +"38" => "Gopalganj", +"39" => "Habiganj", +"40" => "Jaipurhat", +"41" => "Jamalpur", +"42" => "Jessore", +"43" => "Jhalakati", +"44" => "Jhenaidah", +"45" => "Khagrachari", +"46" => "Khulna", +"47" => "Kishorganj", +"48" => "Kurigram", +"49" => "Kushtia", +"50" => "Laksmipur", +"51" => "Lalmonirhat", +"52" => "Madaripur", +"53" => "Magura", +"54" => "Manikganj", +"55" => "Meherpur", +"56" => "Moulavibazar", +"57" => "Munshiganj", +"58" => "Naogaon", +"59" => "Narail", +"60" => "Narayanganj", +"61" => "Narsingdi", +"62" => "Nator", +"63" => "Netrakona", +"64" => "Nilphamari", +"65" => "Pabna", +"66" => "Panchagar", +"67" => "Parbattya Chattagram", +"68" => "Pirojpur", +"69" => "Rajbari", +"70" => "Rajshahi", +"71" => "Rangpur", +"72" => "Satkhira", +"73" => "Shariyatpur", +"74" => "Sherpur", +"75" => "Sirajganj", +"76" => "Sunamganj", +"77" => "Sylhet", +"78" => "Tangail", +"79" => "Thakurgaon"), +"BE" => array( +"01" => "Antwerpen", +"02" => "Brabant", +"03" => "Hainaut", +"04" => "Liege", +"05" => "Limburg", +"06" => "Luxembourg", +"07" => "Namur", +"08" => "Oost-Vlaanderen", +"09" => "West-Vlaanderen", +"10" => "Brabant Wallon", +"11" => "Brussels Hoofdstedelijk Gewest", +"12" => "Vlaams-Brabant"), +"BF" => array( +"15" => "Bam", +"16" => "Bazega", +"17" => "Bougouriba", +"18" => "Boulgou", +"19" => "Boulkiemde", +"20" => "Ganzourgou", +"21" => "Gnagna", +"22" => "Gourma", +"23" => "Houet", +"24" => "Kadiogo", +"25" => "Kenedougou", +"26" => "Komoe", +"27" => "Kossi", +"28" => "Kouritenga", +"29" => "Mouhoun", +"30" => "Namentenga", +"31" => "Naouri", +"32" => "Oubritenga", +"33" => "Oudalan", +"34" => "Passore", +"35" => "Poni", +"36" => "Sanguie", +"37" => "Sanmatenga", +"38" => "Seno", +"39" => "Sissili", +"40" => "Soum", +"41" => "Sourou", +"42" => "Tapoa", +"43" => "Yatenga", +"44" => "Zoundweogo"), +"BG" => array( +"33" => "Mikhaylovgrad", +"38" => "Blagoevgrad", +"39" => "Burgas", +"40" => "Dobrich", +"41" => "Gabrovo", +"42" => "Grad Sofiya", +"43" => "Khaskovo", +"44" => "Kurdzhali", +"45" => "Kyustendil", +"46" => "Lovech", +"47" => "Montana", +"48" => "Pazardzhik", +"49" => "Pernik", +"50" => "Pleven", +"51" => "Plovdiv", +"52" => "Razgrad", +"53" => "Ruse", +"54" => "Shumen", +"55" => "Silistra", +"56" => "Sliven", +"57" => "Smolyan", +"58" => "Sofiya", +"59" => "Stara Zagora", +"60" => "Turgovishte", +"61" => "Varna", +"62" => "Veliko Turnovo", +"63" => "Vidin", +"64" => "Vratsa", +"65" => "Yambol"), +"BH" => array( +"01" => "Al Hadd", +"02" => "Al Manamah", +"03" => "Al Muharraq", +"05" => "Jidd Hafs", +"06" => "Sitrah", +"08" => "Al Mintaqah al Gharbiyah", +"09" => "Mintaqat Juzur Hawar", +"10" => "Al Mintaqah ash Shamaliyah", +"11" => "Al Mintaqah al Wusta", +"12" => "Madinat", +"13" => "Ar Rifa", +"14" => "Madinat Hamad"), +"BI" => array( +"02" => "Bujumbura", +"09" => "Bubanza", +"10" => "Bururi", +"11" => "Cankuzo", +"12" => "Cibitoke", +"13" => "Gitega", +"14" => "Karuzi", +"15" => "Kayanza", +"16" => "Kirundo", +"17" => "Makamba", +"18" => "Muyinga", +"19" => "Ngozi", +"20" => "Rutana", +"21" => "Ruyigi", +"22" => "Muramvya", +"23" => "Mwaro"), +"BJ" => array( +"01" => "Atakora", +"02" => "Atlantique", +"03" => "Borgou", +"04" => "Mono", +"05" => "Oueme", +"06" => "Zou"), +"BM" => array( +"01" => "Devonshire", +"02" => "Hamilton", +"03" => "Hamilton", +"04" => "Paget", +"05" => "Pembroke", +"06" => "Saint George", +"07" => "Saint George's", +"08" => "Sandys", +"09" => "Smiths", +"10" => "Southampton", +"11" => "Warwick"), +"BN" => array( +"01" => "Belait", +"02" => "Brunei and Muara", +"03" => "Temburong", +"04" => "Tutong"), +"BO" => array( +"01" => "Chuquisaca", +"02" => "Cochabamba", +"03" => "El Beni", +"04" => "La Paz", +"05" => "Oruro", +"06" => "Pando", +"07" => "Potosi", +"08" => "Santa Cruz", +"09" => "Tarija"), +"BR" => array( +"01" => "Acre", +"02" => "Alagoas", +"03" => "Amapa", +"04" => "Amazonas", +"05" => "Bahia", +"06" => "Ceara", +"07" => "Distrito Federal", +"08" => "Espirito Santo", +"11" => "Mato Grosso do Sul", +"13" => "Maranhao", +"14" => "Mato Grosso", +"15" => "Minas Gerais", +"16" => "Para", +"17" => "Paraiba", +"18" => "Parana", +"20" => "Piaui", +"21" => "Rio de Janeiro", +"22" => "Rio Grande do Norte", +"23" => "Rio Grande do Sul", +"24" => "Rondonia", +"25" => "Roraima", +"26" => "Santa Catarina", +"27" => "Sao Paulo", +"28" => "Sergipe", +"29" => "Goias", +"30" => "Pernambuco", +"31" => "Tocantins"), +"BS" => array( +"05" => "Bimini", +"06" => "Cat Island", +"10" => "Exuma", +"13" => "Inagua", +"15" => "Long Island", +"16" => "Mayaguana", +"18" => "Ragged Island", +"22" => "Harbour Island", +"23" => "New Providence", +"24" => "Acklins and Crooked Islands", +"25" => "Freeport", +"26" => "Fresh Creek", +"27" => "Governor's Harbour", +"28" => "Green Turtle Cay", +"29" => "High Rock", +"30" => "Kemps Bay", +"31" => "Marsh Harbour", +"32" => "Nichollstown and Berry Islands", +"33" => "Rock Sound", +"34" => "Sandy Point", +"35" => "San Salvador and Rum Cay"), +"BT" => array( +"05" => "Bumthang", +"06" => "Chhukha", +"07" => "Chirang", +"08" => "Daga", +"09" => "Geylegphug", +"10" => "Ha", +"11" => "Lhuntshi", +"12" => "Mongar", +"13" => "Paro", +"14" => "Pemagatsel", +"15" => "Punakha", +"16" => "Samchi", +"17" => "Samdrup", +"18" => "Shemgang", +"19" => "Tashigang", +"20" => "Thimphu", +"21" => "Tongsa", +"22" => "Wangdi Phodrang"), +"BW" => array( +"01" => "Central", +"02" => "Chobe", +"03" => "Ghanzi", +"04" => "Kgalagadi", +"05" => "Kgatleng", +"06" => "Kweneng", +"07" => "Ngamiland", +"08" => "North-East", +"09" => "South-East", +"10" => "Southern"), +"BY" => array( +"01" => "Brestskaya Voblasts'", +"02" => "Homyel'skaya Voblasts'", +"03" => "Hrodzyenskaya Voblasts'", +"04" => "Minsk", +"05" => "Minskaya Voblasts'", +"06" => "Mahilyowskaya Voblasts'", +"07" => "Vitsyebskaya Voblasts'"), +"BZ" => array( +"01" => "Belize", +"02" => "Cayo", +"03" => "Corozal", +"04" => "Orange Walk", +"05" => "Stann Creek", +"06" => "Toledo"), +"CF" => array( +"01" => "Bamingui-Bangoran", +"02" => "Basse-Kotto", +"03" => "Haute-Kotto", +"04" => "Haute-Sangha", +"05" => "Haut-Mbomou", +"06" => "Kemo-Gribingui", +"07" => "Lobaye", +"08" => "Mbomou", +"09" => "Nana-Mambere", +"11" => "Ouaka", +"12" => "Ouham", +"13" => "Ouham-Pende", +"14" => "Vakaga", +"15" => "Gribingui", +"16" => "Sangha", +"17" => "Ombella-Mpoko", +"18" => "Bangui"), +"CG" => array( +"01" => "Bouenza", +"03" => "Cuvette", +"04" => "Kouilou", +"05" => "Lekoumou", +"06" => "Likouala", +"07" => "Niari", +"08" => "Plateaux", +"10" => "Sangha", +"11" => "Pool", +"12" => "Brazzaville"), +"CH" => array( +"01" => "Aargau", +"02" => "Ausser-Rhoden", +"03" => "Basel-Landschaft", +"04" => "Basel-Stadt", +"05" => "Bern", +"06" => "Fribourg", +"07" => "Geneve", +"08" => "Glarus", +"09" => "Graubunden", +"10" => "Inner-Rhoden", +"11" => "Luzern", +"12" => "Neuchatel", +"13" => "Nidwalden", +"14" => "Obwalden", +"15" => "Sankt Gallen", +"16" => "Schaffhausen", +"17" => "Schwyz", +"18" => "Solothurn", +"19" => "Thurgau", +"20" => "Ticino", +"21" => "Uri", +"22" => "Valais", +"23" => "Vaud", +"24" => "Zug", +"25" => "Zurich", +"26" => "Jura"), +"CI" => array( +"01" => "Abengourou", +"03" => "Dabakala", +"05" => "Adzope", +"06" => "Agboville", +"07" => "Biankouma", +"11" => "Bouna", +"12" => "Boundiali", +"14" => "Danane", +"16" => "Divo", +"17" => "Ferkessedougou", +"18" => "Gagnoa", +"20" => "Katiola", +"21" => "Korhogo", +"23" => "Odienne", +"25" => "Seguela", +"26" => "Touba", +"27" => "Bongouanou", +"28" => "Issia", +"29" => "Lakota", +"30" => "Mankono", +"31" => "Oume", +"32" => "Soubre", +"33" => "Tingrela", +"34" => "Zuenoula", +"36" => "Bangolo", +"37" => "Beoumi", +"38" => "Bondoukou", +"39" => "Bouafle", +"40" => "Bouake", +"41" => "Daloa", +"42" => "Daoukro", +"44" => "Duekoue", +"45" => "Grand-Lahou", +"47" => "Man", +"48" => "Mbahiakro", +"49" => "Sakassou", +"50" => "San Pedro", +"51" => "Sassandra", +"52" => "Sinfra", +"53" => "Tabou", +"54" => "Tanda", +"55" => "Tiassale", +"56" => "Toumodi", +"57" => "Vavoua", +"61" => "Abidjan", +"62" => "Aboisso", +"63" => "Adiake", +"64" => "Alepe", +"65" => "Bocanda", +"66" => "Dabou", +"67" => "Dimbokro", +"68" => "Grand-Bassam", +"69" => "Guiglo", +"70" => "Jacqueville", +"71" => "Tiebissou", +"72" => "Toulepleu", +"73" => "Yamoussoukro"), +"CL" => array( +"01" => "Valparaiso", +"02" => "Aisen del General Carlos Ibanez del Campo", +"03" => "Antofagasta", +"04" => "Araucania", +"05" => "Atacama", +"06" => "Bio-Bio", +"07" => "Coquimbo", +"08" => "Libertador General Bernardo O'Higgins", +"09" => "Los Lagos", +"10" => "Magallanes y de la Antartica Chilena", +"11" => "Maule", +"12" => "Region Metropolitana", +"13" => "Tarapaca"), +"CM" => array( +"04" => "Est", +"05" => "Littoral", +"07" => "Nord-Ouest", +"08" => "Ouest", +"09" => "Sud-Ouest", +"10" => "Adamaoua", +"11" => "Centre", +"12" => "Extreme-Nord", +"13" => "Nord", +"14" => "Sud"), +"CN" => array( +"01" => "Anhui", +"02" => "Zhejiang", +"03" => "Jiangxi", +"04" => "Jiangsu", +"05" => "Jilin", +"06" => "Qinghai", +"07" => "Fujian", +"08" => "Heilongjiang", +"09" => "Henan", +"10" => "Hebei", +"11" => "Hunan", +"12" => "Hubei", +"13" => "Xinjiang", +"14" => "Xizang", +"15" => "Gansu", +"16" => "Guangxi", +"18" => "Guizhou", +"19" => "Liaoning", +"20" => "Nei Mongol", +"21" => "Ningxia", +"22" => "Beijing", +"23" => "Shanghai", +"24" => "Shanxi", +"25" => "Shandong", +"26" => "Shaanxi", +"27" => "Sichuan", +"28" => "Tianjin", +"29" => "Yunnan", +"30" => "Guangdong", +"31" => "Hainan"), +"CO" => array( +"01" => "Amazonas", +"02" => "Antioquia", +"03" => "Arauca", +"04" => "Atlantico", +"08" => "Caqueta", +"09" => "Cauca", +"10" => "Cesar", +"11" => "Choco", +"12" => "Cordoba", +"14" => "Guaviare", +"15" => "Guainia", +"16" => "Huila", +"17" => "La Guajira", +"19" => "Meta", +"20" => "Narino", +"21" => "Norte de Santander", +"22" => "Putumayo", +"23" => "Quindio", +"24" => "Risaralda", +"25" => "San Andres y Providencia", +"26" => "Santander", +"27" => "Sucre", +"28" => "Tolima", +"29" => "Valle del Cauca", +"30" => "Vaupes", +"31" => "Vichada", +"32" => "Casanare", +"33" => "Cundinamarca", +"34" => "Distrito Especial", +"35" => "Bolivar", +"36" => "Boyaca", +"37" => "Caldas", +"38" => "Magdalena"), +"CR" => array( +"01" => "Alajuela", +"02" => "Cartago", +"03" => "Guanacaste", +"04" => "Heredia", +"06" => "Limon", +"07" => "Puntarenas", +"08" => "San Jose"), +"CU" => array( +"01" => "Pinar del Rio", +"02" => "Ciudad de la Habana", +"03" => "Matanzas", +"04" => "Isla de la Juventud", +"05" => "Camaguey", +"07" => "Ciego de Avila", +"08" => "Cienfuegos", +"09" => "Granma", +"10" => "Guantanamo", +"11" => "La Habana", +"12" => "Holguin", +"13" => "Las Tunas", +"14" => "Sancti Spiritus", +"15" => "Santiago de Cuba", +"16" => "Villa Clara"), +"CV" => array( +"01" => "Boa Vista", +"02" => "Brava", +"03" => "Fogo", +"04" => "Maio", +"05" => "Paul", +"06" => "Praia", +"07" => "Ribeira Grande", +"08" => "Sal", +"09" => "Santa Catarina", +"10" => "Sao Nicolau", +"11" => "Sao Vicente", +"12" => "Tarrafal"), +"CY" => array( +"01" => "Famagusta", +"02" => "Kyrenia", +"03" => "Larnaca", +"04" => "Nicosia", +"05" => "Limassol", +"06" => "Paphos"), +"CZ" => array( +"52" => "Hlavni Mesto Praha", +"78" => "Jihomoravsky Kraj", +"79" => "Jihocesky Kraj", +"80" => "Vysocina", +"81" => "Karlovarsky Kraj", +"82" => "Kralovehradecky Kraj", +"83" => "Liberecky Kraj", +"84" => "Olomoucky Kraj", +"85" => "Moravskoslezsky Kraj", +"86" => "Pardubicky Kraj", +"87" => "Plzensky Kraj", +"88" => "Stredocesky Kraj", +"89" => "Ustecky Kraj", +"90" => "Zlinsky Kraj"), +"DE" => array( +"01" => "Baden-Wurttemberg", +"02" => "Bayern", +"03" => "Bremen", +"04" => "Hamburg", +"05" => "Hessen", +"06" => "Niedersachsen", +"07" => "Nordrhein-Westfalen", +"08" => "Rheinland-Pfalz", +"09" => "Saarland", +"10" => "Schleswig-Holstein", +"11" => "Brandenburg", +"12" => "Mecklenburg-Vorpommern", +"13" => "Sachsen", +"14" => "Sachsen-Anhalt", +"15" => "Thuringen", +"16" => "Berlin"), +"DJ" => array( +"02" => "Dikhil", +"03" => "Djibouti", +"04" => "Obock", +"05" => "Tadjoura"), +"DK" => array( +"01" => "Arhus", +"02" => "Bornholm", +"03" => "Frederiksborg", +"04" => "Fyn", +"05" => "Kobenhavn", +"06" => "Staden Kobenhavn", +"07" => "Nordjylland", +"08" => "Ribe", +"09" => "Ringkobing", +"10" => "Roskilde", +"11" => "Sonderjylland", +"12" => "Storstrom", +"13" => "Vejle", +"14" => "Vestsjalland", +"15" => "Viborg"), +"DM" => array( +"02" => "Saint Andrew", +"03" => "Saint David", +"04" => "Saint George", +"05" => "Saint John", +"06" => "Saint Joseph", +"07" => "Saint Luke", +"08" => "Saint Mark", +"09" => "Saint Patrick", +"10" => "Saint Paul", +"11" => "Saint Peter"), +"DO" => array( +"01" => "Azua", +"02" => "Baoruco", +"03" => "Barahona", +"04" => "Dajabon", +"05" => "Distrito Nacional", +"06" => "Duarte", +"08" => "Espaillat", +"09" => "Independencia", +"10" => "La Altagracia", +"11" => "Elias Pina", +"12" => "La Romana", +"14" => "Maria Trinidad Sanchez", +"15" => "Monte Cristi", +"16" => "Pedernales", +"17" => "Peravia", +"18" => "Puerto Plata", +"19" => "Salcedo", +"20" => "Samana", +"21" => "Sanchez Ramirez", +"23" => "San Juan", +"24" => "San Pedro De Macoris", +"25" => "Santiago", +"26" => "Santiago Rodriguez", +"27" => "Valverde", +"28" => "El Seibo", +"29" => "Hato Mayor", +"30" => "La Vega", +"31" => "Monsenor Nouel", +"32" => "Monte Plata", +"33" => "San Cristobal"), +"DZ" => array( +"01" => "Alger", +"03" => "Batna", +"04" => "Constantine", +"06" => "Medea", +"07" => "Mostaganem", +"09" => "Oran", +"10" => "Saida", +"12" => "Setif", +"13" => "Tiaret", +"14" => "Tizi Ouzou", +"15" => "Tlemcen", +"18" => "Bejaia", +"19" => "Biskra", +"20" => "Blida", +"21" => "Bouira", +"22" => "Djelfa", +"23" => "Guelma", +"24" => "Jijel", +"25" => "Laghouat", +"26" => "Mascara", +"27" => "M'sila", +"29" => "Oum el Bouaghi", +"30" => "Sidi Bel Abbes", +"31" => "Skikda", +"33" => "Tebessa", +"34" => "Adrar", +"35" => "Ain Defla", +"36" => "Ain Temouchent", +"37" => "Annaba", +"38" => "Bechar", +"39" => "Bordj Bou Arreridj", +"40" => "Boumerdes", +"41" => "Chlef", +"42" => "El Bayadh", +"43" => "El Oued", +"44" => "El Tarf", +"45" => "Ghardaia", +"46" => "Illizi", +"47" => "Khenchela", +"48" => "Mila", +"49" => "Naama", +"50" => "Ouargla", +"51" => "Relizane", +"52" => "Souk Ahras", +"53" => "Tamanghasset", +"54" => "Tindouf", +"55" => "Tipaza", +"56" => "Tissemsilt"), +"EC" => array( +"01" => "Galapagos", +"02" => "Azuay", +"03" => "Bolivar", +"04" => "Canar", +"05" => "Carchi", +"06" => "Chimborazo", +"07" => "Cotopaxi", +"08" => "El Oro", +"09" => "Esmeraldas", +"10" => "Guayas", +"11" => "Imbabura", +"12" => "Loja", +"13" => "Los Rios", +"14" => "Manabi", +"15" => "Morona-Santiago", +"17" => "Pastaza", +"18" => "Pichincha", +"19" => "Tungurahua", +"20" => "Zamora-Chinchipe", +"22" => "Sucumbios", +"23" => "Napo", +"24" => "Orellana"), +"EE" => array( +"01" => "Harjumaa", +"02" => "Hiiumaa", +"03" => "Ida-Virumaa", +"04" => "Jarvamaa", +"05" => "Jogevamaa", +"06" => "Kohtla-Jarve", +"07" => "Laanemaa", +"08" => "Laane-Virumaa", +"09" => "Narva", +"10" => "Parnu", +"11" => "Parnumaa", +"12" => "Polvamaa", +"13" => "Raplamaa", +"14" => "Saaremaa", +"15" => "Sillamae", +"16" => "Tallinn", +"17" => "Tartu", +"18" => "Tartumaa", +"19" => "Valgamaa", +"20" => "Viljandimaa", +"21" => "Vorumaa"), +"EG" => array( +"01" => "Ad Daqahliyah", +"02" => "Al Bahr al Ahmar", +"03" => "Al Buhayrah", +"04" => "Al Fayyum", +"05" => "Al Gharbiyah", +"06" => "Al Iskandariyah", +"07" => "Al Isma'iliyah", +"08" => "Al Jizah", +"09" => "Al Minufiyah", +"10" => "Al Minya", +"11" => "Al Qahirah", +"12" => "Al Qalyubiyah", +"13" => "Al Wadi al Jadid", +"14" => "Ash Sharqiyah", +"15" => "As Suways", +"16" => "Aswan", +"17" => "Asyut", +"18" => "Bani Suwayf", +"19" => "Bur Sa'id", +"20" => "Dumyat", +"21" => "Kafr ash Shaykh", +"22" => "Matruh", +"23" => "Qina", +"24" => "Suhaj", +"26" => "Janub Sina'", +"27" => "Shamal Sina'"), +"ES" => array( +"07" => "Islas Baleares", +"27" => "La Rioja", +"29" => "Madrid", +"31" => "Murcia", +"32" => "Navarra", +"34" => "Asturias", +"39" => "Cantabria", +"51" => "Andalucia", +"52" => "Aragon", +"53" => "Canarias", +"54" => "Castilla-La Mancha", +"55" => "Castilla y Leon", +"56" => "Cataluna", +"57" => "Extremadura", +"58" => "Galicia", +"59" => "Pais Vasco", +"60" => "Valenciana"), +"ET" => array( +"02" => "Amhara", +"07" => "Somali", +"08" => "Gambella", +"10" => "Addis Abeba", +"11" => "Southern", +"12" => "Tigray", +"13" => "Benishangul", +"14" => "Afar", +"44" => "Adis Abeba", +"45" => "Afar", +"46" => "Amara", +"47" => "Binshangul Gumuz", +"48" => "Dire Dawa", +"49" => "Gambela Hizboch", +"50" => "Hareri Hizb", +"51" => "Oromiya", +"52" => "Sumale", +"53" => "Tigray", +"54" => "YeDebub Biheroch Bihereseboch na Hizboch"), +"FI" => array( +"01" => "�?land", +"06" => "Lapland", +"08" => "Oulu", +"13" => "Southern Finland", +"14" => "Eastern Finland", +"15" => "Western Finland"), +"FJ" => array( +"01" => "Central", +"02" => "Eastern", +"03" => "Northern", +"04" => "Rotuma", +"05" => "Western"), +"FM" => array( +"01" => "Kosrae", +"02" => "Pohnpei", +"03" => "Chuuk", +"04" => "Yap"), +"FR" => array( +"97" => "Aquitaine", +"98" => "Auvergne", +"99" => "Basse-Normandie", +"A1" => "Bourgogne", +"A2" => "Bretagne", +"A3" => "Centre", +"A4" => "Champagne-Ardenne", +"A5" => "Corse", +"A6" => "Franche-Comte", +"A7" => "Haute-Normandie", +"A8" => "Ile-de-France", +"A9" => "Languedoc-Roussillon", +"B1" => "Limousin", +"B2" => "Lorraine", +"B3" => "Midi-Pyrenees", +"B4" => "Nord-Pas-de-Calais", +"B5" => "Pays de la Loire", +"B6" => "Picardie", +"B7" => "Poitou-Charentes", +"B8" => "Provence-Alpes-Cote d'Azur", +"B9" => "Rhone-Alpes", +"C1" => "Alsace"), +"GA" => array( +"01" => "Estuaire", +"02" => "Haut-Ogooue", +"03" => "Moyen-Ogooue", +"04" => "Ngounie", +"05" => "Nyanga", +"06" => "Ogooue-Ivindo", +"07" => "Ogooue-Lolo", +"08" => "Ogooue-Maritime", +"09" => "Woleu-Ntem"), +"GB" => array( +"01" => "Avon", +"03" => "Berkshire", +"07" => "Cleveland", +"08" => "Cornwall", +"09" => "Cumbria", +"17" => "Greater London", +"18" => "Greater Manchester", +"20" => "Hereford and Worcester", +"22" => "Humberside", +"28" => "Merseyside", +"37" => "South Yorkshire", +"41" => "Tyne and Wear", +"43" => "West Midlands", +"45" => "West Yorkshire", +"79" => "Central", +"82" => "Grampian", +"84" => "Lothian", +"87" => "Strathclyde", +"88" => "Tayside", +"90" => "Clwyd", +"91" => "Dyfed", +"92" => "Gwent", +"94" => "Mid Glamorgan", +"96" => "South Glamorgan", +"97" => "West Glamorgan", +"A1" => "Barking and Dagenham", +"A2" => "Barnet", +"A3" => "Barnsley", +"A4" => "Bath and North East Somerset", +"A5" => "Bedfordshire", +"A6" => "Bexley", +"A7" => "Birmingham", +"A8" => "Blackburn with Darwen", +"A9" => "Blackpool", +"B1" => "Bolton", +"B2" => "Bournemouth", +"B3" => "Bracknell Forest", +"B4" => "Bradford", +"B5" => "Brent", +"B6" => "Brighton and Hove", +"B7" => "Bristol, City of", +"B8" => "Bromley", +"B9" => "Buckinghamshire", +"C1" => "Bury", +"C2" => "Calderdale", +"C3" => "Cambridgeshire", +"C4" => "Camden", +"C5" => "Cheshire", +"C7" => "Coventry", +"C8" => "Croydon", +"D1" => "Darlington", +"D2" => "Derby", +"D3" => "Derbyshire", +"D4" => "Devon", +"D5" => "Doncaster", +"D6" => "Dorset", +"D7" => "Dudley", +"D8" => "Durham", +"D9" => "Ealing", +"E1" => "East Riding of Yorkshire", +"E2" => "East Sussex", +"E3" => "Enfield", +"E4" => "Essex", +"E5" => "Gateshead", +"E6" => "Gloucestershire", +"E7" => "Greenwich", +"E8" => "Hackney", +"E9" => "Halton", +"F1" => "Hammersmith and Fulham", +"F2" => "Hampshire", +"F3" => "Haringey", +"F4" => "Harrow", +"F5" => "Hartlepool", +"F6" => "Havering", +"F7" => "Herefordshire", +"F8" => "Hertford", +"F9" => "Hillingdon", +"G1" => "Hounslow", +"G2" => "Isle of Wight", +"G3" => "Islington", +"G4" => "Kensington and Chelsea", +"G5" => "Kent", +"G6" => "Kingston upon Hull, City of", +"G7" => "Kingston upon Thames", +"G8" => "Kirklees", +"G9" => "Knowsley", +"H1" => "Lambeth", +"H2" => "Lancashire", +"H3" => "Leeds", +"H4" => "Leicester", +"H5" => "Leicestershire", +"H6" => "Lewisham", +"H7" => "Lincolnshire", +"H8" => "Liverpool", +"H9" => "London, City of", +"I1" => "Luton", +"I2" => "Manchester", +"I3" => "Medway", +"I4" => "Merton", +"I5" => "Middlesbrough", +"I6" => "Milton Keynes", +"I7" => "Newcastle upon Tyne", +"I8" => "Newham", +"I9" => "Norfolk", +"J1" => "Northamptonshire", +"J2" => "North East Lincolnshire", +"J3" => "North Lincolnshire", +"J4" => "North Somerset", +"J5" => "North Tyneside", +"J6" => "Northumberland", +"J7" => "North Yorkshire", +"J8" => "Nottingham", +"J9" => "Nottinghamshire", +"K1" => "Oldham", +"K2" => "Oxfordshire", +"K3" => "Peterborough", +"K4" => "Plymouth", +"K5" => "Poole", +"K6" => "Portsmouth", +"K7" => "Reading", +"K8" => "Redbridge", +"K9" => "Redcar and Cleveland", +"L1" => "Richmond upon Thames", +"L2" => "Rochdale", +"L3" => "Rotherham", +"L4" => "Rutland", +"L5" => "Salford", +"L6" => "Shropshire", +"L7" => "Sandwell", +"L8" => "Sefton", +"L9" => "Sheffield", +"M1" => "Slough", +"M2" => "Solihull", +"M3" => "Somerset", +"M4" => "Southampton", +"M5" => "Southend-on-Sea", +"M6" => "South Gloucestershire", +"M7" => "South Tyneside", +"M8" => "Southwark", +"M9" => "Staffordshire", +"N1" => "St. Helens", +"N2" => "Stockport", +"N3" => "Stockton-on-Tees", +"N4" => "Stoke-on-Trent", +"N5" => "Suffolk", +"N6" => "Sunderland", +"N7" => "Surrey", +"N8" => "Sutton", +"N9" => "Swindon", +"O1" => "Tameside", +"O2" => "Telford and Wrekin", +"O3" => "Thurrock", +"O4" => "Torbay", +"O5" => "Tower Hamlets", +"O6" => "Trafford", +"O7" => "Wakefield", +"O8" => "Walsall", +"O9" => "Waltham Forest", +"P1" => "Wandsworth", +"P2" => "Warrington", +"P3" => "Warwickshire", +"P4" => "West Berkshire", +"P5" => "Westminster", +"P6" => "West Sussex", +"P7" => "Wigan", +"P8" => "Wiltshire", +"P9" => "Windsor and Maidenhead", +"Q1" => "Wirral", +"Q2" => "Wokingham", +"Q3" => "Wolverhampton", +"Q4" => "Worcestershire", +"Q5" => "York", +"Q6" => "Antrim", +"Q7" => "Ards", +"Q8" => "Armagh", +"Q9" => "Ballymena", +"R1" => "Ballymoney", +"R2" => "Banbridge", +"R3" => "Belfast", +"R4" => "Carrickfergus", +"R5" => "Castlereagh", +"R6" => "Coleraine", +"R7" => "Cookstown", +"R8" => "Craigavon", +"R9" => "Down", +"S1" => "Dungannon", +"S2" => "Fermanagh", +"S3" => "Larne", +"S4" => "Limavady", +"S5" => "Lisburn", +"S6" => "Derry", +"S7" => "Magherafelt", +"S8" => "Moyle", +"S9" => "Newry and Mourne", +"T1" => "Newtownabbey", +"T2" => "North Down", +"T3" => "Omagh", +"T4" => "Strabane", +"T5" => "Aberdeen City", +"T6" => "Aberdeenshire", +"T7" => "Angus", +"T8" => "Argyll and Bute", +"T9" => "Scottish Borders, The", +"U1" => "Clackmannanshire", +"U2" => "Dumfries and Galloway", +"U3" => "Dundee City", +"U4" => "East Ayrshire", +"U5" => "East Dunbartonshire", +"U6" => "East Lothian", +"U7" => "East Renfrewshire", +"U8" => "Edinburgh, City of", +"U9" => "Falkirk", +"V1" => "Fife", +"V2" => "Glasgow City", +"V3" => "Highland", +"V4" => "Inverclyde", +"V5" => "Midlothian", +"V6" => "Moray", +"V7" => "North Ayrshire", +"V8" => "North Lanarkshire", +"V9" => "Orkney", +"W1" => "Perth and Kinross", +"W2" => "Renfrewshire", +"W3" => "Shetland Islands", +"W4" => "South Ayrshire", +"W5" => "South Lanarkshire", +"W6" => "Stirling", +"W7" => "West Dunbartonshire", +"W8" => "Eilean Siar", +"W9" => "West Lothian", +"X1" => "Isle of Anglesey", +"X2" => "Blaenau Gwent", +"X3" => "Bridgend", +"X4" => "Caerphilly", +"X5" => "Cardiff", +"X6" => "Ceredigion", +"X7" => "Carmarthenshire", +"X8" => "Conwy", +"X9" => "Denbighshire", +"Y1" => "Flintshire", +"Y2" => "Gwynedd", +"Y3" => "Merthyr Tydfil", +"Y4" => "Monmouthshire", +"Y5" => "Neath Port Talbot", +"Y6" => "Newport", +"Y7" => "Pembrokeshire", +"Y8" => "Powys", +"Y9" => "Rhondda Cynon Taff", +"Z1" => "Swansea", +"Z2" => "Torfaen", +"Z3" => "Vale of Glamorgan, The", +"Z4" => "Wrexham"), +"GD" => array( +"01" => "Saint Andrew", +"02" => "Saint David", +"03" => "Saint George", +"04" => "Saint John", +"05" => "Saint Mark", +"06" => "Saint Patrick"), +"GE" => array( +"01" => "Abashis Raioni", +"02" => "Abkhazia", +"03" => "Adigenis Raioni", +"04" => "Ajaria", +"05" => "Akhalgoris Raioni", +"06" => "Akhalk'alak'is Raioni", +"07" => "Akhalts'ikhis Raioni", +"08" => "Akhmetis Raioni", +"09" => "Ambrolauris Raioni", +"10" => "Aspindzis Raioni", +"11" => "Baghdat'is Raioni", +"12" => "Bolnisis Raioni", +"13" => "Borjomis Raioni", +"14" => "Chiat'ura", +"15" => "Ch'khorotsqus Raioni", +"16" => "Ch'okhatauris Raioni", +"17" => "Dedop'listsqaros Raioni", +"18" => "Dmanisis Raioni", +"19" => "Dushet'is Raioni", +"20" => "Gardabanis Raioni", +"21" => "Gori", +"22" => "Goris Raioni", +"23" => "Gurjaanis Raioni", +"24" => "Javis Raioni", +"25" => "K'arelis Raioni", +"26" => "Kaspis Raioni", +"27" => "Kharagaulis Raioni", +"28" => "Khashuris Raioni", +"29" => "Khobis Raioni", +"30" => "Khonis Raioni", +"31" => "K'ut'aisi", +"32" => "Lagodekhis Raioni", +"33" => "Lanch'khut'is Raioni", +"34" => "Lentekhis Raioni", +"35" => "Marneulis Raioni", +"36" => "Martvilis Raioni", +"37" => "Mestiis Raioni", +"38" => "Mts'khet'is Raioni", +"39" => "Ninotsmindis Raioni", +"40" => "Onis Raioni", +"41" => "Ozurget'is Raioni", +"42" => "P'ot'i", +"43" => "Qazbegis Raioni", +"44" => "Qvarlis Raioni", +"45" => "Rust'avi", +"46" => "Sach'kheris Raioni", +"47" => "Sagarejos Raioni", +"48" => "Samtrediis Raioni", +"49" => "Senakis Raioni", +"50" => "Sighnaghis Raioni", +"51" => "T'bilisi", +"52" => "T'elavis Raioni", +"53" => "T'erjolis Raioni", +"54" => "T'et'ritsqaros Raioni", +"55" => "T'ianet'is Raioni", +"56" => "Tqibuli", +"57" => "Ts'ageris Raioni", +"58" => "Tsalenjikhis Raioni", +"59" => "Tsalkis Raioni", +"60" => "Tsqaltubo", +"61" => "Vanis Raioni", +"62" => "Zestap'onis Raioni", +"63" => "Zugdidi", +"64" => "Zugdidis Raioni"), +"GH" => array( +"01" => "Greater Accra", +"02" => "Ashanti", +"03" => "Brong-Ahafo", +"04" => "Central", +"05" => "Eastern", +"06" => "Northern", +"08" => "Volta", +"09" => "Western", +"10" => "Upper East", +"11" => "Upper West"), +"GL" => array( +"01" => "Nordgronland", +"02" => "Ostgronland", +"03" => "Vestgronland"), +"GM" => array( +"01" => "Banjul", +"02" => "Lower River", +"03" => "MacCarthy Island", +"04" => "Upper River", +"05" => "Western", +"07" => "North Bank"), +"GN" => array( +"01" => "Beyla", +"02" => "Boffa", +"03" => "Boke", +"04" => "Conakry", +"05" => "Dabola", +"06" => "Dalaba", +"07" => "Dinguiraye", +"09" => "Faranah", +"10" => "Forecariah", +"11" => "Fria", +"12" => "Gaoual", +"13" => "Gueckedou", +"15" => "Kerouane", +"16" => "Kindia", +"17" => "Kissidougou", +"18" => "Koundara", +"19" => "Kouroussa", +"21" => "Macenta", +"22" => "Mali", +"23" => "Mamou", +"25" => "Pita", +"27" => "Telimele", +"28" => "Tougue", +"29" => "Yomou", +"30" => "Coyah", +"31" => "Dubreka", +"32" => "Kankan", +"33" => "Koubia", +"34" => "Labe", +"35" => "Lelouma", +"36" => "Lola", +"37" => "Mandiana", +"38" => "Nzerekore", +"39" => "Siguiri"), +"GQ" => array( +"03" => "Annobon", +"04" => "Bioko Norte", +"05" => "Bioko Sur", +"06" => "Centro Sur", +"07" => "Kie-Ntem", +"08" => "Litoral", +"09" => "Wele-Nzas"), +"GR" => array( +"01" => "Evros", +"02" => "Rodhopi", +"03" => "Xanthi", +"04" => "Drama", +"05" => "Serrai", +"06" => "Kilkis", +"07" => "Pella", +"08" => "Florina", +"09" => "Kastoria", +"10" => "Grevena", +"11" => "Kozani", +"12" => "Imathia", +"13" => "Thessaloniki", +"14" => "Kavala", +"15" => "Khalkidhiki", +"16" => "Pieria", +"17" => "Ioannina", +"18" => "Thesprotia", +"19" => "Preveza", +"20" => "Arta", +"21" => "Larisa", +"22" => "Trikala", +"23" => "Kardhitsa", +"24" => "Magnisia", +"25" => "Kerkira", +"26" => "Levkas", +"27" => "Kefallinia", +"28" => "Zakinthos", +"29" => "Fthiotis", +"30" => "Evritania", +"31" => "Aitolia kai Akarnania", +"32" => "Fokis", +"33" => "Voiotia", +"34" => "Evvoia", +"35" => "Attiki", +"36" => "Argolis", +"37" => "Korinthia", +"38" => "Akhaia", +"39" => "Ilia", +"40" => "Messinia", +"41" => "Arkadhia", +"42" => "Lakonia", +"43" => "Khania", +"44" => "Rethimni", +"45" => "Iraklion", +"46" => "Lasithi", +"47" => "Dhodhekanisos", +"48" => "Samos", +"49" => "Kikladhes", +"50" => "Khios", +"51" => "Lesvos"), +"GT" => array( +"01" => "Alta Verapaz", +"02" => "Baja Verapaz", +"03" => "Chimaltenango", +"04" => "Chiquimula", +"05" => "El Progreso", +"06" => "Escuintla", +"07" => "Guatemala", +"08" => "Huehuetenango", +"09" => "Izabal", +"10" => "Jalapa", +"11" => "Jutiapa", +"12" => "Peten", +"13" => "Quetzaltenango", +"14" => "Quiche", +"15" => "Retalhuleu", +"16" => "Sacatepequez", +"17" => "San Marcos", +"18" => "Santa Rosa", +"19" => "Solola", +"20" => "Suchitepequez", +"21" => "Totonicapan", +"22" => "Zacapa"), +"GW" => array( +"01" => "Bafata", +"02" => "Quinara", +"04" => "Oio", +"05" => "Bolama", +"06" => "Cacheu", +"07" => "Tombali", +"10" => "Gabu", +"11" => "Bissau", +"12" => "Biombo"), +"GY" => array( +"10" => "Barima-Waini", +"11" => "Cuyuni-Mazaruni", +"12" => "Demerara-Mahaica", +"13" => "East Berbice-Corentyne", +"14" => "Essequibo Islands-West Demerara", +"15" => "Mahaica-Berbice", +"16" => "Pomeroon-Supenaam", +"17" => "Potaro-Siparuni", +"18" => "Upper Demerara-Berbice", +"19" => "Upper Takutu-Upper Essequibo"), +"HN" => array( +"01" => "Atlantida", +"02" => "Choluteca", +"03" => "Colon", +"04" => "Comayagua", +"05" => "Copan", +"06" => "Cortes", +"07" => "El Paraiso", +"08" => "Francisco Morazan", +"09" => "Gracias a Dios", +"10" => "Intibuca", +"11" => "Islas de la Bahia", +"12" => "La Paz", +"13" => "Lempira", +"14" => "Ocotepeque", +"15" => "Olancho", +"16" => "Santa Barbara", +"17" => "Valle", +"18" => "Yoro"), +"HR" => array( +"01" => "Bjelovarsko-Bilogorska", +"02" => "Brodsko-Posavska", +"03" => "Dubrovacko-Neretvanska", +"04" => "Istarska", +"05" => "Karlovacka", +"06" => "Koprivnicko-Krizevacka", +"07" => "Krapinsko-Zagorska", +"08" => "Licko-Senjska", +"09" => "Medimurska", +"10" => "Osjecko-Baranjska", +"11" => "Pozesko-Slavonska", +"12" => "Primorsko-Goranska", +"13" => "Sibensko-Kninska", +"14" => "Sisacko-Moslavacka", +"15" => "Splitsko-Dalmatinska", +"16" => "Varazdinska", +"17" => "Viroviticko-Podravska", +"18" => "Vukovarsko-Srijemska", +"19" => "Zadarska", +"20" => "Zagrebacka", +"21" => "Grad Zagreb"), +"HT" => array( +"03" => "Nord-Ouest", +"06" => "Artibonite", +"07" => "Centre", +"08" => "Grand' Anse", +"09" => "Nord", +"10" => "Nord-Est", +"11" => "Ouest", +"12" => "Sud", +"13" => "Sud-Est"), +"HU" => array( +"01" => "Bacs-Kiskun", +"02" => "Baranya", +"03" => "Bekes", +"04" => "Borsod-Abauj-Zemplen", +"05" => "Budapest", +"06" => "Csongrad", +"07" => "Debrecen", +"08" => "Fejer", +"09" => "Gyor-Moson-Sopron", +"10" => "Hajdu-Bihar", +"11" => "Heves", +"12" => "Komarom-Esztergom", +"13" => "Miskolc", +"14" => "Nograd", +"15" => "Pecs", +"16" => "Pest", +"17" => "Somogy", +"18" => "Szabolcs-Szatmar-Bereg", +"19" => "Szeged", +"20" => "Jasz-Nagykun-Szolnok", +"21" => "Tolna", +"22" => "Vas", +"23" => "Veszprem", +"24" => "Zala", +"25" => "Gyor", +"26" => "Bekescsaba", +"27" => "Dunaujvaros", +"28" => "Eger", +"29" => "Hodmezovasarhely", +"30" => "Kaposvar", +"31" => "Kecskemet", +"32" => "Nagykanizsa", +"33" => "Nyiregyhaza", +"34" => "Sopron", +"35" => "Szekesfehervar", +"36" => "Szolnok", +"37" => "Szombathely", +"38" => "Tatabanya", +"39" => "Veszprem", +"40" => "Zalaegerszeg"), +"ID" => array( +"01" => "Aceh", +"02" => "Bali", +"03" => "Bengkulu", +"04" => "Jakarta Raya", +"05" => "Jambi", +"07" => "Jawa Tengah", +"08" => "Jawa Timur", +"09" => "Papua", +"10" => "Yogyakarta", +"11" => "Kalimantan Barat", +"12" => "Kalimantan Selatan", +"13" => "Kalimantan Tengah", +"14" => "Kalimantan Timur", +"15" => "Lampung", +"17" => "Nusa Tenggara Barat", +"18" => "Nusa Tenggara Timur", +"19" => "Riau", +"20" => "Sulawesi Selatan", +"21" => "Sulawesi Tengah", +"22" => "Sulawesi Tenggara", +"24" => "Sumatera Barat", +"26" => "Sumatera Utara", +"27" => "Timor Timur", +"28" => "Maluku", +"29" => "Maluku Utara", +"30" => "Jawa Barat", +"31" => "Sulawesi Utara", +"32" => "Sumatera Selatan", +"33" => "Banten", +"34" => "Gorontalo", +"35" => "Kepulauan Bangka Belitung"), +"IE" => array( +"01" => "Carlow", +"02" => "Cavan", +"03" => "Clare", +"04" => "Cork", +"06" => "Donegal", +"07" => "Dublin", +"10" => "Galway", +"11" => "Kerry", +"12" => "Kildare", +"13" => "Kilkenny", +"14" => "Leitrim", +"15" => "Laois", +"16" => "Limerick", +"18" => "Longford", +"19" => "Louth", +"20" => "Mayo", +"21" => "Meath", +"22" => "Monaghan", +"23" => "Offaly", +"24" => "Roscommon", +"25" => "Sligo", +"26" => "Tipperary", +"27" => "Waterford", +"29" => "Westmeath", +"30" => "Wexford", +"31" => "Wicklow"), +"IL" => array( +"01" => "HaDarom", +"02" => "HaMerkaz", +"03" => "HaZafon", +"04" => "Hefa", +"05" => "Tel Aviv", +"06" => "Yerushalayim"), +"IN" => array( +"01" => "Andaman and Nicobar Islands", +"02" => "Andhra Pradesh", +"03" => "Assam", +"05" => "Chandigarh", +"06" => "Dadra and Nagar Haveli", +"07" => "Delhi", +"09" => "Gujarat", +"10" => "Haryana", +"11" => "Himachal Pradesh", +"12" => "Jammu and Kashmir", +"13" => "Kerala", +"14" => "Lakshadweep", +"16" => "Maharashtra", +"17" => "Manipur", +"18" => "Meghalaya", +"19" => "Karnataka", +"20" => "Nagaland", +"21" => "Orissa", +"22" => "Pondicherry", +"23" => "Punjab", +"24" => "Rajasthan", +"25" => "Tamil Nadu", +"26" => "Tripura", +"28" => "West Bengal", +"29" => "Sikkim", +"30" => "Arunachal Pradesh", +"31" => "Mizoram", +"32" => "Daman and Diu", +"33" => "Goa", +"34" => "Bihar", +"35" => "Madhya Pradesh", +"36" => "Uttar Pradesh", +"37" => "Chhattisgarh", +"38" => "Jharkhand", +"39" => "Uttaranchal"), +"IQ" => array( +"01" => "Al Anbar", +"02" => "Al Basrah", +"03" => "Al Muthanna", +"04" => "Al Qadisiyah", +"05" => "As Sulaymaniyah", +"06" => "Babil", +"07" => "Baghdad", +"08" => "Dahuk", +"09" => "Dhi Qar", +"10" => "Diyala", +"11" => "Arbil", +"12" => "Karbala'", +"13" => "At Ta'mim", +"14" => "Maysan", +"15" => "Ninawa", +"16" => "Wasit", +"17" => "An Najaf", +"18" => "Salah ad Din"), +"IR" => array( +"01" => "Azarbayjan-e Bakhtari", +"02" => "Azarbayjan-e Khavari", +"03" => "Chahar Mahall va Bakhtiari", +"04" => "Sistan va Baluchestan", +"05" => "Kohkiluyeh va Buyer Ahmadi", +"07" => "Fars", +"08" => "Gilan", +"09" => "Hamadan", +"10" => "Ilam", +"11" => "Hormozgan", +"13" => "Bakhtaran", +"15" => "Khuzestan", +"16" => "Kordestan", +"22" => "Bushehr", +"23" => "Lorestan", +"25" => "Semnan", +"26" => "Tehran", +"28" => "Esfahan", +"29" => "Kerman", +"30" => "Khorasan", +"31" => "Yazd", +"34" => "Markazi", +"35" => "Mazandaran", +"36" => "Zanjan", +"37" => "Golestan", +"38" => "Qazvin", +"39" => "Qom"), +"IS" => array( +"01" => "Akranes", +"02" => "Akureyri", +"03" => "Arnessysla", +"04" => "Austur-Bardastrandarsysla", +"05" => "Austur-Hunavatnssysla", +"06" => "Austur-Skaftafellssysla", +"07" => "Borgarfjardarsysla", +"08" => "Dalasysla", +"09" => "Eyjafjardarsysla", +"10" => "Gullbringusysla", +"11" => "Hafnarfjordur", +"12" => "Husavik", +"13" => "Isafjordur", +"14" => "Keflavik", +"15" => "Kjosarsysla", +"16" => "Kopavogur", +"17" => "Myrasysla", +"18" => "Neskaupstadur", +"19" => "Nordur-Isafjardarsysla", +"20" => "Nordur-Mulasysla", +"21" => "Nordur-Tingeyjarsysla", +"22" => "Olafsfjordur", +"23" => "Rangarvallasysla", +"24" => "Reykjavik", +"25" => "Saudarkrokur", +"26" => "Seydisfjordur", +"27" => "Siglufjordur", +"28" => "Skagafjardarsysla", +"29" => "Snafellsnes- og Hnappadalssysla", +"30" => "Strandasysla", +"31" => "Sudur-Mulasysla", +"32" => "Sudur-Tingeyjarsysla", +"33" => "Vestmannaeyjar", +"34" => "Vestur-Bardastrandarsysla", +"35" => "Vestur-Hunavatnssysla", +"36" => "Vestur-Isafjardarsysla", +"37" => "Vestur-Skaftafellssysla"), +"IT" => array( +"01" => "Abruzzi", +"02" => "Basilicata", +"03" => "Calabria", +"04" => "Campania", +"05" => "Emilia-Romagna", +"06" => "Friuli-Venezia Giulia", +"07" => "Lazio", +"08" => "Liguria", +"09" => "Lombardia", +"10" => "Marche", +"11" => "Molise", +"12" => "Piemonte", +"13" => "Puglia", +"14" => "Sardegna", +"15" => "Sicilia", +"16" => "Toscana", +"17" => "Trentino-Alto Adige", +"18" => "Umbria", +"19" => "Valle d'Aosta", +"20" => "Veneto"), +"JM" => array( +"01" => "Clarendon", +"02" => "Hanover", +"04" => "Manchester", +"07" => "Portland", +"08" => "Saint Andrew", +"09" => "Saint Ann", +"10" => "Saint Catherine", +"11" => "Saint Elizabeth", +"12" => "Saint James", +"13" => "Saint Mary", +"14" => "Saint Thomas", +"15" => "Trelawny", +"16" => "Westmoreland", +"17" => "Kingston"), +"JO" => array( +"02" => "Al Balqa'", +"07" => "Ma", +"09" => "Al Karak", +"10" => "Al Mafraq", +"12" => "At Tafilah", +"13" => "Az Zarqa", +"14" => "Irbid"), +"JP" => array( +"01" => "Aichi", +"02" => "Akita", +"03" => "Aomori", +"04" => "Chiba", +"05" => "Ehime", +"06" => "Fukui", +"07" => "Fukuoka", +"08" => "Fukushima", +"09" => "Gifu", +"10" => "Gumma", +"11" => "Hiroshima", +"12" => "Hokkaido", +"13" => "Hyogo", +"14" => "Ibaraki", +"15" => "Ishikawa", +"16" => "Iwate", +"17" => "Kagawa", +"18" => "Kagoshima", +"19" => "Kanagawa", +"20" => "Kochi", +"21" => "Kumamoto", +"22" => "Kyoto", +"23" => "Mie", +"24" => "Miyagi", +"25" => "Miyazaki", +"26" => "Nagano", +"27" => "Nagasaki", +"28" => "Nara", +"29" => "Niigata", +"30" => "Oita", +"31" => "Okayama", +"32" => "Osaka", +"33" => "Saga", +"34" => "Saitama", +"35" => "Shiga", +"36" => "Shimane", +"37" => "Shizuoka", +"38" => "Tochigi", +"39" => "Tokushima", +"40" => "Tokyo", +"41" => "Tottori", +"42" => "Toyama", +"43" => "Wakayama", +"44" => "Yamagata", +"45" => "Yamaguchi", +"46" => "Yamanashi", +"47" => "Okinawa"), +"KE" => array( +"01" => "Central", +"02" => "Coast", +"03" => "Eastern", +"05" => "Nairobi Area", +"06" => "North-Eastern", +"07" => "Nyanza", +"08" => "Rift Valley", +"09" => "Western"), +"KG" => array( +"09" => "Batken"), +"KH" => array( +"02" => "Kampong Cham", +"03" => "Kampong Chhnang", +"04" => "Kampong Spoe", +"05" => "Kampong Thum", +"06" => "Kampot", +"07" => "Kandal", +"08" => "Kaoh Kong", +"09" => "Kracheh", +"10" => "Mondol Kiri", +"11" => "Phnum Penh", +"12" => "Pouthisat", +"13" => "Preah Vihear", +"14" => "Prey Veng", +"15" => "Rotanokiri", +"16" => "Siemreab-Otdar Meanchey", +"17" => "Stoeng Treng", +"18" => "Svay Rieng", +"19" => "Takev", +"29" => "Batdambang", +"30" => "Pailin"), +"KI" => array( +"01" => "Gilbert Islands", +"02" => "Line Islands", +"03" => "Phoenix Islands"), +"KM" => array( +"01" => "Anjouan", +"02" => "Grande Comore", +"03" => "Moheli"), +"KN" => array( +"01" => "Christ Church Nichola Town", +"02" => "Saint Anne Sandy Point", +"03" => "Saint George Basseterre", +"04" => "Saint George Gingerland", +"05" => "Saint James Windward", +"06" => "Saint John Capisterre", +"07" => "Saint John Figtree", +"08" => "Saint Mary Cayon", +"09" => "Saint Paul Capisterre", +"10" => "Saint Paul Charlestown", +"11" => "Saint Peter Basseterre", +"12" => "Saint Thomas Lowland", +"13" => "Saint Thomas Middle Island", +"15" => "Trinity Palmetto Point"), +"KP" => array( +"01" => "Chagang-do", +"03" => "Hamgyong-namdo", +"06" => "Hwanghae-namdo", +"07" => "Hwanghae-bukto", +"08" => "Kaesong-si", +"09" => "Kangwon-do", +"11" => "P'yongan-bukto", +"12" => "P'yongyang-si", +"13" => "Yanggang-do", +"14" => "Namp'o-si", +"15" => "P'yongan-namdo", +"17" => "Hamgyong-bukto", +"18" => "Najin Sonbong-si"), +"KR" => array( +"01" => "Cheju-do", +"03" => "Cholla-bukto", +"05" => "Ch'ungch'ong-bukto", +"06" => "Kangwon-do", +"10" => "Pusan-jikhalsi", +"11" => "Soul-t'ukpyolsi", +"12" => "Inch'on-jikhalsi", +"13" => "Kyonggi-do", +"14" => "Kyongsang-bukto", +"15" => "Taegu-jikhalsi", +"16" => "Cholla-namdo", +"17" => "Ch'ungch'ong-namdo", +"18" => "Kwangju-jikhalsi", +"19" => "Taejon-jikhalsi", +"20" => "Kyongsang-namdo", +"21" => "Ulsan-gwangyoksi"), +"KW" => array( +"01" => "Al Ahmadi", +"02" => "Al Kuwayt", +"03" => "Hawalli"), +"KY" => array( +"01" => "Creek", +"02" => "Eastern", +"03" => "Midland", +"04" => "South Town", +"05" => "Spot Bay", +"06" => "Stake Bay", +"07" => "West End", +"08" => "Western"), +"KZ" => array( +"01" => "Almaty", +"02" => "Almaty City", +"03" => "Aqmola", +"04" => "Aqtöbe", +"05" => "Astana", +"06" => "Atyrau", +"07" => "West Kazakhstan", +"08" => "Bayqonyr", +"09" => "Mangghystau", +"10" => "South Kazakhstan", +"11" => "Pavlodar", +"12" => "Qaraghandy", +"13" => "Qostanay", +"14" => "Qyzylorda", +"15" => "East Kazakhstan", +"16" => "North Kazakhstan", +"17" => "Zhambyl"), +"LA" => array( +"01" => "Attapu", +"02" => "Champasak", +"03" => "Houaphan", +"04" => "Khammouan", +"05" => "Louang Namtha", +"06" => "Louangphrabang", +"07" => "Oudomxai", +"08" => "Phongsali", +"09" => "Saravan", +"10" => "Savannakhet", +"11" => "Vientiane", +"13" => "Xaignabouri", +"14" => "Xiangkhoang"), +"LB" => array( +"01" => "Beqaa", +"03" => "Liban-Nord", +"04" => "Beyrouth", +"05" => "Mont-Liban", +"06" => "Liban-Sud", +"07" => "Nabatiye"), +"LC" => array( +"01" => "Anse-la-Raye", +"02" => "Dauphin", +"03" => "Castries", +"04" => "Choiseul", +"05" => "Dennery", +"06" => "Gros-Islet", +"07" => "Laborie", +"08" => "Micoud", +"09" => "Soufriere", +"10" => "Vieux-Fort", +"11" => "Praslin"), +"LI" => array( +"01" => "Balzers", +"02" => "Eschen", +"03" => "Gamprin", +"04" => "Mauren", +"05" => "Planken", +"06" => "Ruggell", +"07" => "Schaan", +"08" => "Schellenberg", +"09" => "Triesen", +"10" => "Triesenberg", +"11" => "Vaduz"), +"LK" => array( +"01" => "Amparai", +"02" => "Anuradhapura", +"03" => "Badulla", +"04" => "Batticaloa", +"06" => "Galle", +"07" => "Hambantota", +"09" => "Kalutara", +"10" => "Kandy", +"11" => "Kegalla", +"12" => "Kurunegala", +"14" => "Matale", +"15" => "Matara", +"16" => "Moneragala", +"17" => "Nuwara Eliya", +"18" => "Polonnaruwa", +"19" => "Puttalam", +"20" => "Ratnapura", +"21" => "Trincomalee", +"23" => "Colombo", +"24" => "Gampaha", +"25" => "Jaffna", +"26" => "Mannar", +"27" => "Mullaittivu", +"28" => "Vavuniya"), +"LR" => array( +"01" => "Bong", +"02" => "Grand Jide", +"03" => "Grand Bassa", +"04" => "Grand Cape Mount", +"05" => "Lofa", +"06" => "Maryland", +"07" => "Monrovia", +"08" => "Montserrado", +"09" => "Nimba", +"10" => "Sino"), +"LS" => array( +"10" => "Berea", +"11" => "Butha-Buthe", +"12" => "Leribe", +"13" => "Mafeteng", +"14" => "Maseru", +"15" => "Mohales Hoek", +"16" => "Mokhotlong", +"17" => "Qachas Nek", +"18" => "Quthing", +"19" => "Thaba-Tseka"), +"LT" => array( +"56" => "Alytaus Apskritis", +"57" => "Kauno Apskritis", +"58" => "Klaipedos Apskritis", +"59" => "Marijampoles Apskritis", +"60" => "Panevezio Apskritis", +"61" => "Siauliu Apskritis", +"62" => "Taurages Apskritis", +"63" => "Telsiu Apskritis", +"64" => "Utenos Apskritis", +"65" => "Vilniaus Apskritis"), +"LU" => array( +"01" => "Diekirch", +"02" => "Grevenmacher", +"03" => "Luxembourg"), +"LV" => array( +"01" => "Aizkraukles", +"02" => "Aluksnes", +"03" => "Balvu", +"04" => "Bauskas", +"05" => "Césu", +"06" => "Daugavpils", +"07" => "Daugavpils", +"08" => "Dobeles", +"09" => "Gulbenes", +"10" => "Jékabpils", +"11" => "Jelgava", +"12" => "Jelgavas", +"13" => "Jurmala", +"14" => "Kráslavas", +"15" => "Kuldigas", +"16" => "Liepája", +"17" => "Liepájas", +"18" => "Limbazu", +"19" => "Ludzas", +"20" => "Madonas", +"21" => "Ogres", +"22" => "Preilu", +"23" => "Rézekne", +"24" => "Rézeknes", +"25" => "Riga", +"26" => "Rigas", +"27" => "Saldus", +"28" => "Talsu", +"29" => "Tukuma", +"30" => "Valkas", +"31" => "Valmieras", +"32" => "Ventspils", +"33" => "Ventspils"), +"LY" => array( +"03" => "Al", +"05" => "Al Jufrah", +"08" => "Al Kufrah", +"13" => "Ash Shati'", +"30" => "Murzuq", +"34" => "Sabha", +"41" => "Tarhunah", +"42" => "Tubruq", +"45" => "Zlitan", +"47" => "Ajdabiya", +"48" => "Al Fatih", +"49" => "Al Jabal al Akhdar", +"50" => "Al Khums", +"51" => "An Nuqat al Khams", +"52" => "Awbari", +"53" => "Az Zawiyah", +"54" => "Banghazi", +"55" => "Darnah", +"56" => "Ghadamis", +"57" => "Gharyan", +"58" => "Misratah", +"59" => "Sawfajjin", +"60" => "Surt", +"61" => "Tarabulus", +"62" => "Yafran"), +"MA" => array( +"01" => "Agadir", +"02" => "Al Hoceima", +"03" => "Azilal", +"04" => "Ben Slimane", +"05" => "Beni Mellal", +"06" => "Boulemane", +"07" => "Casablanca", +"08" => "Chaouen", +"09" => "El Jadida", +"10" => "El Kelaa des Srarhna", +"11" => "Er Rachidia", +"12" => "Essaouira", +"13" => "Fes", +"14" => "Figuig", +"15" => "Kenitra", +"16" => "Khemisset", +"17" => "Khenifra", +"18" => "Khouribga", +"19" => "Marrakech", +"20" => "Meknes", +"21" => "Nador", +"22" => "Ouarzazate", +"23" => "Oujda", +"24" => "Rabat-Sale", +"25" => "Safi", +"26" => "Settat", +"27" => "Tanger", +"29" => "Tata", +"30" => "Taza", +"32" => "Tiznit", +"33" => "Guelmim", +"34" => "Ifrane", +"35" => "Laayoune", +"36" => "Tan-Tan", +"37" => "Taounate", +"38" => "Sidi Kacem", +"39" => "Taroudannt", +"40" => "Tetouan", +"41" => "Larache"), +"MC" => array( +"01" => "La Condamine", +"02" => "Monaco", +"03" => "Monte-Carlo"), +"MD" => array( +"46" => "Balti", +"47" => "Cahul", +"48" => "Chisinau", +"49" => "Stinga Nistrului", +"50" => "Edinet", +"51" => "Gagauzia", +"52" => "Lapusna", +"53" => "Orhei", +"54" => "Soroca", +"55" => "Tighina", +"56" => "Ungheni"), +"MG" => array( +"01" => "Antsiranana", +"02" => "Fianarantsoa", +"03" => "Mahajanga", +"04" => "Toamasina", +"05" => "Antananarivo", +"06" => "Toliara"), +"MK" => array( +"01" => "Aracinovo", +"02" => "Bac", +"03" => "Belcista", +"04" => "Berovo", +"05" => "Bistrica", +"06" => "Bitola", +"07" => "Blatec", +"08" => "Bogdanci", +"09" => "Bogomila", +"10" => "Bogovinje", +"11" => "Bosilovo", +"12" => "Brvenica", +"13" => "Cair", +"14" => "Capari", +"15" => "Caska", +"16" => "Cegrane", +"17" => "Centar", +"18" => "Centar Zupa", +"19" => "Cesinovo", +"20" => "Cucer-Sandevo", +"21" => "Debar", +"22" => "Delcevo", +"23" => "Delogozdi", +"24" => "Demir Hisar", +"25" => "Demir Kapija", +"26" => "Dobrusevo", +"27" => "Dolna Banjica", +"28" => "Dolneni", +"29" => "Dorce Petrov", +"30" => "Drugovo", +"31" => "Dzepciste", +"32" => "Gazi Baba", +"33" => "Gevgelija", +"34" => "Gostivar", +"35" => "Gradsko", +"36" => "Ilinden", +"37" => "Izvor", +"38" => "Jegunovce", +"39" => "Kamenjane", +"40" => "Karbinci", +"41" => "Karpos", +"42" => "Kavadarci", +"43" => "Kicevo", +"44" => "Kisela Voda", +"45" => "Klecevce", +"46" => "Kocani", +"47" => "Konce", +"48" => "Kondovo", +"49" => "Konopiste", +"50" => "Kosel", +"51" => "Kratovo", +"52" => "Kriva Palanka", +"53" => "Krivogastani", +"54" => "Krusevo", +"55" => "Kuklis", +"56" => "Kukurecani", +"57" => "Kumanovo", +"58" => "Labunista", +"59" => "Lipkovo", +"60" => "Lozovo", +"61" => "Lukovo", +"62" => "Makedonska Kamenica", +"63" => "Makedonski Brod", +"64" => "Mavrovi Anovi", +"65" => "Meseista", +"66" => "Miravci", +"67" => "Mogila", +"68" => "Murtino", +"69" => "Negotino", +"70" => "Negotino-Polosko", +"71" => "Novaci", +"72" => "Novo Selo", +"73" => "Oblesevo", +"74" => "Ohrid", +"75" => "Orasac", +"76" => "Orizari", +"77" => "Oslomej", +"78" => "Pehcevo", +"79" => "Petrovec", +"80" => "Plasnica", +"81" => "Podares", +"82" => "Prilep", +"83" => "Probistip", +"84" => "Radovis", +"85" => "Rankovce", +"86" => "Resen", +"87" => "Rosoman", +"88" => "Rostusa", +"89" => "Samokov", +"90" => "Saraj", +"91" => "Sipkovica", +"92" => "Sopiste", +"93" => "Sopotnica", +"94" => "Srbinovo", +"95" => "Staravina", +"96" => "Star Dojran", +"97" => "Staro Nagoricane", +"98" => "Stip", +"99" => "Struga", +"A1" => "Strumica", +"A2" => "Studenicani", +"A3" => "Suto Orizari", +"A4" => "Sveti Nikole", +"A5" => "Tearce", +"A6" => "Tetovo", +"A7" => "Topolcani", +"A8" => "Valandovo", +"A9" => "Vasilevo", +"B1" => "Veles", +"B2" => "Velesta", +"B3" => "Vevcani", +"B4" => "Vinica", +"B5" => "Vitoliste", +"B6" => "Vranestica", +"B7" => "Vrapciste", +"B8" => "Vratnica", +"B9" => "Vrutok", +"C1" => "Zajas", +"C2" => "Zelenikovo", +"C3" => "Zelino", +"C4" => "Zitose", +"C5" => "Zletovo", +"C6" => "Zrnovci"), +"ML" => array( +"01" => "Bamako", +"02" => "Gao", +"03" => "Kayes", +"04" => "Mopti", +"05" => "Segou", +"06" => "Sikasso", +"07" => "Koulikoro", +"08" => "Tombouctou"), +"MM" => array( +"01" => "Rakhine State", +"02" => "Chin State", +"03" => "Irrawaddy", +"04" => "Kachin State", +"05" => "Karan State", +"06" => "Kayah State", +"07" => "Magwe", +"08" => "Mandalay", +"09" => "Pegu", +"10" => "Sagaing", +"11" => "Shan State", +"12" => "Tenasserim", +"13" => "Mon State", +"14" => "Rangoon"), +"MN" => array( +"01" => "Arhangay", +"02" => "Bayanhongor", +"03" => "Bayan-Olgiy", +"05" => "Darhan", +"06" => "Dornod", +"07" => "Dornogovi", +"08" => "Dundgovi", +"09" => "Dzavhan", +"10" => "Govi-Altay", +"11" => "Hentiy", +"12" => "Hovd", +"13" => "Hovsgol", +"14" => "Omnogovi", +"15" => "Ovorhangay", +"16" => "Selenge", +"17" => "Suhbaatar", +"18" => "Tov", +"19" => "Uvs", +"20" => "Ulaanbaatar", +"21" => "Bulgan", +"22" => "Erdenet", +"23" => "Darhan Uul", +"24" => "Govi-Sumber", +"25" => "Orhon"), +"MO" => array( +"01" => "Ilhas", +"02" => "Macau"), +"MR" => array( +"01" => "Hodh Ech Chargui", +"02" => "Hodh El Gharbi", +"03" => "Assaba", +"04" => "Gorgol", +"05" => "Brakna", +"06" => "Trarza", +"07" => "Adrar", +"08" => "Dakhlet Nouadhibou", +"09" => "Tagant", +"10" => "Guidimaka", +"11" => "Tiris Zemmour", +"12" => "Inchiri"), +"MS" => array( +"01" => "Saint Anthony", +"02" => "Saint Georges", +"03" => "Saint Peter"), +"MU" => array( +"12" => "Black River", +"13" => "Flacq", +"14" => "Grand Port", +"15" => "Moka", +"16" => "Pamplemousses", +"17" => "Plaines Wilhems", +"18" => "Port Louis", +"19" => "Riviere du Rempart", +"20" => "Savanne", +"21" => "Agalega Islands", +"22" => "Cargados Carajos", +"23" => "Rodrigues"), +"MV" => array( +"01" => "Seenu", +"02" => "Aliff", +"03" => "Laviyani", +"04" => "Waavu", +"05" => "Laamu", +"07" => "Haa Aliff", +"08" => "Thaa", +"12" => "Meemu", +"13" => "Raa", +"14" => "Faafu", +"17" => "Daalu", +"20" => "Baa", +"23" => "Haa Daalu", +"24" => "Shaviyani", +"25" => "Noonu", +"26" => "Kaafu", +"27" => "Gaafu Aliff", +"28" => "Gaafu Daalu", +"29" => "Naviyani"), +"MW" => array( +"02" => "Chikwawa", +"03" => "Chiradzulu", +"04" => "Chitipa", +"05" => "Thyolo", +"06" => "Dedza", +"07" => "Dowa", +"08" => "Karonga", +"09" => "Kasungu", +"10" => "Machinga", +"11" => "Lilongwe", +"12" => "Mangochi", +"13" => "Mchinji", +"14" => "Mulanje", +"15" => "Mzimba", +"16" => "Ntcheu", +"17" => "Nkhata Bay", +"18" => "Nkhotakota", +"19" => "Nsanje", +"20" => "Ntchisi", +"21" => "Rumphi", +"22" => "Salima", +"23" => "Zomba", +"24" => "Blantyre", +"25" => "Mwanza"), +"MX" => array( +"01" => "Aguascalientes", +"02" => "Baja California", +"03" => "Baja California Sur", +"04" => "Campeche", +"05" => "Chiapas", +"06" => "Chihuahua", +"07" => "Coahuila de Zaragoza", +"08" => "Colima", +"09" => "Distrito Federal", +"10" => "Durango", +"11" => "Guanajuato", +"12" => "Guerrero", +"13" => "Hidalgo", +"14" => "Jalisco", +"15" => "Mexico", +"16" => "Michoacan de Ocampo", +"17" => "Morelos", +"18" => "Nayarit", +"19" => "Nuevo Leon", +"20" => "Oaxaca", +"21" => "Puebla", +"22" => "Queretaro de Arteaga", +"23" => "Quintana Roo", +"24" => "San Luis Potosi", +"25" => "Sinaloa", +"26" => "Sonora", +"27" => "Tabasco", +"28" => "Tamaulipas", +"29" => "Tlaxcala", +"30" => "Veracruz-Llave", +"31" => "Yucatan", +"32" => "Zacatecas"), +"MY" => array( +"01" => "Johor", +"02" => "Kedah", +"03" => "Kelantan", +"04" => "Melaka", +"05" => "Negeri Sembilan", +"06" => "Pahang", +"07" => "Perak", +"08" => "Perlis", +"09" => "Pulau Pinang", +"11" => "Sarawak", +"12" => "Selangor", +"13" => "Terengganu", +"14" => "Wilayah Persekutuan", +"15" => "Labuan", +"16" => "Sabah"), +"MZ" => array( +"01" => "Cabo Delgado", +"02" => "Gaza", +"03" => "Inhambane", +"04" => "Maputo", +"05" => "Sofala", +"06" => "Nampula", +"07" => "Niassa", +"08" => "Tete", +"09" => "Zambezia", +"10" => "Manica"), +"NA" => array( +"01" => "Bethanien", +"02" => "Caprivi Oos", +"03" => "Boesmanland", +"04" => "Gobabis", +"05" => "Grootfontein", +"06" => "Kaokoland", +"07" => "Karibib", +"08" => "Keetmanshoop", +"09" => "Luderitz", +"10" => "Maltahohe", +"11" => "Okahandja", +"12" => "Omaruru", +"13" => "Otjiwarongo", +"14" => "Outjo", +"15" => "Owambo", +"16" => "Rehoboth", +"17" => "Swakopmund", +"18" => "Tsumeb", +"20" => "Karasburg", +"21" => "Windhoek", +"22" => "Damaraland", +"23" => "Hereroland Oos", +"24" => "Hereroland Wes", +"25" => "Kavango", +"26" => "Mariental", +"27" => "Namaland"), +"NE" => array( +"01" => "Agadez", +"02" => "Diffa", +"03" => "Dosso", +"04" => "Maradi", +"05" => "Niamey", +"06" => "Tahoua", +"07" => "Zinder"), +"NG" => array( +"05" => "Lagos", +"11" => "Abuja Capital Territory", +"16" => "Ogun", +"21" => "Akwa Ibom", +"22" => "Cross River", +"23" => "Kaduna", +"24" => "Katsina", +"25" => "Anambra", +"26" => "Benue", +"27" => "Borno", +"28" => "Imo", +"29" => "Kano", +"30" => "Kwara", +"31" => "Niger", +"32" => "Oyo", +"35" => "Adamawa", +"36" => "Delta", +"37" => "Edo", +"39" => "Jigawa", +"40" => "Kebbi", +"41" => "Kogi", +"42" => "Osun", +"43" => "Taraba", +"44" => "Yobe", +"45" => "Abia", +"46" => "Bauchi", +"47" => "Enugu", +"48" => "Ondo", +"49" => "Plateau", +"50" => "Rivers", +"51" => "Sokoto", +"52" => "Bayelsa", +"53" => "Ebonyi", +"54" => "Ekiti", +"55" => "Gombe", +"56" => "Nassarawa", +"57" => "Zamfara"), +"NI" => array( +"01" => "Boaco", +"02" => "Carazo", +"03" => "Chinandega", +"04" => "Chontales", +"05" => "Esteli", +"06" => "Granada", +"07" => "Jinotega", +"08" => "Leon", +"09" => "Madriz", +"10" => "Managua", +"11" => "Masaya", +"12" => "Matagalpa", +"13" => "Nueva Segovia", +"14" => "Rio San Juan", +"15" => "Rivas", +"16" => "Zelaya"), +"NL" => array( +"01" => "Drenthe", +"02" => "Friesland", +"03" => "Gelderland", +"04" => "Groningen", +"05" => "Limburg", +"06" => "Noord-Brabant", +"07" => "Noord-Holland", +"08" => "Overijssel", +"09" => "Utrecht", +"10" => "Zeeland", +"11" => "Zuid-Holland", +"12" => "Dronten", +"13" => "Zuidelijke IJsselmeerpolders", +"14" => "Lelystad", +"15" => "Overijssel", +"16" => "Flevoland"), +"NO" => array( +"01" => "Akershus", +"02" => "Aust-Agder", +"04" => "Buskerud", +"05" => "Finnmark", +"06" => "Hedmark", +"07" => "Hordaland", +"08" => "More og Romsdal", +"09" => "Nordland", +"10" => "Nord-Trondelag", +"11" => "Oppland", +"12" => "Oslo", +"13" => "Ostfold", +"14" => "Rogaland", +"15" => "Sogn og Fjordane", +"16" => "Sor-Trondelag", +"17" => "Telemark", +"18" => "Troms", +"19" => "Vest-Agder", +"20" => "Vestfold"), +"NP" => array( +"01" => "Bagmati", +"02" => "Bheri", +"03" => "Dhawalagiri", +"04" => "Gandaki", +"05" => "Janakpur", +"06" => "Karnali", +"07" => "Kosi", +"08" => "Lumbini", +"09" => "Mahakali", +"10" => "Mechi", +"11" => "Narayani", +"12" => "Rapti", +"13" => "Sagarmatha", +"14" => "Seti"), +"NR" => array( +"01" => "Aiwo", +"02" => "Anabar", +"03" => "Anetan", +"04" => "Anibare", +"05" => "Baiti", +"06" => "Boe", +"07" => "Buada", +"08" => "Denigomodu", +"09" => "Ewa", +"10" => "Ijuw", +"11" => "Meneng", +"12" => "Nibok", +"13" => "Uaboe", +"14" => "Yaren"), +"NZ" => array( +"01" => "Akaroa", +"03" => "Amuri", +"04" => "Ashburton", +"07" => "Bay of Islands", +"08" => "Bruce", +"09" => "Buller", +"10" => "Chatham Islands", +"11" => "Cheviot", +"12" => "Clifton", +"13" => "Clutha", +"14" => "Cook", +"16" => "Dannevirke", +"17" => "Egmont", +"18" => "Eketahuna", +"19" => "Ellesmere", +"20" => "Eltham", +"21" => "Eyre", +"22" => "Featherston", +"24" => "Franklin", +"26" => "Golden Bay", +"27" => "Great Barrier Island", +"28" => "Grey", +"29" => "Hauraki Plains", +"30" => "Hawera", +"31" => "Hawke's Bay", +"32" => "Heathcote", +"33" => "Hobson", +"34" => "Hokianga", +"35" => "Horowhenua", +"36" => "Hutt", +"37" => "Inangahua", +"38" => "Inglewood", +"39" => "Kaikoura", +"40" => "Kairanga", +"41" => "Kiwitea", +"43" => "Lake", +"45" => "Mackenzie", +"46" => "Malvern", +"47" => "Manawatu", +"48" => "Mangonui", +"49" => "Maniototo", +"50" => "Marlborough", +"51" => "Masterton", +"52" => "Matamata", +"53" => "Mount Herbert", +"54" => "Ohinemuri", +"55" => "Opotiki", +"56" => "Oroua", +"57" => "Otamatea", +"58" => "Otorohanga", +"59" => "Oxford", +"60" => "Pahiatua", +"61" => "Paparua", +"63" => "Patea", +"65" => "Piako", +"66" => "Pohangina", +"67" => "Raglan", +"68" => "Rangiora", +"69" => "Rangitikei", +"70" => "Rodney", +"71" => "Rotorua", +"72" => "Southland", +"73" => "Stewart Island", +"74" => "Stratford", +"76" => "Taranaki", +"77" => "Taumarunui", +"78" => "Taupo", +"79" => "Tauranga", +"81" => "Tuapeka", +"82" => "Vincent", +"83" => "Waiapu", +"84" => "Waihemo", +"85" => "Waikato", +"86" => "Waikohu", +"88" => "Waimairi", +"89" => "Waimarino", +"90" => "Waimate", +"91" => "Waimate West", +"92" => "Waimea", +"93" => "Waipa", +"95" => "Waipawa", +"96" => "Waipukurau", +"97" => "Wairarapa South", +"98" => "Wairewa", +"99" => "Wairoa", +"A1" => "Whangarei", +"A2" => "Whangaroa", +"A3" => "Woodville", +"A4" => "Waitaki", +"A6" => "Waitomo", +"A8" => "Waitotara", +"B2" => "Wanganui", +"B3" => "Westland", +"B4" => "Whakatane", +"D4" => "Hurunui", +"D5" => "Silverpeaks", +"D6" => "Strathallan", +"D8" => "Waiheke", +"D9" => "Hikurangi", +"E1" => "Manaia", +"E2" => "Runanga", +"E3" => "Saint Kilda", +"E4" => "Thames-Coromandel", +"E5" => "Waverley", +"E6" => "Wallace"), +"OM" => array( +"01" => "Ad Dakhiliyah", +"02" => "Al Batinah", +"03" => "Al Wusta", +"04" => "Ash Sharqiyah", +"05" => "Az Zahirah", +"06" => "Masqat", +"07" => "Musandam", +"08" => "Zufar"), +"PA" => array( +"01" => "Bocas del Toro", +"02" => "Chiriqui", +"03" => "Cocle", +"04" => "Colon", +"05" => "Darien", +"06" => "Herrera", +"07" => "Los Santos", +"08" => "Panama", +"09" => "San Blas", +"10" => "Veraguas"), +"PE" => array( +"01" => "Amazonas", +"02" => "Ancash", +"03" => "Apurimac", +"04" => "Arequipa", +"05" => "Ayacucho", +"06" => "Cajamarca", +"07" => "Callao", +"08" => "Cusco", +"09" => "Huancavelica", +"10" => "Huanuco", +"11" => "Ica", +"12" => "Junin", +"13" => "La Libertad", +"14" => "Lambayeque", +"15" => "Lima", +"16" => "Loreto", +"17" => "Madre de Dios", +"18" => "Moquegua", +"19" => "Pasco", +"20" => "Piura", +"21" => "Puno", +"22" => "San Martin", +"23" => "Tacna", +"24" => "Tumbes", +"25" => "Ucayali"), +"PG" => array( +"01" => "Central", +"02" => "Gulf", +"03" => "Milne Bay", +"04" => "Northern", +"05" => "Southern Highlands", +"06" => "Western", +"07" => "North Solomons", +"08" => "Chimbu", +"09" => "Eastern Highlands", +"10" => "East New Britain", +"11" => "East Sepik", +"12" => "Madang", +"13" => "Manus", +"14" => "Morobe", +"15" => "New Ireland", +"16" => "Western Highlands", +"17" => "West New Britain", +"18" => "Sandaun", +"19" => "Enga", +"20" => "National Capital"), +"PH" => array( +"01" => "Abra", +"02" => "Agusan del Norte", +"03" => "Agusan del Sur", +"04" => "Aklan", +"05" => "Albay", +"06" => "Antique", +"07" => "Bataan", +"08" => "Batanes", +"09" => "Batangas", +"10" => "Benguet", +"11" => "Bohol", +"12" => "Bukidnon", +"13" => "Bulacan", +"14" => "Cagayan", +"15" => "Camarines Norte", +"16" => "Camarines Sur", +"17" => "Camiguin", +"18" => "Capiz", +"19" => "Catanduanes", +"20" => "Cavite", +"21" => "Cebu", +"22" => "Basilan", +"23" => "Eastern Samar", +"24" => "Davao", +"25" => "Davao del Sur", +"26" => "Davao Oriental", +"27" => "Ifugao", +"28" => "Ilocos Norte", +"29" => "Ilocos Sur", +"30" => "Iloilo", +"31" => "Isabela", +"32" => "Kalinga-Apayao", +"33" => "Laguna", +"34" => "Lanao del Norte", +"35" => "Lanao del Sur", +"36" => "La Union", +"37" => "Leyte", +"38" => "Marinduque", +"39" => "Masbate", +"40" => "Mindoro Occidental", +"41" => "Mindoro Oriental", +"42" => "Misamis Occidental", +"43" => "Misamis Oriental", +"44" => "Mountain", +"46" => "Negros Oriental", +"47" => "Nueva Ecija", +"48" => "Nueva Vizcaya", +"49" => "Palawan", +"50" => "Pampanga", +"51" => "Pangasinan", +"53" => "Rizal", +"54" => "Romblon", +"55" => "Samar", +"56" => "Maguindanao", +"57" => "North Cotabato", +"58" => "Sorsogon", +"59" => "Southern Leyte", +"60" => "Sulu", +"61" => "Surigao del Norte", +"62" => "Surigao del Sur", +"63" => "Tarlac", +"64" => "Zambales", +"65" => "Zamboanga del Norte", +"66" => "Zamboanga del Sur", +"67" => "Northern Samar", +"68" => "Quirino", +"69" => "Siquijor", +"70" => "South Cotabato", +"71" => "Sultan Kudarat", +"72" => "Tawitawi", +"A1" => "Angeles", +"A2" => "Bacolod", +"A3" => "Bago", +"A4" => "Baguio", +"A5" => "Bais", +"A6" => "Basilan City", +"A7" => "Batangas City", +"A8" => "Butuan", +"A9" => "Cabanatuan", +"B1" => "Cadiz", +"B2" => "Cagayan de Oro", +"B3" => "Calbayog", +"B4" => "Caloocan", +"B5" => "Canlaon", +"B6" => "Cavite City", +"B7" => "Cebu City", +"B8" => "Cotabato", +"B9" => "Dagupan", +"C1" => "Danao", +"C2" => "Dapitan", +"C3" => "Davao City", +"C4" => "Dipolog", +"C5" => "Dumaguete", +"C6" => "General Santos", +"C7" => "Gingoog", +"C8" => "Iligan", +"C9" => "Iloilo City", +"D1" => "Iriga", +"D2" => "La Carlota", +"D3" => "Laoag", +"D4" => "Lapu-Lapu", +"D5" => "Legaspi", +"D6" => "Lipa", +"D7" => "Lucena", +"D8" => "Mandaue", +"D9" => "Manila", +"E1" => "Marawi", +"E2" => "Naga", +"E3" => "Olongapo", +"E4" => "Ormoc", +"E5" => "Oroquieta", +"E6" => "Ozamis", +"E7" => "Pagadian", +"E8" => "Palayan", +"E9" => "Pasay", +"F1" => "Puerto Princesa", +"F2" => "Quezon City", +"F3" => "Roxas", +"F4" => "San Carlos", +"F5" => "San Carlos", +"F6" => "San Jose", +"F7" => "San Pablo", +"F8" => "Silay", +"F9" => "Surigao", +"G1" => "Tacloban", +"G2" => "Tagaytay", +"G3" => "Tagbilaran", +"G4" => "Tangub", +"G5" => "Toledo", +"G6" => "Trece Martires", +"G7" => "Zamboanga", +"G8" => "Aurora", +"H2" => "Quezon", +"H3" => "Negros Occidental"), +"PK" => array( +"01" => "Federally Administered Tribal Areas", +"02" => "Balochistan", +"03" => "North-West Frontier", +"04" => "Punjab", +"05" => "Sindh", +"06" => "Azad Kashmir", +"07" => "Northern Areas", +"08" => "Islamabad"), +"PL" => array( +"23" => "Biala Podlaska", +"24" => "Bialystok", +"25" => "Bielsko", +"26" => "Bydgoszcz", +"27" => "Chelm", +"28" => "Ciechanow", +"29" => "Czestochowa", +"30" => "Elblag", +"31" => "Gdansk", +"32" => "Gorzow", +"33" => "Jelenia Gora", +"34" => "Kalisz", +"35" => "Katowice", +"36" => "Kielce", +"37" => "Konin", +"38" => "Koszalin", +"39" => "Krakow", +"40" => "Krosno", +"41" => "Legnica", +"42" => "Leszno", +"43" => "Lodz", +"44" => "Lomza", +"45" => "Lublin", +"46" => "Nowy Sacz", +"47" => "Olsztyn", +"48" => "Opole", +"49" => "Ostroleka", +"50" => "Pila", +"51" => "Piotrkow", +"52" => "Plock", +"53" => "Poznan", +"54" => "Przemysl", +"55" => "Radom", +"56" => "Rzeszow", +"57" => "Siedlce", +"58" => "Sieradz", +"59" => "Skierniewice", +"60" => "Slupsk", +"61" => "Suwalki", +"62" => "Szczecin", +"63" => "Tarnobrzeg", +"64" => "Tarnow", +"65" => "Torun", +"66" => "Walbrzych", +"67" => "Warszawa", +"68" => "Wloclawek", +"69" => "Wroclaw", +"70" => "Zamosc", +"71" => "Zielona Gora"), +"PT" => array( +"02" => "Aveiro", +"03" => "Beja", +"04" => "Braga", +"05" => "Braganca", +"06" => "Castelo Branco", +"07" => "Coimbra", +"08" => "Evora", +"09" => "Faro", +"10" => "Madeira", +"11" => "Guarda", +"13" => "Leiria", +"14" => "Lisboa", +"16" => "Portalegre", +"17" => "Porto", +"18" => "Santarem", +"19" => "Setubal", +"20" => "Viana do Castelo", +"21" => "Vila Real", +"22" => "Viseu", +"23" => "Azores"), +"PY" => array( +"01" => "Alto Parana", +"02" => "Amambay", +"03" => "Boqueron", +"04" => "Caaguazu", +"05" => "Caazapa", +"06" => "Central", +"07" => "Concepcion", +"08" => "Cordillera", +"10" => "Guaira", +"11" => "Itapua", +"12" => "Misiones", +"13" => "Neembucu", +"15" => "Paraguari", +"16" => "Presidente Hayes", +"17" => "San Pedro", +"18" => "Alto Paraguay", +"19" => "Canindeyu", +"20" => "Chaco", +"21" => "Nueva Asuncion"), +"QA" => array( +"01" => "Ad Dawhah", +"02" => "Al Ghuwariyah", +"03" => "Al Jumaliyah", +"04" => "Al Khawr", +"05" => "Al Wakrah", +"06" => "Ar Rayyan", +"07" => "Jariyan al Batnah", +"08" => "Madinat ach Shamal", +"09" => "Umm Salal"), +"RO" => array( +"01" => "Alba", +"02" => "Arad", +"03" => "Arges", +"04" => "Bacau", +"05" => "Bihor", +"06" => "Bistrita-Nasaud", +"07" => "Botosani", +"08" => "Braila", +"09" => "Brasov", +"10" => "Bucuresti", +"11" => "Buzau", +"12" => "Caras-Severin", +"13" => "Cluj", +"14" => "Constanta", +"15" => "Covasna", +"16" => "Dambovita", +"17" => "Dolj", +"18" => "Galati", +"19" => "Gorj", +"20" => "Harghita", +"21" => "Hunedoara", +"22" => "Ialomita", +"23" => "Iasi", +"25" => "Maramures", +"26" => "Mehedinti", +"27" => "Mures", +"28" => "Neamt", +"29" => "Olt", +"30" => "Prahova", +"31" => "Salaj", +"32" => "Satu Mare", +"33" => "Sibiu", +"34" => "Suceava", +"35" => "Teleorman", +"36" => "Timis", +"37" => "Tulcea", +"38" => "Vaslui", +"39" => "Valcea", +"40" => "Vrancea", +"41" => "Calarasi", +"42" => "Giurgiu"), +"RU" => array( +"01" => "Adygey", +"02" => "Aga Buryat", +"03" => "Gorno-Altay", +"04" => "Altay", +"05" => "Amur", +"06" => "Arkhangel'sk", +"07" => "Astrakhan'", +"08" => "Bashkortostan", +"09" => "Belgorod", +"10" => "Bryansk", +"11" => "Buryat", +"12" => "Chechnya", +"13" => "Chelyabinsk", +"14" => "Chita", +"15" => "Chukot", +"16" => "Chuvash", +"17" => "Dagestan", +"18" => "Evenk", +"19" => "Ingush", +"20" => "Irkutsk", +"21" => "Ivanovo", +"22" => "Kabardin-Balkar", +"23" => "Kaliningrad", +"24" => "Kalmyk", +"25" => "Kaluga", +"26" => "Kamchatka", +"27" => "Karachay-Cherkess", +"28" => "Karelia", +"29" => "Kemerovo", +"30" => "Khabarovsk", +"31" => "Khakass", +"32" => "Khanty-Mansiy", +"33" => "Kirov", +"34" => "Komi", +"35" => "Komi-Permyak", +"36" => "Koryak", +"37" => "Kostroma", +"38" => "Krasnodar", +"39" => "Krasnoyarsk", +"40" => "Kurgan", +"41" => "Kursk", +"42" => "Leningrad", +"43" => "Lipetsk", +"44" => "Magadan", +"45" => "Mariy-El", +"46" => "Mordovia", +"47" => "Moskva", +"48" => "Moscow City", +"49" => "Murmansk", +"50" => "Nenets", +"51" => "Nizhegorod", +"52" => "Novgorod", +"53" => "Novosibirsk", +"54" => "Omsk", +"55" => "Orenburg", +"56" => "Orel", +"57" => "Penza", +"58" => "Perm'", +"59" => "Primor'ye", +"60" => "Pskov", +"61" => "Rostov", +"62" => "Ryazan'", +"63" => "Sakha", +"64" => "Sakhalin", +"65" => "Samara", +"66" => "Saint Petersburg City", +"67" => "Saratov", +"68" => "North Ossetia", +"69" => "Smolensk", +"70" => "Stavropol'", +"71" => "Sverdlovsk", +"72" => "Tambov", +"73" => "Tatarstan", +"74" => "Taymyr", +"75" => "Tomsk", +"76" => "Tula", +"77" => "Tver'", +"78" => "Tyumen'", +"79" => "Tuva", +"80" => "Udmurt", +"81" => "Ul'yanovsk", +"82" => "Ust-Orda Buryat", +"83" => "Vladimir", +"84" => "Volgograd", +"85" => "Vologda", +"86" => "Voronezh", +"87" => "Yamal-Nenets", +"88" => "Yaroslavl'", +"89" => "Yevrey"), +"RW" => array( +"01" => "Butare", +"02" => "Byumba", +"03" => "Cyangugu", +"04" => "Gikongoro", +"05" => "Gisenyi", +"06" => "Gitarama", +"07" => "Kibungo", +"08" => "Kibuye", +"09" => "Kigali", +"10" => "Ruhengeri"), +"SA" => array( +"02" => "Al Bahah", +"03" => "Al Jawf", +"05" => "Al Madinah", +"06" => "Ash Sharqiyah", +"08" => "Al Qasim", +"09" => "Al Qurayyat", +"10" => "Ar Riyad", +"13" => "Ha'il", +"14" => "Makkah", +"15" => "Al Hudud ash Shamaliyah", +"16" => "Najran", +"17" => "Jizan", +"19" => "Tabuk"), +"SB" => array( +"03" => "Malaita", +"04" => "Western", +"05" => "Central", +"06" => "Guadalcanal", +"07" => "Isabel", +"08" => "Makira", +"09" => "Temotu"), +"SC" => array( +"01" => "Anse aux Pins", +"02" => "Anse Boileau", +"03" => "Anse Etoile", +"04" => "Anse Louis", +"05" => "Anse Royale", +"06" => "Baie Lazare", +"07" => "Baie Sainte Anne", +"08" => "Beau Vallon", +"09" => "Bel Air", +"10" => "Bel Ombre", +"11" => "Cascade", +"12" => "Glacis", +"13" => "Grand' Anse", +"14" => "Grand' Anse", +"15" => "La Digue", +"16" => "La Riviere Anglaise", +"17" => "Mont Buxton", +"18" => "Mont Fleuri", +"19" => "Plaisance", +"20" => "Pointe La Rue", +"21" => "Port Glaud", +"22" => "Saint Louis", +"23" => "Takamaka"), +"SD" => array( +"27" => "Al Wusta", +"28" => "Al Istiwa'iyah", +"29" => "Al Khartum", +"30" => "Ash Shamaliyah", +"31" => "Ash Sharqiyah", +"32" => "Bahr al Ghazal", +"33" => "Darfur", +"34" => "Kurdufan"), +"SE" => array( +"01" => "Alvsborgs Lan", +"02" => "Blekinge Lan", +"03" => "Gavleborgs Lan", +"04" => "Goteborgs och Bohus Lan", +"05" => "Gotlands Lan", +"06" => "Hallands Lan", +"07" => "Jamtlands Lan", +"08" => "Jonkopings Lan", +"09" => "Kalmar Lan", +"10" => "Kopparbergs Lan", +"11" => "Kristianstads Lan", +"12" => "Kronobergs Lan", +"13" => "Malmohus Lan", +"14" => "Norrbottens Lan", +"15" => "Orebro Lan", +"16" => "Ostergotlands Lan", +"17" => "Skaraborgs Lan", +"18" => "Sodermanlands Lan", +"21" => "Uppsala Lan", +"22" => "Varmlands Lan", +"23" => "Vasterbottens Lan", +"24" => "Vasternorrlands Lan", +"25" => "Vastmanlands Lan", +"26" => "Stockholms Lan", +"27" => "Skane Lan", +"28" => "Vastra Gotaland"), +"SH" => array( +"01" => "Ascension", +"02" => "Saint Helena", +"03" => "Tristan da Cunha"), +"SK" => array( +"01" => "Banska Bystrica", +"02" => "Bratislava", +"03" => "Kosice", +"04" => "Nitra", +"05" => "Presov", +"06" => "Trencin", +"07" => "Trnava", +"08" => "Zilina"), +"SL" => array( +"01" => "Eastern", +"02" => "Northern", +"03" => "Southern", +"04" => "Western Area"), +"SM" => array( +"01" => "Acquaviva", +"02" => "Chiesanuova", +"03" => "Domagnano", +"04" => "Faetano", +"05" => "Fiorentino", +"06" => "Borgo Maggiore", +"07" => "San Marino", +"08" => "Monte Giardino", +"09" => "Serravalle"), +"SN" => array( +"01" => "Dakar", +"03" => "Diourbel", +"04" => "Saint-Louis", +"05" => "Tambacounda", +"07" => "Thies", +"08" => "Louga", +"09" => "Fatick", +"10" => "Kaolack", +"11" => "Kolda", +"12" => "Ziguinchor"), +"SO" => array( +"01" => "Bakool", +"02" => "Banaadir", +"03" => "Bari", +"04" => "Bay", +"05" => "Galguduud", +"06" => "Gedo", +"07" => "Hiiraan", +"08" => "Jubbada Dhexe", +"09" => "Jubbada Hoose", +"10" => "Mudug", +"11" => "Nugaal", +"12" => "Sanaag", +"13" => "Shabeellaha Dhexe", +"14" => "Shabeellaha Hoose", +"15" => "Togdheer", +"16" => "Woqooyi Galbeed"), +"SR" => array( +"10" => "Brokopondo", +"11" => "Commewijne", +"12" => "Coronie", +"13" => "Marowijne", +"14" => "Nickerie", +"15" => "Para", +"16" => "Paramaribo", +"17" => "Saramacca", +"18" => "Sipaliwini", +"19" => "Wanica"), +"ST" => array( +"01" => "Principe", +"02" => "Sao Tome"), +"SV" => array( +"01" => "Ahuachapan", +"02" => "Cabanas", +"03" => "Chalatenango", +"04" => "Cuscatlan", +"05" => "La Libertad", +"06" => "La Paz", +"07" => "La Union", +"08" => "Morazan", +"09" => "San Miguel", +"10" => "San Salvador", +"11" => "Santa Ana", +"12" => "San Vicente", +"13" => "Sonsonate", +"14" => "Usulutan"), +"SY" => array( +"01" => "Al Hasakah", +"02" => "Al Ladhiqiyah", +"03" => "Al Qunaytirah", +"04" => "Ar Raqqah", +"05" => "As Suwayda'", +"06" => "Dar", +"07" => "Dayr az Zawr", +"08" => "Rif Dimashq", +"09" => "Halab", +"10" => "Hamah", +"11" => "Hims", +"12" => "Idlib", +"13" => "Dimashq", +"14" => "Tartus"), +"SZ" => array( +"01" => "Hhohho", +"02" => "Lubombo", +"03" => "Manzini", +"04" => "Shiselweni", +"05" => "Praslin"), +"TD" => array( +"01" => "Batha", +"02" => "Biltine", +"03" => "Borkou-Ennedi-Tibesti", +"04" => "Chari-Baguirmi", +"05" => "Guera", +"06" => "Kanem", +"07" => "Lac", +"08" => "Logone Occidental", +"09" => "Logone Oriental", +"10" => "Mayo-Kebbi", +"11" => "Moyen-Chari", +"12" => "Ouaddai", +"13" => "Salamat", +"14" => "Tandjile"), +"TG" => array( +"01" => "Amlame", +"02" => "Aneho", +"03" => "Atakpame", +"04" => "Bafilo", +"05" => "Bassar", +"06" => "Dapaong", +"07" => "Kante", +"08" => "Klouto", +"09" => "Lama-Kara", +"10" => "Lome", +"11" => "Mango", +"12" => "Niamtougou", +"13" => "Notse", +"14" => "Kpagouda", +"15" => "Badou", +"16" => "Sotouboua", +"17" => "Tabligbo", +"18" => "Tsevie", +"19" => "Tchamba", +"20" => "Tchaoudjo", +"21" => "Vogan"), +"TH" => array( +"01" => "Mae Hong Son", +"02" => "Chiang Mai", +"03" => "Chiang Rai", +"04" => "Nan", +"05" => "Lamphun", +"06" => "Lampang", +"07" => "Phrae", +"08" => "Tak", +"09" => "Sukhothai", +"10" => "Uttaradit", +"11" => "Kamphaeng Phet", +"12" => "Phitsanulok", +"13" => "Phichit", +"14" => "Phetchabun", +"15" => "Uthai Thani", +"16" => "Nakhon Sawan", +"17" => "Nong Khai", +"18" => "Loei", +"19" => "Udon Thani", +"20" => "Sakon Nakhon", +"21" => "Nakhon Phanom", +"22" => "Khon Kaen", +"23" => "Kalasin", +"24" => "Maha Sarakham", +"25" => "Roi Et", +"26" => "Chaiyaphum", +"27" => "Nakhon Ratchasima", +"28" => "Buriram", +"29" => "Surin", +"30" => "Sisaket", +"31" => "Narathiwat", +"32" => "Chai Nat", +"33" => "Sing Buri", +"34" => "Lop Buri", +"35" => "Ang Thong", +"36" => "Phra Nakhon Si Ayutthaya", +"37" => "Saraburi", +"38" => "Nonthaburi", +"39" => "Pathum Thani", +"40" => "Krung Thep", +"41" => "Phayao", +"42" => "Samut Prakan", +"43" => "Nakhon Nayok", +"44" => "Chachoengsao", +"45" => "Prachin Buri", +"46" => "Chon Buri", +"47" => "Rayong", +"48" => "Chanthaburi", +"49" => "Trat", +"50" => "Kanchanaburi", +"51" => "Suphan Buri", +"52" => "Ratchaburi", +"53" => "Nakhon Pathom", +"54" => "Samut Songkhram", +"55" => "Samut Sakhon", +"56" => "Phetchaburi", +"57" => "Prachuap Khiri Khan", +"58" => "Chumphon", +"59" => "Ranong", +"60" => "Surat Thani", +"61" => "Phangnga", +"62" => "Phuket", +"63" => "Krabi", +"64" => "Nakhon Si Thammarat", +"65" => "Trang", +"66" => "Phatthalung", +"67" => "Satun", +"68" => "Songkhla", +"69" => "Pattani", +"70" => "Yala", +"71" => "Ubon Ratchathani", +"72" => "Yasothon"), +"TM" => array( +"01" => "Ahal", +"02" => "Balkan", +"03" => "Dashoguz", +"04" => "Lebap", +"05" => "Mary"), +"TN" => array( +"02" => "Al Qasrayn", +"03" => "Al Qayrawan", +"06" => "Jundubah", +"10" => "Qafsah", +"14" => "Al Kaf", +"15" => "Al Mahdiyah", +"16" => "Al Munastir", +"17" => "Bajah", +"18" => "Banzart", +"19" => "Nabul", +"22" => "Silyanah", +"23" => "Susah", +"26" => "Aryanah", +"27" => "Bin", +"28" => "Madanin", +"29" => "Qabis", +"31" => "Qibili", +"32" => "Safaqis", +"33" => "Sidi Bu Zayd", +"34" => "Tatawin", +"35" => "Tawzar", +"36" => "Tunis", +"37" => "Zaghwan"), +"TO" => array( +"01" => "Ha", +"02" => "Tongatapu", +"03" => "Vava"), +"TR" => array( +"02" => "Adiyaman", +"03" => "Afyon", +"04" => "Agri", +"05" => "Amasya", +"07" => "Antalya", +"08" => "Artvin", +"09" => "Aydin", +"10" => "Balikesir", +"11" => "Bilecik", +"12" => "Bingol", +"13" => "Bitlis", +"14" => "Bolu", +"15" => "Burdur", +"16" => "Bursa", +"17" => "Canakkale", +"19" => "Corum", +"20" => "Denizli", +"21" => "Diyarbakir", +"22" => "Edirne", +"23" => "Elazig", +"24" => "Erzincan", +"25" => "Erzurum", +"26" => "Eskisehir", +"28" => "Giresun", +"31" => "Hatay", +"32" => "Icel", +"33" => "Isparta", +"34" => "Istanbul", +"35" => "Izmir", +"37" => "Kastamonu", +"38" => "Kayseri", +"39" => "Kirklareli", +"40" => "Kirsehir", +"41" => "Kocaeli", +"43" => "Kutahya", +"44" => "Malatya", +"45" => "Manisa", +"46" => "Kahramanmaras", +"48" => "Mugla", +"49" => "Mus", +"50" => "Nevsehir", +"52" => "Ordu", +"53" => "Rize", +"54" => "Sakarya", +"55" => "Samsun", +"57" => "Sinop", +"58" => "Sivas", +"59" => "Tekirdag", +"60" => "Tokat", +"61" => "Trabzon", +"62" => "Tunceli", +"63" => "Sanliurfa", +"64" => "Usak", +"65" => "Van", +"66" => "Yozgat", +"68" => "Ankara", +"69" => "Gumushane", +"70" => "Hakkari", +"71" => "Konya", +"72" => "Mardin", +"73" => "Nigde", +"74" => "Siirt", +"75" => "Aksaray", +"76" => "Batman", +"77" => "Bayburt", +"78" => "Karaman", +"79" => "Kirikkale", +"80" => "Sirnak", +"81" => "Adana", +"82" => "Cankiri", +"83" => "Gaziantep", +"84" => "Kars", +"85" => "Zonguldak", +"86" => "Ardahan", +"87" => "Bartin", +"88" => "Igdir", +"89" => "Karabuk", +"90" => "Kilis", +"91" => "Osmaniye", +"92" => "Yalova"), +"TT" => array( +"01" => "Arima", +"02" => "Caroni", +"03" => "Mayaro", +"04" => "Nariva", +"05" => "Port-of-Spain", +"06" => "Saint Andrew", +"07" => "Saint David", +"08" => "Saint George", +"09" => "Saint Patrick", +"10" => "San Fernando", +"11" => "Tobago", +"12" => "Victoria"), +"TW" => array( +"01" => "Fu-chien", +"02" => "Kao-hsiung", +"03" => "T'ai-pei", +"04" => "T'ai-wan"), +"TZ" => array( +"01" => "Arusha", +"02" => "Pwani", +"03" => "Dodoma", +"04" => "Iringa", +"05" => "Kigoma", +"06" => "Kilimanjaro", +"07" => "Lindi", +"08" => "Mara", +"09" => "Mbeya", +"10" => "Morogoro", +"11" => "Mtwara", +"12" => "Mwanza", +"13" => "Pemba North", +"14" => "Ruvuma", +"15" => "Shinyanga", +"16" => "Singida", +"17" => "Tabora", +"18" => "Tanga", +"19" => "Kagera", +"20" => "Pemba South", +"21" => "Zanzibar Central", +"22" => "Zanzibar North", +"23" => "Dar es Salaam", +"24" => "Rukwa", +"25" => "Zanzibar Urban"), +"UA" => array( +"01" => "Cherkas'ka Oblast'", +"02" => "Chernihivs'ka Oblast'", +"03" => "Chernivets'ka Oblast'", +"04" => "Dnipropetrovs'ka Oblast'", +"05" => "Donets'ka Oblast'", +"06" => "Ivano-Frankivs'ka Oblast'", +"07" => "Kharkivs'ka Oblast'", +"08" => "Khersons'ka Oblast'", +"09" => "Khmel'nyts'ka Oblast'", +"10" => "Kirovohrads'ka Oblast'", +"11" => "Krym", +"12" => "Kyyiv", +"13" => "Kyyivs'ka Oblast'", +"14" => "Luhans'ka Oblast'", +"15" => "L'vivs'ka Oblast'", +"16" => "Mykolayivs'ka Oblast'", +"17" => "Odes'ka Oblast'", +"18" => "Poltavs'ka Oblast'", +"19" => "Rivnens'ka Oblast'", +"20" => "Sevastopol'", +"21" => "Sums'ka Oblast'", +"22" => "Ternopil's'ka Oblast'", +"23" => "Vinnyts'ka Oblast'", +"24" => "Volyns'ka Oblast'", +"25" => "Zakarpats'ka Oblast'", +"26" => "Zaporiz'ka Oblast'", +"27" => "Zhytomyrs'ka Oblast'"), +"UG" => array( +"05" => "Busoga", +"08" => "Karamoja", +"12" => "South Buganda", +"18" => "Central", +"20" => "Eastern", +"21" => "Nile", +"22" => "North Buganda", +"23" => "Northern", +"24" => "Southern", +"25" => "Western", +"65" => "Adjumani", +"66" => "Bugiri", +"67" => "Busia", +"69" => "Katakwi", +"73" => "Nakasongola", +"74" => "Sembabule"), +"UY" => array( +"01" => "Artigas", +"02" => "Canelones", +"03" => "Cerro Largo", +"04" => "Colonia", +"05" => "Durazno", +"06" => "Flores", +"07" => "Florida", +"08" => "Lavalleja", +"09" => "Maldonado", +"10" => "Montevideo", +"11" => "Paysandu", +"12" => "Rio Negro", +"13" => "Rivera", +"14" => "Rocha", +"15" => "Salto", +"16" => "San Jose", +"17" => "Soriano", +"18" => "Tacuarembo", +"19" => "Treinta y Tres"), +"UZ" => array( +"01" => "Andijon", +"02" => "Bukhoro", +"03" => "Farghona", +"04" => "Jizzakh", +"05" => "Khorazm", +"06" => "Namangan", +"07" => "Nawoiy", +"08" => "Qashqadaryo", +"09" => "Qoraqalpoghiston", +"10" => "Samarqand", +"11" => "Sirdaryo", +"12" => "Surkhondaryo", +"13" => "Toshkent", +"14" => "Toshkent"), +"VC" => array( +"01" => "Charlotte", +"02" => "Saint Andrew", +"03" => "Saint David", +"04" => "Saint George", +"05" => "Saint Patrick", +"06" => "Grenadines"), +"VE" => array( +"01" => "Amazonas", +"02" => "Anzoategui", +"03" => "Apure", +"04" => "Aragua", +"05" => "Barinas", +"06" => "Bolivar", +"07" => "Carabobo", +"08" => "Cojedes", +"09" => "Delta Amacuro", +"11" => "Falcon", +"12" => "Guarico", +"13" => "Lara", +"14" => "Merida", +"15" => "Miranda", +"16" => "Monagas", +"17" => "Nueva Esparta", +"18" => "Portuguesa", +"19" => "Sucre", +"20" => "Tachira", +"21" => "Trujillo", +"22" => "Yaracuy", +"23" => "Zulia", +"24" => "Dependencias Federales", +"25" => "Distrito Federal", +"26" => "Vargas"), +"VN" => array( +"02" => "Bac Thai", +"03" => "Ben Tre", +"05" => "Cao Bang", +"11" => "Ha Bac", +"12" => "Hai Hung", +"13" => "Hai Phong", +"22" => "Lai Chau", +"23" => "Lam Dong", +"24" => "Long An", +"29" => "Quang Nam-Da Nang", +"30" => "Quang Ninh", +"32" => "Son La", +"33" => "Tay Ninh", +"34" => "Thanh Hoa", +"35" => "Thai Binh", +"37" => "Tien Giang", +"39" => "Lang Son", +"43" => "An Giang", +"44" => "Dac Lac", +"45" => "Dong Nai", +"46" => "Dong Thap", +"47" => "Kien Giang", +"48" => "Minh Hai", +"49" => "Song Be", +"50" => "Vinh Phu", +"51" => "Ha Noi", +"52" => "Ho Chi Minh", +"53" => "Ba Ria-Vung Tau", +"54" => "Binh Dinh", +"55" => "Binh Thuan", +"56" => "Can Tho", +"57" => "Gia Lai", +"58" => "Ha Giang", +"59" => "Ha Tay", +"60" => "Ha Tinh", +"61" => "Hoa Binh", +"62" => "Khanh Hoa", +"63" => "Kon Tum", +"64" => "Lao Cai", +"65" => "Nam Ha", +"66" => "Nghe An", +"67" => "Ninh Binh", +"68" => "Ninh Thuan", +"69" => "Phu Yen", +"70" => "Quang Binh", +"71" => "Quang Ngai", +"72" => "Quang Tri", +"73" => "Soc Trang", +"74" => "Thua Thien", +"75" => "Tra Vinh", +"76" => "Tuyen Quang", +"77" => "Vinh Long", +"78" => "Yen Bai"), +"VU" => array( +"05" => "Ambrym", +"06" => "Aoba", +"07" => "Banks", +"08" => "Efate", +"09" => "Epi", +"10" => "Malakula", +"11" => "Paama", +"12" => "Pentecote", +"13" => "Santo", +"14" => "Shepherd", +"15" => "Tafea"), +"WS" => array( +"02" => "Aiga-i-le-Tai", +"03" => "Atua", +"04" => "Fa", +"05" => "Gaga", +"06" => "Va", +"07" => "Gagaifomauga", +"08" => "Palauli", +"09" => "Satupa", +"10" => "Tuamasaga", +"11" => "Vaisigano"), +"YE" => array( +"01" => "Abyan", +"03" => "Al Mahrah", +"04" => "Hadramawt", +"05" => "Shabwah", +"06" => "Lahij", +"07" => "Al Bayda'", +"08" => "Al Hudaydah", +"09" => "Al Jawf", +"10" => "Al Mahwit", +"11" => "Dhamar", +"12" => "Hajjah", +"13" => "Ibb", +"14" => "Ma'rib", +"15" => "Sa", +"16" => "San", +"17" => "Ta"), +"ZA" => array( +"01" => "Cape Province", +"02" => "Natal", +"03" => "Orange Free State", +"04" => "Transvaal"), +"ZM" => array( +"01" => "Western", +"02" => "Central", +"03" => "Eastern", +"04" => "Luapula", +"05" => "Northern", +"06" => "North-Western", +"07" => "Southern", +"08" => "Copperbelt", +"09" => "Lusaka"), +"ZR" => array( +"01" => "Bandundu", +"02" => "Equateur", +"03" => "Kasai-Occidental", +"04" => "Kasai-Oriental", +"05" => "Shaba", +"06" => "Kinshasa", +"07" => "Kivu", +"08" => "Bas-Zaire", +"09" => "Haut-Zaire"), +"ZW" => array( +"01" => "Manicaland", +"02" => "Midlands", +"03" => "Mashonaland Central", +"04" => "Mashonaland East", +"05" => "Mashonaland West", +"06" => "Matabeleland North", +"07" => "Matabeleland South", +"08" => "Masvingo", +"09" => "Bulawayo", +"10" => "Harare") +); +?> diff --git a/theme/standard/styles_fonts.css b/theme/standard/styles_fonts.css index cf82008e8af..5793cc90eea 100644 --- a/theme/standard/styles_fonts.css +++ b/theme/standard/styles_fonts.css @@ -675,6 +675,14 @@ body#user-index #longtimenosee { font-size: 0.8em; } +.iplookup #header h1.headermain { + font-size:1em; +} + +.iplookup #note { + font-size:0.8em; + font-style: italic; +} /*** *** Modules: Assignment diff --git a/theme/standard/styles_layout.css b/theme/standard/styles_layout.css index 3bab97fc114..b020f9c1dd4 100644 --- a/theme/standard/styles_layout.css +++ b/theme/standard/styles_layout.css @@ -3150,6 +3150,14 @@ body#user-index .rolesform { height:100%; } +.iplookup #map { + margin:auto; +} + +.iplookup #note { + text-align:center; +} + /*** *** Modules: Assignment ***/