Update external/libphonenumber to v5.2.

Change-Id: I59b8bb26f106ecbdbaf4efd0d33f1142736aa031
diff --git a/README.android b/README.android
index c0cd643..a27771e 100644
--- a/README.android
+++ b/README.android
@@ -1,5 +1,5 @@
 URL: http://code.google.com/p/libphonenumber/
-Version: 5.0 (r500)
+Version: 5.2 (r536)
 License: Apache 2
 Description: Google Phone Number Library.
 Local Modification:
diff --git a/java/release_notes.txt b/java/release_notes.txt
index 43a4497..cf9539c 100644
--- a/java/release_notes.txt
+++ b/java/release_notes.txt
@@ -1,12 +1,73 @@
+Oct 10, 2012: libphonenumber-5.2
+* Code changes:
+ - Adds isNumberGeographical() method.
+ - Adds getRegionCodesForCountryCode() method.
+ - Fixing issue with getSupportedGlobalNetworkCallingCodes()
+   [http://code.google.com/p/libphonenumber/issues/detail?id=202]
+ - Ensures that returned collections are unmodifiable where necessary
+   [there is a very slight risk that this may break existing users who were relying on being able
+   to modify these collections, but doing so would be breaking lots of other assumptions that this
+   library makes - if you need to modify any affected collections you must copy them first]
+* Metadata changes:
+ - Updated metadata for region code(s): DE, GR, HR, OM, SB, ZA
+ - Removed metadata for region code: AN (Netherlands Antilles)
+ - Updated geocoding data for country calling code(s): 30 (el, en)
+
+Sep 27, 2012: libphonenumber-5.1.4
+* Metadata changes:
+ - Updated metadata for region code(s): AU, EC, KH, LB, TN, US
+
+Sep 17, 2012: libphonenumber-5.1.3
+* Metadata changes:
+ - Updated metadata for region code(s): EG, LA, LB, LI, PY
+ - Updated metadata for non-geographical calling codes: 800, 808, 888, 979
+ - Updated geocoding data for country calling code(s): 98 (en), 1 (en)
+
+Sep 11, 2010: libphonenumber-5.1.2
+* Bug fix:
+ - Fixing regression in AsYouTypeFormatter where it no longer worked for numbers entered in national
+   format for countries with no national prefix, e.g. Spain.
+
+Sep 5, 2010: libphonenumber-5.1.1
+* Code changes:
+  - Added better logging/exception handling for catching cases where metadata is invalid/missing.
+
+Sep 3, 2012: libphonenumber-5.1
+* Code changes:
+ - Inserting a space after the national prefix in the AsYouTypeFormatter when formatting numbers in
+   national format, if the formatting rules for that country dictate that a space is appropriate.
+ - Format emergency numbers and short-codes as a block in the AsYouTypeFormatter.
+* Metadata changes:
+ - Updated metadata for region code(s): BF, BG, DZ, GA, IT, JP, KW, PF
+
+Aug 20, 2012: libphonenumber-5.0.3
+* Metadata changes:
+ - New alternate formatting data for country calling code(s): 43
+ - Updated metadata for region code(s): AT, BF, JO, NG, RU, SL
+ - New geocoding data for country calling code(s): 62 (en, id), 98 (fa)
+
+Aug 07, 2012: libphonenumber-5.0.2
+* Metadata changes:
+ - Updated metadata for region code(s):
+   BF, CN, DJ, IL, JO, KH, KZ, MA, MT, MV, MY, NC, NG, SD, SK, SN, TL, UZ
+ - New geocoding data for country calling code(s): 7 (ru), 98 (en)
+ - Updated geocoding data for country calling code(s): 7 (en)
+
+July 26th, 2012: libphonenumber-5.0.1
+* Metadata changes
+ - CL, DE ,IN, KR, US
+ - New geocoding data for country calling codes 40, 57, 66, 82, 91.
+ - Fixed comments for 353 (IE).
+
 July 12th, 2012: libphonenumber-5.0
 * Code changes:
-  - Support for alternate formats when finding phone numbers.
-  - Allowing two-digit numbers to be parsed if they are entered in national-format with no
-    punctuation
+ - Support for alternate formats when finding phone numbers.
+ - Allowing two-digit numbers to be parsed if they are entered in national-format with no
+   punctuation
 * Metadata changes
-  - IL, GA
+ - IL, GA
 * Other
-  - Reflowed this file to 100 char width to make it unambiguous as to what the standard should be.
+ - Reflowed this file to 100 char width to make it unambiguous as to what the standard should be.
 
 July 6th, 2012: libphonenumber-4.9.1
 * Metadata changes
diff --git a/java/src/com/android/i18n/phonenumbers/AlternateFormatsCountryCodeSet.java b/java/src/com/android/i18n/phonenumbers/AlternateFormatsCountryCodeSet.java
index 0b1de98..ad9bcfd 100644
--- a/java/src/com/android/i18n/phonenumbers/AlternateFormatsCountryCodeSet.java
+++ b/java/src/com/android/i18n/phonenumbers/AlternateFormatsCountryCodeSet.java
@@ -26,10 +26,11 @@
 public class AlternateFormatsCountryCodeSet {
   // A set of all country codes for which data is available.
   static Set<Integer> getCountryCodeSet() {
-    // The capacity is set to 6 as there are 5 different country codes,
+    // The capacity is set to 8 as there are 6 different country codes,
     // and this offers a load factor of roughly 0.75.
-    Set<Integer> countryCodeSet = new HashSet<Integer>(6);
+    Set<Integer> countryCodeSet = new HashSet<Integer>(8);
 
+    countryCodeSet.add(43);
     countryCodeSet.add(44);
     countryCodeSet.add(49);
     countryCodeSet.add(55);
diff --git a/java/src/com/android/i18n/phonenumbers/AsYouTypeFormatter.java b/java/src/com/android/i18n/phonenumbers/AsYouTypeFormatter.java
index 7e6f4ed..2c8ac44 100644
--- a/java/src/com/android/i18n/phonenumbers/AsYouTypeFormatter.java
+++ b/java/src/com/android/i18n/phonenumbers/AsYouTypeFormatter.java
@@ -50,11 +50,17 @@
   // Set to true when users enter their own formatting. AsYouTypeFormatter will do no formatting at
   // all when this is set to true.
   private boolean inputHasFormatting = false;
-  private boolean isInternationalFormatting = false;
+  // This is set to true when we know the user is entering a full national significant number, since
+  // we have either detected a national prefix or an international dialing prefix. When this is
+  // true, we will no longer use local number formatting patterns.
+  private boolean isCompleteNumber = false;
   private boolean isExpectingCountryCallingCode = false;
   private final PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
   private String defaultCountry;
 
+  // Character used when appropriate to separate a prefix, such as a long NDD or a country calling
+  // code, from the national number.
+  private static final char SEPARATOR_BEFORE_NATIONAL_NUMBER = ' ';
   private static final PhoneMetadata EMPTY_METADATA =
       new PhoneMetadata().setInternationalPrefix("NA");
   private PhoneMetadata defaultMetaData;
@@ -78,6 +84,9 @@
   private static final Pattern ELIGIBLE_FORMAT_PATTERN =
       Pattern.compile("[" + PhoneNumberUtil.VALID_PUNCTUATION + "]*" +
           "(\\$\\d" + "[" + PhoneNumberUtil.VALID_PUNCTUATION + "]*)+");
+  // A set of characters that, if found in a national prefix formatting rules, are an indicator to
+  // us that we should separate the national prefix from the number when formatting.
+  private static final Pattern NATIONAL_PREFIX_SEPARATORS_PATTERN = Pattern.compile("[- ]");
 
   // This is the minimum length of national number accrued that is required to trigger the
   // formatter. The first element of the leadingDigitsPattern of each numberFormat contains a
@@ -86,8 +95,8 @@
 
   // The digits that have not been entered yet will be represented by a \u2008, the punctuation
   // space.
-  private String digitPlaceholder = "\u2008";
-  private Pattern digitPattern = Pattern.compile(digitPlaceholder);
+  private static final String DIGIT_PLACEHOLDER = "\u2008";
+  private static final Pattern DIGIT_PATTERN = Pattern.compile(DIGIT_PLACEHOLDER);
   private int lastMatchPosition = 0;
   // The position of a digit upon which inputDigitAndRememberPosition is most recently invoked, as
   // found in the original sequence of characters the user entered.
@@ -99,6 +108,7 @@
   // and it is formatted (e.g. with space inserted). For example, this can contain IDD, country
   // code, and/or NDD, etc.
   private StringBuilder prefixBeforeNationalNumber = new StringBuilder();
+  private boolean shouldAddSpaceAfterNationalPrefix = false;
   // This contains the national prefix that has been extracted. It contains only digits without
   // formatting.
   private String nationalPrefixExtracted = "";
@@ -147,6 +157,9 @@
       }
       if (createFormattingTemplate(numberFormat)) {
         currentFormattingPattern = pattern;
+        shouldAddSpaceAfterNationalPrefix =
+            NATIONAL_PREFIX_SEPARATORS_PATTERN.matcher(
+                numberFormat.getNationalPrefixFormattingRule()).find();
         // With a new formatting template, the matched position using the old template needs to be
         // reset.
         lastMatchPosition = 0;
@@ -161,12 +174,17 @@
 
   private void getAvailableFormats(String leadingThreeDigits) {
     List<NumberFormat> formatList =
-        (isInternationalFormatting && currentMetaData.intlNumberFormatSize() > 0)
+        (isCompleteNumber && currentMetaData.intlNumberFormatSize() > 0)
         ? currentMetaData.intlNumberFormats()
         : currentMetaData.numberFormats();
+    boolean nationalPrefixIsUsedByCountry = currentMetaData.hasNationalPrefix();
     for (NumberFormat format : formatList) {
-      if (isFormatEligible(format.getFormat())) {
-        possibleFormats.add(format);
+      if (!nationalPrefixIsUsedByCountry || isCompleteNumber ||
+          format.isNationalPrefixOptionalWhenFormatting() ||
+          phoneUtil.formattingRuleHasFirstGroupOnly(format.getNationalPrefixFormattingRule())) {
+        if (isFormatEligible(format.getFormat())) {
+          possibleFormats.add(format);
+        }
       }
     }
     narrowDownPossibleFormats(leadingThreeDigits);
@@ -233,8 +251,8 @@
     }
     // Formats the number according to numberFormat
     String template = aPhoneNumber.replaceAll(numberPattern, numberFormat);
-    // Replaces each digit with character digitPlaceholder
-    template = template.replaceAll("9", digitPlaceholder);
+    // Replaces each digit with character DIGIT_PLACEHOLDER
+    template = template.replaceAll("9", DIGIT_PLACEHOLDER);
     return template;
   }
 
@@ -255,9 +273,10 @@
     inputHasFormatting = false;
     positionToRemember = 0;
     originalPosition = 0;
-    isInternationalFormatting = false;
+    isCompleteNumber = false;
     isExpectingCountryCallingCode = false;
     possibleFormats.clear();
+    shouldAddSpaceAfterNationalPrefix = false;
     if (!currentMetaData.equals(defaultMetaData)) {
       currentMetaData = getMetadataForRegion(defaultCountry);
     }
@@ -314,8 +333,9 @@
         }
       } else if (ableToExtractLongerNdd()) {
         // Add an additional space to separate long NDD and national significant number for
-        // readability.
-        prefixBeforeNationalNumber.append(" ");
+        // readability. We don't set shouldAddSpaceAfterNationalPrefix to true, since we don't want
+        // this to change later when we choose formatting templates.
+        prefixBeforeNationalNumber.append(SEPARATOR_BEFORE_NATIONAL_NUMBER);
         return attemptToChoosePatternWithPrefixExtracted();
       }
       return accruedInput.toString();
@@ -355,7 +375,7 @@
             return inputAccruedNationalNumber();
           }
           return ableToFormat
-             ? prefixBeforeNationalNumber + tempNationalNumber
+             ? appendNationalNumber(tempNationalNumber)
              : accruedInput.toString();
         } else {
           return attemptToChooseFormattingPattern();
@@ -391,12 +411,19 @@
          PhoneNumberUtil.PLUS_CHARS_PATTERN.matcher(Character.toString(nextChar)).matches());
   }
 
+  /**
+   * Check to see if there is an exact pattern match for these digits. If so, we should use this
+   * instead of any other formatting template whose leadingDigitsPattern also matches the input.
+   */
   String attemptToFormatAccruedDigits() {
-    for (NumberFormat numFormat : possibleFormats) {
-      Matcher m = regexCache.getPatternForRegex(numFormat.getPattern()).matcher(nationalNumber);
+    for (NumberFormat numberFormat : possibleFormats) {
+      Matcher m = regexCache.getPatternForRegex(numberFormat.getPattern()).matcher(nationalNumber);
       if (m.matches()) {
-        String formattedNumber = m.replaceAll(numFormat.getFormat());
-        return prefixBeforeNationalNumber + formattedNumber;
+        shouldAddSpaceAfterNationalPrefix =
+            NATIONAL_PREFIX_SEPARATORS_PATTERN.matcher(
+                numberFormat.getNationalPrefixFormattingRule()).find();
+        String formattedNumber = m.replaceAll(numberFormat.getFormat());
+        return appendNationalNumber(formattedNumber);
       }
     }
     return "";
@@ -421,8 +448,30 @@
     return currentOutputIndex;
   }
 
-  // Attempts to set the formatting template and returns a string which contains the formatted
-  // version of the digits entered so far.
+  /**
+   * Combines the national number with any prefix (IDD/+ and country code or national prefix) that
+   * was collected. A space will be inserted between them if the current formatting template
+   * indicates this to be suitable.
+   */
+  private String appendNationalNumber(String nationalNumber) {
+    int prefixBeforeNationalNumberLength = prefixBeforeNationalNumber.length();
+    if (shouldAddSpaceAfterNationalPrefix && prefixBeforeNationalNumberLength > 0 &&
+        prefixBeforeNationalNumber.charAt(prefixBeforeNationalNumberLength - 1)
+            != SEPARATOR_BEFORE_NATIONAL_NUMBER) {
+      // We want to add a space after the national prefix if the national prefix formatting rule
+      // indicates that this would normally be done, with the exception of the case where we already
+      // appended a space because the NDD was surprisingly long.
+      return new String(prefixBeforeNationalNumber) + SEPARATOR_BEFORE_NATIONAL_NUMBER
+          + nationalNumber;
+    } else {
+      return prefixBeforeNationalNumber + nationalNumber;
+    }
+  }
+
+  /**
+   * Attempts to set the formatting template and returns a string which contains the formatted
+   * version of the digits entered so far.
+   */
   private String attemptToChooseFormattingPattern() {
     // We start to attempt to format only when as least MIN_LEADING_DIGITS_LENGTH digits of national
     // number (excluding national prefix) have been entered.
@@ -430,12 +479,14 @@
       getAvailableFormats(nationalNumber.substring(0, MIN_LEADING_DIGITS_LENGTH));
       return maybeCreateNewTemplate() ? inputAccruedNationalNumber() : accruedInput.toString();
     } else {
-      return prefixBeforeNationalNumber + nationalNumber.toString();
+      return appendNationalNumber(nationalNumber.toString());
     }
   }
 
-  // Invokes inputDigitHelper on each digit of the national number accrued, and returns a formatted
-  // string in the end.
+  /**
+   * Invokes inputDigitHelper on each digit of the national number accrued, and returns a formatted
+   * string in the end.
+   */
   private String inputAccruedNationalNumber() {
     int lengthOfNationalNumber = nationalNumber.length();
     if (lengthOfNationalNumber > 0) {
@@ -443,30 +494,41 @@
       for (int i = 0; i < lengthOfNationalNumber; i++) {
         tempNationalNumber = inputDigitHelper(nationalNumber.charAt(i));
       }
-      return ableToFormat
-          ? prefixBeforeNationalNumber + tempNationalNumber
-          : accruedInput.toString();
+      return ableToFormat ? appendNationalNumber(tempNationalNumber) : accruedInput.toString();
     } else {
       return prefixBeforeNationalNumber.toString();
     }
   }
 
+  /**
+   * Returns true if the current country is a NANPA country and the national number begins with
+   * the national prefix.
+   */
+  private boolean isNanpaNumberWithNationalPrefix() {
+    // For NANPA numbers beginning with 1[2-9], treat the 1 as the national prefix. The reason is
+    // that national significant numbers in NANPA always start with [2-9] after the national prefix.
+    // Numbers beginning with 1[01] can only be short/emergency numbers, which don't need the
+    // national prefix.
+    return (currentMetaData.getCountryCode() == 1) && (nationalNumber.charAt(0) == '1') &&
+           (nationalNumber.charAt(1) != '0') && (nationalNumber.charAt(1) != '1');
+  }
+
   // Returns the national prefix extracted, or an empty string if it is not present.
   private String removeNationalPrefixFromNationalNumber() {
     int startOfNationalNumber = 0;
-    if (currentMetaData.getCountryCode() == 1 && nationalNumber.charAt(0) == '1') {
+    if (isNanpaNumberWithNationalPrefix()) {
       startOfNationalNumber = 1;
-      prefixBeforeNationalNumber.append("1 ");
-      isInternationalFormatting = true;
+      prefixBeforeNationalNumber.append('1').append(SEPARATOR_BEFORE_NATIONAL_NUMBER);
+      isCompleteNumber = true;
     } else if (currentMetaData.hasNationalPrefixForParsing()) {
       Pattern nationalPrefixForParsing =
-        regexCache.getPatternForRegex(currentMetaData.getNationalPrefixForParsing());
+          regexCache.getPatternForRegex(currentMetaData.getNationalPrefixForParsing());
       Matcher m = nationalPrefixForParsing.matcher(nationalNumber);
       if (m.lookingAt()) {
         // When the national prefix is detected, we use international formatting rules instead of
         // national ones, because national formatting rules could contain local formatting rules
         // for numbers entered without area code.
-        isInternationalFormatting = true;
+        isCompleteNumber = true;
         startOfNationalNumber = m.end();
         prefixBeforeNationalNumber.append(nationalNumber.substring(0, startOfNationalNumber));
       }
@@ -489,7 +551,7 @@
             currentMetaData.getInternationalPrefix());
     Matcher iddMatcher = internationalPrefix.matcher(accruedInputWithoutFormatting);
     if (iddMatcher.lookingAt()) {
-      isInternationalFormatting = true;
+      isCompleteNumber = true;
       int startOfCountryCallingCode = iddMatcher.end();
       nationalNumber.setLength(0);
       nationalNumber.append(accruedInputWithoutFormatting.substring(startOfCountryCallingCode));
@@ -497,7 +559,7 @@
       prefixBeforeNationalNumber.append(
           accruedInputWithoutFormatting.substring(0, startOfCountryCallingCode));
       if (accruedInputWithoutFormatting.charAt(0) != PhoneNumberUtil.PLUS_SIGN) {
-        prefixBeforeNationalNumber.append(" ");
+        prefixBeforeNationalNumber.append(SEPARATOR_BEFORE_NATIONAL_NUMBER);
       }
       return true;
     }
@@ -529,7 +591,7 @@
       currentMetaData = getMetadataForRegion(newRegionCode);
     }
     String countryCodeString = Integer.toString(countryCode);
-    prefixBeforeNationalNumber.append(countryCodeString).append(" ");
+    prefixBeforeNationalNumber.append(countryCodeString).append(SEPARATOR_BEFORE_NATIONAL_NUMBER);
     return true;
   }
 
@@ -556,7 +618,7 @@
   }
 
   private String inputDigitHelper(char nextChar) {
-    Matcher digitMatcher = digitPattern.matcher(formattingTemplate);
+    Matcher digitMatcher = DIGIT_PATTERN.matcher(formattingTemplate);
     if (digitMatcher.find(lastMatchPosition)) {
       String tempTemplate = digitMatcher.replaceFirst(Character.toString(nextChar));
       formattingTemplate.replace(0, tempTemplate.length(), tempTemplate);
diff --git a/java/src/com/android/i18n/phonenumbers/CountryCodeToRegionCodeMap.java b/java/src/com/android/i18n/phonenumbers/CountryCodeToRegionCodeMap.java
index 7e885bf..ab79a47 100644
--- a/java/src/com/android/i18n/phonenumbers/CountryCodeToRegionCodeMap.java
+++ b/java/src/com/android/i18n/phonenumbers/CountryCodeToRegionCodeMap.java
@@ -689,9 +689,8 @@
     listWithRegionCode.add("UY");
     countryCodeToRegionCodeMap.put(598, listWithRegionCode);
 
-    listWithRegionCode = new ArrayList<String>(3);
+    listWithRegionCode = new ArrayList<String>(2);
     listWithRegionCode.add("CW");
-    listWithRegionCode.add("AN");
     listWithRegionCode.add("BQ");
     countryCodeToRegionCodeMap.put(599, listWithRegionCode);
 
diff --git a/java/src/com/android/i18n/phonenumbers/PhoneNumberUtil.java b/java/src/com/android/i18n/phonenumbers/PhoneNumberUtil.java
index cea9860..5c54f61 100644
--- a/java/src/com/android/i18n/phonenumbers/PhoneNumberUtil.java
+++ b/java/src/com/android/i18n/phonenumbers/PhoneNumberUtil.java
@@ -107,8 +107,8 @@
   private static final String RFC3966_ISDN_SUBADDRESS = ";isub=";
 
   // A map that contains characters that are essential when dialling. That means any of the
-  // characters in this map must not be removed from a number when dialing, otherwise the call will
-  // not reach the intended destination.
+  // characters in this map must not be removed from a number when dialling, otherwise the call
+  // will not reach the intended destination.
   private static final Map<Character, Character> DIALLABLE_CHAR_MAPPINGS;
 
   // Only upper-case variants of alpha characters are stored.
@@ -348,6 +348,11 @@
   private static final Pattern FG_PATTERN = Pattern.compile("\\$FG");
   private static final Pattern CC_PATTERN = Pattern.compile("\\$CC");
 
+  // A pattern that is used to determine if the national prefix formatting rule has the first group
+  // only, i.e., does not start with the national prefix. Note that the pattern explicitly allows
+  // for unbalanced parentheses.
+  private static final Pattern FIRST_GROUP_ONLY_PREFIX_PATTERN = Pattern.compile("\\(?\\$1\\)?");
+
   private static PhoneNumberUtil instance = null;
 
   // A mapping from a region code to the PhoneMetadata for that region.
@@ -360,6 +365,10 @@
   private final Map<Integer, PhoneMetadata> countryCodeToNonGeographicalMetadataMap =
       Collections.synchronizedMap(new HashMap<Integer, PhoneMetadata>());
 
+  // The set of county calling codes that map to the non-geo entity region ("001"). This set
+  // currently contains < 12 elements so the default capacity of 16 (load factor=0.75) is fine.
+  private final Set<Integer> countryCodesForNonGeographicalRegion = new HashSet<Integer>();
+
   // A cache for frequently used region-specific regular expressions.
   // As most people use phone numbers primarily from one to two countries, and there are roughly 60
   // regular expressions needed, the initial capacity of 100 offers a rough load factor of 0.75.
@@ -546,32 +555,60 @@
 
   private void init(String filePrefix) {
     currentFilePrefix = filePrefix;
-    for (List<String> regionCodes : countryCallingCodeToRegionCodeMap.values()) {
-      supportedRegions.addAll(regionCodes);
+    for (Map.Entry<Integer, List<String>> entry : countryCallingCodeToRegionCodeMap.entrySet()) {
+      List<String> regionCodes = entry.getValue();
+      // We can assume that if the county calling code maps to the non-geo entity region code then
+      // that's the only region code it maps to.
+      if (regionCodes.size() == 1 && REGION_CODE_FOR_NON_GEO_ENTITY.equals(regionCodes.get(0))) {
+        // This is the subset of all country codes that map to the non-geo entity region code.
+        countryCodesForNonGeographicalRegion.add(entry.getKey());
+      } else {
+        // The supported regions set does not include the "001" non-geo entity region code.
+        supportedRegions.addAll(regionCodes);
+      }
     }
-    supportedRegions.remove(REGION_CODE_FOR_NON_GEO_ENTITY);
+    // If the non-geo entity still got added to the set of supported regions it must be because
+    // there are entries that list the non-geo entity alongside normal regions (which is wrong).
+    // If we discover this, remove the non-geo entity from the set of supported regions and log.
+    if (supportedRegions.remove(REGION_CODE_FOR_NON_GEO_ENTITY)) {
+      LOGGER.log(Level.WARNING, "invalid metadata " +
+          "(country calling code was mapped to the non-geo entity as well as specific region(s))");
+    }
     nanpaRegions.addAll(countryCallingCodeToRegionCodeMap.get(NANPA_COUNTRY_CODE));
   }
 
-  private void loadMetadataFromFile(String filePrefix, String regionCode, int countryCallingCode) {
+  // @VisibleForTesting
+  void loadMetadataFromFile(String filePrefix, String regionCode, int countryCallingCode) {
     boolean isNonGeoRegion = REGION_CODE_FOR_NON_GEO_ENTITY.equals(regionCode);
-    InputStream source = isNonGeoRegion
-        ? PhoneNumberUtil.class.getResourceAsStream(filePrefix + "_" + countryCallingCode)
-        : PhoneNumberUtil.class.getResourceAsStream(filePrefix + "_" + regionCode);
+    String fileName = filePrefix + "_" +
+        (isNonGeoRegion ? String.valueOf(countryCallingCode) : regionCode);
+    InputStream source = PhoneNumberUtil.class.getResourceAsStream(fileName);
+    if (source == null) {
+      LOGGER.log(Level.SEVERE, "missing metadata: " + fileName);
+      throw new RuntimeException("missing metadata: " + fileName);
+    }
     ObjectInputStream in = null;
     try {
       in = new ObjectInputStream(source);
       PhoneMetadataCollection metadataCollection = new PhoneMetadataCollection();
       metadataCollection.readExternal(in);
-      for (PhoneMetadata metadata : metadataCollection.getMetadataList()) {
-        if (isNonGeoRegion) {
-          countryCodeToNonGeographicalMetadataMap.put(countryCallingCode, metadata);
-        } else {
-          regionToMetadataMap.put(regionCode, metadata);
-        }
+      List<PhoneMetadata> metadataList = metadataCollection.getMetadataList();
+      if (metadataList.isEmpty()) {
+        LOGGER.log(Level.SEVERE, "empty metadata: " + fileName);
+        throw new RuntimeException("empty metadata: " + fileName);
+      }
+      if (metadataList.size() > 1) {
+        LOGGER.log(Level.WARNING, "invalid metadata (too many entries): " + fileName);
+      }
+      PhoneMetadata metadata = metadataList.get(0);
+      if (isNonGeoRegion) {
+        countryCodeToNonGeographicalMetadataMap.put(countryCallingCode, metadata);
+      } else {
+        regionToMetadataMap.put(regionCode, metadata);
       }
     } catch (IOException e) {
-      LOGGER.log(Level.WARNING, e.toString());
+      LOGGER.log(Level.SEVERE, "cannot load/parse metadata: " + fileName, e);
+      throw new RuntimeException("cannot load/parse metadata: " + fileName, e);
     } finally {
       close(in);
     }
@@ -582,7 +619,7 @@
       try {
         in.close();
       } catch (IOException e) {
-        LOGGER.log(Level.WARNING, e.toString());
+        LOGGER.log(Level.WARNING, "error closing input stream (ignored)", e);
       }
     }
   }
@@ -752,21 +789,17 @@
    * @return  the length of area code of the PhoneNumber object passed in.
    */
   public int getLengthOfGeographicalAreaCode(PhoneNumber number) {
-    String regionCode = getRegionCodeForNumber(number);
-    if (!isValidRegionCode(regionCode)) {
+    PhoneMetadata metadata = getMetadataForRegion(getRegionCodeForNumber(number));
+    if (metadata == null) {
       return 0;
     }
-    PhoneMetadata metadata = getMetadataForRegion(regionCode);
     // If a country doesn't use a national prefix, and this number doesn't have an Italian leading
     // zero, we assume it is a closed dialling plan with no area codes.
     if (!metadata.hasNationalPrefix() && !number.isItalianLeadingZero()) {
       return 0;
     }
 
-    PhoneNumberType type = getNumberTypeHelper(getNationalSignificantNumber(number),
-                                               metadata);
-    // Most numbers other than the two types below have to be dialled in full.
-    if (type != PhoneNumberType.FIXED_LINE && type != PhoneNumberType.FIXED_LINE_OR_MOBILE) {
+    if (!isNumberGeographical(number)) {
       return 0;
     }
 
@@ -856,8 +889,8 @@
                                         Map<Character, Character> normalizationReplacements,
                                         boolean removeNonMatches) {
     StringBuilder normalizedNumber = new StringBuilder(number.length());
-    char[] numberAsCharArray = number.toCharArray();
-    for (char character : numberAsCharArray) {
+    for (int i = 0; i < number.length(); i++) {
+      char character = number.charAt(i);
       Character newDigit = normalizationReplacements.get(Character.toUpperCase(character));
       if (newDigit != null) {
         normalizedNumber.append(newDigit);
@@ -893,7 +926,7 @@
    * Convenience method to get a list of what regions the library has metadata for.
    */
   public Set<String> getSupportedRegions() {
-    return supportedRegions;
+    return Collections.unmodifiableSet(supportedRegions);
   }
 
   /**
@@ -901,7 +934,7 @@
    * for.
    */
   public Set<Integer> getSupportedGlobalNetworkCallingCodes() {
-    return countryCodeToNonGeographicalMetadataMap.keySet();
+    return Collections.unmodifiableSet(countryCodesForNonGeographicalRegion);
   }
 
   /**
@@ -923,6 +956,27 @@
   }
 
   /**
+   * Helper function to check if the national prefix formatting rule has the first group only, i.e.,
+   * does not start with the national prefix.
+   */
+  static boolean formattingRuleHasFirstGroupOnly(String nationalPrefixFormattingRule) {
+    return FIRST_GROUP_ONLY_PREFIX_PATTERN.matcher(nationalPrefixFormattingRule).matches();
+  }
+
+  /**
+   * Tests whether a phone number has a geographical association. It checks if the number is
+   * associated to a certain region in the country where it belongs to. Note that this doesn't
+   * verify if the number is actually in use.
+   */
+  boolean isNumberGeographical(PhoneNumber phoneNumber) {
+    PhoneNumberType numberType = getNumberType(phoneNumber);
+    // TODO: Include mobile phone numbers from countries like Indonesia, which has some
+    // mobile numbers that are geographical.
+    return numberType == PhoneNumberType.FIXED_LINE ||
+        numberType == PhoneNumberType.FIXED_LINE_OR_MOBILE;
+  }
+
+  /**
    * Helper function to check region code is not unknown or null.
    */
   private boolean isValidRegionCode(String regionCode) {
@@ -952,6 +1006,11 @@
    */
   public String format(PhoneNumber number, PhoneNumberFormat numberFormat) {
     if (number.getNationalNumber() == 0 && number.hasRawInput()) {
+      // Unparseable numbers that kept their raw input just use that.
+      // This is the only case where a number can be formatted as E164 without a
+      // leading '+' symbol (but the original number wasn't parseable anyway).
+      // TODO: Consider removing the 'if' above so that unparseable
+      // strings without raw input format to the empty string instead of "+00"
       String rawInput = number.getRawInput();
       if (rawInput.length() > 0) {
         return rawInput;
@@ -973,22 +1032,23 @@
     int countryCallingCode = number.getCountryCode();
     String nationalSignificantNumber = getNationalSignificantNumber(number);
     if (numberFormat == PhoneNumberFormat.E164) {
-      // Early exit for E164 case since no formatting of the national number needs to be applied.
-      // Extensions are not formatted.
+      // Early exit for E164 case (even if the country calling code is invalid) since no formatting
+      // of the national number needs to be applied. Extensions are not formatted.
       formattedNumber.append(nationalSignificantNumber);
       prefixNumberWithCountryCallingCode(countryCallingCode, PhoneNumberFormat.E164,
                                          formattedNumber);
       return;
     }
+    if (!hasValidCountryCallingCode(countryCallingCode)) {
+      formattedNumber.append(nationalSignificantNumber);
+      return;
+    }
     // Note getRegionCodeForCountryCode() is used because formatting information for regions which
     // share a country calling code is contained by only one region for performance reasons. For
     // example, for NANPA regions it will be contained in the metadata for US.
     String regionCode = getRegionCodeForCountryCode(countryCallingCode);
-    if (!hasValidCountryCallingCode(countryCallingCode)) {
-      formattedNumber.append(nationalSignificantNumber);
-      return;
-    }
-
+    // Metadata cannot be null because the country calling code is valid (which means that the
+    // region code cannot be ZZ and must be one of our supported region codes).
     PhoneMetadata metadata =
         getMetadataForRegionOrCallingCode(countryCallingCode, regionCode);
     formattedNumber.append(formatNsn(nationalSignificantNumber, metadata, numberFormat));
@@ -1012,13 +1072,14 @@
                                 List<NumberFormat> userDefinedFormats) {
     int countryCallingCode = number.getCountryCode();
     String nationalSignificantNumber = getNationalSignificantNumber(number);
+    if (!hasValidCountryCallingCode(countryCallingCode)) {
+      return nationalSignificantNumber;
+    }
     // Note getRegionCodeForCountryCode() is used because formatting information for regions which
     // share a country calling code is contained by only one region for performance reasons. For
     // example, for NANPA regions it will be contained in the metadata for US.
     String regionCode = getRegionCodeForCountryCode(countryCallingCode);
-    if (!hasValidCountryCallingCode(countryCallingCode)) {
-      return nationalSignificantNumber;
-    }
+    // Metadata cannot be null because the country calling code is valid
     PhoneMetadata metadata =
         getMetadataForRegionOrCallingCode(countryCallingCode, regionCode);
 
@@ -1072,16 +1133,18 @@
   public String formatNationalNumberWithCarrierCode(PhoneNumber number, String carrierCode) {
     int countryCallingCode = number.getCountryCode();
     String nationalSignificantNumber = getNationalSignificantNumber(number);
-    // Note getRegionCodeForCountryCode() is used because formatting information for regions which
-    // share a country calling code is contained by only one region for performance reasons. For
-    // example, for NANPA regions it will be contained in the metadata for US.
-    String regionCode = getRegionCodeForCountryCode(countryCallingCode);
     if (!hasValidCountryCallingCode(countryCallingCode)) {
       return nationalSignificantNumber;
     }
 
-    StringBuilder formattedNumber = new StringBuilder(20);
+    // Note getRegionCodeForCountryCode() is used because formatting information for regions which
+    // share a country calling code is contained by only one region for performance reasons. For
+    // example, for NANPA regions it will be contained in the metadata for US.
+    String regionCode = getRegionCodeForCountryCode(countryCallingCode);
+    // Metadata cannot be null because the country calling code is valid.
     PhoneMetadata metadata = getMetadataForRegionOrCallingCode(countryCallingCode, regionCode);
+
+    StringBuilder formattedNumber = new StringBuilder(20);
     formattedNumber.append(formatNsn(nationalSignificantNumber, metadata,
                                      PhoneNumberFormat.NATIONAL, carrierCode));
     maybeAppendFormattedExtension(number, metadata, PhoneNumberFormat.NATIONAL, formattedNumber);
@@ -1216,7 +1279,7 @@
         return countryCallingCode + " " + format(number, PhoneNumberFormat.NATIONAL);
       }
     } else if (countryCallingCode == getCountryCodeForValidRegion(regionCallingFrom)) {
-    // For regions that share a country calling code, the country calling code need not be dialled.
+    // If regions share a country calling code, the country calling code need not be dialled.
     // This also applies when dialling within a region, so this if clause covers both these cases.
     // Technically this is the case for dialling from La Reunion to other overseas departments of
     // France (French Guiana, Martinique, Guadeloupe), but not vice versa - so we don't cover this
@@ -1224,6 +1287,7 @@
     // Details here: http://www.petitfute.com/voyage/225-info-pratiques-reunion
       return format(number, PhoneNumberFormat.NATIONAL);
     }
+    // Metadata cannot be null because we checked 'isValidRegionCode()' above.
     PhoneMetadata metadataForRegionCallingFrom = getMetadataForRegion(regionCallingFrom);
     String internationalPrefix = metadataForRegionCallingFrom.getInternationalPrefix();
 
@@ -1238,6 +1302,7 @@
     }
 
     String regionCode = getRegionCodeForCountryCode(countryCallingCode);
+    // Metadata cannot be null because the country calling code is valid.
     PhoneMetadata metadataForRegion =
         getMetadataForRegionOrCallingCode(countryCallingCode, regionCode);
     String formattedNationalNumber =
@@ -1314,10 +1379,19 @@
           formattedNumber = nationalFormat;
           break;
         }
+        // Metadata cannot be null here because getNddPrefixForRegion() (above) returns null if
+        // there is no metadata for the region.
         PhoneMetadata metadata = getMetadataForRegion(regionCode);
         String nationalNumber = getNationalSignificantNumber(number);
         NumberFormat formatRule =
             chooseFormattingPatternForNumber(metadata.numberFormats(), nationalNumber);
+        // The format rule could still be null here if the national number was 0 and there was no
+        // raw input (this should not be possible for numbers generated by the phonenumber library
+        // as they would also not have a country calling code and we would have exited earlier).
+        if (formatRule == null) {
+          formattedNumber = nationalFormat;
+          break;
+        }
         // When the format we apply to this number doesn't contain national prefix, we can just
         // return the national format.
         // TODO: Refactor the code below with the code in isNationalPrefixPresentIfRequired.
@@ -1348,12 +1422,16 @@
     String rawInput = number.getRawInput();
     // If no digit is inserted/removed/modified as a result of our formatting, we return the
     // formatted phone number; otherwise we return the raw input the user entered.
-    return (formattedNumber != null &&
-            normalizeHelper(formattedNumber, DIALLABLE_CHAR_MAPPINGS, true /* remove non matches */)
-                .equals(normalizeHelper(
-                    rawInput, DIALLABLE_CHAR_MAPPINGS, true /* remove non matches */)))
-        ? formattedNumber
-        : rawInput;
+    if (formattedNumber != null && rawInput.length() > 0) {
+      String normalizedFormattedNumber =
+          normalizeHelper(formattedNumber, DIALLABLE_CHAR_MAPPINGS, true /* remove non matches */);
+      String normalizedRawInput =
+          normalizeHelper(rawInput, DIALLABLE_CHAR_MAPPINGS, true /* remove non matches */);
+      if (!normalizedFormattedNumber.equals(normalizedRawInput)) {
+        formattedNumber = rawInput;
+      }
+    }
+    return formattedNumber;
   }
 
   // Check if rawInput, which is assumed to be in the national format, has a national prefix. The
@@ -1455,7 +1533,7 @@
       if (isNANPACountry(regionCallingFrom)) {
         return countryCode + " " + rawInput;
       }
-    } else if (isValidRegionCode(regionCallingFrom) &&
+    } else if (metadataForRegionCallingFrom != null &&
                countryCode == getCountryCodeForValidRegion(regionCallingFrom)) {
       NumberFormat formattingPattern =
           chooseFormattingPatternForNumber(metadataForRegionCallingFrom.numberFormats(),
@@ -1490,6 +1568,7 @@
     }
     StringBuilder formattedNumber = new StringBuilder(rawInput);
     String regionCode = getRegionCodeForCountryCode(countryCode);
+    // Metadata cannot be null because the country calling code is valid.
     PhoneMetadata metadataForRegion = getMetadataForRegionOrCallingCode(countryCode, regionCode);
     maybeAppendFormattedExtension(number, metadataForRegion,
                                   PhoneNumberFormat.INTERNATIONAL, formattedNumber);
@@ -1596,7 +1675,7 @@
     return formatNsnUsingPattern(nationalNumber, formattingPattern, numberFormat, null);
   }
 
-  // Note that carrierCode is optional - if NULL or an empty string, no carrier code replacement
+  // Note that carrierCode is optional - if null or an empty string, no carrier code replacement
   // will take place.
   private String formatNsnUsingPattern(String nationalNumber,
                                        NumberFormat formattingPattern,
@@ -1764,11 +1843,11 @@
    */
   public PhoneNumberType getNumberType(PhoneNumber number) {
     String regionCode = getRegionCodeForNumber(number);
-    if (!isValidRegionCode(regionCode) && !REGION_CODE_FOR_NON_GEO_ENTITY.equals(regionCode)) {
+    PhoneMetadata metadata = getMetadataForRegionOrCallingCode(number.getCountryCode(), regionCode);
+    if (metadata == null) {
       return PhoneNumberType.UNKNOWN;
     }
     String nationalSignificantNumber = getNationalSignificantNumber(number);
-    PhoneMetadata metadata = getMetadataForRegionOrCallingCode(number.getCountryCode(), regionCode);
     return getNumberTypeHelper(nationalSignificantNumber, metadata);
   }
 
@@ -1822,6 +1901,10 @@
     return PhoneNumberType.UNKNOWN;
   }
 
+  /**
+   * Returns the metadata for the given region code or {@code null} if the region code is invalid
+   * or unknown.
+   */
   PhoneMetadata getMetadataForRegion(String regionCode) {
     if (!isValidRegionCode(regionCode)) {
       return null;
@@ -1877,6 +1960,10 @@
    * immediately exits with false. After this, the specific number pattern rules for the region are
    * examined. This is useful for determining for example whether a particular number is valid for
    * Canada, rather than just a valid NANPA number.
+   * Warning: In most cases, you want to use {@link #isValidNumber} instead. For example, this
+   * method will mark numbers from British Crown dependencies such as the Isle of Man as invalid for
+   * the region "GB" (United Kingdom), since it has its own region code, "IM", which may be
+   * undesirable.
    *
    * @param number       the phone number that we want to validate
    * @param regionCode   the region that we want to validate the phone number for
@@ -1934,6 +2021,7 @@
     String nationalNumber = getNationalSignificantNumber(number);
     for (String regionCode : regionCodes) {
       // If leadingDigits is present, use this. Otherwise, do full validation.
+      // Metadata cannot be null because the region codes come from the country calling code map.
       PhoneMetadata metadata = getMetadataForRegion(regionCode);
       if (metadata.hasLeadingDigits()) {
         if (regexCache.getPatternForRegex(metadata.getLeadingDigits())
@@ -1958,6 +2046,17 @@
   }
 
   /**
+   * Returns a list with the region codes that match the specific country calling code. For
+   * non-geographical country calling codes, the region code 001 is returned. Also, in the case
+   * of no region code being found, an empty list is returned.
+   */
+  public List<String> getRegionCodesForCountryCode(int countryCallingCode) {
+    List<String> regionCodes = countryCallingCodeToRegionCodeMap.get(countryCallingCode);
+    return Collections.unmodifiableList(regionCodes == null ? new ArrayList<String>(0)
+                                                            : regionCodes);
+  }
+
+  /**
    * Returns the country calling code for a specific region. For example, this would be 1 for the
    * United States, and 64 for New Zealand.
    *
@@ -1981,9 +2080,13 @@
    *
    * @param regionCode  the region that we want to get the country calling code for
    * @return  the country calling code for the region denoted by regionCode
+   * @throws IllegalArgumentException if the region is invalid
    */
   private int getCountryCodeForValidRegion(String regionCode) {
     PhoneMetadata metadata = getMetadataForRegion(regionCode);
+    if (metadata == null) {
+      throw new IllegalArgumentException("Invalid region code: " + regionCode);
+    }
     return metadata.getCountryCode();
   }
 
@@ -2002,14 +2105,14 @@
    * @return  the dialling prefix for the region denoted by regionCode
    */
   public String getNddPrefixForRegion(String regionCode, boolean stripNonDigits) {
-    if (!isValidRegionCode(regionCode)) {
+    PhoneMetadata metadata = getMetadataForRegion(regionCode);
+    if (metadata == null) {
       LOGGER.log(Level.WARNING,
                  "Invalid or missing region code ("
                   + ((regionCode == null) ? "null" : regionCode)
                   + ") provided.");
       return null;
     }
-    PhoneMetadata metadata = getMetadataForRegion(regionCode);
     String nationalPrefix = metadata.getNationalPrefix();
     // If no national prefix was found, we return null.
     if (nationalPrefix.length() == 0) {
@@ -2038,8 +2141,9 @@
    * metadata for the country is found.
    */
   boolean isLeadingZeroPossible(int countryCallingCode) {
-    PhoneMetadata mainMetadataForCallingCode = getMetadataForRegion(
-        getRegionCodeForCountryCode(countryCallingCode));
+    PhoneMetadata mainMetadataForCallingCode =
+        getMetadataForRegionOrCallingCode(countryCallingCode,
+                                          getRegionCodeForCountryCode(countryCallingCode));
     if (mainMetadataForCallingCode == null) {
       return false;
     }
@@ -2111,7 +2215,7 @@
    *      numbers, that would most likely be area codes) and length (obviously includes the
    *      length of area codes for fixed line numbers), it will return false for the
    *      subscriber-number-only version.
-   * </ol
+   * </ol>
    * @param number  the number that needs to be checked
    * @return  a ValidationResult object which indicates whether the number is possible
    */
@@ -2126,6 +2230,7 @@
       return ValidationResult.INVALID_COUNTRY_CODE;
     }
     String regionCode = getRegionCodeForCountryCode(countryCode);
+    // Metadata cannot be null because the country calling code is valid.
     PhoneMetadata metadata = getMetadataForRegionOrCallingCode(countryCode, regionCode);
     PhoneNumberDesc generalNumDesc = metadata.getGeneralDesc();
     // Handling case of numbers with no metadata.
@@ -2679,6 +2784,7 @@
     if (countryCode != 0) {
       String phoneNumberRegion = getRegionCodeForCountryCode(countryCode);
       if (!phoneNumberRegion.equals(defaultRegion)) {
+        // Metadata cannot be null because the country calling code is valid.
         regionMetadata = getMetadataForRegionOrCallingCode(countryCode, phoneNumberRegion);
       }
     } else {
@@ -2945,13 +3051,12 @@
    */
   // @VisibleForTesting
   boolean canBeInternationallyDialled(PhoneNumber number) {
-    String regionCode = getRegionCodeForNumber(number);
-    if (!isValidRegionCode(regionCode)) {
+    PhoneMetadata metadata = getMetadataForRegion(getRegionCodeForNumber(number));
+    if (metadata == null) {
       // Note numbers belonging to non-geographical entities (e.g. +800 numbers) are always
       // internationally diallable, and will be caught here.
       return true;
     }
-    PhoneMetadata metadata = getMetadataForRegion(regionCode);
     String nationalSignificantNumber = getNationalSignificantNumber(number);
     return !isNumberMatchingDesc(nationalSignificantNumber, metadata.getNoInternationalDialling());
   }
diff --git a/java/src/com/android/i18n/phonenumbers/Phonemetadata.java b/java/src/com/android/i18n/phonenumbers/Phonemetadata.java
index bcf8a79..18d0d69 100644
--- a/java/src/com/android/i18n/phonenumbers/Phonemetadata.java
+++ b/java/src/com/android/i18n/phonenumbers/Phonemetadata.java
@@ -43,6 +43,7 @@
         return this;
       }
     }
+
     public static Builder newBuilder() {
       return new Builder();
     }
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_800 b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_800
index e958189..6a88bff 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_800
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_800
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_808 b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_808
index 8662916..495ce1d 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_808
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_808
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_888 b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_888
index 7cc7cff..8a3fef8 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_888
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_888
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_979 b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_979
index 0c143ce..8149b9d 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_979
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_979
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AR b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AR
index e6e7fbb..84ab554 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AR
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AR
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AT b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AT
index 751674c..3efec28 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AT
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AT
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AU b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AU
index 7ce9c1e..ce19e04 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AU
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AU
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BF b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BF
index c3880ea..370c7ac 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BF
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BF
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BG b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BG
index ce23073..8ddd937 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BG
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BG
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CL b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CL
index ce8a36e..2e74d26 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CL
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CL
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CN b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CN
index 2105a58..ae35d25 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CN
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CN
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CO b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CO
index 60b58b8..2c6db02 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CO
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CO
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DE b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DE
index 872ea55..76e9213 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DE
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DE
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DJ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DJ
index 6813305..17ea11d 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DJ
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DJ
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DZ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DZ
index 348a5c3..6162eed 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DZ
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DZ
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_EC b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_EC
index 409cea8..a0a80ce 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_EC
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_EC
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_EG b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_EG
index 89b83de..7cb3234 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_EG
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_EG
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GA b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GA
index 1b49771..5147cb6 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GA
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GA
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GR b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GR
index 82bd30b..ee3e671 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GR
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GR
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_HR b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_HR
index 9a2fc4d..e97492a 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_HR
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_HR
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IL b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IL
index b01451a..28ec7e6 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IL
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IL
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IN b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IN
index 1ec08ab..a3f78a7 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IN
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IN
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IT b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IT
index 04ee2d5..ef9ee02 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IT
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IT
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_JO b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_JO
index de03296..56053cb 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_JO
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_JO
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_JP b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_JP
index e4032ea..9f73300 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_JP
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_JP
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KH b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KH
index e5792b0..158a8c2 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KH
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KH
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KR b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KR
index 894849e..d8344af 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KR
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KR
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KW b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KW
index 27a156e..2f5c836 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KW
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KW
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KZ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KZ
index 0fe135a..19626c3 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KZ
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KZ
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_LA b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_LA
index 5ee5bdc..fab4304 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_LA
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_LA
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_LB b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_LB
index e8b1b4b..cf18619 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_LB
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_LB
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_LI b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_LI
index 76ad067..3672094 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_LI
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_LI
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MA b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MA
index 909ac3c..66f55b8 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MA
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MA
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MT b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MT
index 400503e..ee1ab06 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MT
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MT
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MV b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MV
index 7d100a3..68b2ea3 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MV
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MV
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MX b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MX
index 18e6361..f530abf 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MX
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MX
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MY b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MY
index 8c42456..2f1dbbd 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MY
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MY
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NC b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NC
index 8404529..b6bb11c 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NC
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NC
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NG b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NG
index d3a53ac..253b2ed 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NG
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NG
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_OM b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_OM
index d07a300..b600fa2 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_OM
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_OM
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PF b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PF
index 6990570..dbd1ebe 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PF
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PF
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PY b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PY
index 28f0b07..a1f46ea 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PY
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PY
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_RU b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_RU
index d0d6578..fd33ba0 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_RU
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_RU
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SB b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SB
index 579e741..04c6361 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SB
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SB
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SD b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SD
index 0b0ae8a..3d5b238 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SD
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SD
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SK b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SK
index 621c4cc..67ca01a 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SK
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SK
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SL b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SL
index 8f73182..84fbd5f 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SL
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SL
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SM b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SM
index 0c4fbb3..451daa8 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SM
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SM
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SN b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SN
index 0350bb9..b1f337c 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SN
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SN
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TL b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TL
index f6ced14..6d3fe55 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TL
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TL
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TN b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TN
index 4f71d89..97d4609 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TN
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TN
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_US b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_US
index f067453..5df5740 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_US
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_US
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_UZ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_UZ
index a1816d9..33d4e7f 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_UZ
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_UZ
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZA b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZA
index 68279de..82fbcb3 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZA
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZA
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/PhoneNumberOfflineGeocoder.java b/java/src/com/android/i18n/phonenumbers/geocoding/PhoneNumberOfflineGeocoder.java
index f940e1b..561ee72 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/PhoneNumberOfflineGeocoder.java
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/PhoneNumberOfflineGeocoder.java
@@ -17,6 +17,7 @@
 package com.android.i18n.phonenumbers.geocoding;
 
 import com.android.i18n.phonenumbers.PhoneNumberUtil;
+import com.android.i18n.phonenumbers.PhoneNumberUtil.PhoneNumberType;
 import com.android.i18n.phonenumbers.Phonenumber.PhoneNumber;
 
 import java.io.IOException;
@@ -148,7 +149,9 @@
    * name of the geographical area the phone number is from if more detailed information is
    * available.
    *
-   * <p>This method assumes the validity of the number passed in has already been checked.
+   * <p>This method assumes the validity of the number passed in has already been checked, and that
+   * the number is suitable for geocoding. We consider fixed-line and mobile numbers possible
+   * candidates for geocoding.
    *
    * @param number  a valid phone number for which we want to get a text description
    * @param languageCode  the language code for which the description should be written
@@ -211,8 +214,11 @@
    *     string if the number passed in is invalid
    */
   public String getDescriptionForNumber(PhoneNumber number, Locale languageCode) {
-    if (!phoneUtil.isValidNumber(number)) {
+    PhoneNumberType numberType = phoneUtil.getNumberType(number);
+    if (numberType == PhoneNumberType.UNKNOWN) {
       return "";
+    } else if (!canBeGeocoded(numberType)) {
+      return getCountryNameForNumber(number, languageCode);
     }
     return getDescriptionForValidNumber(number, languageCode);
   }
@@ -231,13 +237,27 @@
    */
   public String getDescriptionForNumber(PhoneNumber number, Locale languageCode,
                                         String userRegion) {
-    if (!phoneUtil.isValidNumber(number)) {
+    PhoneNumberType numberType = phoneUtil.getNumberType(number);
+    if (numberType == PhoneNumberType.UNKNOWN) {
       return "";
+    } else if (!canBeGeocoded(numberType)) {
+      return getCountryNameForNumber(number, languageCode);
     }
     return getDescriptionForValidNumber(number, languageCode, userRegion);
   }
 
   /**
+   * A similar method is implemented as PhoneNumberUtil.isNumberGeographical, which performs a
+   * stricter check, as it determines if a number has a geographical association. Also, if new
+   * phone number types were added, we should check if this other method should be updated too.
+   */
+  private boolean canBeGeocoded(PhoneNumberType numberType) {
+    return (numberType == PhoneNumberType.FIXED_LINE ||
+            numberType == PhoneNumberType.MOBILE ||
+            numberType == PhoneNumberType.FIXED_LINE_OR_MOBILE);
+  }
+
+  /**
    * Returns an area-level text description in the given language for the given phone number.
    *
    * @param number  the phone number for which we want to get a text description
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1201_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1201_en
index bfb7284..b9f936f 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1201_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1201_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1203_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1203_en
index 6d49709..96a4f73 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1203_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1203_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1204_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1204_en
index 614c39d..97d49d1 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1204_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1204_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1205_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1205_en
index 3097e30..3237db5 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1205_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1205_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1206_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1206_en
index 816ec8d..b7b2e90 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1206_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1206_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1207_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1207_en
index 8a07093..4354fe4 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1207_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1207_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1208_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1208_en
index 919ab5f..0aea0b8 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1208_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1208_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1214_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1214_en
index be95d32..83e5626 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1214_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1214_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1215_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1215_en
index 1036ab1..72deff3 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1215_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1215_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1216_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1216_en
index f527d56..d5da91a 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1216_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1216_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1217_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1217_en
index a83682c..89c510c 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1217_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1217_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1218_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1218_en
index 1d7a05b..8793bd4 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1218_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1218_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1219_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1219_en
index 339e944..006ee34 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1219_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1219_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1231_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1231_en
index c993c36..dbd6fcd 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1231_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1231_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1239_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1239_en
index 042ce57..66b5df7 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1239_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1239_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1240_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1240_en
index 8b054e1..dcf998d 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1240_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1240_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1248_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1248_en
index d2ae6e2..ddbbf23 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1248_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1248_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1250_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1250_en
index 0c6ad86..23236a5 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1250_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1250_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1252_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1252_en
index 1bca80f..855af49 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1252_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1252_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1256_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1256_en
index ad4be8b..f8339e0 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1256_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1256_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1260_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1260_en
index aaba3a6..fb87487 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1260_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1260_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1262_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1262_en
index 46d7cc9..f01cd73 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1262_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1262_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1270_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1270_en
index 511cf8f..286475e 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1270_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1270_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1276_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1276_en
index 488106b..d1589cc 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1276_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1276_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1281_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1281_en
index 6bea3ed..e45f134 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1281_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1281_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1301_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1301_en
index 5e9fcbb..d2011d2 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1301_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1301_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1302_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1302_en
index b739c04..4bb2e5c 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1302_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1302_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1303_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1303_en
index e663f98..707c474 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1303_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1303_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1304_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1304_en
index 04a3c57..2300e19 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1304_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1304_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1305_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1305_en
index 69bb00a..506838b 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1305_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1305_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1307_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1307_en
index 1fe1b0e..b785862 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1307_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1307_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1310_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1310_en
index 18fb6d1..178895d 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1310_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1310_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1313_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1313_en
index ccc2514..b1b4015 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1313_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1313_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1314_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1314_en
index d54665f..bc33a0d 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1314_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1314_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1316_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1316_en
index 3c7b03a..742fdef 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1316_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1316_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1317_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1317_en
index 61a443c..72e3888 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1317_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1317_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1318_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1318_en
index a52084b..94cabb4 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1318_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1318_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1321_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1321_en
index 7696e6b..463311d 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1321_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1321_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1330_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1330_en
index ce3078a..45939b5 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1330_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1330_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1334_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1334_en
index 1cec5ea..944f5a4 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1334_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1334_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1336_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1336_en
index 7c2e347..9a88e1c 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1336_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1336_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1345_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1345_en
new file mode 100644
index 0000000..829b666
--- /dev/null
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1345_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1352_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1352_en
index 47e5610..277ec22 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1352_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1352_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1360_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1360_en
index f741062..bf9f47f 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1360_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1360_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1386_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1386_en
index f81e4c0..d4f5237 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1386_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1386_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1402_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1402_en
index ef231cf..49917e5 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1402_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1402_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1404_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1404_en
index 6711a72..e091ad7 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1404_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1404_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1405_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1405_en
index 1da9a43..929ccfc 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1405_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1405_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1406_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1406_en
index 8a6c5b4..7cede7d 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1406_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1406_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1407_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1407_en
index 0f230ae..94b9f33 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1407_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1407_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1408_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1408_en
index e5fe7cf..077b03f 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1408_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1408_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1409_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1409_en
index f0bcc3c..606862c 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1409_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1409_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1410_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1410_en
index 8b97ebd..94b605e 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1410_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1410_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1412_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1412_en
index bf074a9..7494303 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1412_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1412_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1414_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1414_en
index eeea85a..3f0394d 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1414_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1414_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1415_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1415_en
index ee43626..55e0b1c 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1415_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1415_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1416_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1416_en
index b386925..456d76c 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1416_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1416_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1417_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1417_en
index 309b341..c917c2c 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1417_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1417_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1419_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1419_en
index 198fdd7..4b7d80a 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1419_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1419_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1423_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1423_en
index 0aad258..5f972ff 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1423_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1423_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1425_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1425_en
index 2563be7..b52fc9b 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1425_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1425_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1434_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1434_en
index ed75d33..58e40d0 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1434_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1434_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1435_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1435_en
index ef84cd5..828a04b 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1435_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1435_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1450_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1450_en
index 48fd1db..ff092a3 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1450_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1450_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1478_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1478_en
index 962478d..4c66626 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1478_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1478_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1479_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1479_en
index 475fcc1..1d9a2ca 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1479_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1479_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1480_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1480_en
index 2b91c33..ab0dfec 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1480_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1480_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1501_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1501_en
index c45bf8d..aaba372 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1501_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1501_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1503_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1503_en
index 281efad..f8faec9 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1503_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1503_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1504_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1504_en
index b57a1b6..eb9f4af 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1504_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1504_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1505_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1505_en
index c874e6d..cd31ba8 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1505_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1505_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1506_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1506_en
index 39704d7..4fd91ee 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1506_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1506_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1507_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1507_en
index 55c8ce5..f02103a 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1507_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1507_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1509_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1509_en
index 7a36f9a..d702198 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1509_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1509_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1510_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1510_en
index 8220a33..caa9cd8 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1510_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1510_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1513_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1513_en
index db2c54c..0205e1d 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1513_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1513_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1515_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1515_en
index 0547084..bc8ec69 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1515_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1515_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1518_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1518_en
index 17f4f39..e4e429a 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1518_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1518_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1519_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1519_en
index d942f22..1604d15 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1519_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1519_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1520_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1520_en
index 986969c..fe9b45f 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1520_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1520_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1540_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1540_en
index e143cc7..1610606 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1540_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1540_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1559_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1559_en
index 8ead4a9..af8ece3 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1559_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1559_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1561_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1561_en
index 64e0df5..b100300 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1561_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1561_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1573_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1573_en
index 6072681..3d4b824 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1573_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1573_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1575_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1575_en
index 8977a0c..4d9c7b6 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1575_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1575_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1580_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1580_en
index 1be41a7..b9e64d1 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1580_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1580_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1585_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1585_en
index 29c4ff2..1c60a05 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1585_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1585_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1602_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1602_en
index 6226a8d..ae2cb2e 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1602_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1602_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1603_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1603_en
index 5ffd46e..dd7419d 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1603_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1603_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1604_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1604_en
index 35486bd..101bfbc 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1604_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1604_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1605_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1605_en
index 039a97c..959b927 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1605_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1605_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1606_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1606_en
index a0b4a85..c546a4a 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1606_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1606_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1607_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1607_en
index bfb5611..af289ec 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1607_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1607_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1608_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1608_en
index 5946b93..0e92f28 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1608_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1608_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1609_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1609_en
index cb6ac31..bbadf10 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1609_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1609_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1610_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1610_en
index f177a7f..4f1dcaa 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1610_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1610_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1612_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1612_en
index 396c6fd..edfbcb0 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1612_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1612_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1613_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1613_en
index 4479bf2..44106d9 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1613_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1613_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1614_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1614_en
index 2082f0f..546855b 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1614_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1614_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1615_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1615_en
index 767825a..aa67596 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1615_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1615_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1616_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1616_en
index f3a8432..4bf08fe 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1616_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1616_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1617_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1617_en
index 426df63..e774fe6 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1617_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1617_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1618_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1618_en
index b8749d1..67928b4 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1618_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1618_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1619_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1619_en
index 872b63a..9b9620c 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1619_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1619_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1630_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1630_en
index 8aa798d..75a8e81 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1630_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1630_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1631_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1631_en
index 464da02..ac5fd0f 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1631_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1631_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1636_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1636_en
index 481957a..2935ef0 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1636_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1636_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1641_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1641_en
index 5c33288..418ffc6 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1641_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1641_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1661_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1661_en
index 07ecf5f..5dbbe41 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1661_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1661_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1678_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1678_en
index 5e59450..0564d3d 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1678_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1678_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1682_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1682_en
index 150c61e..1fb2578 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1682_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1682_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1701_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1701_en
index 8c6bf6c..662c576 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1701_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1701_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1702_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1702_en
index f92724b..6fb5a6e 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1702_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1702_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1703_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1703_en
index 7db5cad..b183761 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1703_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1703_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1705_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1705_en
index 1389dd0..b93a8c5 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1705_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1705_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1706_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1706_en
index 5e79641..beebf4d 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1706_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1706_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1707_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1707_en
index 31c062b..23b3e9f 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1707_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1707_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1708_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1708_en
index 9b0cf4d..4769049 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1708_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1708_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1709_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1709_en
index ac9a808..ba72b87 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1709_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1709_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1714_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1714_en
index cfc609b..87b8364 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1714_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1714_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1715_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1715_en
index 8469e59..3eec5b5 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1715_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1715_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1716_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1716_en
index cccb935..5f236bc 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1716_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1716_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1718_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1718_en
index 8710319..b08a47b 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1718_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1718_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1719_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1719_en
index a553d0b..b8d374a 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1719_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1719_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1720_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1720_en
index b99f8a4..9647b81 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1720_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1720_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1724_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1724_en
index 4a8e38a..3e61b8b 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1724_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1724_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1727_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1727_en
index d61bfc2..c723c81 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1727_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1727_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1732_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1732_en
index 8d7e0b1..64fdccb 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1732_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1732_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1734_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1734_en
index 74bd262..d9628ea 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1734_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1734_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1740_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1740_en
index 7054b20..f4a452b 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1740_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1740_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1757_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1757_en
index 9c1082d..52b510b 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1757_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1757_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1760_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1760_en
index e02b6f4..26dd28b 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1760_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1760_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1763_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1763_en
index 93e872b..aeb026a 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1763_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1763_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1765_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1765_en
index c43016a..3e7c710 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1765_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1765_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1770_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1770_en
index 322e453..a52387b 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1770_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1770_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1772_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1772_en
index 523b2f1..aa4afea 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1772_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1772_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1780_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1780_en
index 69d9719..dd132f4 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1780_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1780_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1785_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1785_en
index c8900aa..05e93ff 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1785_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1785_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1801_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1801_en
index 5ff2628..fe0ac75 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1801_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1801_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1802_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1802_en
index 4d3faae..e995d92 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1802_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1802_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1803_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1803_en
index 43cbdf4..fc6b669 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1803_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1803_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1805_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1805_en
index 022a981..a714b49 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1805_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1805_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1808_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1808_en
index 74408f0..308ed58 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1808_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1808_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1810_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1810_en
index db3ba66..3971e7f 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1810_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1810_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1812_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1812_en
index af5c14e..ccfec3c 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1812_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1812_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1813_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1813_en
index 35aa8ee..d9b5c13 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1813_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1813_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1814_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1814_en
index ee8c48e..b693409 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1814_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1814_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1817_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1817_en
index c160bf5..abb2962 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1817_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1817_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1819_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1819_en
index ababd07..b6038a0 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1819_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1819_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1828_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1828_en
index 39ac69a..0e3ad35 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1828_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1828_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1832_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1832_en
index e42842c..66fb4ba 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1832_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1832_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1843_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1843_en
index e3dff31..76295a8 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1843_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1843_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1845_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1845_en
index 0a0da01..2b66eff 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1845_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1845_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1847_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1847_en
index d765fd1..150397f 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1847_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1847_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1850_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1850_en
index 6e7f105..ca7cf3a 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1850_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1850_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1856_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1856_en
index d04d220..0fa4d6f 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1856_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1856_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1858_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1858_en
index c4351db..6a48b4b 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1858_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1858_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1859_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1859_en
index 1d13302..1841746 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1859_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1859_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1860_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1860_en
index c3cc31f..1beee46 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1860_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1860_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1863_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1863_en
index a8568fa..20b3cd0 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1863_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1863_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1864_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1864_en
index 73963f0..c1e5ef8 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1864_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1864_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1870_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1870_en
index a8fc86a..dce1621 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1870_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1870_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1902_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1902_en
index daae6ff..bd9e005 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1902_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1902_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1903_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1903_en
index 80ac3d5..df8ee08 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1903_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1903_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1905_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1905_en
index b29fbf0..4749ce8 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1905_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1905_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1907_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1907_en
index 7d7feda..a215f50 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1907_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1907_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1908_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1908_en
index 8428b04..36d2177 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1908_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1908_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1910_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1910_en
index a599b5c..f994341 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1910_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1910_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1912_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1912_en
index 569493c..913ca39 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1912_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1912_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1914_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1914_en
index 6a15d24..1632ad4 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1914_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1914_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1915_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1915_en
index 34b9a4c..85bea6d 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1915_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1915_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1918_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1918_en
index 4dc6d5e..1e99365 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1918_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1918_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1919_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1919_en
index 30231aa..f1f5bbb 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1919_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1919_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1920_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1920_en
index 25b9df2..6518b31 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1920_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1920_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1925_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1925_en
index 6e47351..82a7a84 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1925_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1925_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1931_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1931_en
index b60a94d..c112a5a 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1931_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1931_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1936_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1936_en
index 8964ddc..475e386 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1936_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1936_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1937_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1937_en
index 33b110f..590b421 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1937_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1937_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1941_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1941_en
index 08236c3..281f0a9 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1941_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1941_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1951_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1951_en
index 52070ee..43b1520 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1951_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1951_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1972_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1972_en
index 172c9b5..8480a58 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1972_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1972_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1973_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1973_en
index 78c7cde..fc398c2 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1973_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1973_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1978_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1978_en
index 6e85a73..404c6d6 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/1978_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1978_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/30_el b/java/src/com/android/i18n/phonenumbers/geocoding/data/30_el
index 3ae0b10..5f26cf5 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/30_el
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/30_el
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/30_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/30_en
index 8211506..4d7e219 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/30_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/30_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/353_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/353_en
new file mode 100644
index 0000000..b207f52
--- /dev/null
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/353_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/40_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/40_en
new file mode 100644
index 0000000..d5704a3
--- /dev/null
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/40_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/40_ro b/java/src/com/android/i18n/phonenumbers/geocoding/data/40_ro
new file mode 100644
index 0000000..6c56537
--- /dev/null
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/40_ro
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/57_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/57_en
new file mode 100644
index 0000000..347d96b
--- /dev/null
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/57_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/62_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/62_en
new file mode 100644
index 0000000..557ddf7
--- /dev/null
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/62_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/62_id b/java/src/com/android/i18n/phonenumbers/geocoding/data/62_id
new file mode 100644
index 0000000..b73d951
--- /dev/null
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/62_id
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/66_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/66_en
new file mode 100644
index 0000000..cb2807d
--- /dev/null
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/66_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/66_th b/java/src/com/android/i18n/phonenumbers/geocoding/data/66_th
new file mode 100644
index 0000000..5e86e0b
--- /dev/null
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/66_th
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/7_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/7_en
index 7ac3c1d..becd121 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/7_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/7_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/7_ru b/java/src/com/android/i18n/phonenumbers/geocoding/data/7_ru
new file mode 100644
index 0000000..746a1c6
--- /dev/null
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/7_ru
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/82_fr b/java/src/com/android/i18n/phonenumbers/geocoding/data/82_fr
new file mode 100644
index 0000000..ff3f632
--- /dev/null
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/82_fr
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/91_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/91_en
new file mode 100644
index 0000000..b7da96a
--- /dev/null
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/91_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/98_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/98_en
new file mode 100644
index 0000000..e0c7504
--- /dev/null
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/98_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/98_fa b/java/src/com/android/i18n/phonenumbers/geocoding/data/98_fa
new file mode 100644
index 0000000..200e111
--- /dev/null
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/98_fa
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/config b/java/src/com/android/i18n/phonenumbers/geocoding/data/config
index 9c46be3..601c283 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/config
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/config
Binary files differ
diff --git a/java/test/com/android/i18n/phonenumbers/AsYouTypeFormatterTest.java b/java/test/com/android/i18n/phonenumbers/AsYouTypeFormatterTest.java
index e572fe0..1913cdb 100644
--- a/java/test/com/android/i18n/phonenumbers/AsYouTypeFormatterTest.java
+++ b/java/test/com/android/i18n/phonenumbers/AsYouTypeFormatterTest.java
@@ -88,6 +88,35 @@
     assertEquals("+819012345678901", formatter.inputDigit('1'));
   }
 
+  public void testCountryWithSpaceInNationalPrefixFormattingRule() {
+    AsYouTypeFormatter formatter = phoneUtil.getAsYouTypeFormatter(RegionCode.BY);
+    assertEquals("8", formatter.inputDigit('8'));
+    assertEquals("88", formatter.inputDigit('8'));
+    assertEquals("881", formatter.inputDigit('1'));
+    assertEquals("8 819", formatter.inputDigit('9'));
+    assertEquals("8 8190", formatter.inputDigit('0'));
+    // The formatting rule for 5 digit numbers states that no space should be present after the
+    // national prefix.
+    assertEquals("881 901", formatter.inputDigit('1'));
+    assertEquals("8 819 012", formatter.inputDigit('2'));
+    // Too long, no formatting rule applies.
+    assertEquals("88190123", formatter.inputDigit('3'));
+  }
+
+  public void testCountryWithSpaceInNationalPrefixFormattingRuleAndLongNdd() {
+    AsYouTypeFormatter formatter = phoneUtil.getAsYouTypeFormatter(RegionCode.BY);
+    assertEquals("9", formatter.inputDigit('9'));
+    assertEquals("99", formatter.inputDigit('9'));
+    assertEquals("999", formatter.inputDigit('9'));
+    assertEquals("9999", formatter.inputDigit('9'));
+    assertEquals("99999 ", formatter.inputDigit('9'));
+    assertEquals("99999 1", formatter.inputDigit('1'));
+    assertEquals("99999 12", formatter.inputDigit('2'));
+    assertEquals("99999 123", formatter.inputDigit('3'));
+    assertEquals("99999 1234", formatter.inputDigit('4'));
+    assertEquals("99999 12 345", formatter.inputDigit('5'));
+  }
+
   public void testAYTFUS() {
     AsYouTypeFormatter formatter = phoneUtil.getAsYouTypeFormatter(RegionCode.US);
     assertEquals("6", formatter.inputDigit('6'));
@@ -753,7 +782,7 @@
   }
 
   public void testAYTFLongIDD_AU() {
-    AsYouTypeFormatter formatter = phoneUtil.getAsYouTypeFormatter("AU");
+    AsYouTypeFormatter formatter = phoneUtil.getAsYouTypeFormatter(RegionCode.AU);
     // 0011 1 650 253 2250
     assertEquals("0", formatter.inputDigit('0'));
     assertEquals("00", formatter.inputDigit('0'));
@@ -810,7 +839,7 @@
   }
 
   public void testAYTFLongIDD_KR() {
-    AsYouTypeFormatter formatter = phoneUtil.getAsYouTypeFormatter("KR");
+    AsYouTypeFormatter formatter = phoneUtil.getAsYouTypeFormatter(RegionCode.KR);
     // 00300 1 650 253 2222
     assertEquals("0", formatter.inputDigit('0'));
     assertEquals("00", formatter.inputDigit('0'));
@@ -831,7 +860,7 @@
   }
 
   public void testAYTFLongNDD_KR() {
-    AsYouTypeFormatter formatter = phoneUtil.getAsYouTypeFormatter("KR");
+    AsYouTypeFormatter formatter = phoneUtil.getAsYouTypeFormatter(RegionCode.KR);
     // 08811-9876-7890
     assertEquals("0", formatter.inputDigit('0'));
     assertEquals("08", formatter.inputDigit('8'));
@@ -867,7 +896,7 @@
   }
 
   public void testAYTFLongNDD_SG() {
-    AsYouTypeFormatter formatter = phoneUtil.getAsYouTypeFormatter("SG");
+    AsYouTypeFormatter formatter = phoneUtil.getAsYouTypeFormatter(RegionCode.SG);
     // 777777 9876 7890
     assertEquals("7", formatter.inputDigit('7'));
     assertEquals("77", formatter.inputDigit('7'));
@@ -884,4 +913,194 @@
     assertEquals("777777 9876 789", formatter.inputDigit('9'));
     assertEquals("777777 9876 7890", formatter.inputDigit('0'));
   }
+
+  public void testAYTFShortNumberFormattingFix_AU() {
+    // For Australia, the national prefix is not optional when formatting.
+    AsYouTypeFormatter formatter = phoneUtil.getAsYouTypeFormatter(RegionCode.AU);
+
+    // 1234567890 - For leading digit 1, the national prefix formatting rule has first group only.
+    assertEquals("1", formatter.inputDigit('1'));
+    assertEquals("12", formatter.inputDigit('2'));
+    assertEquals("123", formatter.inputDigit('3'));
+    assertEquals("1234", formatter.inputDigit('4'));
+    assertEquals("1234 5", formatter.inputDigit('5'));
+    assertEquals("1234 56", formatter.inputDigit('6'));
+    assertEquals("1234 567", formatter.inputDigit('7'));
+    assertEquals("1234 567 8", formatter.inputDigit('8'));
+    assertEquals("1234 567 89", formatter.inputDigit('9'));
+    assertEquals("1234 567 890", formatter.inputDigit('0'));
+
+    // +61 1234 567 890 - Test the same number, but with the country code.
+    formatter.clear();
+    assertEquals("+", formatter.inputDigit('+'));
+    assertEquals("+6", formatter.inputDigit('6'));
+    assertEquals("+61 ", formatter.inputDigit('1'));
+    assertEquals("+61 1", formatter.inputDigit('1'));
+    assertEquals("+61 12", formatter.inputDigit('2'));
+    assertEquals("+61 123", formatter.inputDigit('3'));
+    assertEquals("+61 1234", formatter.inputDigit('4'));
+    assertEquals("+61 1234 5", formatter.inputDigit('5'));
+    assertEquals("+61 1234 56", formatter.inputDigit('6'));
+    assertEquals("+61 1234 567", formatter.inputDigit('7'));
+    assertEquals("+61 1234 567 8", formatter.inputDigit('8'));
+    assertEquals("+61 1234 567 89", formatter.inputDigit('9'));
+    assertEquals("+61 1234 567 890", formatter.inputDigit('0'));
+
+    // 212345678 - For leading digit 2, the national prefix formatting rule puts the national prefix
+    // before the first group.
+    formatter.clear();
+    assertEquals("0", formatter.inputDigit('0'));
+    assertEquals("02", formatter.inputDigit('2'));
+    assertEquals("021", formatter.inputDigit('1'));
+    assertEquals("02 12", formatter.inputDigit('2'));
+    assertEquals("02 123", formatter.inputDigit('3'));
+    assertEquals("02 1234", formatter.inputDigit('4'));
+    assertEquals("02 1234 5", formatter.inputDigit('5'));
+    assertEquals("02 1234 56", formatter.inputDigit('6'));
+    assertEquals("02 1234 567", formatter.inputDigit('7'));
+    assertEquals("02 1234 5678", formatter.inputDigit('8'));
+
+    // 212345678 - Test the same number, but without the leading 0.
+    formatter.clear();
+    assertEquals("2", formatter.inputDigit('2'));
+    assertEquals("21", formatter.inputDigit('1'));
+    assertEquals("212", formatter.inputDigit('2'));
+    assertEquals("2123", formatter.inputDigit('3'));
+    assertEquals("21234", formatter.inputDigit('4'));
+    assertEquals("212345", formatter.inputDigit('5'));
+    assertEquals("2123456", formatter.inputDigit('6'));
+    assertEquals("21234567", formatter.inputDigit('7'));
+    assertEquals("212345678", formatter.inputDigit('8'));
+
+    // +61 2 1234 5678 - Test the same number, but with the country code.
+    formatter.clear();
+    assertEquals("+", formatter.inputDigit('+'));
+    assertEquals("+6", formatter.inputDigit('6'));
+    assertEquals("+61 ", formatter.inputDigit('1'));
+    assertEquals("+61 2", formatter.inputDigit('2'));
+    assertEquals("+61 21", formatter.inputDigit('1'));
+    assertEquals("+61 2 12", formatter.inputDigit('2'));
+    assertEquals("+61 2 123", formatter.inputDigit('3'));
+    assertEquals("+61 2 1234", formatter.inputDigit('4'));
+    assertEquals("+61 2 1234 5", formatter.inputDigit('5'));
+    assertEquals("+61 2 1234 56", formatter.inputDigit('6'));
+    assertEquals("+61 2 1234 567", formatter.inputDigit('7'));
+    assertEquals("+61 2 1234 5678", formatter.inputDigit('8'));
+  }
+
+  public void testAYTFShortNumberFormattingFix_KR() {
+    // For Korea, the national prefix is not optional when formatting, and the national prefix
+    // formatting rule doesn't consist of only the first group.
+    AsYouTypeFormatter formatter = phoneUtil.getAsYouTypeFormatter(RegionCode.KR);
+
+    // 111
+    assertEquals("1", formatter.inputDigit('1'));
+    assertEquals("11", formatter.inputDigit('1'));
+    assertEquals("111", formatter.inputDigit('1'));
+
+    // 114
+    formatter.clear();
+    assertEquals("1", formatter.inputDigit('1'));
+    assertEquals("11", formatter.inputDigit('1'));
+    assertEquals("114", formatter.inputDigit('4'));
+
+    // 13121234 - Test a mobile number without the national prefix. Even though it is not an
+    // emergency number, it should be formatted as a block.
+    formatter.clear();
+    assertEquals("1", formatter.inputDigit('1'));
+    assertEquals("13", formatter.inputDigit('3'));
+    assertEquals("131", formatter.inputDigit('1'));
+    assertEquals("1312", formatter.inputDigit('2'));
+    assertEquals("13121", formatter.inputDigit('1'));
+    assertEquals("131212", formatter.inputDigit('2'));
+    assertEquals("1312123", formatter.inputDigit('3'));
+    assertEquals("13121234", formatter.inputDigit('4'));
+
+    // +82 131-2-1234 - Test the same number, but with the country code.
+    formatter.clear();
+    assertEquals("+", formatter.inputDigit('+'));
+    assertEquals("+8", formatter.inputDigit('8'));
+    assertEquals("+82 ", formatter.inputDigit('2'));
+    assertEquals("+82 1", formatter.inputDigit('1'));
+    assertEquals("+82 13", formatter.inputDigit('3'));
+    assertEquals("+82 131", formatter.inputDigit('1'));
+    assertEquals("+82 131-2", formatter.inputDigit('2'));
+    assertEquals("+82 131-2-1", formatter.inputDigit('1'));
+    assertEquals("+82 131-2-12", formatter.inputDigit('2'));
+    assertEquals("+82 131-2-123", formatter.inputDigit('3'));
+    assertEquals("+82 131-2-1234", formatter.inputDigit('4'));
+  }
+
+  public void testAYTFShortNumberFormattingFix_MX() {
+    // For Mexico, the national prefix is optional when formatting.
+    AsYouTypeFormatter formatter = phoneUtil.getAsYouTypeFormatter(RegionCode.MX);
+
+    // 911
+    assertEquals("9", formatter.inputDigit('9'));
+    assertEquals("91", formatter.inputDigit('1'));
+    assertEquals("911", formatter.inputDigit('1'));
+
+    // 800 123 4567 - Test a toll-free number, which should have a formatting rule applied to it
+    // even though it doesn't begin with the national prefix.
+    formatter.clear();
+    assertEquals("8", formatter.inputDigit('8'));
+    assertEquals("80", formatter.inputDigit('0'));
+    assertEquals("800", formatter.inputDigit('0'));
+    assertEquals("800 1", formatter.inputDigit('1'));
+    assertEquals("800 12", formatter.inputDigit('2'));
+    assertEquals("800 123", formatter.inputDigit('3'));
+    assertEquals("800 123 4", formatter.inputDigit('4'));
+    assertEquals("800 123 45", formatter.inputDigit('5'));
+    assertEquals("800 123 456", formatter.inputDigit('6'));
+    assertEquals("800 123 4567", formatter.inputDigit('7'));
+
+    // +52 800 123 4567 - Test the same number, but with the country code.
+    formatter.clear();
+    assertEquals("+", formatter.inputDigit('+'));
+    assertEquals("+5", formatter.inputDigit('5'));
+    assertEquals("+52 ", formatter.inputDigit('2'));
+    assertEquals("+52 8", formatter.inputDigit('8'));
+    assertEquals("+52 80", formatter.inputDigit('0'));
+    assertEquals("+52 800", formatter.inputDigit('0'));
+    assertEquals("+52 800 1", formatter.inputDigit('1'));
+    assertEquals("+52 800 12", formatter.inputDigit('2'));
+    assertEquals("+52 800 123", formatter.inputDigit('3'));
+    assertEquals("+52 800 123 4", formatter.inputDigit('4'));
+    assertEquals("+52 800 123 45", formatter.inputDigit('5'));
+    assertEquals("+52 800 123 456", formatter.inputDigit('6'));
+    assertEquals("+52 800 123 4567", formatter.inputDigit('7'));
+  }
+
+  public void testAYTFNoNationalPrefix() {
+    AsYouTypeFormatter formatter = phoneUtil.getAsYouTypeFormatter(RegionCode.IT);
+
+    assertEquals("3", formatter.inputDigit('3'));
+    assertEquals("33", formatter.inputDigit('3'));
+    assertEquals("333", formatter.inputDigit('3'));
+    assertEquals("333 3", formatter.inputDigit('3'));
+    assertEquals("333 33", formatter.inputDigit('3'));
+    assertEquals("333 333", formatter.inputDigit('3'));
+  }
+
+  public void testAYTFShortNumberFormattingFix_US() {
+    // For the US, an initial 1 is treated specially.
+    AsYouTypeFormatter formatter = phoneUtil.getAsYouTypeFormatter(RegionCode.US);
+
+    // 101 - Test that the initial 1 is not treated as a national prefix.
+    assertEquals("1", formatter.inputDigit('1'));
+    assertEquals("10", formatter.inputDigit('0'));
+    assertEquals("101", formatter.inputDigit('1'));
+
+    // 112 - Test that the initial 1 is not treated as a national prefix.
+    formatter.clear();
+    assertEquals("1", formatter.inputDigit('1'));
+    assertEquals("11", formatter.inputDigit('1'));
+    assertEquals("112", formatter.inputDigit('2'));
+
+    // 122 - Test that the initial 1 is treated as a national prefix.
+    formatter.clear();
+    assertEquals("1", formatter.inputDigit('1'));
+    assertEquals("12", formatter.inputDigit('2'));
+    assertEquals("1 22", formatter.inputDigit('2'));
+  }
 }
diff --git a/java/test/com/android/i18n/phonenumbers/CountryCodeToRegionCodeMapForTesting.java b/java/test/com/android/i18n/phonenumbers/CountryCodeToRegionCodeMapForTesting.java
index 8f64e42..ada7c82 100644
--- a/java/test/com/android/i18n/phonenumbers/CountryCodeToRegionCodeMapForTesting.java
+++ b/java/test/com/android/i18n/phonenumbers/CountryCodeToRegionCodeMapForTesting.java
@@ -31,10 +31,10 @@
   // countries sharing a calling code, such as the NANPA countries, the one
   // indicated with "isMainCountryForCode" in the metadata should be first.
   static Map<Integer, List<String>> getCountryCodeToRegionCodeMap() {
-    // The capacity is set to 24 as there are 18 different country codes,
+    // The capacity is set to 25 as there are 19 different country codes,
     // and this offers a load factor of roughly 0.75.
     Map<Integer, List<String>> countryCodeToRegionCodeMap =
-        new HashMap<Integer, List<String>>(24);
+        new HashMap<Integer, List<String>>(25);
 
     ArrayList<String> listWithRegionCode;
 
@@ -101,6 +101,10 @@
     countryCodeToRegionCodeMap.put(262, listWithRegionCode);
 
     listWithRegionCode = new ArrayList<String>(1);
+    listWithRegionCode.add("BY");
+    countryCodeToRegionCodeMap.put(375, listWithRegionCode);
+
+    listWithRegionCode = new ArrayList<String>(1);
     listWithRegionCode.add("AD");
     countryCodeToRegionCodeMap.put(376, listWithRegionCode);
 
diff --git a/java/test/com/android/i18n/phonenumbers/PhoneNumberUtilTest.java b/java/test/com/android/i18n/phonenumbers/PhoneNumberUtilTest.java
index 8c3e57f..430a4c0 100644
--- a/java/test/com/android/i18n/phonenumbers/PhoneNumberUtilTest.java
+++ b/java/test/com/android/i18n/phonenumbers/PhoneNumberUtilTest.java
@@ -37,6 +37,8 @@
  */
 public class PhoneNumberUtilTest extends TestMetadataTestCase {
   // Set up some test numbers to re-use.
+  // TODO: Rewrite this as static functions that return new numbers each time to avoid
+  // any risk of accidental changes to mutable static state affecting many tests.
   private static final PhoneNumber ALPHA_NUMERIC_NUMBER =
       new PhoneNumber().setCountryCode(1).setNationalNumber(80074935247L);
   private static final PhoneNumber AR_MOBILE =
@@ -106,11 +108,37 @@
       new PhoneNumber().setCountryCode(800).setNationalNumber(123456789L);
   private static final PhoneNumber UNIVERSAL_PREMIUM_RATE =
       new PhoneNumber().setCountryCode(979).setNationalNumber(123456789L);
+  private static final PhoneNumber UNKNOWN_COUNTRY_CODE_NO_RAW_INPUT =
+      new PhoneNumber().setCountryCode(2).setNationalNumber(12345L);
 
   public void testGetSupportedRegions() {
     assertTrue(phoneUtil.getSupportedRegions().size() > 0);
   }
 
+  public void testGetInstanceLoadBadMetadata() {
+    assertNull(phoneUtil.getMetadataForRegion("No Such Region"));
+    assertNull(phoneUtil.getMetadataForNonGeographicalRegion(-1));
+  }
+
+  public void testMissingMetadataFileThrowsRuntimeException() {
+    // In normal usage we should never get a state where we are asking to load metadata that doesn't
+    // exist. However if the library is packaged incorrectly in the jar, this could happen and the
+    // best we can do is make sure the exception has the file name in it.
+    try {
+      phoneUtil.loadMetadataFromFile("no/such/file", "XX", -1);
+      fail("expected exception");
+    } catch (RuntimeException e) {
+      assertTrue("Unexpected error: " + e, e.toString().contains("no/such/file_XX"));
+    }
+    try {
+      phoneUtil.loadMetadataFromFile(
+          "no/such/file", PhoneNumberUtil.REGION_CODE_FOR_NON_GEO_ENTITY, 123);
+      fail("expected exception");
+    } catch (RuntimeException e) {
+      assertTrue("Unexpected error: " + e, e.getMessage().contains("no/such/file_123"));
+    }
+  }
+
   public void testGetInstanceLoadUSMetadata() {
     PhoneMetadata metadata = phoneUtil.getMetadataForRegion(RegionCode.US);
     assertEquals("US", metadata.getId());
@@ -178,10 +206,18 @@
     assertEquals("12345678", metadata.getTollFree().getExampleNumber());
   }
 
+  public void testIsNumberGeographical() {
+    assertFalse(phoneUtil.isNumberGeographical(BS_MOBILE));  // Bahamas, mobile phone number.
+    assertTrue(phoneUtil.isNumberGeographical(AU_NUMBER));  // Australian fixed line number.
+    assertFalse(phoneUtil.isNumberGeographical(INTERNATIONAL_TOLL_FREE));  // International toll
+                                                                           // free number.
+  }
+
   public void testIsLeadingZeroPossible() {
     assertTrue(phoneUtil.isLeadingZeroPossible(39));  // Italy
     assertFalse(phoneUtil.isLeadingZeroPossible(1));  // USA
-    assertFalse(phoneUtil.isLeadingZeroPossible(800));  // International toll free numbers
+    assertTrue(phoneUtil.isLeadingZeroPossible(800));  // International toll free
+    assertFalse(phoneUtil.isLeadingZeroPossible(979));  // International premium-rate
     assertFalse(phoneUtil.isLeadingZeroPossible(888));  // Not in metadata file, just default to
                                                         // false.
   }
@@ -615,6 +651,10 @@
     assertEquals("+5492234654321", phoneUtil.format(arMobile, PhoneNumberFormat.E164));
     // We don't support this for the US so there should be no change.
     assertEquals("650 253 0000", phoneUtil.formatNationalNumberWithCarrierCode(US_NUMBER, "15"));
+
+    // Invalid country code should just get the NSN.
+    assertEquals("12345",
+        phoneUtil.formatNationalNumberWithCarrierCode(UNKNOWN_COUNTRY_CODE_NO_RAW_INPUT, "89"));
   }
 
   public void testFormatWithPreferredCarrierCode() {
@@ -880,6 +920,10 @@
     assertEquals("*1234", phoneUtil.formatInOriginalFormat(starNumber, RegionCode.JP));
     PhoneNumber numberWithoutStar = phoneUtil.parseAndKeepRawInput("1234", RegionCode.JP);
     assertEquals("1234", phoneUtil.formatInOriginalFormat(numberWithoutStar, RegionCode.JP));
+
+    // Test an invalid national number without raw input is just formatted as the national number.
+    assertEquals("650253000",
+        phoneUtil.formatInOriginalFormat(US_SHORT_BY_ONE_NUMBER, RegionCode.US));
   }
 
   public void testIsPremiumRate() {
@@ -1088,6 +1132,17 @@
     assertEquals(RegionCode.UN001, phoneUtil.getRegionCodeForNumber(UNIVERSAL_PREMIUM_RATE));
   }
 
+  public void testGetRegionCodesForCountryCode() {
+    List<String> regionCodesForNANPA = phoneUtil.getRegionCodesForCountryCode(1);
+    assertTrue(regionCodesForNANPA.contains(RegionCode.US));
+    assertTrue(regionCodesForNANPA.contains(RegionCode.BS));
+    assertTrue(phoneUtil.getRegionCodesForCountryCode(44).contains(RegionCode.GB));
+    assertTrue(phoneUtil.getRegionCodesForCountryCode(49).contains(RegionCode.DE));
+    assertTrue(phoneUtil.getRegionCodesForCountryCode(800).contains(RegionCode.UN001));
+    // Test with invalid country calling code.
+    assertTrue(phoneUtil.getRegionCodesForCountryCode(-1).isEmpty());
+  }
+
   public void testGetCountryCodeForRegion() {
     assertEquals(1, phoneUtil.getCountryCodeForRegion(RegionCode.US));
     assertEquals(64, phoneUtil.getCountryCodeForRegion(RegionCode.NZ));
@@ -2165,10 +2220,13 @@
                  phoneUtil.formatOutOfCountryCallingNumber(US_NUMBER, RegionCode.AD));
   }
 
-  public void testUnknownCountryCallingCodeForValidation() {
-    PhoneNumber invalidNumber = new PhoneNumber();
-    invalidNumber.setCountryCode(0).setNationalNumber(1234L);
-    assertFalse(phoneUtil.isValidNumber(invalidNumber));
+  public void testUnknownCountryCallingCode() {
+    assertFalse(phoneUtil.isValidNumber(UNKNOWN_COUNTRY_CODE_NO_RAW_INPUT));
+    // It's not very well defined as to what the E164 representation for a number with an invalid
+    // country calling code is, but just prefixing the country code and national number is about
+    // the best we can do.
+    assertEquals("+212345",
+        phoneUtil.format(UNKNOWN_COUNTRY_CODE_NO_RAW_INPUT, PhoneNumberFormat.E164));
   }
 
   public void testIsNumberMatchMatches() throws Exception {
diff --git a/java/test/com/android/i18n/phonenumbers/RegionCode.java b/java/test/com/android/i18n/phonenumbers/RegionCode.java
index fc92b18..89b6817 100644
--- a/java/test/com/android/i18n/phonenumbers/RegionCode.java
+++ b/java/test/com/android/i18n/phonenumbers/RegionCode.java
@@ -29,6 +29,7 @@
   static final String AU = "AU";
   static final String BR = "BR";
   static final String BS = "BS";
+  static final String BY = "BY";
   static final String CA = "CA";
   static final String CN = "CN";
   static final String CS = "CS";
diff --git a/java/test/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_800 b/java/test/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_800
index e958189..6a88bff 100644
--- a/java/test/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_800
+++ b/java/test/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_800
Binary files differ
diff --git a/java/test/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_AR b/java/test/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_AR
index d576581..c65e3dc 100644
--- a/java/test/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_AR
+++ b/java/test/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_AR
Binary files differ
diff --git a/java/test/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_BY b/java/test/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_BY
new file mode 100644
index 0000000..467bebe
--- /dev/null
+++ b/java/test/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_BY
Binary files differ
diff --git a/java/test/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_MX b/java/test/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_MX
index 5fc1c36..cab73c8 100644
--- a/java/test/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_MX
+++ b/java/test/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_MX
Binary files differ
diff --git a/java/test/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_US b/java/test/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_US
index f819275..d587fbd 100644
--- a/java/test/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_US
+++ b/java/test/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_US
Binary files differ