Merge tag android-5.1.0_r1 into AOSP_5.1_MERGE

Change-Id: Iabd5d9f472e0336bff5f6065a40429ebd7e98721
diff --git a/README.android b/README.android
index 4eb0e38..5ce579a 100644
--- a/README.android
+++ b/README.android
@@ -1,5 +1,5 @@
 URL: http://code.google.com/p/libphonenumber/
-Version: 6.1 (r658)
+Version: 6.2 (r678)
 License: Apache 2
 Description: Google Phone Number Library.
 Local Modification:
diff --git a/java/release_notes.txt b/java/release_notes.txt
index 19c7388..52a880f 100644
--- a/java/release_notes.txt
+++ b/java/release_notes.txt
@@ -1,3 +1,33 @@
+Jun 30, 2014: libphonenumber-6.2
+* Code changes:
+ - Better exclusion of dates when matching phone numbers from text.
+ - Handle phone input in RFC3966 with missing tel: prefix
+
+* Metadata changes:
+ - New alternate formatting data for country calling code(s): 95
+ - Updated phone metadata for region code(s):
+   AF, CN, EH, FJ, IN, JP, KE, KG, KW, MA, MM, PG, PK, SN, SO
+ - New short number metadata for region code(s): SN
+ - Updated short number metadata for region code(s): FR, KE
+ - Updated geocoding data for country calling code(s): 254 (en)
+ - New carrier data for country calling code(s): 95 (en)
+ - Updated carrier data for country calling code(s):
+   92 (en), 93 (en), 212 (en), 221 (en), 254 (en), 675 (en), 679 (en), 965 (en),
+   996 (en)
+
+Jun 06, 2014: libphonenumber-6.1.1
+* Metadata changes:
+ - Updated phone metadata for region code(s):
+   AF, AG, AI, AS, BB, BF, BM, BS, CA, CN, CR, DM, DO, DZ, FR, GD, GU, IN, JM,
+   KH, KN, KW, KY, LC, MN, MP, MS, NG, NI, PH, PR, SX, TC, TT, US, VC, VG, VI
+ - Updated short number metadata for region code(s): AL
+ - New geocoding data for country calling code(s): 1346 (en), 1959 (en)
+ - Updated geocoding data for country calling code(s):
+   33 (en, fr), 352 (de, en, fr), 355 (en)
+ - New carrier data for country calling code(s): 505 (en)
+ - Updated carrier data for country calling code(s):
+   63 (en), 91 (en), 93 (en), 234 (en)
+
 May 08, 2014: libphonenumber-6.1
 * Code changes:
  - Adding MetadataLoader support to allow custom metadata loading from
diff --git a/java/src/com/android/i18n/phonenumbers/AlternateFormatsCountryCodeSet.java b/java/src/com/android/i18n/phonenumbers/AlternateFormatsCountryCodeSet.java
index ada3134..860a0f7 100644
--- a/java/src/com/android/i18n/phonenumbers/AlternateFormatsCountryCodeSet.java
+++ b/java/src/com/android/i18n/phonenumbers/AlternateFormatsCountryCodeSet.java
@@ -26,9 +26,9 @@
 public class AlternateFormatsCountryCodeSet {
   // A set of all country codes for which data is available.
   static Set<Integer> getCountryCodeSet() {
-    // The capacity is set to 52 as there are 39 different entries,
+    // The capacity is set to 53 as there are 40 different entries,
     // and this offers a load factor of roughly 0.75.
-    Set<Integer> countryCodeSet = new HashSet<Integer>(52);
+    Set<Integer> countryCodeSet = new HashSet<Integer>(53);
 
     countryCodeSet.add(7);
     countryCodeSet.add(27);
@@ -49,6 +49,7 @@
     countryCodeSet.add(84);
     countryCodeSet.add(90);
     countryCodeSet.add(94);
+    countryCodeSet.add(95);
     countryCodeSet.add(255);
     countryCodeSet.add(350);
     countryCodeSet.add(351);
diff --git a/java/src/com/android/i18n/phonenumbers/AsYouTypeFormatter.java b/java/src/com/android/i18n/phonenumbers/AsYouTypeFormatter.java
index 790e66b..7e55e02 100644
--- a/java/src/com/android/i18n/phonenumbers/AsYouTypeFormatter.java
+++ b/java/src/com/android/i18n/phonenumbers/AsYouTypeFormatter.java
@@ -181,7 +181,8 @@
     for (NumberFormat format : formatList) {
       if (!nationalPrefixIsUsedByCountry || isCompleteNumber ||
           format.isNationalPrefixOptionalWhenFormatting() ||
-          phoneUtil.formattingRuleHasFirstGroupOnly(format.getNationalPrefixFormattingRule())) {
+          PhoneNumberUtil.formattingRuleHasFirstGroupOnly(
+              format.getNationalPrefixFormattingRule())) {
         if (isFormatEligible(format.getFormat())) {
           possibleFormats.add(format);
         }
diff --git a/java/src/com/android/i18n/phonenumbers/PhoneNumberMatcher.java b/java/src/com/android/i18n/phonenumbers/PhoneNumberMatcher.java
index 149e863..868f7d4 100644
--- a/java/src/com/android/i18n/phonenumbers/PhoneNumberMatcher.java
+++ b/java/src/com/android/i18n/phonenumbers/PhoneNumberMatcher.java
@@ -78,7 +78,7 @@
    * trailing ":\d\d" -- that is covered by TIME_STAMPS_SUFFIX.
    */
   private static final Pattern TIME_STAMPS =
-      Pattern.compile("[12]\\d{3}[-/]?[01]\\d[-/]?[0-3]\\d [0-2]\\d$");
+      Pattern.compile("[12]\\d{3}[-/]?[01]\\d[-/]?[0-3]\\d +[0-2]\\d$");
   private static final Pattern TIME_STAMPS_SUFFIX = Pattern.compile(":[0-5]\\d");
 
   /**
diff --git a/java/src/com/android/i18n/phonenumbers/PhoneNumberUtil.java b/java/src/com/android/i18n/phonenumbers/PhoneNumberUtil.java
index bd36708..48a61fa 100644
--- a/java/src/com/android/i18n/phonenumbers/PhoneNumberUtil.java
+++ b/java/src/com/android/i18n/phonenumbers/PhoneNumberUtil.java
@@ -539,8 +539,8 @@
   private final Map<Integer, List<String>> countryCallingCodeToRegionCodeMap;
 
   // The set of regions that share country calling code 1.
-  // There are roughly 26 regions and we set the initial capacity of the HashSet to 35 to offer a
-  // load factor of roughly 0.75.
+  // There are roughly 26 regions.
+  // We set the initial capacity of the HashSet to 35 to offer a load factor of roughly 0.75.
   private final Set<String> nanpaRegions = new HashSet<String>(35);
 
   // A mapping from a region code to the PhoneMetadata for that region.
@@ -577,7 +577,7 @@
   private final MetadataLoader metadataLoader;
 
   /**
-   * This class implements a singleton, so the only constructor is private.
+   * This class implements a singleton, the constructor is only visible to facilitate testing.
    */
   // @VisibleForTesting
   PhoneNumberUtil(String filePrefix, MetadataLoader metadataLoader,
@@ -803,11 +803,11 @@
   }
 
   /**
-   * Gets the length of the geographical area code from the {@code nationalNumber_} field of the
-   * PhoneNumber object passed in, so that clients could use it to split a national significant
-   * number into geographical area code and subscriber number. It works in such a way that the
-   * resultant subscriber number should be diallable, at least on some devices. An example of how
-   * this could be used:
+   * Gets the length of the geographical area code from the
+   * PhoneNumber object passed in, so that clients could use it
+   * to split a national significant number into geographical area code and subscriber number. It
+   * works in such a way that the resultant subscriber number should be diallable, at least on some
+   * devices. An example of how this could be used:
    *
    * <pre>
    * PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
@@ -838,9 +838,10 @@
    *    entities
    *  <li> some geographical numbers have no area codes.
    * </ul>
-   * @param number  the PhoneNumber object for which clients want to know the length of the area
-   *     code.
-   * @return  the length of area code of the PhoneNumber object passed in.
+   * @param number  the PhoneNumber object for which clients
+   *     want to know the length of the area code.
+   * @return  the length of area code of the PhoneNumber object
+   *     passed in.
    */
   public int getLengthOfGeographicalAreaCode(PhoneNumber number) {
     PhoneMetadata metadata = getMetadataForRegion(getRegionCodeForNumber(number));
@@ -861,11 +862,12 @@
   }
 
   /**
-   * Gets the length of the national destination code (NDC) from the PhoneNumber object passed in,
-   * so that clients could use it to split a national significant number into NDC and subscriber
-   * number. The NDC of a phone number is normally the first group of digit(s) right after the
-   * country calling code when the number is formatted in the international format, if there is a
-   * subscriber number part that follows. An example of how this could be used:
+   * Gets the length of the national destination code (NDC) from the
+   * PhoneNumber object passed in, so that clients could use it
+   * to split a national significant number into NDC and subscriber number. The NDC of a phone
+   * number is normally the first group of digit(s) right after the country calling code when the
+   * number is formatted in the international format, if there is a subscriber number part that
+   * follows. An example of how this could be used:
    *
    * <pre>
    * PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
@@ -888,8 +890,10 @@
    * Refer to the unittests to see the difference between this function and
    * {@link #getLengthOfGeographicalAreaCode}.
    *
-   * @param number  the PhoneNumber object for which clients want to know the length of the NDC.
-   * @return  the length of NDC of the PhoneNumber object passed in.
+   * @param number  the PhoneNumber object for which clients
+   *     want to know the length of the NDC.
+   * @return  the length of NDC of the PhoneNumber object
+   *     passed in.
    */
   public int getLengthOfNationalDestinationCode(PhoneNumber number) {
     PhoneNumber copiedProto;
@@ -1047,6 +1051,11 @@
    * 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.
+   *
+   * A similar method is implemented as PhoneNumberOfflineGeocoder.canBeGeocoded, which performs a
+   * looser check, since it only prevents cases where prefixes overlap for geocodable and
+   * non-geocodable numbers. Also, if new phone number types were added, we should check if this
+   * other method should be updated too.
    */
   boolean isNumberGeographical(PhoneNumber phoneNumber) {
     PhoneNumberType numberType = getNumberType(phoneNumber);
@@ -1111,6 +1120,7 @@
     formattedNumber.setLength(0);
     int countryCallingCode = number.getCountryCode();
     String nationalSignificantNumber = getNationalSignificantNumber(number);
+
     if (numberFormat == PhoneNumberFormat.E164) {
       // 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.
@@ -1337,7 +1347,8 @@
             // CL fixed line numbers need the national prefix when dialing in the national format,
             // but don't have it when used for display. The reverse is true for mobile numbers.
             // As a result, we output them in the international format to make it work.
-            ((regionCode.equals("MX") || regionCode.equals("CL")) && isFixedLineOrMobile)) &&
+            ((regionCode.equals("MX") || regionCode.equals("CL")) &&
+             isFixedLineOrMobile)) &&
             canBeInternationallyDialled(numberNoExt)) {
           formattedNumber = format(numberNoExt, PhoneNumberFormat.INTERNATIONAL);
         } else {
@@ -1508,7 +1519,8 @@
         }
         // 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.
+        // TODO: Refactor the code below with the code in
+        // isNationalPrefixPresentIfRequired.
         String candidateNationalPrefixRule = formatRule.getNationalPrefixFormattingRule();
         // We assume that the first-group symbol will never be _before_ the national prefix.
         int indexOfFirstGroup = candidateNationalPrefixRule.indexOf("$1");
@@ -2731,7 +2743,7 @@
   private boolean checkRegionForParsing(String numberToParse, String defaultRegion) {
     if (!isValidRegionCode(defaultRegion)) {
       // If the number is null or empty, we can't infer the region.
-      if (numberToParse == null || numberToParse.length() == 0 ||
+      if ((numberToParse == null) || (numberToParse.length() == 0) ||
           !PLUS_CHARS_PATTERN.matcher(numberToParse).lookingAt()) {
         return false;
       }
@@ -3009,9 +3021,13 @@
       }
 
       // Now append everything between the "tel:" prefix and the phone-context. This should include
-      // the national number, an optional extension or isdn-subaddress component.
-      nationalNumber.append(numberToParse.substring(
-          numberToParse.indexOf(RFC3966_PREFIX) + RFC3966_PREFIX.length(), indexOfPhoneContext));
+      // the national number, an optional extension or isdn-subaddress component. Note we also
+      // handle the case when "tel:" is missing, as we have seen in some of the phone number inputs.
+      // In that case, we append everything from the beginning.
+      int indexOfRfc3966Prefix = numberToParse.indexOf(RFC3966_PREFIX);
+      int indexOfNationalNumber = (indexOfRfc3966Prefix >= 0) ?
+          indexOfRfc3966Prefix + RFC3966_PREFIX.length() : 0;
+      nationalNumber.append(numberToParse.substring(indexOfNationalNumber, indexOfPhoneContext));
     } else {
       // Extract a possible number from the string passed in (this strips leading characters that
       // could not be the start of a phone number.)
@@ -3204,7 +3220,7 @@
   /**
    * Returns true if the number can be dialled from outside the region, or unknown. If the number
    * can only be dialled from within the region, returns false. Does not check the number is a valid
-   * number.
+   * number. Note that, at the moment, this method does not handle short numbers.
    * TODO: Make this method public when we have enough metadata to make it worthwhile.
    *
    * @param number  the phone-number for which we want to know whether it is diallable from
diff --git a/java/src/com/android/i18n/phonenumbers/ShortNumbersRegionCodeSet.java b/java/src/com/android/i18n/phonenumbers/ShortNumbersRegionCodeSet.java
index 1fa6aba..dbd5e5c 100644
--- a/java/src/com/android/i18n/phonenumbers/ShortNumbersRegionCodeSet.java
+++ b/java/src/com/android/i18n/phonenumbers/ShortNumbersRegionCodeSet.java
@@ -26,9 +26,9 @@
 public class ShortNumbersRegionCodeSet {
   // A set of all region codes for which data is available.
   static Set<String> getRegionCodeSet() {
-    // The capacity is set to 308 as there are 231 different entries,
+    // The capacity is set to 309 as there are 232 different entries,
     // and this offers a load factor of roughly 0.75.
-    Set<String> regionCodeSet = new HashSet<String>(308);
+    Set<String> regionCodeSet = new HashSet<String>(309);
 
     regionCodeSet.add("AC");
     regionCodeSet.add("AD");
@@ -222,6 +222,7 @@
     regionCodeSet.add("SK");
     regionCodeSet.add("SL");
     regionCodeSet.add("SM");
+    regionCodeSet.add("SN");
     regionCodeSet.add("SR");
     regionCodeSet.add("ST");
     regionCodeSet.add("SV");
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AF b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AF
index 4d27ff9..d80c596 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AF
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AF
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AG b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AG
index af2902f..6140377 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AG
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AG
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AI b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AI
index cfefc77..61bd022 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AI
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AI
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AS b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AS
index 092dc5a..f2a61e9 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AS
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AS
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BB b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BB
index 34450f1..8c45b2b 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BB
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BB
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 3bee242..2311f57 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_BM b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BM
index cf7481d..0bef470 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BM
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BM
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BS b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BS
index fadbeae..f385d53 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BS
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BS
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CA b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CA
index 346373d..4af9017 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CA
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CA
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 576f2ce..ed06d7c 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_CR b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CR
index 000c160..e8723bf 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CR
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CR
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DM b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DM
index 590614d..459a0f2 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DM
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DM
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DO b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DO
index 603b725..8a4dace 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DO
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DO
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 e76128c..9cbaa30 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_EH b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_EH
index ef10316..f9a97fa 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_EH
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_EH
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_FJ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_FJ
index 9de5002..fe9f621 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_FJ
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_FJ
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_FR b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_FR
index 4548f4b..80e45dd 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_FR
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_FR
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GD b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GD
index b1efd3e..9849e74 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GD
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GD
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GU b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GU
index a034f5d..78a606d 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GU
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GU
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 3a375c7..a575540 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_JM b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_JM
index d807877..17200e0 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_JM
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_JM
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 ddfad7b..e3b61f1 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_KE b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KE
index 609af42..082efc7 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KE
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KE
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KG b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KG
index dcf1824..08b0175 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KG
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KG
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 46dab59..80a41a1 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_KN b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KN
index 4f224bd..e185e76 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KN
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KN
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 ac7b1e2..19da153 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_KY b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KY
index 98a27ca..720d62c 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KY
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KY
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_LC b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_LC
index dd9f1ca..b36be6b 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_LC
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_LC
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 7773dfe..333d087 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_MM b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MM
index c291677..c2cbbdf 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MM
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MM
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MN b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MN
index ae009dc..0a931c9 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MN
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MN
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MP b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MP
index 31a0ce9..e0cbcf9 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MP
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MP
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MS b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MS
index 6eb1cd2..9cc9763 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MS
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MS
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 8adf3bf..384af71 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_NI b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NI
index 073b87f..d6d1184 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NI
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NI
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PG b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PG
index 1fcefcb..ab342f6 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PG
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PG
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PH b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PH
index 1a5b44d..6f565d6 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PH
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PH
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PK b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PK
index 8431e72..f569c5c 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PK
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PK
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PR b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PR
index 05ca6eb..7ce02f2 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PR
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PR
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 81dbee5..694d882 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_SO b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SO
index 2b68da6..dbc1074 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SO
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SO
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SX b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SX
index d3dddd8..472486a 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SX
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SX
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TC b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TC
index 719123a..409fe59 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TC
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TC
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TT b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TT
index aa9a9d9..faf11fe 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TT
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TT
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 1cc77c6..df617b7 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_VC b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_VC
index c1be6f7..551e326 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_VC
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_VC
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_VG b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_VG
index aea83e9..28f0f02 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_VG
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_VG
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_VI b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_VI
index e495504..1e79d9e 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_VI
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_VI
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_AL b/java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_AL
index 77c7b82..b894829 100644
--- a/java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_AL
+++ b/java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_AL
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_FR b/java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_FR
index 5fada27..ca76511 100644
--- a/java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_FR
+++ b/java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_FR
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_KE b/java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_KE
index 4496ace..31013f9 100644
--- a/java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_KE
+++ b/java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_KE
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_SN b/java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_SN
new file mode 100644
index 0000000..cb8ecc0
--- /dev/null
+++ b/java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_SN
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1346_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1346_en
new file mode 100644
index 0000000..a3176e2
--- /dev/null
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1346_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1959_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1959_en
new file mode 100644
index 0000000..3126e19
--- /dev/null
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1959_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/254_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/254_en
index b21858b..3b413f6 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/254_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/254_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/33_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/33_en
index c12cc79..c8f107f 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/33_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/33_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/33_fr b/java/src/com/android/i18n/phonenumbers/geocoding/data/33_fr
index 62de895..e6424bb 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/33_fr
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/33_fr
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/352_de b/java/src/com/android/i18n/phonenumbers/geocoding/data/352_de
index c43da58..d4de4f8 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/352_de
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/352_de
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/352_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/352_en
index a6a5f62..09aa464 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/352_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/352_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/352_fr b/java/src/com/android/i18n/phonenumbers/geocoding/data/352_fr
index 20b8469..dbadfaf 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/352_fr
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/352_fr
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/355_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/355_en
index b903bcd..5275f69 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/355_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/355_en
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 5cb01c1..a3fc635 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/PhoneNumberMatcherTest.java b/java/test/com/android/i18n/phonenumbers/PhoneNumberMatcherTest.java
index 2f58899..be35d5d 100644
--- a/java/test/com/android/i18n/phonenumbers/PhoneNumberMatcherTest.java
+++ b/java/test/com/android/i18n/phonenumbers/PhoneNumberMatcherTest.java
@@ -440,6 +440,10 @@
     new NumberTest("2012-01-02 08:00", RegionCode.US),
     new NumberTest("2012/01/02 08:00", RegionCode.US),
     new NumberTest("20120102 08:00", RegionCode.US),
+    new NumberTest("2014-04-12 04:04 PM", RegionCode.US),
+    new NumberTest("2014-04-12 &nbsp;04:04 PM", RegionCode.US),
+    new NumberTest("2014-04-12 &nbsp;04:04 PM", RegionCode.US),
+    new NumberTest("2014-04-12  04:04 PM", RegionCode.US),
   };
 
   /**
diff --git a/java/test/com/android/i18n/phonenumbers/PhoneNumberUtilTest.java b/java/test/com/android/i18n/phonenumbers/PhoneNumberUtilTest.java
index 997430a..48b1b09 100644
--- a/java/test/com/android/i18n/phonenumbers/PhoneNumberUtilTest.java
+++ b/java/test/com/android/i18n/phonenumbers/PhoneNumberUtilTest.java
@@ -1701,6 +1701,8 @@
     assertEquals(NZ_NUMBER, phoneUtil.parse("tel:03-331-6005;phone-context=+64", RegionCode.NZ));
     assertEquals(NZ_NUMBER, phoneUtil.parse("tel:331-6005;phone-context=+64-3", RegionCode.NZ));
     assertEquals(NZ_NUMBER, phoneUtil.parse("tel:331-6005;phone-context=+64-3", RegionCode.US));
+    assertEquals(NZ_NUMBER, phoneUtil.parse(
+        "My number is tel:03-331-6005;phone-context=+64", RegionCode.NZ));
     // Test parsing RFC3966 format with optional user-defined parameters. The parameters will appear
     // after the context if present.
     assertEquals(NZ_NUMBER, phoneUtil.parse("tel:03-331-6005;phone-context=+64;a=%A1",
@@ -1709,6 +1711,8 @@
     assertEquals(NZ_NUMBER, phoneUtil.parse("tel:03-331-6005;isub=12345;phone-context=+64",
         RegionCode.NZ));
     assertEquals(NZ_NUMBER, phoneUtil.parse("tel:+64-3-331-6005;isub=12345", RegionCode.NZ));
+    // Test parsing RFC3966 with "tel:" missing.
+    assertEquals(NZ_NUMBER, phoneUtil.parse("03-331-6005;phone-context=+64", RegionCode.NZ));
     // Testing international prefixes.
     // Should strip country calling code.
     assertEquals(NZ_NUMBER, phoneUtil.parse("0064 3 331 6005", RegionCode.NZ));