<?php
/**
 * GENERATED FILE - DO NOT EDIT BY HAND.
 *
 * Regenerate with: composer generate:phone-table
 * Source: Google libphonenumber, resources/PhoneNumberMetadata.xml
 * Generated: 2026-08-12
 *
 * @package GTM4WP
 * @author Thomas Geiger
 * @copyright 2013- Geiger Tamás e.v. (Thomas Geiger s.e.)
 * @license GNU General Public License, version 3
 */

namespace GTM4WP\Modules\WooCommerce;

defined( 'ABSPATH' ) || exit;

/**
 * Per-country dialling facts, used to turn a locally typed phone number into
 * E.164 before hashing it for Enhanced Conversions.
 *
 * Three columns, and the third is the one that decides between two readings of
 * the same digits:
 *
 * 1. **Calling code.** The country's international prefix, without the "+".
 * 2. **National (trunk) prefix, or null.** Null is NOT "unknown" - it means the
 *    country has no trunk prefix at all, so a leading zero is part of the number
 *    and must be kept. 101 of the 245 entries are null; of those, Italy
 *    is the commercially important one, because conflating "no trunk prefix"
 *    with "uses 0" made every Italian landline hash to a value Google could
 *    never match.
 * 3. **General national-number pattern.** What a number of this country looks
 *    like. Used ONLY to choose between "this is a national number" and "this is
 *    the international form with the + left off" - never to reject a number, so a
 *    stale pattern can fail to improve a number but cannot refuse one (upstream
 *    UC-5). A number it does not recognise falls through to the positional rules,
 *    which are applied uniformly across all territories - not to the behaviour
 *    that predated this column, which returned early for the ones with no trunk
 *    prefix. See tools/generate-phone-table.php for the measurement behind that.
 *
 * See tools/generate-phone-table.php for why this is generated rather than
 * written, and what it deliberately does not model.
 */
final class CountryPhoneData {

	/**
	 * ISO 3166-1 alpha-2 code => array( calling code, national prefix or null, national-number pattern ).
	 *
	 * 144 of the 245 entries have a trunk prefix; 101 have none.
	 *
	 * @var array<string, array{0: string, 1: string|null, 2: string}>
	 */
	private const COUNTRIES = array(
		'AC' => array( '247', null, '(?:[01589]\\d|[2-467])\\d{4}' ),
		'AD' => array( '376', null, '(?:1|6\\d)\\d{7}|[135-9]\\d{5}' ),
		'AE' => array( '971', '0', '(?:[4-7]\\d|9[0-689])\\d{7}|800\\d{2,9}|[2-4679]\\d{7}' ),
		'AF' => array( '93', '0', '[2-7]\\d{8}' ),
		'AG' => array( '1', '1', '(?:268|[58]\\d\\d|900)\\d{7}' ),
		'AI' => array( '1', '1', '(?:264|[58]\\d\\d|900)\\d{7}' ),
		'AL' => array( '355', '0', '(?:700\\d\\d|900)\\d{3}|8\\d{5,7}|(?:[2-5]|6\\d)\\d{7}' ),
		'AM' => array( '374', '0', '(?:[1-489]\\d|55|60|77)\\d{6}' ),
		'AO' => array( '244', null, '[29]\\d{8}' ),
		'AR' => array( '54', '0', '(?:11|[89]\\d\\d)\\d{8}|[2368]\\d{9}' ),
		'AS' => array( '1', '1', '(?:[58]\\d\\d|684|900)\\d{7}' ),
		'AT' => array( '43', '0', '1\\d{3,12}|2\\d{6,12}|43(?:(?:0\\d|5[02-9])\\d{3,9}|2\\d{4,5}|[3467]\\d{4}|8\\d{4,6}|9\\d{4,7})|5\\d{4,12}|8\\d{7,12}|9\\d{8,12}|(?:[367]\\d|4[0-24-9])\\d{4,11}' ),
		'AU' => array( '61', '0', '1(?:[0-79]\\d{7}(?:\\d(?:\\d{2})?)?|8[0-24-9]\\d{7})|[2-478]\\d{8}|1\\d{4,7}' ),
		'AW' => array( '297', null, '(?:[25-79]\\d\\d|800)\\d{4}' ),
		'AX' => array( '358', '0', '2\\d{4,9}|35\\d{4,5}|(?:60\\d\\d|800)\\d{4,6}|7\\d{5,11}|(?:[14]\\d|3[0-46-9]|50)\\d{4,8}' ),
		'AZ' => array( '994', '0', '365\\d{6}|(?:[124579]\\d|60|88)\\d{7}' ),
		'BA' => array( '387', '0', '6\\d{8}|(?:[35689]\\d|49|70)\\d{6}' ),
		'BB' => array( '1', '1', '(?:246|[58]\\d\\d|900)\\d{7}' ),
		'BD' => array( '880', '0', '[1-469]\\d{9}|8[0-79]\\d{7,8}|[2-79]\\d{8}|[2-9]\\d{7}|[3-9]\\d{6}|[57-9]\\d{5}' ),
		'BE' => array( '32', '0', '4\\d{8}|[1-9]\\d{7}' ),
		'BF' => array( '226', null, '[024-7]\\d{7}' ),
		'BG' => array( '359', '0', '00800\\d{7}|[2-7]\\d{6,7}|[89]\\d{6,8}|2\\d{5}' ),
		'BH' => array( '973', null, '[136-9]\\d{7}' ),
		'BI' => array( '257', null, '(?:[267]\\d|31)\\d{6}' ),
		'BJ' => array( '229', null, '(?:01\\d|8)\\d{7}' ),
		'BL' => array( '590', '0', '7090\\d{5}|(?:[56]9|[89]\\d)\\d{7}' ),
		'BM' => array( '1', '1', '(?:441|[58]\\d\\d|900)\\d{7}' ),
		'BN' => array( '673', null, '[2-578]\\d{6}' ),
		'BO' => array( '591', '0', '(?:[2-7]\\d\\d|8001)\\d{5}' ),
		'BQ' => array( '599', null, '(?:[34]1|7\\d)\\d{5}' ),
		'BR' => array( '55', '0', '[1-467]\\d{9,10}|55[0-46-9]\\d{8}|[34]\\d{7}|55\\d{7,8}|(?:5[0-46-9]|[89]\\d)\\d{7,9}' ),
		'BS' => array( '1', '1', '(?:242|[58]\\d\\d|900)\\d{7}' ),
		'BT' => array( '975', null, '[178]\\d{7}|[2-8]\\d{6}' ),
		'BW' => array( '267', null, '(?:0800|(?:[37]|800)\\d)\\d{6}|(?:[2-6]\\d|90)\\d{5}' ),
		'BY' => array( '375', '8', '(?:[12]\\d|33|44|902)\\d{7}|8(?:0[0-79]\\d{5,7}|[1-7]\\d{9})|8(?:1[0-489]|[5-79]\\d)\\d{7}|8[1-79]\\d{6,7}|8[0-79]\\d{5}|8\\d{5}' ),
		'BZ' => array( '501', null, '(?:0800\\d|[2-8])\\d{6}' ),
		'CA' => array( '1', '1', '[2-9]\\d{9}|3\\d{6}' ),
		'CC' => array( '61', '0', '1(?:[0-79]\\d{8}(?:\\d{2})?|8[0-24-9]\\d{7})|[148]\\d{8}|1\\d{5,7}' ),
		'CD' => array( '243', '0', '(?:(?:[189]|5\\d)\\d|2)\\d{7}|[1-68]\\d{6}' ),
		'CF' => array( '236', null, '8776\\d{4}|(?:[27]\\d|61)\\d{6}' ),
		'CG' => array( '242', null, '222\\d{6}|(?:0\\d|80)\\d{7}' ),
		'CH' => array( '41', '0', '8\\d{11}|[2-9]\\d{8}' ),
		'CI' => array( '225', null, '[02]\\d{9}' ),
		'CK' => array( '682', null, '[2-578]\\d{4}' ),
		'CL' => array( '56', null, '12300\\d{6}|6\\d{9,10}|[2-9]\\d{8}' ),
		'CM' => array( '237', null, '[26]\\d{8}|88\\d{6,7}' ),
		'CN' => array( '86', '0', '(?:(?:1[03-689]|2\\d)\\d\\d|6)\\d{8}|1\\d{10}|[126]\\d{6}(?:\\d(?:\\d{2})?)?|86\\d{5,6}|(?:[3-579]\\d|8[0-57-9])\\d{5,9}' ),
		'CO' => array( '57', '0', '(?:46|60\\d\\d)\\d{6}|(?:1\\d|[39])\\d{9}' ),
		'CR' => array( '506', null, '(?:8\\d|90)\\d{8}|(?:[24-8]\\d{3}|3005)\\d{4}' ),
		'CU' => array( '53', '0', '(?:[2-7]|8\\d\\d)\\d{7}|[2-47]\\d{6}|[34]\\d{5}' ),
		'CV' => array( '238', null, '(?:[2-59]\\d\\d|800)\\d{4}' ),
		'CW' => array( '599', null, '(?:[34]1|60|(?:7|9\\d)\\d)\\d{5}' ),
		'CX' => array( '61', '0', '1(?:[0-79]\\d{8}(?:\\d{2})?|8[0-24-9]\\d{7})|[148]\\d{8}|1\\d{5,7}' ),
		'CY' => array( '357', null, '(?:[279]\\d|[58]0)\\d{6}' ),
		'CZ' => array( '420', null, '(?:[2-578]\\d|60)\\d{7}|9\\d{8,11}' ),
		'DE' => array( '49', '0', '[2579]\\d{5,14}|49(?:[34]0|69|8\\d)\\d\\d?|49(?:37|49|60|7[089]|9\\d)\\d{1,3}|49(?:2[024-9]|3[2-689]|7[1-7])\\d{1,8}|(?:1|[368]\\d|4[0-8])\\d{3,13}|49(?:[015]\\d|2[13]|31|[46][1-8])\\d{1,9}' ),
		'DJ' => array( '253', null, '(?:2\\d|77)\\d{6}' ),
		'DK' => array( '45', null, '[2-9]\\d{7}' ),
		'DM' => array( '1', '1', '(?:[58]\\d\\d|767|900)\\d{7}' ),
		'DO' => array( '1', '1', '(?:[58]\\d\\d|900)\\d{7}' ),
		'DZ' => array( '213', '0', '(?:[1-4]|[5-79]\\d|80)\\d{7}' ),
		'EC' => array( '593', '0', '1\\d{9,10}|(?:[2-7]|9\\d)\\d{7}' ),
		'EE' => array( '372', null, '8\\d{9}|[4578]\\d{7}|(?:[3-8]\\d|90)\\d{5}' ),
		'EG' => array( '20', '0', '[189]\\d{8,9}|[24-6]\\d{8}|[135]\\d{7}' ),
		'EH' => array( '212', '0', '[5-8]\\d{8}' ),
		'ER' => array( '291', '0', '[178]\\d{6}' ),
		'ES' => array( '34', null, '(?:400|[5-9]\\d\\d)\\d{6}' ),
		'ET' => array( '251', '0', '(?:11|[2-57-9]\\d)\\d{7}' ),
		'FI' => array( '358', '0', '[1-35689]\\d{4}|7\\d{10,11}|(?:[124-7]\\d|3[0-46-9])\\d{8}|[1-9]\\d{5,8}' ),
		'FJ' => array( '679', null, '45\\d{5}|(?:0800\\d|[235-9])\\d{6}' ),
		'FK' => array( '500', null, '[2-7]\\d{4}' ),
		'FM' => array( '691', null, '(?:[39]\\d\\d|820)\\d{4}' ),
		'FO' => array( '298', null, '[2-9]\\d{5}' ),
		'FR' => array( '33', '0', '[1-9]\\d{8}' ),
		'GA' => array( '241', null, '(?:[067]\\d|11)\\d{6}|[2-7]\\d{6}' ),
		'GB' => array( '44', '0', '[1-357-9]\\d{9}|[18]\\d{8}|8\\d{6}' ),
		'GD' => array( '1', '1', '(?:473|[58]\\d\\d|900)\\d{7}' ),
		'GE' => array( '995', '0', '(?:[3-57]\\d\\d|800)\\d{6}' ),
		'GF' => array( '594', '0', '(?:694\\d|7093)\\d{5}|(?:59|[89]\\d)\\d{7}' ),
		'GG' => array( '44', '0', '(?:1481|[357-9]\\d{3})\\d{6}|8\\d{6}(?:\\d{2})?' ),
		'GH' => array( '233', '0', '[235]\\d{8}|800\\d{5,6}' ),
		'GI' => array( '350', null, '(?:[25]\\d|60)\\d{6}' ),
		'GL' => array( '299', null, '(?:19|[2-689]\\d|70)\\d{4}' ),
		'GM' => array( '220', null, '[2-9]\\d{6}' ),
		'GN' => array( '224', null, '722\\d{6}|(?:3|6\\d)\\d{7}' ),
		'GP' => array( '590', '0', '7090\\d{5}|(?:[56]9|[89]\\d)\\d{7}' ),
		'GQ' => array( '240', null, '222\\d{6}|(?:3\\d|55|[89]0)\\d{7}' ),
		'GR' => array( '30', null, '5005000\\d{3}|8\\d{9,11}|(?:[269]\\d|70)\\d{8}' ),
		'GT' => array( '502', null, '80\\d{6}|(?:1\\d{3}|[2-7])\\d{7}' ),
		'GU' => array( '1', '1', '(?:[58]\\d\\d|671|900)\\d{7}' ),
		'GW' => array( '245', null, '[49]\\d{8}|4\\d{6}' ),
		'GY' => array( '592', null, '(?:[2-8]\\d{3}|9008)\\d{3}' ),
		'HK' => array( '852', null, '8[0-46-9]\\d{6,7}|9\\d{4,7}|(?:[2-7]|9\\d{3})\\d{7}' ),
		'HN' => array( '504', null, '8\\d{10}|[237-9]\\d{7}' ),
		'HR' => array( '385', '0', '[2-69]\\d{8}|80\\d{5,7}|[1-79]\\d{7}|6\\d{6}' ),
		'HT' => array( '509', null, '[2-589]\\d{7}' ),
		'HU' => array( '36', '06', '[235-7]\\d{8}|[1-9]\\d{7}' ),
		'ID' => array( '62', '0', '00[1-9]\\d{9,14}|(?:[1-36]|8\\d{5})\\d{6}|00\\d{9}|[1-9]\\d{8,10}|[2-9]\\d{7}' ),
		'IE' => array( '353', '0', '(?:1\\d|[2569])\\d{6,8}|4\\d{6,9}|7\\d{8}|8\\d{8,9}' ),
		'IL' => array( '972', '0', '1\\d{6}(?:\\d{3,5})?|[57]\\d{8}|[1-489]\\d{7}' ),
		'IM' => array( '44', '0', '1624\\d{6}|(?:[3578]\\d|90)\\d{8}' ),
		'IN' => array( '91', '0', '(?:000800|[2-9]\\d\\d)\\d{7}|1\\d{7,12}' ),
		'IO' => array( '246', null, '3\\d{6}' ),
		'IQ' => array( '964', '0', '(?:1|7\\d\\d)\\d{7}|[2-6]\\d{7,8}' ),
		'IR' => array( '98', '0', '[1-9]\\d{9}|(?:[1-8]\\d\\d|9)\\d{3,4}' ),
		'IS' => array( '354', null, '(?:38\\d|[4-9])\\d{6}' ),
		'IT' => array( '39', null, '0\\d{5,11}|1\\d{8,10}|3(?:[0-8]\\d{7,10}|9\\d{7,8})|(?:43|55|70)\\d{8}|8\\d{5}(?:\\d{2,4})?' ),
		'JE' => array( '44', '0', '1534\\d{6}|(?:[3578]\\d|90)\\d{8}' ),
		'JM' => array( '1', '1', '(?:[58]\\d\\d|658|900)\\d{7}' ),
		'JO' => array( '962', '0', '(?:(?:[2689]|7\\d)\\d|32|427|53)\\d{6}' ),
		'JP' => array( '81', '0', '00[1-9]\\d{6,14}|[25-9]\\d{9}|(?:00|[1-9]\\d\\d)\\d{6}' ),
		'KE' => array( '254', '0', '(?:[17]\\d\\d|900)\\d{6}|(?:2|80)0\\d{6,7}|[4-6]\\d{6,8}' ),
		'KG' => array( '996', '0', '8\\d{9}|[235-9]\\d{8}' ),
		'KH' => array( '855', '0', '1\\d{9}|[1-9]\\d{7,8}' ),
		'KI' => array( '686', '0', '(?:[37]\\d|6[0-79])\\d{6}|(?:[2-48]\\d|50)\\d{3}' ),
		'KM' => array( '269', null, '[3478]\\d{6}' ),
		'KN' => array( '1', '1', '(?:[58]\\d\\d|900)\\d{7}' ),
		'KP' => array( '850', '0', '85\\d{6}|(?:19\\d|[2-7])\\d{7}' ),
		'KR' => array( '82', '0', '00[1-9]\\d{8,11}|(?:[12]|5\\d{3})\\d{7}|[13-6]\\d{9}|(?:[1-6]\\d|80)\\d{7}|[3-6]\\d{4,5}|(?:00|7)0\\d{8}' ),
		'KW' => array( '965', null, '18\\d{5}|(?:[2569]\\d|41)\\d{6}' ),
		'KY' => array( '1', '1', '(?:345|[58]\\d\\d|900)\\d{7}' ),
		'KZ' => array( '7', '8', '8\\d{13}|[78]\\d{9}' ),
		'LA' => array( '856', '0', '[23]\\d{9}|3\\d{8}|(?:[235-8]\\d|41)\\d{6}' ),
		'LB' => array( '961', '0', '[27-9]\\d{7}|[13-9]\\d{6}' ),
		'LC' => array( '1', '1', '(?:[58]\\d\\d|758|900)\\d{7}' ),
		'LI' => array( '423', '0', '[68]\\d{8}|(?:[2378]\\d|90)\\d{5}' ),
		'LK' => array( '94', '0', '[1-9]\\d{8}' ),
		'LR' => array( '231', '0', '(?:[2457]\\d|33|88)\\d{7}|(?:2\\d|[4-6])\\d{6}' ),
		'LS' => array( '266', null, '(?:[256]\\d\\d|800)\\d{5}' ),
		'LT' => array( '370', '0', '(?:[3469]\\d|52|[78]0)\\d{6}' ),
		'LU' => array( '352', null, '35[013-9]\\d{4,8}|6\\d{8}|35\\d{2,4}|(?:[2457-9]\\d|3[0-46-9])\\d{2,9}' ),
		'LV' => array( '371', null, '(?:[268]\\d|78|90)\\d{6}' ),
		'LY' => array( '218', '0', '[2-9]\\d{8}' ),
		'MA' => array( '212', '0', '[5-8]\\d{8}' ),
		'MC' => array( '377', '0', '(?:[3489]|[67]\\d)\\d{7}' ),
		'MD' => array( '373', '0', '(?:[235-7]\\d|[89]0)\\d{6}' ),
		'ME' => array( '382', '0', '(?:20|[3-79]\\d)\\d{6}|80\\d{6,7}' ),
		'MF' => array( '590', '0', '7090\\d{5}|(?:[56]9|[89]\\d)\\d{7}' ),
		'MG' => array( '261', '0', '[23]\\d{8}' ),
		'MH' => array( '692', '1', '329\\d{4}|(?:[256]\\d|45)\\d{5}' ),
		'MK' => array( '389', '0', '[2-578]\\d{7}' ),
		'ML' => array( '223', null, '[24-9]\\d{7}' ),
		'MM' => array( '95', '0', '1\\d{5,7}|95\\d{6}|(?:[4-7]|9[0-46-9])\\d{6,8}|(?:2|8\\d)\\d{5,8}' ),
		'MN' => array( '976', '0', '[12]\\d{7,9}|[5-9]\\d{7}' ),
		'MO' => array( '853', null, '0800\\d{3}|(?:28|[68]\\d)\\d{6}' ),
		'MP' => array( '1', '1', '[58]\\d{9}|(?:67|90)0\\d{7}' ),
		'MQ' => array( '596', '0', '7091\\d{5}|(?:[56]9|[89]\\d)\\d{7}' ),
		'MR' => array( '222', null, '(?:[2-4]\\d\\d|800)\\d{5}' ),
		'MS' => array( '1', '1', '(?:[58]\\d\\d|664|900)\\d{7}' ),
		'MT' => array( '356', null, '3550\\d{4}|(?:[2579]\\d\\d|800)\\d{5}' ),
		'MU' => array( '230', null, '(?:[57]|8\\d\\d)\\d{7}|[2-468]\\d{6}' ),
		'MV' => array( '960', null, '(?:800|9[0-57-9]\\d)\\d{7}|[34679]\\d{6}' ),
		'MW' => array( '265', '0', '(?:[1289]\\d|31|77)\\d{7}|1\\d{6}' ),
		'MX' => array( '52', null, '[2-9]\\d{9}' ),
		'MY' => array( '60', '0', '1\\d{8,9}|(?:3\\d|[4-9])\\d{7}' ),
		'MZ' => array( '258', null, '(?:2|8\\d)\\d{7}' ),
		'NA' => array( '264', '0', '[68]\\d{7,8}' ),
		'NC' => array( '687', null, '(?:050|[2-57-9]\\d\\d)\\d{3}' ),
		'NE' => array( '227', null, '[027-9]\\d{7}' ),
		'NF' => array( '672', null, '[13]\\d{5}' ),
		'NG' => array( '234', '0', '(?:20|9\\d)\\d{8}|[78]\\d{9,13}' ),
		'NI' => array( '505', null, '(?:1800|[25-8]\\d{3})\\d{4}' ),
		'NL' => array( '31', '0', '(?:[124-7]\\d\\d|3(?:[02-9]\\d|1[0-8]))\\d{6}|8\\d{6,9}|9\\d{6,10}|1\\d{4,5}' ),
		'NO' => array( '47', null, '(?:0|[2-9]\\d{3})\\d{4}' ),
		'NP' => array( '977', '0', '(?:1\\d|9)\\d{9}|[1-9]\\d{7}' ),
		'NR' => array( '674', null, '(?:222|444|(?:55|8\\d)\\d|666|777|999)\\d{4}' ),
		'NU' => array( '683', null, '(?:[4-7]|888\\d)\\d{3}' ),
		'NZ' => array( '64', '0', '[1289]\\d{9}|50\\d{5}(?:\\d{2,3})?|[27-9]\\d{7,8}|(?:[34]\\d|6[0-35-9])\\d{6}|8\\d{4,6}' ),
		'OM' => array( '968', null, '(?:1505|[279]\\d{3}|500)\\d{4}|800\\d{5,6}' ),
		'PA' => array( '507', null, '(?:00800|8\\d{3})\\d{6}|[68]\\d{7}|[1-57-9]\\d{6}' ),
		'PE' => array( '51', '0', '(?:[14-8]|9\\d)\\d{7}' ),
		'PF' => array( '689', null, '4\\d{5}(?:\\d{2})?|8\\d{7,8}' ),
		'PG' => array( '675', null, '(?:180|[78]\\d{3})\\d{4}|(?:[2-589]\\d|64)\\d{5}' ),
		'PH' => array( '63', '0', '(?:[2-7]|9\\d)\\d{8}|2\\d{5}|(?:1800|8)\\d{7,9}' ),
		'PK' => array( '92', '0', '122\\d{6}|[24-8]\\d{10,11}|9(?:[013-9]\\d{8,10}|2(?:[01]\\d\\d|2(?:[06-8]\\d|1[01]))\\d{7})|(?:[2-8]\\d{3}|92(?:[0-7]\\d|8[1-9]))\\d{6}|[24-9]\\d{8}|[89]\\d{7}' ),
		'PL' => array( '48', null, '(?:6|8\\d\\d)\\d{7}|[1-9]\\d{6}(?:\\d{2})?|[26]\\d{5}' ),
		'PM' => array( '508', '0', '[78]\\d{8}|[2-9]\\d{5}' ),
		'PR' => array( '1', '1', '(?:[589]\\d\\d|787)\\d{7}' ),
		'PS' => array( '970', '0', '[2489]2\\d{6}|(?:1\\d|5)\\d{8}' ),
		'PT' => array( '351', null, '1693\\d{5}|(?:[26-9]\\d|30)\\d{7}' ),
		'PW' => array( '680', null, '(?:[24-8]\\d\\d|345|900)\\d{4}' ),
		'PY' => array( '595', '0', '[36-8]\\d{5,8}|4\\d{6,8}|59\\d{6}|9\\d{5,10}|(?:2\\d|5[0-8])\\d{6,7}' ),
		'QA' => array( '974', null, '800\\d{4}|(?:2|800)\\d{6}|(?:0080|[3-7])\\d{7}' ),
		'RE' => array( '262', '0', '709\\d{6}|(?:26|[689]\\d)\\d{7}' ),
		'RO' => array( '40', '0', '(?:[236-8]\\d|90)\\d{7}|[23]\\d{5}' ),
		'RS' => array( '381', '0', '38[02-9]\\d{6,9}|6\\d{7,9}|90\\d{4,8}|38\\d{5,6}|(?:7\\d\\d|800)\\d{3,9}|(?:[12]\\d|3[0-79])\\d{5,10}' ),
		'RU' => array( '7', '8', '8\\d{13}|[347-9]\\d{9}' ),
		'RW' => array( '250', '0', '(?:06|[27]\\d\\d|[89]00)\\d{6}' ),
		'SA' => array( '966', '0', '(?:[15]\\d|800|92)\\d{7}' ),
		'SB' => array( '677', null, '[6-9]\\d{6}|[1-6]\\d{4}' ),
		'SC' => array( '248', null, '(?:[2489]\\d|64)\\d{5}' ),
		'SD' => array( '249', '0', '[19]\\d{8}' ),
		'SE' => array( '46', '0', '(?:[26]\\d\\d|9)\\d{9}|[1-9]\\d{8}|[1-689]\\d{7}|[1-4689]\\d{6}|2\\d{5}' ),
		'SG' => array( '65', null, '(?:(?:1\\d|8)\\d\\d|7000)\\d{7}|[3689]\\d{7}' ),
		'SH' => array( '290', null, '(?:[256]\\d|8)\\d{3}' ),
		'SI' => array( '386', '0', '[1-7]\\d{7}|8\\d{4,7}|90\\d{4,6}' ),
		'SJ' => array( '47', null, '0\\d{4}|(?:[489]\\d|79)\\d{6}' ),
		'SK' => array( '421', '0', '[2-689]\\d{8}|[2-59]\\d{6}|[2-5]\\d{5}' ),
		'SL' => array( '232', '0', '(?:[237-9]\\d|66)\\d{6}' ),
		'SM' => array( '378', null, '(?:0549|[5-7]\\d)\\d{6}' ),
		'SN' => array( '221', null, '(?:[378]\\d|93)\\d{7}' ),
		'SO' => array( '252', '0', '[346-9]\\d{8}|[12679]\\d{7}|[1-5]\\d{6}|[1348]\\d{5}' ),
		'SR' => array( '597', null, '(?:[2-5]|[6-9]\\d)\\d{5}' ),
		'SS' => array( '211', '0', '[19]\\d{8}' ),
		'ST' => array( '239', null, '(?:22|9\\d)\\d{5}' ),
		'SV' => array( '503', null, '[25-7]\\d{7}|(?:80\\d|900)\\d{4}(?:\\d{4})?' ),
		'SX' => array( '1', '1', '7215\\d{6}|(?:[58]\\d\\d|900)\\d{7}' ),
		'SY' => array( '963', '0', '[1-359]\\d{8}|[1-5]\\d{7}' ),
		'SZ' => array( '268', null, '0800\\d{4}|(?:[237]\\d|900)\\d{6}' ),
		'TA' => array( '290', null, '8\\d{3}' ),
		'TC' => array( '1', '1', '(?:[58]\\d\\d|649|900)\\d{7}' ),
		'TD' => array( '235', null, '(?:22|[3689]\\d|77)\\d{6}' ),
		'TG' => array( '228', null, '[279]\\d{7}' ),
		'TH' => array( '66', '0', '(?:001800|[2-57]|[689]\\d)\\d{7}|1\\d{7,9}' ),
		'TJ' => array( '992', null, '(?:[0-57-9]\\d|66)\\d{7}' ),
		'TK' => array( '690', null, '[2-47]\\d{3,6}' ),
		'TL' => array( '670', null, '7\\d{7}|(?:[2-47]\\d|[89]0)\\d{5}' ),
		'TM' => array( '993', '8', '[1-7]\\d{7}' ),
		'TN' => array( '216', null, '[2-57-9]\\d{7}' ),
		'TO' => array( '676', null, '(?:0800|(?:[5-8]\\d\\d|999)\\d)\\d{3}|[2-8]\\d{4}' ),
		'TR' => array( '90', '0', '4\\d{6}|8\\d{11,12}|(?:[2-58]\\d\\d|900)\\d{7}' ),
		'TT' => array( '1', '1', '(?:[58]\\d\\d|900)\\d{7}' ),
		'TV' => array( '688', null, '(?:2|7\\d\\d|90)\\d{4}' ),
		'TW' => array( '886', '0', '[2-689]\\d{8}|7\\d{9,10}|[2-8]\\d{7}|2\\d{6}' ),
		'TZ' => array( '255', '0', '(?:[25-8]\\d|41|90)\\d{7}' ),
		'UA' => array( '380', '0', '[89]\\d{9}|[3-9]\\d{8}' ),
		'UG' => array( '256', '0', '800\\d{6}|(?:[29]0|[347]\\d)\\d{7}' ),
		'US' => array( '1', '1', '[2-9]\\d{9}|3\\d{6}' ),
		'UY' => array( '598', '0', '0004\\d{2,9}|[1249]\\d{7}|2\\d{3,4}|(?:[49]\\d|80)\\d{5}' ),
		'UZ' => array( '998', null, '(?:20|33|[5-9]\\d)\\d{7}' ),
		'VA' => array( '39', null, '0\\d{5,10}|3[0-8]\\d{7,10}|55\\d{8}|8\\d{5}(?:\\d{2,4})?|(?:1\\d|39)\\d{7,8}' ),
		'VC' => array( '1', '1', '(?:[58]\\d\\d|784|900)\\d{7}' ),
		'VE' => array( '58', '0', '[68]00\\d{7}|(?:[24]\\d|[59]0)\\d{8}' ),
		'VG' => array( '1', '1', '(?:284|[58]\\d\\d|900)\\d{7}' ),
		'VI' => array( '1', '1', '[58]\\d{9}|(?:34|90)0\\d{7}' ),
		'VN' => array( '84', '0', '[12]\\d{9}|[135-9]\\d{8}|[16]\\d{6,7}|7\\d{6}' ),
		'VU' => array( '678', null, '[57-9]\\d{6}|(?:[238]\\d|48)\\d{3}' ),
		'WF' => array( '681', null, '(?:40|72|8\\d{4})\\d{4}|[89]\\d{5}' ),
		'WS' => array( '685', null, '(?:[2-6]|8\\d{5})\\d{4}|[78]\\d{6}|[68]\\d{5}' ),
		'XK' => array( '383', '0', '2\\d{7,8}|3\\d{7,11}|(?:4\\d\\d|[89]00)\\d{5}' ),
		'YE' => array( '967', '0', '(?:1|7\\d)\\d{7}|[1-7]\\d{6}' ),
		'YT' => array( '262', '0', '(?:639\\d|7093)\\d{5}|(?:26|80|9\\d)\\d{7}' ),
		'ZA' => array( '27', '0', '[1-79]\\d{8}|8\\d{4,9}' ),
		'ZM' => array( '260', '0', '800\\d{6}|(?:21|[579]\\d|63)\\d{7}' ),
		'ZW' => array( '263', '0', '2(?:[0-57-9]\\d{6,8}|6[0-24-9]\\d{6,7})|[38]\\d{9}|[35-8]\\d{8}|[3-6]\\d{7}|[1-689]\\d{6}|[1-3569]\\d{5}|[1356]\\d{4}' ),
	);

	/**
	 * Looks up a country's dialling facts.
	 *
	 * @param string $country_code ISO 3166-1 alpha-2 code, any case, may be padded.
	 * @return array{0: string, 1: string|null, 2: string}|null Calling code, national prefix
	 *                                                          and national-number pattern,
	 *                                                          or null when the country is unknown.
	 */
	public static function lookup( string $country_code ): ?array {
		$country_code = strtoupper( trim( $country_code ) );

		return self::COUNTRIES[ $country_code ] ?? null;
	}
}
