summaryrefslogtreecommitdiffstats
path: root/third_party/libphonenumber
diff options
context:
space:
mode:
authorgeorgey@chromium.org <georgey@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-05 00:38:44 +0000
committergeorgey@chromium.org <georgey@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-05 00:38:44 +0000
commit515c4ed4f281f7baa1e3b6e0198d300c000d1aea (patch)
treee20fdd8ed6d988d572c13973af9fa922091b70ab /third_party/libphonenumber
parentc7c5c7d68c1178aec52a9be15f08cbffa8218163 (diff)
downloadchromium_src-515c4ed4f281f7baa1e3b6e0198d300c000d1aea.zip
chromium_src-515c4ed4f281f7baa1e3b6e0198d300c000d1aea.tar.gz
chromium_src-515c4ed4f281f7baa1e3b6e0198d300c000d1aea.tar.bz2
Re-committing http://codereview.chromium.org/6803005/ after fixing multi-dll build:
Autofill phone number enhancements and integration of Phone Number Util Library: part 1 Temporarily the whole library is included, until the patch is upstreamed. BUG=71443 TEST=Unit-tested Review URL: http://codereview.chromium.org/6930013 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@84174 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'third_party/libphonenumber')
-rw-r--r--third_party/libphonenumber/README.chromium29
-rw-r--r--third_party/libphonenumber/chrome/regexp_adapter_icuregexp.cc299
-rw-r--r--third_party/libphonenumber/cpp/CMakeLists.txt242
-rw-r--r--third_party/libphonenumber/cpp/LICENSE13
-rw-r--r--third_party/libphonenumber/cpp/README69
-rw-r--r--third_party/libphonenumber/cpp/src/base/singleton.h271
-rw-r--r--third_party/libphonenumber/cpp/src/default_logger.cc63
-rw-r--r--third_party/libphonenumber/cpp/src/default_logger.h56
-rw-r--r--third_party/libphonenumber/cpp/src/logger_adapter.cc25
-rw-r--r--third_party/libphonenumber/cpp/src/logger_adapter.h48
-rw-r--r--third_party/libphonenumber/cpp/src/metadata.cc26
-rw-r--r--third_party/libphonenumber/cpp/src/metadata.h22
-rw-r--r--third_party/libphonenumber/cpp/src/phonenumber.cc87
-rw-r--r--third_party/libphonenumber/cpp/src/phonenumber.h40
-rw-r--r--third_party/libphonenumber/cpp/src/phonenumberutil.cc2266
-rw-r--r--third_party/libphonenumber/cpp/src/phonenumberutil.h678
-rw-r--r--third_party/libphonenumber/cpp/src/phonenumberutil_test.cc2866
-rw-r--r--third_party/libphonenumber/cpp/src/re2_cache.cc75
-rw-r--r--third_party/libphonenumber/cpp/src/re2_cache.h83
-rw-r--r--third_party/libphonenumber/cpp/src/re2_cache_test.cc63
-rw-r--r--third_party/libphonenumber/cpp/src/regexp_adapter.h96
-rw-r--r--third_party/libphonenumber/cpp/src/regexp_adapter_re2.cc192
-rw-r--r--third_party/libphonenumber/cpp/src/regexp_adapter_unittest.cc142
-rw-r--r--third_party/libphonenumber/cpp/src/run_tests.cc7
-rw-r--r--third_party/libphonenumber/cpp/src/stringutil.cc273
-rw-r--r--third_party/libphonenumber/cpp/src/stringutil.h125
-rw-r--r--third_party/libphonenumber/cpp/src/stringutil_test.cc208
-rw-r--r--third_party/libphonenumber/cpp/src/test_metadata.cc26
-rw-r--r--third_party/libphonenumber/cpp/src/test_metadata.h22
-rw-r--r--third_party/libphonenumber/cpp/src/utf/README1
-rw-r--r--third_party/libphonenumber/cpp/src/utf/rune.c350
-rw-r--r--third_party/libphonenumber/cpp/src/utf/stringpiece.h24
-rw-r--r--third_party/libphonenumber/cpp/src/utf/stringprintf.h22
-rw-r--r--third_party/libphonenumber/cpp/src/utf/unicodetext.cc515
-rw-r--r--third_party/libphonenumber/cpp/src/utf/unicodetext.h456
-rw-r--r--third_party/libphonenumber/cpp/src/utf/unilib.cc64
-rw-r--r--third_party/libphonenumber/cpp/src/utf/unilib.h95
-rw-r--r--third_party/libphonenumber/cpp/src/utf/utf.h251
-rw-r--r--third_party/libphonenumber/cpp/src/utf/utfdef.h28
-rw-r--r--third_party/libphonenumber/libphonenumber.gyp139
-rw-r--r--third_party/libphonenumber/patches/version186.patch1177
-rw-r--r--third_party/libphonenumber/resources/PhoneNumberMetaData.xml19202
-rw-r--r--third_party/libphonenumber/resources/PhoneNumberMetaDataForTesting.xml764
-rw-r--r--third_party/libphonenumber/resources/phonemetadata.proto235
-rw-r--r--third_party/libphonenumber/resources/phonenumber.proto121
45 files changed, 31856 insertions, 0 deletions
diff --git a/third_party/libphonenumber/README.chromium b/third_party/libphonenumber/README.chromium
new file mode 100644
index 0000000..9cf38ee
--- /dev/null
+++ b/third_party/libphonenumber/README.chromium
@@ -0,0 +1,29 @@
+Name: International Phone Number Library
+Short Name: libphonenumber
+URL: http://libphonenumber.googlecode.com/svn/trunk/
+Version: unknown
+Revision: 186
+Security Critical: yes
+
+This directory contains the source code of International Phone Number Library
+for C/C++.
+
+This library depends on
+1. base/ for types, scoped_ptr's, etc.
+2. third_party/icu for internationalisation, UTF8-16-32 conversion and regular
+ expressions.
+3. third_party/protobuf Lite version.
+
+Additional files, not in the original library:
+ libphonenumber.gyp
+ README.chromium
+ chrome/regexp_adapter_icuregexp.cc
+
+Until the changes are upstreamed library is included directly, with a patch
+in patches/version186.patch applied. The patch adds plugability to the regular
+expression engine, its RE2 (default) implementation, and the unit-test for the
+changes.
+
+The folders included in our repository for now are
+ cpp/
+ resource/ \ No newline at end of file
diff --git a/third_party/libphonenumber/chrome/regexp_adapter_icuregexp.cc b/third_party/libphonenumber/chrome/regexp_adapter_icuregexp.cc
new file mode 100644
index 0000000..6b6ad82
--- /dev/null
+++ b/third_party/libphonenumber/chrome/regexp_adapter_icuregexp.cc
@@ -0,0 +1,299 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "third_party/libphonenumber/cpp/src/regexp_adapter.h"
+
+// Setup all of the Chromium and WebKit defines
+#include "base/logging.h"
+#include "base/scoped_ptr.h"
+#include "build/build_config.h"
+#include "unicode/regex.h"
+#include "unicode/stringpiece.h"
+#include "unicode/unistr.h"
+
+namespace {
+
+// Converts |source| to UTF-8 string, returns it starting at position |pos|.
+std::string UnicodeStringToUtf8String(icu::UnicodeString const& source,
+ int pos) {
+ std::string data;
+ source.toUTF8String<std::string>(data);
+ return data.substr(pos);
+}
+
+} // namespace
+
+// Implementation of the abstract classes RegularExpressionInput and
+// RegularExpression using ICU regular expression capabilities.
+
+// The Regular Expression input class.
+class IcuRegularExpressionInput : public reg_exp::RegularExpressionInput {
+ public:
+ explicit IcuRegularExpressionInput(const char* utf8_input);
+
+ // RegularExpressionInput implementation:
+ // Matches string to regular expression, returns true if expression was
+ // matched, false otherwise, advances position in the match.
+ // |reg_exp| - expression to be matched.
+ // |beginning_only| - if true match would be successfull only if appears at
+ // the beginning of the tested region of the string.
+ // |matched_string1| - successfully matched first string. Can be NULL.
+ // |matched_string2| - successfully matched second string. Can be NULL.
+ virtual bool ConsumeRegExp(std::string const& reg_exp,
+ bool beginning_only,
+ std::string* matched_string1,
+ std::string* matched_string2);
+
+ // Convert unmatched input to a string.
+ virtual std::string ToString() const;
+
+ icu::UnicodeString* Data() { return &utf8_input_; }
+
+ // Position in the input. For the newly created input position is 0,
+ // each call to ConsumeRegExp() or RegularExpression::Consume() advances
+ // position in the case of the successful match to be after the match.
+ int pos() const { return pos_; }
+ void set_pos(int pos) { pos_ = pos; }
+
+ private:
+ icu::UnicodeString utf8_input_;
+ int pos_;
+
+ DISALLOW_COPY_AND_ASSIGN(IcuRegularExpressionInput);
+};
+
+// The regular expression class.
+class IcuRegularExpression : public reg_exp::RegularExpression {
+ public:
+ explicit IcuRegularExpression(const char* utf8_regexp);
+
+ // RegularExpression implementation:
+ // Matches string to regular expression, returns true if expression was
+ // matched, false otherwise, advances position in the match.
+ // |input_string| - string to be searched.
+ // |beginning_only| - if true match would be successfull only if appears at
+ // the beginning of the tested region of the string.
+ // |matched_string1| - successfully matched first string. Can be NULL.
+ // |matched_string2| - successfully matched second string. Can be NULL.
+ // |matched_string3| - successfully matched third string. Can be NULL.
+ virtual bool Consume(reg_exp::RegularExpressionInput* input_string,
+ bool beginning_only,
+ std::string* matched_string1,
+ std::string* matched_string2,
+ std::string* matched_string3) const;
+
+ // Matches string to regular expression, returns true if expression was
+ // matched, false otherwise.
+ // |input_string| - string to be searched.
+ // |full_match| - if true match would be successfull only if it matches the
+ // complete string.
+ // |matched_string| - successfully matched string. Can be NULL.
+ virtual bool Match(const char* input_string,
+ bool full_match,
+ std::string* matched_string) const;
+
+ // Replaces match(es) in the |string_to_process|. if |global| is true,
+ // replaces all the matches, only the first match otherwise.
+ // |replacement_string| - text the matches are replaced with.
+ // Returns true if expression successfully processed through the string,
+ // even if no actual replacements were made. Returns false in case of an
+ // error.
+ virtual bool Replace(std::string* string_to_process,
+ bool global,
+ const char* replacement_string) const;
+ private:
+ scoped_ptr<icu::RegexPattern> utf8_regexp_;
+
+ DISALLOW_COPY_AND_ASSIGN(IcuRegularExpression);
+};
+
+IcuRegularExpressionInput::IcuRegularExpressionInput(const char* utf8_input)
+ : pos_(0) {
+ DCHECK(utf8_input);
+ utf8_input_ = icu::UnicodeString::fromUTF8(utf8_input);
+}
+
+bool IcuRegularExpressionInput::ConsumeRegExp(std::string const& reg_exp,
+ bool beginning_only,
+ std::string* matched_string1,
+ std::string* matched_string2) {
+ IcuRegularExpression re(reg_exp.c_str());
+
+ return re.Consume(this, beginning_only, matched_string1, matched_string2,
+ NULL);
+}
+
+std::string IcuRegularExpressionInput::ToString() const {
+ if (pos_ < 0 || pos_ > utf8_input_.length())
+ return std::string();
+ return UnicodeStringToUtf8String(utf8_input_, pos_);
+}
+
+IcuRegularExpression::IcuRegularExpression(const char* utf8_regexp) {
+ DCHECK(utf8_regexp);
+ UParseError pe;
+ UErrorCode status = U_ZERO_ERROR;
+ utf8_regexp_.reset(icu::RegexPattern::compile(
+ icu::UnicodeString::fromUTF8(utf8_regexp), 0, pe, status));
+ if (U_FAILURE(status)) {
+ // All of the passed regular expressions should compile correctly.
+ utf8_regexp_.reset(NULL);
+ NOTREACHED();
+ }
+}
+
+bool IcuRegularExpression::Consume(
+ reg_exp::RegularExpressionInput* input_string,
+ bool beginning_only,
+ std::string* matched_string1,
+ std::string* matched_string2,
+ std::string* matched_string3) const {
+ DCHECK(input_string);
+ // matched_string1 may be NULL
+ // matched_string2 may be NULL
+ // matched_string3 may be NULL
+ if (!utf8_regexp_.get())
+ return false;
+
+ IcuRegularExpressionInput* input =
+ reinterpret_cast<IcuRegularExpressionInput *>(input_string);
+ UErrorCode status = U_ZERO_ERROR;
+ scoped_ptr<icu::RegexMatcher> matcher(utf8_regexp_->matcher(*(input->Data()),
+ status));
+
+ if (U_FAILURE(status))
+ return false;
+
+ if (beginning_only) {
+ if (!matcher->lookingAt(input->pos(), status))
+ return false;
+ } else {
+ if (!matcher->find(input->pos(), status))
+ return false;
+ }
+ if (U_FAILURE(status))
+ return false;
+ // If less matches than expected - fail.
+ if ((matched_string3 && matcher->groupCount() < 3) ||
+ (matched_string2 && matcher->groupCount() < 2) ||
+ (matched_string1 && matcher->groupCount() < 1)) {
+ return false;
+ }
+ if (matcher->groupCount() > 0 && matched_string1) {
+ *matched_string1 = UnicodeStringToUtf8String(matcher->group(1, status), 0);
+ }
+ if (matcher->groupCount() > 1 && matched_string2) {
+ *matched_string2 = UnicodeStringToUtf8String(matcher->group(2, status), 0);
+ }
+ if (matcher->groupCount() > 2 && matched_string3) {
+ *matched_string3 = UnicodeStringToUtf8String(matcher->group(3, status), 0);
+ }
+ input->set_pos(matcher->end(status));
+ return true;
+}
+
+bool IcuRegularExpression::Match(const char* input_string,
+ bool full_match,
+ std::string* matched_string) const {
+ DCHECK(input_string);
+ // matched_string may be NULL
+ if (!utf8_regexp_.get())
+ return false;
+
+ IcuRegularExpressionInput input(input_string);
+ UErrorCode status = U_ZERO_ERROR;
+ scoped_ptr<icu::RegexMatcher> matcher(utf8_regexp_->matcher(*(input.Data()),
+ status));
+
+ if (U_FAILURE(status))
+ return false;
+
+ if (full_match) {
+ if (!matcher->matches(input.pos(), status))
+ return false;
+ } else {
+ if (!matcher->find(input.pos(), status))
+ return false;
+ }
+ if (U_FAILURE(status))
+ return false;
+ if (matcher->groupCount() > 0 && matched_string) {
+ *matched_string = UnicodeStringToUtf8String(matcher->group(1, status), 0);
+ }
+ return true;
+}
+
+bool IcuRegularExpression::Replace(std::string* string_to_process,
+ bool global,
+ const char* replacement_string) const {
+ DCHECK(string_to_process);
+ DCHECK(replacement_string);
+
+ std::string adapted_replacement(replacement_string);
+ // Adapt replacement string from RE2 (\0-9 for matches) format to ICU format
+ // ($0-9 for matches). All '$' should be prepended with '\' as well.
+ size_t backslash_pos = adapted_replacement.find('\\');
+ size_t dollar_pos = adapted_replacement.find('$');
+ while (backslash_pos != std::string::npos ||
+ dollar_pos != std::string::npos) {
+ bool process_dollar = false;
+ if (backslash_pos == std::string::npos ||
+ (dollar_pos != std::string::npos && dollar_pos < backslash_pos)) {
+ process_dollar = true;
+ }
+ if (process_dollar) {
+ adapted_replacement.insert(dollar_pos, "\\");
+ dollar_pos = adapted_replacement.find('$', dollar_pos + 2);
+ if (backslash_pos != std::string::npos)
+ ++backslash_pos;
+ } else {
+ if (adapted_replacement.length() > backslash_pos + 1) {
+ if (adapted_replacement[backslash_pos + 1] >= '0' &&
+ adapted_replacement[backslash_pos + 1] <= '9') {
+ adapted_replacement[backslash_pos] = '$';
+ }
+ if (adapted_replacement[backslash_pos + 1] == '\\') {
+ // Skip two characters instead of one.
+ ++backslash_pos;
+ }
+ }
+ backslash_pos = adapted_replacement.find('\\', backslash_pos + 1);
+ }
+ }
+
+ IcuRegularExpressionInput input(string_to_process->c_str());
+ UErrorCode status = U_ZERO_ERROR;
+ scoped_ptr<icu::RegexMatcher> matcher(utf8_regexp_->matcher(*(input.Data()),
+ status));
+ if (U_FAILURE(status))
+ return false;
+
+ icu::UnicodeString result;
+
+ if (global) {
+ result = matcher->replaceAll(
+ icu::UnicodeString::fromUTF8(adapted_replacement),
+ status);
+ } else {
+ result = matcher->replaceFirst(
+ icu::UnicodeString::fromUTF8(adapted_replacement),
+ status);
+ }
+ if (U_FAILURE(status))
+ return false;
+ *string_to_process = UnicodeStringToUtf8String(result, 0);
+ return true;
+}
+
+namespace reg_exp {
+
+RegularExpressionInput* CreateRegularExpressionInput(const char* utf8_input) {
+ return new IcuRegularExpressionInput(utf8_input);
+}
+
+RegularExpression* CreateRegularExpression(const char* utf8_regexp) {
+ return new IcuRegularExpression(utf8_regexp);
+}
+
+} // namespace reg_exp
diff --git a/third_party/libphonenumber/cpp/CMakeLists.txt b/third_party/libphonenumber/cpp/CMakeLists.txt
new file mode 100644
index 0000000..720168e
--- /dev/null
+++ b/third_party/libphonenumber/cpp/CMakeLists.txt
@@ -0,0 +1,242 @@
+# Copyright (C) 2011 Google Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Author: Philippe Liard
+
+cmake_minimum_required (VERSION 2.8)
+
+project (libphonenumber)
+
+# Helper functions dealing with finding libraries and programs this library
+# depends on.
+
+function (print_error DESCRIPTION FILE)
+ message (FATAL_ERROR
+ "Can't find ${DESCRIPTION}: can't locate ${FILE}. Please read the README.")
+endfunction ()
+
+# Find a library. If it has not been found, stop CMake with a fatal error
+# message.
+function (find_required_library NAME HEADER LIBRARY DESCRIPTION)
+ # Check the header.
+ find_path (${NAME}_INCLUDE_DIR ${HEADER})
+ set (INCLUDE_DIR ${${NAME}_INCLUDE_DIR})
+
+ if (${INCLUDE_DIR} STREQUAL "${INCLUDE_DIR}-NOTFOUND")
+ print_error (${DESCRIPTION} ${HEADER})
+ endif ()
+ include_directories (${INCLUDE_DIR})
+ # Check the binary.
+ find_library (${NAME}_LIB ${LIBRARY})
+ set (LIB ${NAME}_LIB)
+
+ if (${LIB} STREQUAL "${LIB}-NOTFOUND")
+ print_error (${DESCRIPTION} ${LIBRARY})
+ endif ()
+endfunction (find_required_library)
+
+# Check the library version (if pkg-config available).
+find_package (PkgConfig)
+function (check_library_version NAME LIBRARY VERSION)
+ if (PKG_CONFIG_EXECUTABLE)
+ pkg_check_modules (NAME REQUIRED ${LIBRARY}>=${VERSION})
+ endif (PKG_CONFIG_EXECUTABLE)
+endfunction ()
+
+# Find a program. If it has not been found, stop CMake with a fatal error
+# message.
+function (find_required_program NAME FILENAME DESCRIPTION)
+ find_program (${NAME}_BIN NAMES ${FILENAME})
+
+ if (${NAME}_BIN STREQUAL "${${NAME}_BIN}-NOTFOUND")
+ print_error (${DESCRIPTION} ${FILENAME})
+ endif ()
+endfunction (find_required_program)
+
+# Find all the required libraries and programs.
+find_required_library (GTEST gtest/gtest.h gtest "Google Test framework")
+
+find_required_library (RE2 re2/re2.h re2 "Google RE2")
+
+find_required_library (PROTOBUF google/protobuf/message_lite.h protobuf
+ "Google Protocol Buffers")
+check_library_version (PC_PROTOBUF protobuf 2.4)
+
+find_required_library (ICU unicode/unistr.h icui18n "ICU")
+check_library_version (PC_ICU icui18n 4.4)
+
+find_required_program (PROTOC protoc
+ "Google Protocol Buffers compiler (protoc)")
+
+find_required_program (JAVA java
+ "Java Runtime Environment")
+
+# Add protoc (Protocol Buffers compiler) target.
+set (RESOURCES_DIR "${CMAKE_SOURCE_DIR}/../resources")
+
+set (
+ PROTOBUF_SOURCES "${RESOURCES_DIR}/phonemetadata.proto"
+ "${RESOURCES_DIR}/phonenumber.proto"
+)
+
+set (
+ PROTOBUF_OUTPUT "${CMAKE_SOURCE_DIR}/src/phonemetadata.pb.cc"
+ "${CMAKE_SOURCE_DIR}/src/phonemetadata.pb.h"
+ "${CMAKE_SOURCE_DIR}/src/phonenumber.pb.cc"
+ "${CMAKE_SOURCE_DIR}/src/phonenumber.pb.h"
+)
+
+add_custom_command (
+ COMMAND ${PROTOC_BIN} --cpp_out="${CMAKE_SOURCE_DIR}/src"
+ --proto_path=${RESOURCES_DIR} ${PROTOBUF_SOURCES}
+
+ OUTPUT ${PROTOBUF_OUTPUT}
+ DEPENDS ${PROTOBUF_SOURCES}
+)
+
+add_custom_target (
+ generate-sources
+
+ DEPENDS ${PROTOBUF_OUTPUT}
+ COMMENT "Generating Protocol Buffers code"
+)
+
+# Add metadata code generation targets.
+
+# This function is invoked twice to create metadata & test metadata code
+# generation targets.
+function (add_metadata_gen_target TARGET_NAME
+ XML_FILE
+ FOR_TESTING)
+ if (${FOR_TESTING} STREQUAL "true")
+ set (GEN_OUTPUT_PREFIX "${CMAKE_SOURCE_DIR}/src/metadata")
+ elseif (${FOR_TESTING} STREQUAL "false")
+ set (GEN_OUTPUT_PREFIX "${CMAKE_SOURCE_DIR}/src/test_metadata")
+ else ()
+ message (FATAL_ERROR
+ "Unexpected value '${FOR_TESTING}' for testing parameter")
+ endif ()
+
+ set (GEN_OUTPUT "${GEN_OUTPUT_PREFIX}.cc ${GEN_OUTPUT_PREFIX}.h")
+ set (JAR_PATH "${CMAKE_SOURCE_DIR}/../tools/java/cpp-build/target")
+ set (JAR_PATH "${JAR_PATH}/cpp-build-1.0-SNAPSHOT-jar-with-dependencies.jar")
+
+ add_custom_command (
+ COMMAND ${JAVA_BIN} -jar
+ ${JAR_PATH} BuildMetadataCppFromXml ${XML_FILE} ${CMAKE_SOURCE_DIR}/src
+ ${FOR_TESTING}
+
+ OUTPUT ${GEN_OUTPUT}
+ DEPENDS ${XML_FILE}
+ )
+ add_custom_target (
+ ${TARGET_NAME}
+ DEPENDS ${GEN_OUTPUT}
+ COMMENT "Generating Metadata code"
+ )
+endfunction (add_metadata_gen_target)
+
+# Add metadata generation target.
+add_metadata_gen_target (
+ "generate-metadata"
+ "${RESOURCES_DIR}/PhoneNumberMetaData.xml"
+ "false"
+)
+
+# Add test metadata generation target.
+add_metadata_gen_target (
+ "generate-test-metadata"
+ "${RESOURCES_DIR}/PhoneNumberMetaDataForTesting.xml"
+ "true"
+)
+
+# Platform independent sources.
+set (
+ SOURCES
+ "src/base/at_exit.cc"
+ "src/base/lazy_instance.cc"
+ "src/base/string_piece.cc"
+ "src/base/synchronization/lock.cc"
+ "src/base/threading/thread_restrictions.cc"
+ "src/default_logger.cc"
+ "src/logger_adapter.cc"
+ "src/metadata.cc" # Generated by build tools.
+ "src/phonemetadata.pb.cc" # Generated by Protocol Buffers.
+ "src/phonenumber.cc"
+ "src/phonenumber.pb.cc" # Generated by Protocol Buffers.
+ "src/phonenumberutil.cc"
+ "src/re2_cache.cc"
+ "src/regexp_adapter_re2.cc",
+ "src/stringutil.cc"
+ "src/utf/rune.c"
+ "src/utf/unicodetext.cc"
+ "src/utf/unilib.cc"
+)
+
+if (UNIX)
+ if (CMAKE_COMPILER_IS_GNUCXX)
+ add_definitions ("-Wall -Wextra -Werror")
+
+ # The next flags are needed by base/ source files to compile low level code
+ # needed by Singleton.
+ add_definitions ("-DCOMPILER_GCC -DOS_POSIX -DOS_LINUX")
+
+ if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "x86.*")
+ add_definitions ("-DARCH_CPU_X86_FAMILY")
+ # Add GCC specific sources.
+ list (APPEND SOURCES "src/base/atomicops_internals_x86_gcc.cc")
+
+ elseif (${CMAKE_SYSTEM_PROCESSOR} MATCHES ".*arm.*")
+ add_definitions ("-DARCH_CPU_ARM_FAMILY")
+ endif ()
+ endif ()
+
+ # Add POSIX specific sources.
+ list (
+ APPEND SOURCES
+ "src/base/synchronization/lock_impl_posix.cc"
+ "src/base/threading/platform_thread_posix.cc"
+ "src/base/threading/thread_local_posix.cc"
+ )
+else (WIN32)
+ # TODO: add Windows support (define COMPILER_MSVC, OS_WIN).
+ list (
+ APPEND SOURCES
+ "src/base/synchronization/lock_impl_win.cc"
+ "src/base/threading/platform_thread_win.cc"
+ "src/base/threading/thread_local_win.cc"
+ )
+ # TODO: Windows specific flags.
+endif ()
+
+include_directories ("src")
+include_directories (".")
+
+add_library (phonenumber STATIC ${SOURCES})
+add_dependencies (phonenumber generate-sources)
+
+target_link_libraries (phonenumber ${RE2_LIB} ${PROTOBUF_LIB} ${ICU_LIB})
+
+# Tests.
+set (TEST_SOURCES
+ "src/phonenumberutil_test.cc"
+ "src/re2_cache_test.cc"
+ "src/regexp_adapter_unittest.cc",
+ "src/run_tests.cc"
+ "src/stringutil_test.cc"
+ "src/test_metadata.cc" # Generated by build tools.
+)
+
+add_executable (libphonenumber_test ${TEST_SOURCES})
+target_link_libraries (libphonenumber_test phonenumber ${GTEST_LIB} pthread)
diff --git a/third_party/libphonenumber/cpp/LICENSE b/third_party/libphonenumber/cpp/LICENSE
new file mode 100644
index 0000000..145f008
--- /dev/null
+++ b/third_party/libphonenumber/cpp/LICENSE
@@ -0,0 +1,13 @@
+Copyright (C) 2011 Google Inc.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
diff --git a/third_party/libphonenumber/cpp/README b/third_party/libphonenumber/cpp/README
new file mode 100644
index 0000000..775348a
--- /dev/null
+++ b/third_party/libphonenumber/cpp/README
@@ -0,0 +1,69 @@
+C++ version of the libphonenumber project.
+Work in progress.
+
+This is a port of the Java version.
+
+This project uses some third-party code:
+ - src/base/ sources come from Chromium browser.
+ - src/utf/ sources come from lib9 which is also used in Go.
+
+Requirements:
+ - CMake build system
+ http://www.cmake.org
+
+ You can install it very easily on a Debian-based GNU/Linux distribution:
+ $ sudo apt-get install cmake
+
+ - Protocol Buffers
+ http://code.google.com/p/protobuf/
+ Version 2.4 or more recent is required.
+
+ You can install it very easily on a Debian-based GNU/Linux distribution:
+ $ sudo apt-get install libprotobuf-dev
+
+ Note: if your GNU/Linux distribution doesn't provide the needed package,
+ please download and install it manually:
+ $ tar xjf protobuf-2.4.tar.bz2
+ $ cd protobuf-2.4
+ $ ./configure && make && sudo make install
+
+ - Google Test
+ http://code.google.com/p/googletest/
+
+ You can install it very easily on a Debian-based GNU/Linux distribution:
+ $ sudo apt-get install libgtest-dev
+
+ - RE2
+ http://code.google.com/p/re2/
+
+ You can install it very easily on Ubuntu Maverick and later:
+ $ sudo apt-get install libre2-dev
+
+ Otherwise if you use a Debian-based distribution you can fetch the Ubuntu
+ package which should work:
+ http://packages.ubuntu.com/maverick/libre2-dev
+
+ If you want to install it manually:
+ You need Mercurial to checkout its source code:
+ $ sudo apt-get install mercurial
+
+ Then checkout, build and install it:
+ $ hg clone https://re2.googlecode.com/hg re2
+ $ cd re2
+ $ make test
+ $ make install
+ $ make testinstall
+
+ - ICU
+ http://userguide.icu-project.org/
+
+ You can install it very easily on a Debian-based distribution:
+ $ sudo apt-get install libicu-dev
+
+
+How to build libphonenumber C++:
+ $ cd libphonenumber
+ $ mkdir build
+ $ cd build
+ $ cmake ../cpp/
+ $ make
diff --git a/third_party/libphonenumber/cpp/src/base/singleton.h b/third_party/libphonenumber/cpp/src/base/singleton.h
new file mode 100644
index 0000000..0fe5e27
--- /dev/null
+++ b/third_party/libphonenumber/cpp/src/base/singleton.h
@@ -0,0 +1,271 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef BASE_SINGLETON_H_
+#define BASE_SINGLETON_H_
+#pragma once
+
+#include "base/at_exit.h"
+#include "base/atomicops.h"
+#include "base/third_party/dynamic_annotations/dynamic_annotations.h"
+#include "base/threading/platform_thread.h"
+#include "base/threading/thread_restrictions.h"
+
+// Default traits for Singleton<Type>. Calls operator new and operator delete on
+// the object. Registers automatic deletion at process exit.
+// Overload if you need arguments or another memory allocation function.
+template<typename Type>
+struct DefaultSingletonTraits {
+ // Allocates the object.
+ static Type* New() {
+ // The parenthesis is very important here; it forces POD type
+ // initialization.
+ return new Type();
+ }
+
+ // Destroys the object.
+ static void Delete(Type* x) {
+ delete x;
+ }
+
+ // Set to true to automatically register deletion of the object on process
+ // exit. See below for the required call that makes this happen.
+ static const bool kRegisterAtExit = true;
+
+ // Set to false to disallow access on a non-joinable thread. This is
+ // different from kRegisterAtExit because StaticMemorySingletonTraits allows
+ // access on non-joinable threads, and gracefully handles this.
+ static const bool kAllowedToAccessOnNonjoinableThread = false;
+};
+
+
+// Alternate traits for use with the Singleton<Type>. Identical to
+// DefaultSingletonTraits except that the Singleton will not be cleaned up
+// at exit.
+template<typename Type>
+struct LeakySingletonTraits : public DefaultSingletonTraits<Type> {
+ static const bool kRegisterAtExit = false;
+ static const bool kAllowedToAccessOnNonjoinableThread = true;
+};
+
+
+// Alternate traits for use with the Singleton<Type>. Allocates memory
+// for the singleton instance from a static buffer. The singleton will
+// be cleaned up at exit, but can't be revived after destruction unless
+// the Resurrect() method is called.
+//
+// This is useful for a certain category of things, notably logging and
+// tracing, where the singleton instance is of a type carefully constructed to
+// be safe to access post-destruction.
+// In logging and tracing you'll typically get stray calls at odd times, like
+// during static destruction, thread teardown and the like, and there's a
+// termination race on the heap-based singleton - e.g. if one thread calls
+// get(), but then another thread initiates AtExit processing, the first thread
+// may call into an object residing in unallocated memory. If the instance is
+// allocated from the data segment, then this is survivable.
+//
+// The destructor is to deallocate system resources, in this case to unregister
+// a callback the system will invoke when logging levels change. Note that
+// this is also used in e.g. Chrome Frame, where you have to allow for the
+// possibility of loading briefly into someone else's process space, and
+// so leaking is not an option, as that would sabotage the state of your host
+// process once you've unloaded.
+template <typename Type>
+struct StaticMemorySingletonTraits {
+ // WARNING: User has to deal with get() in the singleton class
+ // this is traits for returning NULL.
+ static Type* New() {
+ if (base::subtle::NoBarrier_AtomicExchange(&dead_, 1))
+ return NULL;
+ Type* ptr = reinterpret_cast<Type*>(buffer_);
+
+ // We are protected by a memory barrier.
+ new(ptr) Type();
+ return ptr;
+ }
+
+ static void Delete(Type* p) {
+ base::subtle::NoBarrier_Store(&dead_, 1);
+ base::subtle::MemoryBarrier();
+ if (p != NULL)
+ p->Type::~Type();
+ }
+
+ static const bool kRegisterAtExit = true;
+ static const bool kAllowedToAccessOnNonjoinableThread = true;
+
+ // Exposed for unittesting.
+ static void Resurrect() {
+ base::subtle::NoBarrier_Store(&dead_, 0);
+ }
+
+ private:
+ static const size_t kBufferSize = (sizeof(Type) +
+ sizeof(intptr_t) - 1) / sizeof(intptr_t);
+ static intptr_t buffer_[kBufferSize];
+
+ // Signal the object was already deleted, so it is not revived.
+ static base::subtle::Atomic32 dead_;
+};
+
+template <typename Type> intptr_t
+ StaticMemorySingletonTraits<Type>::buffer_[kBufferSize];
+template <typename Type> base::subtle::Atomic32
+ StaticMemorySingletonTraits<Type>::dead_ = 0;
+
+// The Singleton<Type, Traits, DifferentiatingType> class manages a single
+// instance of Type which will be created on first use and will be destroyed at
+// normal process exit). The Trait::Delete function will not be called on
+// abnormal process exit.
+//
+// DifferentiatingType is used as a key to differentiate two different
+// singletons having the same memory allocation functions but serving a
+// different purpose. This is mainly used for Locks serving different purposes.
+//
+// Example usage:
+//
+// In your header:
+// #include "base/singleton.h"
+// class FooClass {
+// public:
+// static FooClass* GetInstance(); <-- See comment below on this.
+// void Bar() { ... }
+// private:
+// FooClass() { ... }
+// friend struct DefaultSingletonTraits<FooClass>;
+//
+// DISALLOW_COPY_AND_ASSIGN(FooClass);
+// };
+//
+// In your source file:
+// FooClass* FooClass::GetInstance() {
+// return Singleton<FooClass>::get();
+// }
+//
+// And to call methods on FooClass:
+// FooClass::GetInstance()->Bar();
+//
+// NOTE: The method accessing Singleton<T>::get() has to be named as GetInstance
+// and it is important that FooClass::GetInstance() is not inlined in the
+// header. This makes sure that when source files from multiple targets include
+// this header they don't end up with different copies of the inlined code
+// creating multiple copies of the singleton.
+//
+// Singleton<> has no non-static members and doesn't need to actually be
+// instantiated.
+//
+// This class is itself thread-safe. The underlying Type must of course be
+// thread-safe if you want to use it concurrently. Two parameters may be tuned
+// depending on the user's requirements.
+//
+// Glossary:
+// RAE = kRegisterAtExit
+//
+// On every platform, if Traits::RAE is true, the singleton will be destroyed at
+// process exit. More precisely it uses base::AtExitManager which requires an
+// object of this type to be instantiated. AtExitManager mimics the semantics
+// of atexit() such as LIFO order but under Windows is safer to call. For more
+// information see at_exit.h.
+//
+// If Traits::RAE is false, the singleton will not be freed at process exit,
+// thus the singleton will be leaked if it is ever accessed. Traits::RAE
+// shouldn't be false unless absolutely necessary. Remember that the heap where
+// the object is allocated may be destroyed by the CRT anyway.
+//
+// Caveats:
+// (a) Every call to get(), operator->() and operator*() incurs some overhead
+// (16ns on my P4/2.8GHz) to check whether the object has already been
+// initialized. You may wish to cache the result of get(); it will not
+// change.
+//
+// (b) Your factory function must never throw an exception. This class is not
+// exception-safe.
+//
+template <typename Type,
+ typename Traits = DefaultSingletonTraits<Type>,
+ typename DifferentiatingType = Type>
+class Singleton {
+ private:
+ // Classes using the Singleton<T> pattern should declare a GetInstance()
+ // method and call Singleton::get() from within that.
+ friend Type* Type::GetInstance();
+
+ // This class is safe to be constructed and copy-constructed since it has no
+ // member.
+
+ // Return a pointer to the one true instance of the class.
+ static Type* get() {
+ if (!Traits::kAllowedToAccessOnNonjoinableThread)
+ base::ThreadRestrictions::AssertSingletonAllowed();
+
+ // Our AtomicWord doubles as a spinlock, where a value of
+ // kBeingCreatedMarker means the spinlock is being held for creation.
+ static const base::subtle::AtomicWord kBeingCreatedMarker = 1;
+
+ base::subtle::AtomicWord value = base::subtle::NoBarrier_Load(&instance_);
+ if (value != 0 && value != kBeingCreatedMarker) {
+ // See the corresponding HAPPENS_BEFORE below.
+ ANNOTATE_HAPPENS_AFTER(&instance_);
+ return reinterpret_cast<Type*>(value);
+ }
+
+ // Object isn't created yet, maybe we will get to create it, let's try...
+ if (base::subtle::Acquire_CompareAndSwap(&instance_,
+ 0,
+ kBeingCreatedMarker) == 0) {
+ // instance_ was NULL and is now kBeingCreatedMarker. Only one thread
+ // will ever get here. Threads might be spinning on us, and they will
+ // stop right after we do this store.
+ Type* newval = Traits::New();
+
+ // This annotation helps race detectors recognize correct lock-less
+ // synchronization between different threads calling get().
+ // See the corresponding HAPPENS_AFTER below and above.
+ ANNOTATE_HAPPENS_BEFORE(&instance_);
+ base::subtle::Release_Store(
+ &instance_, reinterpret_cast<base::subtle::AtomicWord>(newval));
+
+ if (newval != NULL && Traits::kRegisterAtExit)
+ base::AtExitManager::RegisterCallback(OnExit, NULL);
+
+ return newval;
+ }
+
+ // We hit a race. Another thread beat us and either:
+ // - Has the object in BeingCreated state
+ // - Already has the object created...
+ // We know value != NULL. It could be kBeingCreatedMarker, or a valid ptr.
+ // Unless your constructor can be very time consuming, it is very unlikely
+ // to hit this race. When it does, we just spin and yield the thread until
+ // the object has been created.
+ while (true) {
+ value = base::subtle::NoBarrier_Load(&instance_);
+ if (value != kBeingCreatedMarker)
+ break;
+ base::PlatformThread::YieldCurrentThread();
+ }
+
+ // See the corresponding HAPPENS_BEFORE above.
+ ANNOTATE_HAPPENS_AFTER(&instance_);
+ return reinterpret_cast<Type*>(value);
+ }
+
+ // Adapter function for use with AtExit(). This should be called single
+ // threaded, so don't use atomic operations.
+ // Calling OnExit while singleton is in use by other threads is a mistake.
+ static void OnExit(void* /*unused*/) {
+ // AtExit should only ever be register after the singleton instance was
+ // created. We should only ever get here with a valid instance_ pointer.
+ Traits::Delete(
+ reinterpret_cast<Type*>(base::subtle::NoBarrier_Load(&instance_)));
+ instance_ = 0;
+ }
+ static base::subtle::AtomicWord instance_;
+};
+
+template <typename Type, typename Traits, typename DifferentiatingType>
+base::subtle::AtomicWord Singleton<Type, Traits, DifferentiatingType>::
+ instance_ = 0;
+
+#endif // BASE_SINGLETON_H_
diff --git a/third_party/libphonenumber/cpp/src/default_logger.cc b/third_party/libphonenumber/cpp/src/default_logger.cc
new file mode 100644
index 0000000..11eb59f
--- /dev/null
+++ b/third_party/libphonenumber/cpp/src/default_logger.cc
@@ -0,0 +1,63 @@
+// Copyright (C) 2011 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// Author: Philippe Liard
+
+#include <iostream>
+
+#include "default_logger.h"
+
+using std::cerr;
+using std::cout;
+using std::endl;
+
+namespace i18n {
+namespace phonenumbers {
+
+DefaultLogger::DefaultLogger(LogLevel level) : level_(level) {}
+
+DefaultLogger::~DefaultLogger() {}
+
+void DefaultLogger::Fatal(const string& msg) const {
+ if (level_ >= LOG_FATAL) {
+ cerr << "FATAL libphonenumber " << msg << endl;
+ }
+}
+
+void DefaultLogger::Error(const string& msg) const {
+ if (level_ >= LOG_ERROR) {
+ cerr << "ERROR libphonenumber " << msg << endl;
+ }
+}
+
+void DefaultLogger::Warning(const string& msg) const {
+ if (level_ >= LOG_WARNING) {
+ cerr << "WARNING libphonenumber " << msg << endl;
+ }
+}
+
+void DefaultLogger::Info(const string& msg) const {
+ if (level_ >= LOG_INFO) {
+ cout << "INFO libphonenumber " << msg << endl;
+ }
+}
+
+void DefaultLogger::Debug(const string& msg) const {
+ if (level_ >= LOG_DEBUG) {
+ cout << "DEBUG libphonenumber " << msg << endl;
+ }
+}
+
+} // namespace phonenumbers
+} // namespace i18n
diff --git a/third_party/libphonenumber/cpp/src/default_logger.h b/third_party/libphonenumber/cpp/src/default_logger.h
new file mode 100644
index 0000000..d1ebc1f
--- /dev/null
+++ b/third_party/libphonenumber/cpp/src/default_logger.h
@@ -0,0 +1,56 @@
+// Copyright (C) 2011 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// Author: Philippe Liard
+
+#ifndef I18N_PHONENUMBERS_DEFAULT_LOGGER_H_
+#define I18N_PHONENUMBERS_DEFAULT_LOGGER_H_
+
+#include "logger_adapter.h"
+
+namespace i18n {
+namespace phonenumbers {
+
+enum LogLevel {
+ LOG_FATAL,
+ LOG_ERROR,
+ LOG_WARNING,
+ LOG_INFO,
+ LOG_DEBUG,
+};
+
+class DefaultLogger : public LoggerAdapter {
+ public:
+ virtual ~DefaultLogger();
+
+ DefaultLogger(LogLevel level = LOG_WARNING);
+
+ virtual void Fatal(const string& msg) const;
+
+ virtual void Error(const string& msg) const;
+
+ virtual void Warning(const string& msg) const;
+
+ virtual void Info(const string& msg) const;
+
+ virtual void Debug(const string& msg) const;
+
+ private:
+ LogLevel level_;
+};
+
+} // namespace phonenumbers
+} // namespace i18n
+
+# endif // I18N_PHONENUMBERS_DEFAULT_LOGGER_H_
diff --git a/third_party/libphonenumber/cpp/src/logger_adapter.cc b/third_party/libphonenumber/cpp/src/logger_adapter.cc
new file mode 100644
index 0000000..edfaa04
--- /dev/null
+++ b/third_party/libphonenumber/cpp/src/logger_adapter.cc
@@ -0,0 +1,25 @@
+// Copyright (C) 2011 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// Author: Philippe Liard
+
+# include "logger_adapter.h"
+
+namespace i18n {
+namespace phonenumbers {
+
+LoggerAdapter::~LoggerAdapter() {}
+
+} // namespace phonenumbers
+} // namespace i18n
diff --git a/third_party/libphonenumber/cpp/src/logger_adapter.h b/third_party/libphonenumber/cpp/src/logger_adapter.h
new file mode 100644
index 0000000..37122bc
--- /dev/null
+++ b/third_party/libphonenumber/cpp/src/logger_adapter.h
@@ -0,0 +1,48 @@
+// Copyright (C) 2011 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// Author: Philippe Liard
+
+#ifndef I18N_PHONENUMBERS_LOGGER_ADAPTER_H_
+#define I18N_PHONENUMBERS_LOGGER_ADAPTER_H_
+
+#include <string>
+
+using std::string;
+
+namespace i18n {
+namespace phonenumbers {
+
+// Implement this 'interface' to override the way logging is handled
+// in the library.
+class LoggerAdapter {
+ public:
+ virtual ~LoggerAdapter();
+
+ // Logging methods
+ virtual void Fatal(const string& msg) const = 0;
+
+ virtual void Error(const string& msg) const = 0;
+
+ virtual void Warning(const string& msg) const = 0;
+
+ virtual void Info(const string& msg) const = 0;
+
+ virtual void Debug(const string& msg) const = 0;
+};
+
+} // namespace phonenumbers
+} // namespace i18n
+
+#endif // I18N_PHONENUMBERS_LOGGER_ADAPTER_H_
diff --git a/third_party/libphonenumber/cpp/src/metadata.cc b/third_party/libphonenumber/cpp/src/metadata.cc
new file mode 100644
index 0000000..85a38ed
--- /dev/null
+++ b/third_party/libphonenumber/cpp/src/metadata.cc
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2011 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "metadata.h"
+
+static const unsigned char metadata_data[] = { 0x0A, 0xAC, 0x01, 0x0A, 0x14, 0x12, 0x0B, 0x5B, 0x32, 0x2D, 0x34, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x12, 0x2C, 0x12, 0x1D, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x30, 0x2D, 0x35, 0x5D, 0x7C, 0x34, 0x5B, 0x34, 0x2D, 0x36, 0x5D, 0x7C, 0x5B, 0x32, 0x36, 0x5D, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x32, 0x04, 0x36, 0x38, 0x38, 0x39, 0x1A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x41, 0x43, 0x50, 0xF7, 0x01, 0x5A, 0x02, 0x30, 0x30, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xA8, 0x02, 0x0A, 0x1F, 0x12, 0x14, 0x28, 0x3F, 0x3A, 0x5B, 0x33, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x31, 0x38, 0x30, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x38, 0x7D, 0x12, 0x1A, 0x12, 0x09, 0x5B, 0x37, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x32, 0x06, 0x37, 0x31, 0x32, 0x33, 0x34, 0x35, 0x1A, 0x1B, 0x12, 0x0A, 0x5B, 0x33, 0x34, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x32, 0x06, 0x33, 0x31, 0x32, 0x33, 0x34, 0x35, 0x22, 0x1F, 0x12, 0x0C, 0x31, 0x38, 0x30, 0x5B, 0x30, 0x32, 0x5D, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x31, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x2A, 0x17, 0x12, 0x06, 0x39, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x32, 0x06, 0x39, 0x31, 0x32, 0x33, 0x34, 0x35, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x41, 0x44, 0x50, 0xF8, 0x02, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x24, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x07, 0x5B, 0x33, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x20, 0x0A, 0x10, 0x28, 0x31, 0x38, 0x30, 0x5B, 0x30, 0x32, 0x5D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x01, 0x31, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xF6, 0x03, 0x0A, 0x24, 0x12, 0x18, 0x5B, 0x32, 0x2D, 0x37, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x7C, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x32, 0x2C, 0x39, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x31, 0x32, 0x7D, 0x12, 0x35, 0x12, 0x20, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x2D, 0x34, 0x36, 0x37, 0x39, 0x5D, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x7C, 0x36, 0x30, 0x30, 0x5B, 0x32, 0x35, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x32, 0x08, 0x32, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x1A, 0x1F, 0x12, 0x0B, 0x35, 0x5B, 0x30, 0x35, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x35, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x22, 0x2A, 0x12, 0x13, 0x34, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x7C, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x32, 0x2C, 0x39, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x31, 0x32, 0x7D, 0x32, 0x09, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x20, 0x12, 0x0C, 0x39, 0x30, 0x30, 0x5B, 0x30, 0x32, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x39, 0x30, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x32, 0x20, 0x12, 0x0C, 0x37, 0x30, 0x30, 0x5B, 0x30, 0x35, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x37, 0x30, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x41, 0x45, 0x50, 0xCB, 0x07, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x3A, 0x0A, 0x18, 0x28, 0x5B, 0x32, 0x2D, 0x34, 0x36, 0x37, 0x39, 0x5D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x0D, 0x5B, 0x32, 0x2D, 0x34, 0x36, 0x37, 0x39, 0x5D, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2C, 0x0A, 0x16, 0x28, 0x35, 0x5B, 0x30, 0x35, 0x36, 0x5D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x35, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x30, 0x0A, 0x15, 0x28, 0x5B, 0x34, 0x36, 0x37, 0x39, 0x5D, 0x30, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x07, 0x5B, 0x34, 0x36, 0x37, 0x39, 0x5D, 0x30, 0x22, 0x02, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x20, 0x0A, 0x0E, 0x28, 0x38, 0x30, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x2C, 0x39, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x01, 0x38, 0x22, 0x02, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x8A, 0x02, 0x0A, 0x15, 0x12, 0x0A, 0x5B, 0x32, 0x2D, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x12, 0x3E, 0x12, 0x28, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x35, 0x5D, 0x5B, 0x30, 0x2D, 0x38, 0x5D, 0x7C, 0x5B, 0x33, 0x34, 0x5D, 0x5B, 0x30, 0x2D, 0x34, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x2D, 0x35, 0x5D, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x32, 0x09, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x30, 0x1A, 0x21, 0x12, 0x0D, 0x37, 0x5B, 0x30, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x37, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x41, 0x46, 0x50, 0x5D, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x2A, 0x0A, 0x17, 0x28, 0x5B, 0x32, 0x2D, 0x37, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xB9, 0x03, 0x0A, 0x1E, 0x12, 0x0B, 0x5B, 0x32, 0x35, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x12, 0x42, 0x12, 0x23, 0x32, 0x36, 0x38, 0x28, 0x3F, 0x3A, 0x34, 0x28, 0x3F, 0x3A, 0x36, 0x5B, 0x30, 0x2D, 0x33, 0x38, 0x5D, 0x7C, 0x38, 0x34, 0x29, 0x7C, 0x35, 0x36, 0x5B, 0x30, 0x2D, 0x32, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x32, 0x0A, 0x32, 0x36, 0x38, 0x34, 0x36, 0x30, 0x31, 0x32, 0x33, 0x34, 0x1A, 0x46, 0x12, 0x30, 0x32, 0x36, 0x38, 0x28, 0x3F, 0x3A, 0x34, 0x36, 0x34, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x30, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x34, 0x7C, 0x37, 0x5B, 0x30, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x32, 0x2D, 0x36, 0x38, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x32, 0x36, 0x38, 0x34, 0x36, 0x34, 0x31, 0x32, 0x33, 0x34, 0x22, 0x33, 0x12, 0x1D, 0x38, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x35, 0x35, 0x7C, 0x36, 0x36, 0x7C, 0x37, 0x37, 0x7C, 0x38, 0x38, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x30, 0x30, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x23, 0x12, 0x0D, 0x39, 0x30, 0x30, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x39, 0x30, 0x30, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x2D, 0x12, 0x17, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x33, 0x33, 0x7C, 0x34, 0x34, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x35, 0x30, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x42, 0x24, 0x12, 0x0E, 0x32, 0x36, 0x38, 0x34, 0x38, 0x5B, 0x30, 0x31, 0x5D, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x32, 0x36, 0x38, 0x34, 0x38, 0x30, 0x31, 0x32, 0x33, 0x34, 0x4A, 0x02, 0x41, 0x47, 0x50, 0x01, 0x5A, 0x03, 0x30, 0x31, 0x31, 0x62, 0x01, 0x31, 0x7A, 0x01, 0x31, 0xAA, 0x01, 0x24, 0x12, 0x0E, 0x32, 0x36, 0x38, 0x34, 0x30, 0x5B, 0x36, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x32, 0x36, 0x38, 0x34, 0x30, 0x36, 0x31, 0x32, 0x33, 0x34, 0xBA, 0x01, 0x03, 0x32, 0x36, 0x38, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xF7, 0x02, 0x0A, 0x1E, 0x12, 0x0B, 0x5B, 0x32, 0x35, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x12, 0x37, 0x12, 0x18, 0x32, 0x36, 0x34, 0x34, 0x28, 0x3F, 0x3A, 0x36, 0x5B, 0x31, 0x32, 0x5D, 0x7C, 0x39, 0x5B, 0x37, 0x38, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x32, 0x0A, 0x32, 0x36, 0x34, 0x34, 0x36, 0x31, 0x32, 0x33, 0x34, 0x35, 0x1A, 0x47, 0x12, 0x31, 0x32, 0x36, 0x34, 0x28, 0x3F, 0x3A, 0x32, 0x33, 0x35, 0x7C, 0x34, 0x37, 0x36, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x2D, 0x34, 0x5D, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x32, 0x39, 0x7C, 0x37, 0x32, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x32, 0x36, 0x34, 0x32, 0x33, 0x35, 0x31, 0x32, 0x33, 0x34, 0x22, 0x33, 0x12, 0x1D, 0x38, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x35, 0x35, 0x7C, 0x36, 0x36, 0x7C, 0x37, 0x37, 0x7C, 0x38, 0x38, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x30, 0x30, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x23, 0x12, 0x0D, 0x39, 0x30, 0x30, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x39, 0x30, 0x30, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x2D, 0x12, 0x17, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x33, 0x33, 0x7C, 0x34, 0x34, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x35, 0x30, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x41, 0x49, 0x50, 0x01, 0x5A, 0x03, 0x30, 0x31, 0x31, 0x62, 0x01, 0x31, 0x7A, 0x01, 0x31, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xBA, 0x01, 0x03, 0x32, 0x36, 0x34, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x87, 0x05, 0x0A, 0x2D, 0x12, 0x22, 0x5B, 0x32, 0x2D, 0x35, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x7C, 0x36, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x7C, 0x38, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x37, 0x7D, 0x7C, 0x39, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x39, 0x7D, 0x12, 0xAE, 0x01, 0x12, 0x98, 0x01, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x36, 0x38, 0x5D, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x32, 0x34, 0x37, 0x5D, 0x5C, 0x64, 0x7C, 0x39, 0x5B, 0x31, 0x2D, 0x37, 0x5D, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x31, 0x2D, 0x33, 0x5D, 0x7C, 0x5B, 0x32, 0x2D, 0x36, 0x5D, 0x5C, 0x64, 0x7C, 0x5B, 0x37, 0x39, 0x5D, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x34, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x31, 0x2D, 0x34, 0x5D, 0x7C, 0x5B, 0x32, 0x2D, 0x35, 0x37, 0x38, 0x5D, 0x5C, 0x64, 0x7C, 0x36, 0x5B, 0x31, 0x2D, 0x35, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x2D, 0x37, 0x5D, 0x29, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x39, 0x5D, 0x5B, 0x31, 0x2D, 0x35, 0x5D, 0x7C, 0x5B, 0x32, 0x2D, 0x36, 0x5D, 0x5C, 0x64, 0x7C, 0x5B, 0x37, 0x38, 0x5D, 0x5B, 0x31, 0x2D, 0x37, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x38, 0x7D, 0x32, 0x08, 0x32, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x1A, 0x1F, 0x12, 0x0B, 0x36, 0x5B, 0x36, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x36, 0x36, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x22, 0x1A, 0x12, 0x08, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x2A, 0x19, 0x12, 0x08, 0x39, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x32, 0x06, 0x39, 0x30, 0x30, 0x31, 0x32, 0x33, 0x32, 0x19, 0x12, 0x08, 0x38, 0x30, 0x38, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x32, 0x06, 0x38, 0x30, 0x38, 0x31, 0x32, 0x33, 0x3A, 0x1B, 0x12, 0x08, 0x37, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x37, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x41, 0x4C, 0x50, 0xE3, 0x02, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x2C, 0x0A, 0x11, 0x28, 0x34, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x06, 0x34, 0x5B, 0x30, 0x2D, 0x36, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2C, 0x0A, 0x16, 0x28, 0x36, 0x5B, 0x36, 0x2D, 0x39, 0x5D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x36, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x3C, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x12, 0x5B, 0x32, 0x33, 0x35, 0x38, 0x5D, 0x5B, 0x32, 0x2D, 0x35, 0x5D, 0x7C, 0x34, 0x5B, 0x37, 0x2D, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x3B, 0x0A, 0x10, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x35, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x19, 0x5B, 0x32, 0x33, 0x35, 0x5D, 0x5B, 0x31, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x31, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x37, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x88, 0x04, 0x0A, 0x18, 0x12, 0x0D, 0x5B, 0x31, 0x2D, 0x33, 0x36, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x38, 0x7D, 0x12, 0x5A, 0x12, 0x45, 0x28, 0x3F, 0x3A, 0x31, 0x30, 0x5C, 0x64, 0x7C, 0x32, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x32, 0x2D, 0x34, 0x36, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x7C, 0x34, 0x5B, 0x32, 0x2D, 0x36, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x32, 0x2D, 0x37, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x2D, 0x37, 0x5D, 0x29, 0x7C, 0x33, 0x5B, 0x31, 0x32, 0x5D, 0x32, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x38, 0x7D, 0x32, 0x08, 0x31, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x1A, 0x28, 0x12, 0x15, 0x28, 0x3F, 0x3A, 0x37, 0x37, 0x7C, 0x39, 0x5B, 0x31, 0x2D, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x37, 0x37, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x1B, 0x12, 0x08, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x2A, 0x1F, 0x12, 0x0C, 0x39, 0x30, 0x5B, 0x30, 0x31, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x39, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x32, 0x1F, 0x12, 0x0C, 0x38, 0x30, 0x5B, 0x31, 0x2D, 0x34, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x30, 0x31, 0x31, 0x32, 0x33, 0x34, 0x35, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x1C, 0x12, 0x09, 0x36, 0x30, 0x32, 0x37, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x36, 0x30, 0x32, 0x37, 0x31, 0x32, 0x33, 0x34, 0x4A, 0x02, 0x41, 0x4D, 0x50, 0xF6, 0x02, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x2D, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x0B, 0x5B, 0x31, 0x37, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x22, 0x05, 0x28, 0x30, 0x24, 0x31, 0x29, 0x2A, 0x00, 0x9A, 0x01, 0x21, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x01, 0x36, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x26, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x04, 0x5B, 0x32, 0x33, 0x5D, 0x22, 0x05, 0x28, 0x30, 0x24, 0x31, 0x29, 0x2A, 0x00, 0x9A, 0x01, 0x2F, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x04, 0x38, 0x7C, 0x39, 0x30, 0x22, 0x04, 0x30, 0x20, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xF6, 0x03, 0x0A, 0x19, 0x12, 0x0E, 0x5B, 0x31, 0x33, 0x2D, 0x37, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x37, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x12, 0x83, 0x01, 0x12, 0x6F, 0x28, 0x3F, 0x3A, 0x33, 0x31, 0x38, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x32, 0x35, 0x7C, 0x34, 0x5C, 0x64, 0x7C, 0x38, 0x5B, 0x32, 0x33, 0x39, 0x5D, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x35, 0x37, 0x38, 0x5D, 0x7C, 0x35, 0x30, 0x29, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x5B, 0x34, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x7C, 0x35, 0x30, 0x5C, 0x64, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x30, 0x2D, 0x32, 0x5D, 0x7C, 0x5B, 0x33, 0x34, 0x5D, 0x5C, 0x64, 0x7C, 0x36, 0x5B, 0x33, 0x35, 0x2D, 0x37, 0x5D, 0x7C, 0x37, 0x37, 0x29, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x7C, 0x34, 0x31, 0x36, 0x5B, 0x30, 0x32, 0x33, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x32, 0x07, 0x37, 0x31, 0x35, 0x31, 0x32, 0x33, 0x34, 0x1A, 0x8D, 0x01, 0x12, 0x79, 0x28, 0x3F, 0x3A, 0x33, 0x31, 0x38, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x30, 0x31, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x2D, 0x37, 0x5D, 0x7C, 0x35, 0x5C, 0x64, 0x7C, 0x38, 0x5B, 0x30, 0x31, 0x36, 0x2D, 0x38, 0x5D, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x31, 0x5D, 0x7C, 0x5B, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x35, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x32, 0x34, 0x36, 0x5D, 0x5C, 0x64, 0x7C, 0x33, 0x5B, 0x30, 0x31, 0x5D, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x36, 0x37, 0x39, 0x5D, 0x5C, 0x64, 0x7C, 0x33, 0x5B, 0x30, 0x31, 0x5D, 0x29, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x7C, 0x34, 0x31, 0x36, 0x5B, 0x31, 0x35, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x32, 0x07, 0x33, 0x31, 0x38, 0x31, 0x32, 0x33, 0x34, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x22, 0x12, 0x0E, 0x28, 0x3F, 0x3A, 0x31, 0x30, 0x7C, 0x36, 0x39, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x32, 0x07, 0x31, 0x30, 0x31, 0x31, 0x32, 0x33, 0x34, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x41, 0x4E, 0x50, 0xD7, 0x04, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x23, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x06, 0x5B, 0x31, 0x33, 0x2D, 0x37, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x24, 0x0A, 0x11, 0x28, 0x39, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x39, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xEE, 0x01, 0x0A, 0x12, 0x12, 0x09, 0x5B, 0x32, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x12, 0x31, 0x12, 0x1D, 0x32, 0x5C, 0x64, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x36, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7C, 0x5C, 0x64, 0x5B, 0x32, 0x36, 0x2D, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x32, 0x32, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x1A, 0x1F, 0x12, 0x0B, 0x39, 0x5B, 0x31, 0x2D, 0x33, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x39, 0x32, 0x33, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x41, 0x4F, 0x50, 0xF4, 0x01, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x25, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xE1, 0x0F, 0x0A, 0x19, 0x12, 0x0D, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x39, 0x2C, 0x31, 0x31, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x31, 0x32, 0x7D, 0x12, 0x22, 0x12, 0x0A, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x31, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x1A, 0x80, 0x01, 0x12, 0x67, 0x39, 0x28, 0x3F, 0x3A, 0x31, 0x31, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x7C, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x30, 0x31, 0x33, 0x5D, 0x7C, 0x33, 0x37, 0x7C, 0x36, 0x5B, 0x31, 0x34, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x37, 0x39, 0x5D, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x34, 0x5B, 0x31, 0x32, 0x33, 0x35, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x33, 0x38, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x35, 0x37, 0x38, 0x5D, 0x29, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x7C, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x29, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x31, 0x32, 0x7D, 0x32, 0x0B, 0x39, 0x31, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x22, 0x1D, 0x12, 0x07, 0x38, 0x30, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x2A, 0x26, 0x12, 0x10, 0x36, 0x28, 0x3F, 0x3A, 0x30, 0x5C, 0x64, 0x7C, 0x31, 0x30, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x36, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x41, 0x52, 0x50, 0x36, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x95, 0x04, 0x30, 0x28, 0x3F, 0x3A, 0x28, 0x31, 0x31, 0x7C, 0x32, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x30, 0x32, 0x3F, 0x7C, 0x5B, 0x31, 0x33, 0x5D, 0x7C, 0x32, 0x5B, 0x31, 0x33, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x2D, 0x36, 0x5D, 0x7C, 0x35, 0x5B, 0x32, 0x34, 0x35, 0x37, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x32, 0x34, 0x2D, 0x38, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x2D, 0x34, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x33, 0x2D, 0x36, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x2D, 0x33, 0x36, 0x37, 0x5D, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x36, 0x5D, 0x32, 0x7C, 0x31, 0x5B, 0x34, 0x36, 0x37, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x32, 0x2D, 0x36, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x33, 0x2D, 0x38, 0x5D, 0x7C, 0x5B, 0x34, 0x39, 0x5D, 0x5B, 0x32, 0x2D, 0x36, 0x5D, 0x7C, 0x35, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x7C, 0x37, 0x29, 0x7C, 0x34, 0x37, 0x5B, 0x33, 0x2D, 0x35, 0x37, 0x38, 0x5D, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x31, 0x7C, 0x32, 0x5B, 0x32, 0x2D, 0x37, 0x5D, 0x7C, 0x34, 0x5B, 0x36, 0x2D, 0x38, 0x5D, 0x3F, 0x7C, 0x35, 0x5B, 0x31, 0x32, 0x35, 0x2D, 0x38, 0x5D, 0x29, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x31, 0x2D, 0x33, 0x5D, 0x7C, 0x5B, 0x31, 0x39, 0x5D, 0x7C, 0x32, 0x5C, 0x64, 0x7C, 0x33, 0x5B, 0x31, 0x2D, 0x36, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x2D, 0x32, 0x34, 0x2D, 0x36, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x32, 0x2D, 0x34, 0x5D, 0x7C, 0x36, 0x5B, 0x32, 0x2D, 0x36, 0x5D, 0x7C, 0x37, 0x32, 0x3F, 0x7C, 0x38, 0x5B, 0x32, 0x33, 0x5D, 0x3F, 0x29, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x33, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x37, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x32, 0x35, 0x37, 0x38, 0x5D, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x31, 0x32, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x31, 0x32, 0x5D, 0x7C, 0x33, 0x5B, 0x35, 0x2D, 0x38, 0x5D, 0x3F, 0x7C, 0x34, 0x5B, 0x32, 0x34, 0x2D, 0x37, 0x5D, 0x7C, 0x35, 0x5B, 0x34, 0x2D, 0x36, 0x38, 0x5D, 0x3F, 0x7C, 0x36, 0x5C, 0x64, 0x7C, 0x37, 0x5B, 0x31, 0x32, 0x36, 0x5D, 0x7C, 0x38, 0x5B, 0x32, 0x33, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x2D, 0x33, 0x36, 0x2D, 0x38, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x31, 0x7C, 0x32, 0x5B, 0x31, 0x32, 0x34, 0x35, 0x5D, 0x7C, 0x33, 0x5B, 0x32, 0x2D, 0x34, 0x5D, 0x3F, 0x7C, 0x34, 0x5B, 0x31, 0x2D, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x32, 0x2D, 0x34, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x2D, 0x36, 0x5D, 0x7C, 0x38, 0x5B, 0x32, 0x2D, 0x35, 0x5D, 0x3F, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x31, 0x35, 0x2D, 0x38, 0x5D, 0x7C, 0x32, 0x5B, 0x31, 0x32, 0x35, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x32, 0x34, 0x35, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x33, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x32, 0x34, 0x2D, 0x38, 0x5D, 0x7C, 0x37, 0x5B, 0x32, 0x2D, 0x35, 0x37, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x2D, 0x33, 0x36, 0x5D, 0x29, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x31, 0x7C, 0x32, 0x5B, 0x31, 0x32, 0x35, 0x2D, 0x37, 0x5D, 0x7C, 0x33, 0x5B, 0x32, 0x33, 0x35, 0x37, 0x38, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x33, 0x2D, 0x36, 0x5D, 0x7C, 0x35, 0x5B, 0x34, 0x2D, 0x38, 0x5D, 0x3F, 0x7C, 0x36, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x35, 0x2D, 0x38, 0x5D, 0x3F, 0x7C, 0x38, 0x5B, 0x34, 0x2D, 0x37, 0x5D, 0x3F, 0x7C, 0x39, 0x5B, 0x31, 0x32, 0x34, 0x5D, 0x29, 0x29, 0x29, 0x31, 0x35, 0x29, 0x3F, 0x82, 0x01, 0x03, 0x39, 0x24, 0x31, 0x9A, 0x01, 0x32, 0x0A, 0x19, 0x28, 0x5B, 0x36, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x04, 0x5B, 0x36, 0x38, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2D, 0x0A, 0x13, 0x39, 0x28, 0x31, 0x31, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x31, 0x35, 0x2D, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x02, 0x39, 0x31, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x7F, 0x0A, 0x16, 0x39, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x31, 0x35, 0x2D, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x13, 0x39, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x32, 0x33, 0x36, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x34, 0x35, 0x38, 0x5D, 0x29, 0x1A, 0x3C, 0x39, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x30, 0x31, 0x33, 0x5D, 0x7C, 0x33, 0x37, 0x7C, 0x36, 0x5B, 0x31, 0x34, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x37, 0x39, 0x5D, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x34, 0x5B, 0x31, 0x32, 0x33, 0x35, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x33, 0x38, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x35, 0x37, 0x38, 0x5D, 0x29, 0x29, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x9F, 0x01, 0x0A, 0x16, 0x39, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x31, 0x35, 0x2D, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x16, 0x39, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x32, 0x2D, 0x34, 0x36, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x33, 0x2D, 0x35, 0x37, 0x38, 0x5D, 0x29, 0x1A, 0x59, 0x39, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x32, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x2D, 0x36, 0x39, 0x5D, 0x7C, 0x34, 0x37, 0x7C, 0x36, 0x5B, 0x32, 0x35, 0x5D, 0x7C, 0x39, 0x5B, 0x30, 0x32, 0x2D, 0x36, 0x38, 0x5D, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x32, 0x38, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x32, 0x34, 0x36, 0x37, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x2D, 0x35, 0x37, 0x38, 0x5D, 0x7C, 0x38, 0x5B, 0x32, 0x33, 0x34, 0x36, 0x39, 0x5D, 0x29, 0x29, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x28, 0x0A, 0x12, 0x28, 0x31, 0x31, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x01, 0x31, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x61, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x37, 0x32, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x30, 0x31, 0x33, 0x5D, 0x7C, 0x33, 0x37, 0x7C, 0x36, 0x5B, 0x31, 0x34, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x37, 0x39, 0x5D, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x34, 0x5B, 0x31, 0x32, 0x33, 0x35, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x33, 0x38, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x35, 0x37, 0x38, 0x5D, 0x29, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2E, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x04, 0x5B, 0x32, 0x33, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xA2, 0x01, 0x2D, 0x0A, 0x19, 0x28, 0x5B, 0x36, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x04, 0x5B, 0x36, 0x38, 0x5D, 0x2A, 0x00, 0xA2, 0x01, 0x27, 0x0A, 0x13, 0x39, 0x28, 0x31, 0x31, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x0A, 0x39, 0x20, 0x24, 0x31, 0x20, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x02, 0x39, 0x31, 0x2A, 0x00, 0xA2, 0x01, 0x79, 0x0A, 0x16, 0x39, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x0A, 0x39, 0x20, 0x24, 0x31, 0x20, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x13, 0x39, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x32, 0x33, 0x36, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x34, 0x35, 0x38, 0x5D, 0x29, 0x1A, 0x3C, 0x39, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x30, 0x31, 0x33, 0x5D, 0x7C, 0x33, 0x37, 0x7C, 0x36, 0x5B, 0x31, 0x34, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x37, 0x39, 0x5D, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x34, 0x5B, 0x31, 0x32, 0x33, 0x35, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x33, 0x38, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x35, 0x37, 0x38, 0x5D, 0x29, 0x29, 0x2A, 0x00, 0xA2, 0x01, 0x99, 0x01, 0x0A, 0x16, 0x39, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x0A, 0x39, 0x20, 0x24, 0x31, 0x20, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x16, 0x39, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x32, 0x2D, 0x34, 0x36, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x33, 0x2D, 0x35, 0x37, 0x38, 0x5D, 0x29, 0x1A, 0x59, 0x39, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x32, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x2D, 0x36, 0x39, 0x5D, 0x7C, 0x34, 0x37, 0x7C, 0x36, 0x5B, 0x32, 0x35, 0x5D, 0x7C, 0x39, 0x5B, 0x30, 0x32, 0x2D, 0x36, 0x38, 0x5D, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x32, 0x38, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x32, 0x34, 0x36, 0x37, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x2D, 0x35, 0x37, 0x38, 0x5D, 0x7C, 0x38, 0x5B, 0x32, 0x33, 0x34, 0x36, 0x39, 0x5D, 0x29, 0x29, 0x2A, 0x00, 0xA2, 0x01, 0x23, 0x0A, 0x12, 0x28, 0x31, 0x31, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x01, 0x31, 0x2A, 0x00, 0xA2, 0x01, 0x5C, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x37, 0x32, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x30, 0x31, 0x33, 0x5D, 0x7C, 0x33, 0x37, 0x7C, 0x36, 0x5B, 0x31, 0x34, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x37, 0x39, 0x5D, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x34, 0x5B, 0x31, 0x32, 0x33, 0x35, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x33, 0x38, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x35, 0x37, 0x38, 0x5D, 0x29, 0x2A, 0x00, 0xA2, 0x01, 0x29, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x04, 0x5B, 0x32, 0x33, 0x5D, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xE5, 0x02, 0x0A, 0x1E, 0x12, 0x0B, 0x5B, 0x35, 0x36, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x12, 0x43, 0x12, 0x24, 0x36, 0x38, 0x34, 0x36, 0x28, 0x3F, 0x3A, 0x32, 0x32, 0x7C, 0x33, 0x33, 0x7C, 0x34, 0x34, 0x7C, 0x35, 0x35, 0x7C, 0x37, 0x37, 0x7C, 0x38, 0x38, 0x7C, 0x39, 0x5B, 0x31, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x32, 0x0A, 0x36, 0x38, 0x34, 0x36, 0x32, 0x32, 0x31, 0x32, 0x33, 0x34, 0x1A, 0x29, 0x12, 0x13, 0x36, 0x38, 0x34, 0x28, 0x3F, 0x3A, 0x37, 0x33, 0x33, 0x7C, 0x32, 0x35, 0x38, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x36, 0x38, 0x34, 0x37, 0x33, 0x33, 0x31, 0x32, 0x33, 0x34, 0x22, 0x33, 0x12, 0x1D, 0x38, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x35, 0x35, 0x7C, 0x36, 0x36, 0x7C, 0x37, 0x37, 0x7C, 0x38, 0x38, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x30, 0x30, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x23, 0x12, 0x0D, 0x39, 0x30, 0x30, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x39, 0x30, 0x30, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x2D, 0x12, 0x17, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x33, 0x33, 0x7C, 0x34, 0x34, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x35, 0x30, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x41, 0x53, 0x50, 0x01, 0x5A, 0x03, 0x30, 0x31, 0x31, 0x62, 0x01, 0x31, 0x7A, 0x01, 0x31, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xBA, 0x01, 0x03, 0x36, 0x38, 0x34, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xC9, 0x07, 0x0A, 0x14, 0x12, 0x08, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x31, 0x33, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x31, 0x33, 0x7D, 0x12, 0xF3, 0x02, 0x12, 0xDA, 0x02, 0x31, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x31, 0x32, 0x7D, 0x7C, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x34, 0x36, 0x37, 0x5D, 0x7C, 0x32, 0x5B, 0x31, 0x33, 0x34, 0x2D, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x32, 0x33, 0x35, 0x37, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x2D, 0x34, 0x36, 0x2D, 0x38, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x32, 0x34, 0x2D, 0x37, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x34, 0x35, 0x38, 0x5D, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x7C, 0x33, 0x5B, 0x32, 0x33, 0x35, 0x36, 0x38, 0x5D, 0x7C, 0x34, 0x5B, 0x35, 0x2D, 0x37, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x33, 0x37, 0x38, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x2D, 0x33, 0x38, 0x5D, 0x7C, 0x38, 0x5B, 0x33, 0x2D, 0x36, 0x38, 0x5D, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x7C, 0x33, 0x35, 0x7C, 0x36, 0x33, 0x7C, 0x37, 0x5B, 0x31, 0x33, 0x36, 0x38, 0x5D, 0x7C, 0x38, 0x5B, 0x32, 0x34, 0x35, 0x37, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x32, 0x37, 0x5D, 0x7C, 0x32, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x7C, 0x33, 0x5B, 0x33, 0x35, 0x37, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x34, 0x37, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x32, 0x35, 0x37, 0x38, 0x5D, 0x7C, 0x36, 0x5B, 0x33, 0x37, 0x5D, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x31, 0x33, 0x7C, 0x32, 0x5B, 0x31, 0x2D, 0x34, 0x37, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x2D, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x34, 0x36, 0x38, 0x5D, 0x7C, 0x36, 0x32, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x7C, 0x33, 0x5B, 0x32, 0x35, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x33, 0x34, 0x37, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x36, 0x38, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x36, 0x2D, 0x38, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x2D, 0x36, 0x5D, 0x7C, 0x39, 0x5B, 0x34, 0x35, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x31, 0x30, 0x7D, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x37, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x32, 0x2C, 0x31, 0x30, 0x7D, 0x7C, 0x37, 0x32, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x31, 0x30, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x31, 0x33, 0x7D, 0x32, 0x0A, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x30, 0x1A, 0x41, 0x12, 0x2A, 0x36, 0x28, 0x3F, 0x3A, 0x34, 0x34, 0x7C, 0x35, 0x5B, 0x30, 0x2D, 0x33, 0x35, 0x37, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x31, 0x33, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x37, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x31, 0x30, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x31, 0x33, 0x7D, 0x32, 0x09, 0x36, 0x34, 0x34, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x25, 0x12, 0x0E, 0x38, 0x30, 0x5B, 0x30, 0x32, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x31, 0x30, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x39, 0x2C, 0x31, 0x33, 0x7D, 0x32, 0x09, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x38, 0x12, 0x21, 0x28, 0x3F, 0x3A, 0x37, 0x31, 0x31, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x31, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x31, 0x39, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x31, 0x30, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x39, 0x2C, 0x31, 0x33, 0x7D, 0x32, 0x09, 0x39, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x2D, 0x12, 0x16, 0x38, 0x28, 0x3F, 0x3A, 0x31, 0x30, 0x7C, 0x32, 0x5B, 0x30, 0x31, 0x38, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x31, 0x30, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x39, 0x2C, 0x31, 0x33, 0x7D, 0x32, 0x09, 0x38, 0x31, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x22, 0x12, 0x0B, 0x37, 0x38, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x31, 0x30, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x39, 0x2C, 0x31, 0x33, 0x7D, 0x32, 0x09, 0x37, 0x38, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x4A, 0x02, 0x41, 0x54, 0x50, 0x2B, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x2A, 0x0A, 0x10, 0x28, 0x5B, 0x31, 0x35, 0x5D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x31, 0x32, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x08, 0x31, 0x7C, 0x35, 0x5B, 0x30, 0x37, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x5A, 0x0A, 0x11, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x31, 0x30, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x37, 0x33, 0x31, 0x36, 0x7C, 0x34, 0x36, 0x7C, 0x35, 0x31, 0x7C, 0x37, 0x33, 0x32, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x34, 0x34, 0x7C, 0x35, 0x5B, 0x30, 0x2D, 0x33, 0x35, 0x37, 0x39, 0x5D, 0x7C, 0x5B, 0x36, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x31, 0x7C, 0x5B, 0x32, 0x38, 0x5D, 0x30, 0x29, 0x7C, 0x5B, 0x38, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x7E, 0x0A, 0x10, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x39, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x5C, 0x32, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x31, 0x2D, 0x35, 0x37, 0x38, 0x5D, 0x7C, 0x5B, 0x33, 0x2D, 0x38, 0x5D, 0x29, 0x7C, 0x34, 0x5B, 0x32, 0x33, 0x37, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x32, 0x2D, 0x36, 0x5D, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x32, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x34, 0x36, 0x38, 0x5D, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x7C, 0x33, 0x35, 0x7C, 0x34, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x7C, 0x5B, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x29, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xEA, 0x05, 0x0A, 0x1A, 0x12, 0x0E, 0x5B, 0x31, 0x2D, 0x35, 0x37, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x39, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x31, 0x30, 0x7D, 0x12, 0x21, 0x12, 0x0B, 0x5B, 0x32, 0x33, 0x37, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x38, 0x2C, 0x39, 0x7D, 0x32, 0x09, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x1A, 0x57, 0x12, 0x43, 0x34, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x2D, 0x32, 0x5D, 0x5C, 0x64, 0x7C, 0x33, 0x5B, 0x30, 0x2D, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x34, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x2D, 0x33, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x37, 0x2D, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x34, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x22, 0x3D, 0x12, 0x25, 0x31, 0x28, 0x3F, 0x3A, 0x38, 0x30, 0x28, 0x3F, 0x3A, 0x30, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x3F, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x3F, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x31, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x24, 0x12, 0x0E, 0x31, 0x39, 0x30, 0x5B, 0x30, 0x31, 0x32, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x31, 0x39, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x1C, 0x12, 0x08, 0x35, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x35, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x42, 0x1C, 0x12, 0x08, 0x35, 0x35, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x35, 0x35, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x4A, 0x02, 0x41, 0x55, 0x50, 0x3D, 0x5A, 0x33, 0x28, 0x3F, 0x3A, 0x31, 0x34, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x31, 0x34, 0x5D, 0x7C, 0x33, 0x34, 0x7C, 0x34, 0x5B, 0x31, 0x37, 0x5D, 0x7C, 0x5B, 0x35, 0x36, 0x5D, 0x36, 0x7C, 0x37, 0x5B, 0x34, 0x37, 0x5D, 0x7C, 0x38, 0x38, 0x29, 0x29, 0x3F, 0x30, 0x30, 0x31, 0x5B, 0x31, 0x34, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x8A, 0x01, 0x04, 0x30, 0x30, 0x31, 0x31, 0x9A, 0x01, 0x33, 0x0A, 0x16, 0x28, 0x5B, 0x32, 0x33, 0x37, 0x38, 0x5D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x06, 0x5B, 0x32, 0x33, 0x37, 0x38, 0x5D, 0x22, 0x05, 0x28, 0x30, 0x24, 0x31, 0x29, 0x2A, 0x00, 0x9A, 0x01, 0x2C, 0x0A, 0x16, 0x28, 0x34, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x34, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2C, 0x0A, 0x16, 0x28, 0x35, 0x5B, 0x30, 0x35, 0x5D, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x35, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x4A, 0x0A, 0x1B, 0x28, 0x31, 0x5B, 0x33, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x0C, 0x31, 0x28, 0x3F, 0x3A, 0x5B, 0x33, 0x38, 0x5D, 0x30, 0x7C, 0x39, 0x29, 0x1A, 0x0D, 0x31, 0x28, 0x3F, 0x3A, 0x5B, 0x33, 0x38, 0x5D, 0x30, 0x30, 0x7C, 0x39, 0x29, 0x22, 0x02, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2A, 0x0A, 0x0C, 0x28, 0x31, 0x38, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x03, 0x31, 0x38, 0x30, 0x1A, 0x08, 0x31, 0x38, 0x30, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x22, 0x02, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2D, 0x0A, 0x12, 0x28, 0x31, 0x33, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x07, 0x31, 0x33, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x22, 0x02, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xBA, 0x02, 0x0A, 0x13, 0x12, 0x0A, 0x5B, 0x35, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x12, 0x3D, 0x12, 0x2B, 0x35, 0x28, 0x3F, 0x3A, 0x32, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x2D, 0x37, 0x5D, 0x5C, 0x64, 0x7C, 0x38, 0x5B, 0x30, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x34, 0x38, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x35, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x1A, 0x3F, 0x12, 0x2D, 0x28, 0x3F, 0x3A, 0x35, 0x5B, 0x36, 0x39, 0x5D, 0x5C, 0x64, 0x7C, 0x36, 0x36, 0x30, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x36, 0x5C, 0x64, 0x7C, 0x39, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x37, 0x5B, 0x33, 0x34, 0x5D, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x35, 0x36, 0x30, 0x31, 0x32, 0x33, 0x34, 0x22, 0x1A, 0x12, 0x08, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x2A, 0x1A, 0x12, 0x08, 0x39, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x39, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x41, 0x57, 0x50, 0xA9, 0x02, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x20, 0x0A, 0x13, 0x28, 0x5B, 0x35, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xF1, 0x05, 0x0A, 0x17, 0x12, 0x0C, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x39, 0x7D, 0x12, 0xA5, 0x01, 0x12, 0x8E, 0x01, 0x28, 0x3F, 0x3A, 0x31, 0x28, 0x3F, 0x3A, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x38, 0x5D, 0x5C, 0x64, 0x7C, 0x39, 0x29, 0x5C, 0x64, 0x7C, 0x30, 0x32, 0x7C, 0x31, 0x5B, 0x30, 0x2D, 0x35, 0x38, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x33, 0x35, 0x38, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x31, 0x33, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x2D, 0x34, 0x37, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x32, 0x33, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x2D, 0x32, 0x34, 0x2D, 0x38, 0x5D, 0x29, 0x7C, 0x32, 0x28, 0x3F, 0x3A, 0x31, 0x36, 0x7C, 0x32, 0x5C, 0x64, 0x7C, 0x33, 0x5B, 0x30, 0x2D, 0x32, 0x34, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x34, 0x36, 0x38, 0x5D, 0x7C, 0x35, 0x35, 0x7C, 0x36, 0x5B, 0x35, 0x36, 0x5D, 0x7C, 0x37, 0x39, 0x29, 0x7C, 0x33, 0x36, 0x35, 0x3F, 0x5C, 0x64, 0x7C, 0x34, 0x34, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x39, 0x7D, 0x32, 0x09, 0x31, 0x32, 0x33, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x1A, 0x2F, 0x12, 0x1B, 0x28, 0x3F, 0x3A, 0x5B, 0x34, 0x36, 0x5D, 0x30, 0x7C, 0x35, 0x5B, 0x30, 0x31, 0x35, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x37, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x34, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x22, 0x1B, 0x12, 0x07, 0x38, 0x38, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x38, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x2A, 0x1F, 0x12, 0x0B, 0x39, 0x30, 0x30, 0x32, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x39, 0x30, 0x30, 0x32, 0x30, 0x30, 0x31, 0x32, 0x33, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x41, 0x5A, 0x50, 0xE2, 0x07, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x3B, 0x0A, 0x1C, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x05, 0x31, 0x5B, 0x32, 0x38, 0x5D, 0x22, 0x05, 0x28, 0x30, 0x24, 0x31, 0x29, 0x2A, 0x00, 0x9A, 0x01, 0x38, 0x0A, 0x1C, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x02, 0x32, 0x32, 0x22, 0x05, 0x28, 0x30, 0x24, 0x31, 0x29, 0x2A, 0x00, 0x9A, 0x01, 0x39, 0x0A, 0x1E, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x2C, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x01, 0x33, 0x22, 0x05, 0x28, 0x30, 0x24, 0x31, 0x29, 0x2A, 0x00, 0x9A, 0x01, 0x45, 0x0A, 0x19, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x12, 0x31, 0x5B, 0x30, 0x31, 0x33, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x31, 0x33, 0x2D, 0x39, 0x5D, 0x22, 0x05, 0x28, 0x30, 0x24, 0x31, 0x29, 0x2A, 0x00, 0x9A, 0x01, 0x39, 0x0A, 0x1C, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x05, 0x5B, 0x34, 0x2D, 0x38, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x35, 0x0A, 0x1C, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x01, 0x39, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xC7, 0x02, 0x0A, 0x17, 0x12, 0x0C, 0x5B, 0x33, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x38, 0x7D, 0x12, 0x27, 0x12, 0x12, 0x28, 0x3F, 0x3A, 0x5B, 0x33, 0x35, 0x5D, 0x5C, 0x64, 0x7C, 0x34, 0x39, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x38, 0x7D, 0x32, 0x08, 0x33, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x1A, 0x20, 0x12, 0x0D, 0x36, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x36, 0x31, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x1D, 0x12, 0x0A, 0x38, 0x5B, 0x30, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x1F, 0x12, 0x0C, 0x39, 0x5B, 0x30, 0x32, 0x34, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x39, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x1A, 0x12, 0x07, 0x38, 0x32, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x42, 0x41, 0x50, 0x83, 0x03, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x2C, 0x0A, 0x19, 0x28, 0x5B, 0x33, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x1A, 0x12, 0x07, 0x38, 0x31, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x31, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x0A, 0xE1, 0x02, 0x0A, 0x1E, 0x12, 0x0B, 0x5B, 0x32, 0x35, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x12, 0x2C, 0x12, 0x0D, 0x32, 0x34, 0x36, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x32, 0x0A, 0x32, 0x34, 0x36, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x1A, 0x3C, 0x12, 0x26, 0x32, 0x34, 0x36, 0x28, 0x3F, 0x3A, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x33, 0x34, 0x36, 0x5D, 0x7C, 0x34, 0x35, 0x7C, 0x38, 0x32, 0x29, 0x5C, 0x64, 0x7C, 0x32, 0x35, 0x5B, 0x30, 0x2D, 0x34, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x32, 0x34, 0x36, 0x32, 0x35, 0x30, 0x31, 0x32, 0x33, 0x34, 0x22, 0x33, 0x12, 0x1D, 0x38, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x35, 0x35, 0x7C, 0x36, 0x36, 0x7C, 0x37, 0x37, 0x7C, 0x38, 0x38, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x30, 0x30, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x23, 0x12, 0x0D, 0x39, 0x30, 0x30, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x39, 0x30, 0x30, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x2D, 0x12, 0x17, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x33, 0x33, 0x7C, 0x34, 0x34, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x35, 0x30, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x42, 0x42, 0x50, 0x01, 0x5A, 0x03, 0x30, 0x31, 0x31, 0x62, 0x01, 0x31, 0x7A, 0x01, 0x31, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xBA, 0x01, 0x03, 0x32, 0x34, 0x36, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xCD, 0x07, 0x0A, 0x2E, 0x12, 0x22, 0x5B, 0x32, 0x2D, 0x37, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x39, 0x7D, 0x7C, 0x31, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x7C, 0x38, 0x5B, 0x30, 0x2D, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x38, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x31, 0x30, 0x7D, 0x12, 0xA4, 0x04, 0x12, 0x8E, 0x04, 0x32, 0x28, 0x3F, 0x3A, 0x37, 0x5C, 0x64, 0x31, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x32, 0x36, 0x5D, 0x31, 0x7C, 0x5B, 0x31, 0x33, 0x37, 0x39, 0x5D, 0x5B, 0x31, 0x2D, 0x35, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x29, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x2D, 0x32, 0x5D, 0x7C, 0x31, 0x5B, 0x31, 0x2D, 0x34, 0x5D, 0x7C, 0x33, 0x5B, 0x33, 0x2D, 0x35, 0x5D, 0x7C, 0x35, 0x5B, 0x35, 0x36, 0x5D, 0x7C, 0x36, 0x5B, 0x36, 0x37, 0x5D, 0x7C, 0x37, 0x31, 0x7C, 0x38, 0x5B, 0x30, 0x37, 0x38, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x5B, 0x36, 0x2D, 0x38, 0x5D, 0x31, 0x7C, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x32, 0x33, 0x5D, 0x7C, 0x5B, 0x32, 0x35, 0x5D, 0x5B, 0x31, 0x32, 0x5D, 0x7C, 0x38, 0x32, 0x7C, 0x34, 0x31, 0x36, 0x29, 0x5C, 0x64, 0x7C, 0x28, 0x3F, 0x3A, 0x33, 0x31, 0x7C, 0x31, 0x32, 0x3F, 0x5B, 0x35, 0x2D, 0x37, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x28, 0x3F, 0x3A, 0x30, 0x32, 0x7C, 0x5B, 0x34, 0x39, 0x5D, 0x36, 0x7C, 0x5B, 0x36, 0x38, 0x5D, 0x31, 0x29, 0x7C, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x31, 0x33, 0x5D, 0x7C, 0x32, 0x31, 0x5C, 0x64, 0x3F, 0x7C, 0x5B, 0x32, 0x33, 0x5D, 0x32, 0x7C, 0x5B, 0x34, 0x35, 0x37, 0x5D, 0x5B, 0x31, 0x32, 0x5D, 0x7C, 0x36, 0x5B, 0x32, 0x38, 0x5D, 0x29, 0x5C, 0x64, 0x7C, 0x28, 0x3F, 0x3A, 0x32, 0x33, 0x7C, 0x5B, 0x33, 0x39, 0x5D, 0x31, 0x29, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x7C, 0x31, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x28, 0x3F, 0x3A, 0x5B, 0x34, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x31, 0x7C, 0x36, 0x32, 0x29, 0x7C, 0x28, 0x3F, 0x3A, 0x31, 0x5C, 0x64, 0x3F, 0x7C, 0x32, 0x5B, 0x31, 0x32, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x2D, 0x33, 0x5D, 0x7C, 0x35, 0x32, 0x29, 0x5C, 0x64, 0x7C, 0x36, 0x31, 0x7B, 0x32, 0x7D, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x5B, 0x34, 0x35, 0x5D, 0x31, 0x7C, 0x28, 0x3F, 0x3A, 0x31, 0x31, 0x7C, 0x32, 0x5B, 0x31, 0x35, 0x5D, 0x7C, 0x5B, 0x33, 0x39, 0x5D, 0x31, 0x29, 0x5C, 0x64, 0x7C, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x36, 0x2D, 0x38, 0x5D, 0x31, 0x7C, 0x36, 0x32, 0x29, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x28, 0x3F, 0x3A, 0x33, 0x32, 0x7C, 0x39, 0x31, 0x29, 0x7C, 0x28, 0x3F, 0x3A, 0x30, 0x32, 0x7C, 0x33, 0x31, 0x7C, 0x5B, 0x36, 0x37, 0x5D, 0x5B, 0x31, 0x32, 0x5D, 0x29, 0x5C, 0x64, 0x7C, 0x5B, 0x34, 0x35, 0x38, 0x5D, 0x31, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x7C, 0x32, 0x31, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x28, 0x3F, 0x3A, 0x34, 0x5B, 0x31, 0x32, 0x5D, 0x7C, 0x5B, 0x35, 0x2D, 0x37, 0x5D, 0x32, 0x7C, 0x31, 0x5C, 0x64, 0x3F, 0x29, 0x7C, 0x28, 0x3F, 0x3A, 0x30, 0x7C, 0x33, 0x5B, 0x31, 0x32, 0x5D, 0x7C, 0x5B, 0x35, 0x2D, 0x37, 0x5D, 0x31, 0x7C, 0x32, 0x31, 0x37, 0x29, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x5B, 0x33, 0x35, 0x5D, 0x31, 0x7C, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x32, 0x34, 0x5D, 0x32, 0x7C, 0x38, 0x31, 0x29, 0x5C, 0x64, 0x7C, 0x28, 0x3F, 0x3A, 0x31, 0x7C, 0x5B, 0x32, 0x34, 0x5D, 0x31, 0x29, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x39, 0x7D, 0x32, 0x08, 0x32, 0x37, 0x31, 0x31, 0x31, 0x32, 0x33, 0x34, 0x1A, 0x4B, 0x12, 0x35, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x31, 0x33, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7C, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x37, 0x38, 0x5D, 0x7C, 0x34, 0x34, 0x29, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x34, 0x34, 0x7C, 0x36, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x31, 0x38, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x22, 0x21, 0x12, 0x0B, 0x38, 0x30, 0x5B, 0x30, 0x33, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x42, 0x44, 0x50, 0xF0, 0x06, 0x5A, 0x07, 0x30, 0x30, 0x5B, 0x31, 0x32, 0x5D, 0x3F, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x8A, 0x01, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x1D, 0x0A, 0x0A, 0x28, 0x32, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x01, 0x32, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x29, 0x0A, 0x10, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x36, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x07, 0x5B, 0x33, 0x2D, 0x37, 0x39, 0x5D, 0x31, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2F, 0x0A, 0x10, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x37, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x0D, 0x5B, 0x33, 0x2D, 0x37, 0x39, 0x5D, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x21, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x01, 0x31, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xEF, 0x04, 0x0A, 0x17, 0x12, 0x0C, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x38, 0x2C, 0x39, 0x7D, 0x12, 0x66, 0x12, 0x53, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x30, 0x2D, 0x36, 0x39, 0x5D, 0x7C, 0x5B, 0x32, 0x33, 0x5D, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x7C, 0x5B, 0x34, 0x39, 0x5D, 0x5B, 0x32, 0x33, 0x5D, 0x7C, 0x35, 0x5C, 0x64, 0x7C, 0x36, 0x5B, 0x30, 0x31, 0x33, 0x2D, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x38, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x31, 0x2D, 0x36, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x1A, 0x2F, 0x12, 0x1B, 0x34, 0x28, 0x3F, 0x3A, 0x37, 0x5C, 0x64, 0x7C, 0x38, 0x5B, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x34, 0x37, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x1B, 0x12, 0x08, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x2A, 0x24, 0x12, 0x11, 0x28, 0x3F, 0x3A, 0x39, 0x30, 0x7C, 0x37, 0x5B, 0x30, 0x37, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x39, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x1A, 0x12, 0x07, 0x38, 0x37, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x37, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x42, 0x45, 0x50, 0x20, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x3D, 0x0A, 0x1F, 0x28, 0x34, 0x5B, 0x37, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x06, 0x34, 0x5B, 0x37, 0x2D, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x42, 0x0A, 0x1D, 0x28, 0x5B, 0x32, 0x2D, 0x34, 0x39, 0x5D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x0D, 0x5B, 0x32, 0x33, 0x5D, 0x7C, 0x5B, 0x34, 0x39, 0x5D, 0x5B, 0x32, 0x33, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x57, 0x0A, 0x1F, 0x28, 0x5B, 0x31, 0x35, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x20, 0x5B, 0x31, 0x35, 0x36, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x31, 0x37, 0x38, 0x5D, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x31, 0x2D, 0x37, 0x39, 0x5D, 0x29, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x37, 0x0A, 0x19, 0x28, 0x5B, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x09, 0x28, 0x3F, 0x3A, 0x38, 0x30, 0x7C, 0x39, 0x29, 0x30, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xCB, 0x02, 0x0A, 0x14, 0x12, 0x0B, 0x5B, 0x32, 0x34, 0x35, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x12, 0x54, 0x12, 0x41, 0x28, 0x3F, 0x3A, 0x32, 0x30, 0x28, 0x3F, 0x3A, 0x34, 0x39, 0x7C, 0x35, 0x5B, 0x32, 0x33, 0x5D, 0x7C, 0x39, 0x5B, 0x30, 0x31, 0x36, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x34, 0x30, 0x28, 0x3F, 0x3A, 0x34, 0x5B, 0x35, 0x36, 0x39, 0x5D, 0x7C, 0x35, 0x35, 0x7C, 0x37, 0x5B, 0x30, 0x31, 0x37, 0x39, 0x5D, 0x29, 0x7C, 0x35, 0x30, 0x5B, 0x33, 0x34, 0x5D, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x32, 0x30, 0x34, 0x39, 0x31, 0x32, 0x33, 0x34, 0x1A, 0x4D, 0x12, 0x3A, 0x37, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x32, 0x34, 0x2D, 0x36, 0x5D, 0x5C, 0x64, 0x7C, 0x31, 0x5B, 0x30, 0x2D, 0x34, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x2D, 0x36, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x31, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x31, 0x33, 0x2D, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x30, 0x2D, 0x34, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x37, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x42, 0x46, 0x50, 0xE2, 0x01, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x2F, 0x0A, 0x1C, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xC3, 0x05, 0x0A, 0x17, 0x12, 0x0C, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x38, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x12, 0x73, 0x12, 0x5F, 0x28, 0x3F, 0x3A, 0x32, 0x5C, 0x64, 0x7C, 0x5B, 0x33, 0x36, 0x5D, 0x5C, 0x64, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x2D, 0x36, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x2D, 0x37, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x36, 0x7D, 0x7C, 0x28, 0x3F, 0x3A, 0x34, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x32, 0x34, 0x2D, 0x37, 0x5D, 0x5C, 0x64, 0x7C, 0x33, 0x5B, 0x31, 0x2D, 0x36, 0x5D, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x35, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x32, 0x07, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x1A, 0x3D, 0x12, 0x28, 0x28, 0x3F, 0x3A, 0x38, 0x5B, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x39, 0x38, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x30, 0x37, 0x38, 0x39, 0x5D, 0x7C, 0x38, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x38, 0x2C, 0x39, 0x7D, 0x32, 0x08, 0x34, 0x38, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x1B, 0x12, 0x08, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x2A, 0x1A, 0x12, 0x07, 0x39, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x39, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x1D, 0x12, 0x08, 0x37, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x32, 0x08, 0x37, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x42, 0x47, 0x50, 0xE7, 0x02, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x29, 0x0A, 0x13, 0x28, 0x32, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x2F, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x32, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x31, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x2F, 0x24, 0x32, 0x1A, 0x11, 0x34, 0x33, 0x5B, 0x31, 0x32, 0x34, 0x2D, 0x37, 0x5D, 0x7C, 0x37, 0x30, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x3B, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x2F, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x11, 0x34, 0x33, 0x5B, 0x31, 0x32, 0x34, 0x2D, 0x37, 0x5D, 0x7C, 0x37, 0x30, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x30, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x06, 0x5B, 0x37, 0x38, 0x5D, 0x30, 0x30, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x46, 0x0A, 0x17, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x2C, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x2F, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x1A, 0x5B, 0x33, 0x35, 0x36, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x2D, 0x36, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x2D, 0x37, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x3B, 0x0A, 0x17, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x0F, 0x34, 0x38, 0x7C, 0x38, 0x5B, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x30, 0x38, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xFD, 0x02, 0x0A, 0x15, 0x12, 0x0C, 0x5B, 0x31, 0x33, 0x36, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x12, 0x52, 0x12, 0x3F, 0x28, 0x3F, 0x3A, 0x31, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x33, 0x2D, 0x36, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x31, 0x35, 0x36, 0x5D, 0x7C, 0x37, 0x5C, 0x64, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x31, 0x36, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x33, 0x34, 0x36, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x36, 0x39, 0x5D, 0x29, 0x7C, 0x37, 0x37, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x31, 0x37, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x1A, 0x50, 0x12, 0x3D, 0x28, 0x3F, 0x3A, 0x33, 0x28, 0x3F, 0x3A, 0x5B, 0x33, 0x36, 0x39, 0x5D, 0x5C, 0x64, 0x7C, 0x37, 0x37, 0x7C, 0x38, 0x5B, 0x33, 0x38, 0x5D, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x31, 0x36, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x33, 0x34, 0x36, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x36, 0x39, 0x5D, 0x29, 0x7C, 0x37, 0x37, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x33, 0x36, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x22, 0x1A, 0x12, 0x07, 0x38, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x28, 0x12, 0x15, 0x28, 0x3F, 0x3A, 0x38, 0x37, 0x7C, 0x39, 0x5B, 0x30, 0x31, 0x34, 0x35, 0x37, 0x38, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x39, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x1A, 0x12, 0x07, 0x38, 0x34, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x34, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x42, 0x48, 0x50, 0xCD, 0x07, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x1B, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x88, 0x02, 0x0A, 0x12, 0x12, 0x09, 0x5B, 0x32, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x12, 0x2B, 0x12, 0x18, 0x32, 0x32, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x30, 0x2D, 0x37, 0x5D, 0x7C, 0x5B, 0x33, 0x2D, 0x35, 0x5D, 0x30, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x32, 0x32, 0x32, 0x30, 0x31, 0x32, 0x33, 0x34, 0x1A, 0x34, 0x12, 0x21, 0x28, 0x3F, 0x3A, 0x32, 0x39, 0x5C, 0x64, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x31, 0x2D, 0x33, 0x5D, 0x7C, 0x5B, 0x34, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x37, 0x39, 0x35, 0x36, 0x31, 0x32, 0x33, 0x34, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x42, 0x49, 0x50, 0x81, 0x02, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x30, 0x0A, 0x1D, 0x28, 0x5B, 0x32, 0x37, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xD0, 0x02, 0x0A, 0x1D, 0x12, 0x12, 0x5B, 0x32, 0x36, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x7C, 0x37, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x38, 0x7D, 0x12, 0x32, 0x12, 0x1F, 0x32, 0x28, 0x3F, 0x3A, 0x30, 0x32, 0x7C, 0x31, 0x5B, 0x30, 0x33, 0x37, 0x5D, 0x7C, 0x32, 0x5B, 0x34, 0x35, 0x5D, 0x7C, 0x33, 0x5B, 0x36, 0x38, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x32, 0x30, 0x32, 0x31, 0x31, 0x32, 0x33, 0x34, 0x1A, 0x42, 0x12, 0x2F, 0x36, 0x36, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x36, 0x39, 0x5D, 0x7C, 0x5B, 0x33, 0x35, 0x5D, 0x5B, 0x30, 0x2D, 0x32, 0x34, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x36, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x39, 0x30, 0x30, 0x31, 0x31, 0x32, 0x33, 0x34, 0x22, 0x1A, 0x12, 0x0B, 0x37, 0x5B, 0x33, 0x2D, 0x35, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x32, 0x04, 0x37, 0x33, 0x31, 0x32, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x1F, 0x12, 0x0C, 0x38, 0x35, 0x37, 0x5B, 0x35, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x35, 0x37, 0x35, 0x31, 0x32, 0x33, 0x34, 0x4A, 0x02, 0x42, 0x4A, 0x50, 0xE5, 0x01, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x2F, 0x0A, 0x1C, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xDF, 0x01, 0x0A, 0x12, 0x12, 0x09, 0x5B, 0x35, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x12, 0x2F, 0x12, 0x1B, 0x35, 0x39, 0x30, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x32, 0x5D, 0x7C, 0x38, 0x37, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x35, 0x39, 0x30, 0x32, 0x37, 0x31, 0x32, 0x33, 0x34, 0x1A, 0x34, 0x12, 0x20, 0x36, 0x39, 0x30, 0x28, 0x3F, 0x3A, 0x31, 0x30, 0x7C, 0x32, 0x5B, 0x32, 0x37, 0x5D, 0x7C, 0x36, 0x36, 0x7C, 0x37, 0x37, 0x7C, 0x38, 0x5B, 0x37, 0x38, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x36, 0x39, 0x30, 0x32, 0x32, 0x31, 0x32, 0x33, 0x34, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x42, 0x4C, 0x50, 0xCE, 0x04, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x87, 0x03, 0x0A, 0x1E, 0x12, 0x0B, 0x5B, 0x34, 0x35, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x12, 0x5E, 0x12, 0x3F, 0x34, 0x34, 0x31, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x30, 0x32, 0x7C, 0x32, 0x33, 0x7C, 0x36, 0x31, 0x7C, 0x5B, 0x33, 0x34, 0x37, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x7C, 0x5B, 0x34, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x34, 0x5C, 0x64, 0x7C, 0x36, 0x30, 0x7C, 0x38, 0x39, 0x29, 0x7C, 0x38, 0x32, 0x34, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x32, 0x0A, 0x34, 0x34, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x1A, 0x30, 0x12, 0x1A, 0x34, 0x34, 0x31, 0x28, 0x3F, 0x3A, 0x5B, 0x33, 0x37, 0x5D, 0x5C, 0x64, 0x7C, 0x35, 0x5B, 0x30, 0x2D, 0x33, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x34, 0x34, 0x31, 0x33, 0x37, 0x30, 0x31, 0x32, 0x33, 0x34, 0x22, 0x33, 0x12, 0x1D, 0x38, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x35, 0x35, 0x7C, 0x36, 0x36, 0x7C, 0x37, 0x37, 0x7C, 0x38, 0x38, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x30, 0x30, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x23, 0x12, 0x0D, 0x39, 0x30, 0x30, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x39, 0x30, 0x30, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x2D, 0x12, 0x17, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x33, 0x33, 0x7C, 0x34, 0x34, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x35, 0x30, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x42, 0x4D, 0x50, 0x01, 0x5A, 0x03, 0x30, 0x31, 0x31, 0x62, 0x01, 0x31, 0x7A, 0x01, 0x31, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xBA, 0x01, 0x03, 0x34, 0x34, 0x31, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xDE, 0x01, 0x0A, 0x15, 0x12, 0x0C, 0x5B, 0x32, 0x2D, 0x35, 0x37, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x12, 0x1C, 0x12, 0x0A, 0x5B, 0x32, 0x2D, 0x35, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x1A, 0x1B, 0x12, 0x09, 0x5B, 0x37, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x37, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x42, 0x4E, 0x50, 0xA1, 0x05, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x25, 0x0A, 0x15, 0x28, 0x5B, 0x32, 0x2D, 0x35, 0x37, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xDD, 0x03, 0x0A, 0x17, 0x12, 0x0C, 0x5B, 0x32, 0x33, 0x34, 0x36, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x12, 0xE2, 0x01, 0x12, 0xCC, 0x01, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x32, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x31, 0x31, 0x7C, 0x5B, 0x32, 0x35, 0x38, 0x5D, 0x5C, 0x64, 0x7C, 0x39, 0x5B, 0x36, 0x37, 0x5D, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x31, 0x32, 0x7C, 0x32, 0x5C, 0x64, 0x7C, 0x39, 0x5B, 0x33, 0x34, 0x5D, 0x29, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x33, 0x34, 0x5D, 0x7C, 0x33, 0x39, 0x7C, 0x36, 0x32, 0x29, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x33, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x36, 0x5C, 0x64, 0x7C, 0x38, 0x5B, 0x32, 0x34, 0x5D, 0x29, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x32, 0x35, 0x7C, 0x34, 0x32, 0x7C, 0x35, 0x5B, 0x32, 0x35, 0x37, 0x5D, 0x7C, 0x38, 0x36, 0x7C, 0x39, 0x5B, 0x32, 0x35, 0x5D, 0x29, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x32, 0x5C, 0x64, 0x7C, 0x33, 0x5B, 0x32, 0x33, 0x34, 0x5D, 0x7C, 0x34, 0x5B, 0x32, 0x34, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x32, 0x34, 0x5D, 0x7C, 0x36, 0x5B, 0x32, 0x2D, 0x36, 0x5D, 0x7C, 0x37, 0x5C, 0x64, 0x29, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x34, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x31, 0x31, 0x7C, 0x5B, 0x32, 0x34, 0x36, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7C, 0x37, 0x32, 0x29, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x32, 0x08, 0x32, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x1A, 0x1C, 0x12, 0x09, 0x5B, 0x36, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x37, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x42, 0x4F, 0x50, 0xCF, 0x04, 0x5A, 0x08, 0x30, 0x30, 0x28, 0x31, 0x5C, 0x64, 0x29, 0x3F, 0x62, 0x01, 0x30, 0x7A, 0x07, 0x30, 0x28, 0x31, 0x5C, 0x64, 0x29, 0x3F, 0x9A, 0x01, 0x29, 0x0A, 0x0E, 0x28, 0x5B, 0x32, 0x33, 0x34, 0x5D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x05, 0x5B, 0x32, 0x33, 0x34, 0x5D, 0x22, 0x00, 0x2A, 0x07, 0x30, 0x24, 0x43, 0x43, 0x20, 0x24, 0x31, 0x9A, 0x01, 0x22, 0x0A, 0x0B, 0x28, 0x5B, 0x36, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x29, 0x12, 0x02, 0x24, 0x31, 0x1A, 0x04, 0x5B, 0x36, 0x37, 0x5D, 0x22, 0x00, 0x2A, 0x07, 0x30, 0x24, 0x43, 0x43, 0x20, 0x24, 0x31, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xF1, 0x04, 0x0A, 0x18, 0x12, 0x0C, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x38, 0x2C, 0x31, 0x30, 0x7D, 0x12, 0x56, 0x12, 0x3E, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x34, 0x36, 0x38, 0x39, 0x5D, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x31, 0x32, 0x34, 0x37, 0x38, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x2D, 0x35, 0x37, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x33, 0x2D, 0x35, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x33, 0x2D, 0x35, 0x37, 0x39, 0x5D, 0x29, 0x5B, 0x32, 0x2D, 0x35, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x38, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x31, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x1A, 0x54, 0x12, 0x3E, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x34, 0x36, 0x38, 0x39, 0x5D, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x31, 0x32, 0x34, 0x37, 0x38, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x2D, 0x35, 0x37, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x33, 0x2D, 0x35, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x33, 0x2D, 0x35, 0x37, 0x39, 0x5D, 0x29, 0x5B, 0x36, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x31, 0x31, 0x36, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x22, 0x21, 0x12, 0x0A, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x37, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x38, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x09, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x25, 0x12, 0x0E, 0x5B, 0x33, 0x35, 0x39, 0x5D, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x37, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x38, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x09, 0x33, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x29, 0x12, 0x13, 0x28, 0x3F, 0x3A, 0x34, 0x30, 0x30, 0x5C, 0x64, 0x7C, 0x33, 0x30, 0x30, 0x33, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x38, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x08, 0x34, 0x30, 0x30, 0x34, 0x31, 0x32, 0x33, 0x34, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x42, 0x52, 0x50, 0x37, 0x5A, 0x1B, 0x30, 0x30, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x34, 0x35, 0x5D, 0x7C, 0x32, 0x5B, 0x31, 0x33, 0x35, 0x5D, 0x7C, 0x5B, 0x33, 0x34, 0x5D, 0x31, 0x7C, 0x34, 0x33, 0x29, 0x62, 0x01, 0x30, 0x7A, 0x23, 0x30, 0x28, 0x3F, 0x3A, 0x28, 0x31, 0x5B, 0x32, 0x34, 0x35, 0x5D, 0x7C, 0x32, 0x5B, 0x31, 0x33, 0x35, 0x5D, 0x7C, 0x5B, 0x33, 0x34, 0x5D, 0x31, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x29, 0x29, 0x3F, 0x82, 0x01, 0x02, 0x24, 0x32, 0x9A, 0x01, 0x3F, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x0A, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x22, 0x04, 0x28, 0x24, 0x31, 0x29, 0x2A, 0x0A, 0x30, 0x20, 0x24, 0x43, 0x43, 0x20, 0x28, 0x24, 0x31, 0x29, 0x9A, 0x01, 0x30, 0x0A, 0x11, 0x28, 0x5B, 0x33, 0x34, 0x5D, 0x30, 0x30, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x1A, 0x06, 0x5B, 0x33, 0x34, 0x5D, 0x30, 0x30, 0x1A, 0x08, 0x34, 0x30, 0x30, 0x7C, 0x33, 0x30, 0x30, 0x33, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x37, 0x0A, 0x1A, 0x28, 0x5B, 0x33, 0x35, 0x38, 0x39, 0x5D, 0x30, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x2C, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x08, 0x5B, 0x33, 0x35, 0x38, 0x39, 0x5D, 0x30, 0x30, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x97, 0x04, 0x0A, 0x1E, 0x12, 0x0B, 0x5B, 0x32, 0x35, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x12, 0x8D, 0x01, 0x12, 0x6E, 0x32, 0x34, 0x32, 0x28, 0x3F, 0x3A, 0x33, 0x28, 0x3F, 0x3A, 0x30, 0x32, 0x7C, 0x5B, 0x32, 0x33, 0x36, 0x5D, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x2D, 0x32, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x2D, 0x36, 0x38, 0x5D, 0x7C, 0x37, 0x5B, 0x33, 0x34, 0x36, 0x37, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x2D, 0x34, 0x5D, 0x7C, 0x39, 0x5B, 0x32, 0x2D, 0x34, 0x36, 0x37, 0x5D, 0x29, 0x7C, 0x34, 0x36, 0x31, 0x7C, 0x35, 0x30, 0x32, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x31, 0x32, 0x7C, 0x37, 0x5B, 0x36, 0x37, 0x5D, 0x7C, 0x38, 0x5B, 0x37, 0x38, 0x5D, 0x7C, 0x39, 0x5B, 0x38, 0x39, 0x5D, 0x29, 0x7C, 0x37, 0x30, 0x32, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x32, 0x0A, 0x32, 0x34, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x1A, 0x83, 0x01, 0x12, 0x6D, 0x32, 0x34, 0x32, 0x28, 0x3F, 0x3A, 0x33, 0x28, 0x3F, 0x3A, 0x35, 0x5B, 0x37, 0x39, 0x5D, 0x7C, 0x5B, 0x37, 0x39, 0x5D, 0x35, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x2D, 0x34, 0x5D, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x7C, 0x36, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x7C, 0x37, 0x5C, 0x64, 0x7C, 0x38, 0x31, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x33, 0x34, 0x5D, 0x7C, 0x33, 0x5B, 0x33, 0x35, 0x5D, 0x7C, 0x34, 0x34, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x35, 0x7C, 0x37, 0x37, 0x29, 0x7C, 0x36, 0x5B, 0x33, 0x34, 0x5D, 0x36, 0x7C, 0x37, 0x32, 0x37, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x32, 0x34, 0x32, 0x33, 0x35, 0x39, 0x31, 0x32, 0x33, 0x34, 0x22, 0x3F, 0x12, 0x29, 0x32, 0x34, 0x32, 0x33, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x35, 0x35, 0x7C, 0x36, 0x36, 0x7C, 0x37, 0x37, 0x7C, 0x38, 0x38, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x30, 0x30, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x23, 0x12, 0x0D, 0x39, 0x30, 0x30, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x39, 0x30, 0x30, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x2D, 0x12, 0x17, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x33, 0x33, 0x7C, 0x34, 0x34, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x35, 0x30, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x42, 0x53, 0x50, 0x01, 0x5A, 0x03, 0x30, 0x31, 0x31, 0x62, 0x01, 0x31, 0x7A, 0x01, 0x31, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xBA, 0x01, 0x03, 0x32, 0x34, 0x32, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xC5, 0x02, 0x0A, 0x1C, 0x12, 0x11, 0x28, 0x3F, 0x3A, 0x31, 0x37, 0x7C, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x38, 0x7D, 0x12, 0x4A, 0x12, 0x36, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x33, 0x2D, 0x36, 0x5D, 0x7C, 0x5B, 0x33, 0x34, 0x5D, 0x5B, 0x35, 0x2D, 0x37, 0x5D, 0x7C, 0x35, 0x5B, 0x32, 0x33, 0x36, 0x5D, 0x7C, 0x36, 0x5B, 0x32, 0x2D, 0x34, 0x36, 0x5D, 0x7C, 0x37, 0x5B, 0x32, 0x34, 0x36, 0x5D, 0x7C, 0x38, 0x5B, 0x32, 0x2D, 0x34, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x37, 0x7D, 0x32, 0x07, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x1A, 0x1A, 0x12, 0x07, 0x31, 0x37, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x31, 0x37, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x42, 0x54, 0x50, 0xCF, 0x07, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x2F, 0x0A, 0x19, 0x28, 0x31, 0x37, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x01, 0x31, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x2C, 0x0A, 0x15, 0x28, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x05, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xFF, 0x03, 0x0A, 0x18, 0x12, 0x0D, 0x5B, 0x32, 0x2D, 0x37, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x37, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x12, 0xB9, 0x01, 0x12, 0xA6, 0x01, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x34, 0x5B, 0x30, 0x2D, 0x34, 0x38, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x2D, 0x32, 0x34, 0x5D, 0x7C, 0x39, 0x5B, 0x30, 0x35, 0x37, 0x38, 0x5D, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x30, 0x32, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x35, 0x7C, 0x36, 0x5C, 0x64, 0x7C, 0x37, 0x5B, 0x30, 0x31, 0x5D, 0x7C, 0x39, 0x5B, 0x30, 0x2D, 0x35, 0x37, 0x5D, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x36, 0x5B, 0x30, 0x33, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x32, 0x36, 0x37, 0x5D, 0x7C, 0x39, 0x5B, 0x30, 0x2D, 0x35, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x30, 0x33, 0x38, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x34, 0x38, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x2D, 0x34, 0x37, 0x5D, 0x7C, 0x38, 0x38, 0x7C, 0x39, 0x5B, 0x30, 0x2D, 0x34, 0x39, 0x5D, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x34, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x36, 0x37, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x32, 0x34, 0x30, 0x31, 0x32, 0x33, 0x34, 0x1A, 0x32, 0x12, 0x1F, 0x37, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x7C, 0x5B, 0x34, 0x36, 0x5D, 0x5B, 0x30, 0x2D, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x29, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x37, 0x31, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x19, 0x12, 0x07, 0x39, 0x30, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x39, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x22, 0x12, 0x0F, 0x37, 0x39, 0x5B, 0x31, 0x32, 0x5D, 0x5B, 0x30, 0x31, 0x5D, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x37, 0x39, 0x31, 0x30, 0x31, 0x32, 0x33, 0x34, 0x4A, 0x02, 0x42, 0x57, 0x50, 0x8B, 0x02, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x22, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x05, 0x5B, 0x32, 0x2D, 0x36, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x26, 0x0A, 0x13, 0x28, 0x37, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x37, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x1B, 0x0A, 0x0B, 0x28, 0x39, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x01, 0x39, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x9A, 0x04, 0x0A, 0x21, 0x12, 0x15, 0x5B, 0x31, 0x32, 0x2D, 0x34, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x7C, 0x5B, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x31, 0x30, 0x7D, 0x12, 0xB6, 0x01, 0x12, 0x9F, 0x01, 0x28, 0x3F, 0x3A, 0x31, 0x28, 0x3F, 0x3A, 0x35, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x31, 0x2D, 0x35, 0x5D, 0x7C, 0x32, 0x5C, 0x64, 0x7C, 0x36, 0x5B, 0x31, 0x2D, 0x34, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x2D, 0x37, 0x5D, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x33, 0x35, 0x5D, 0x5C, 0x64, 0x7C, 0x34, 0x5B, 0x31, 0x2D, 0x37, 0x5D, 0x29, 0x7C, 0x37, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x7C, 0x32, 0x28, 0x3F, 0x3A, 0x31, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x34, 0x36, 0x5D, 0x5C, 0x64, 0x7C, 0x33, 0x5B, 0x30, 0x2D, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x32, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x33, 0x35, 0x5D, 0x5C, 0x64, 0x7C, 0x34, 0x5B, 0x30, 0x2D, 0x38, 0x5D, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x32, 0x5C, 0x64, 0x7C, 0x33, 0x5B, 0x30, 0x32, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x32, 0x34, 0x2D, 0x37, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x2D, 0x37, 0x5D, 0x29, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x32, 0x09, 0x31, 0x35, 0x32, 0x34, 0x35, 0x30, 0x39, 0x31, 0x31, 0x1A, 0x39, 0x12, 0x25, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x35, 0x5B, 0x36, 0x37, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x33, 0x33, 0x5C, 0x64, 0x7C, 0x34, 0x34, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x32, 0x39, 0x34, 0x39, 0x31, 0x31, 0x39, 0x31, 0x31, 0x22, 0x21, 0x12, 0x0B, 0x38, 0x30, 0x5B, 0x31, 0x33, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x30, 0x31, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x2A, 0x1E, 0x12, 0x08, 0x39, 0x30, 0x32, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x39, 0x30, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x42, 0x59, 0x50, 0xF7, 0x02, 0x5A, 0x04, 0x38, 0x7E, 0x31, 0x30, 0x62, 0x01, 0x38, 0x7A, 0x03, 0x38, 0x30, 0x3F, 0x9A, 0x01, 0x33, 0x0A, 0x17, 0x28, 0x5B, 0x31, 0x2D, 0x34, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x05, 0x5B, 0x31, 0x2D, 0x34, 0x5D, 0x22, 0x05, 0x38, 0x20, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x33, 0x0A, 0x19, 0x28, 0x5B, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x04, 0x5B, 0x38, 0x39, 0x5D, 0x22, 0x04, 0x38, 0x20, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xC7, 0x02, 0x0A, 0x25, 0x12, 0x12, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x7C, 0x30, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x3F, 0x12, 0x23, 0x12, 0x11, 0x5B, 0x32, 0x33, 0x34, 0x35, 0x37, 0x38, 0x5D, 0x5B, 0x30, 0x32, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x32, 0x32, 0x32, 0x31, 0x32, 0x33, 0x34, 0x1A, 0x2C, 0x12, 0x1A, 0x36, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x2D, 0x32, 0x5D, 0x5C, 0x64, 0x7C, 0x5B, 0x36, 0x37, 0x5D, 0x5B, 0x30, 0x31, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x36, 0x32, 0x32, 0x31, 0x32, 0x33, 0x34, 0x22, 0x20, 0x12, 0x09, 0x30, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x31, 0x7D, 0x32, 0x0B, 0x30, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x31, 0x32, 0x33, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x42, 0x5A, 0x50, 0xF5, 0x03, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x22, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x1A, 0x05, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x2C, 0x0A, 0x16, 0x28, 0x30, 0x29, 0x28, 0x38, 0x30, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x2D, 0x24, 0x34, 0x1A, 0x01, 0x30, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xD0, 0x01, 0x01, 0x0A, 0x88, 0x05, 0x0A, 0x24, 0x12, 0x11, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x7C, 0x33, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x12, 0xC2, 0x01, 0x12, 0xA2, 0x01, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x30, 0x34, 0x7C, 0x32, 0x36, 0x7C, 0x5B, 0x34, 0x38, 0x5D, 0x39, 0x7C, 0x35, 0x30, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x30, 0x36, 0x7C, 0x34, 0x33, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x30, 0x33, 0x7C, 0x31, 0x5B, 0x36, 0x38, 0x5D, 0x7C, 0x33, 0x38, 0x7C, 0x35, 0x5B, 0x30, 0x36, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x36, 0x5D, 0x7C, 0x31, 0x5B, 0x34, 0x39, 0x5D, 0x7C, 0x37, 0x39, 0x7C, 0x38, 0x5B, 0x31, 0x37, 0x5D, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x34, 0x5D, 0x7C, 0x31, 0x33, 0x7C, 0x34, 0x37, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x35, 0x39, 0x5D, 0x7C, 0x5B, 0x31, 0x38, 0x5D, 0x30, 0x7C, 0x37, 0x38, 0x29, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x36, 0x5D, 0x37, 0x7C, 0x31, 0x39, 0x7C, 0x29, 0x7C, 0x39, 0x30, 0x5B, 0x32, 0x35, 0x5D, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x7C, 0x33, 0x31, 0x30, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x32, 0x0A, 0x32, 0x30, 0x34, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x1A, 0xB9, 0x01, 0x12, 0x99, 0x01, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x30, 0x34, 0x7C, 0x32, 0x36, 0x7C, 0x5B, 0x34, 0x38, 0x5D, 0x39, 0x7C, 0x35, 0x30, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x30, 0x36, 0x7C, 0x34, 0x33, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x30, 0x33, 0x7C, 0x31, 0x5B, 0x36, 0x38, 0x5D, 0x7C, 0x33, 0x38, 0x7C, 0x35, 0x5B, 0x30, 0x36, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x36, 0x5D, 0x7C, 0x31, 0x5B, 0x34, 0x39, 0x5D, 0x7C, 0x37, 0x39, 0x7C, 0x38, 0x5B, 0x31, 0x37, 0x5D, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x34, 0x5D, 0x7C, 0x31, 0x33, 0x7C, 0x34, 0x37, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x35, 0x39, 0x5D, 0x7C, 0x5B, 0x31, 0x38, 0x5D, 0x30, 0x7C, 0x37, 0x38, 0x29, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x36, 0x5D, 0x37, 0x7C, 0x31, 0x39, 0x7C, 0x29, 0x7C, 0x39, 0x30, 0x5B, 0x32, 0x35, 0x5D, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x32, 0x0A, 0x32, 0x30, 0x34, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x22, 0x45, 0x12, 0x26, 0x38, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x35, 0x35, 0x7C, 0x36, 0x36, 0x7C, 0x37, 0x37, 0x7C, 0x38, 0x38, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x7C, 0x33, 0x31, 0x30, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x32, 0x0A, 0x38, 0x30, 0x30, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x23, 0x12, 0x0D, 0x39, 0x30, 0x30, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x39, 0x30, 0x30, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x2D, 0x12, 0x17, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x33, 0x33, 0x7C, 0x34, 0x34, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x35, 0x30, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x43, 0x41, 0x50, 0x01, 0x5A, 0x03, 0x30, 0x31, 0x31, 0x62, 0x01, 0x31, 0x7A, 0x01, 0x31, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xB1, 0x02, 0x0A, 0x1F, 0x12, 0x14, 0x5B, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x7C, 0x5B, 0x31, 0x2D, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x12, 0x1C, 0x12, 0x0A, 0x5B, 0x31, 0x2D, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x1A, 0x2D, 0x12, 0x19, 0x28, 0x3F, 0x3A, 0x38, 0x5B, 0x30, 0x2D, 0x32, 0x34, 0x38, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x37, 0x2D, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x39, 0x39, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x43, 0x44, 0x50, 0xF3, 0x01, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x32, 0x0A, 0x19, 0x28, 0x5B, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x04, 0x5B, 0x38, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x27, 0x0A, 0x10, 0x28, 0x5B, 0x31, 0x2D, 0x36, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x05, 0x5B, 0x31, 0x2D, 0x36, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xF9, 0x01, 0x0A, 0x13, 0x12, 0x0A, 0x5B, 0x32, 0x37, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x12, 0x1D, 0x12, 0x0A, 0x32, 0x5B, 0x31, 0x32, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x32, 0x31, 0x36, 0x31, 0x32, 0x33, 0x34, 0x35, 0x1A, 0x1F, 0x12, 0x0C, 0x37, 0x5B, 0x30, 0x32, 0x35, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x37, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x1C, 0x12, 0x09, 0x38, 0x37, 0x37, 0x36, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x37, 0x37, 0x36, 0x31, 0x32, 0x33, 0x34, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x43, 0x46, 0x50, 0xEC, 0x01, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x2F, 0x0A, 0x1C, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xA7, 0x02, 0x0A, 0x13, 0x12, 0x0A, 0x5B, 0x30, 0x32, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x12, 0x23, 0x12, 0x0F, 0x32, 0x32, 0x32, 0x5B, 0x31, 0x2D, 0x35, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x32, 0x32, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x1A, 0x20, 0x12, 0x0C, 0x30, 0x5B, 0x31, 0x34, 0x2D, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x30, 0x36, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x22, 0x1C, 0x12, 0x08, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x43, 0x47, 0x50, 0xF2, 0x01, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x2B, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x04, 0x5B, 0x30, 0x32, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x25, 0x0A, 0x12, 0x28, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x38, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xD0, 0x01, 0x01, 0x0A, 0xBC, 0x03, 0x0A, 0x13, 0x12, 0x0A, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x12, 0x49, 0x12, 0x35, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x31, 0x32, 0x34, 0x36, 0x37, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x2D, 0x34, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x33, 0x34, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x32, 0x35, 0x36, 0x38, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x32, 0x5D, 0x7C, 0x5B, 0x37, 0x2D, 0x39, 0x5D, 0x31, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x1A, 0x20, 0x12, 0x0C, 0x37, 0x5B, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x37, 0x34, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x22, 0x1C, 0x12, 0x08, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x20, 0x12, 0x0C, 0x39, 0x30, 0x5B, 0x30, 0x31, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x39, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x21, 0x12, 0x0D, 0x38, 0x34, 0x5B, 0x30, 0x32, 0x34, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x34, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x3A, 0x1C, 0x12, 0x08, 0x38, 0x37, 0x38, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x37, 0x38, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x43, 0x48, 0x50, 0x29, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x41, 0x0A, 0x1E, 0x28, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x0B, 0x5B, 0x32, 0x2D, 0x37, 0x5D, 0x7C, 0x5B, 0x38, 0x39, 0x5D, 0x31, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x37, 0x0A, 0x19, 0x28, 0x5B, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x09, 0x38, 0x5B, 0x30, 0x34, 0x37, 0x5D, 0x7C, 0x39, 0x30, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xCE, 0x02, 0x0A, 0x14, 0x12, 0x0B, 0x5B, 0x30, 0x32, 0x2D, 0x35, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x12, 0x6A, 0x12, 0x57, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x32, 0x33, 0x5D, 0x7C, 0x31, 0x5B, 0x30, 0x32, 0x33, 0x35, 0x37, 0x5D, 0x7C, 0x5B, 0x32, 0x33, 0x5D, 0x5B, 0x30, 0x34, 0x35, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x33, 0x2D, 0x35, 0x5D, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x36, 0x5D, 0x7C, 0x31, 0x5B, 0x30, 0x36, 0x39, 0x5D, 0x7C, 0x5B, 0x32, 0x2D, 0x34, 0x5D, 0x5B, 0x30, 0x37, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x38, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x1A, 0x37, 0x12, 0x24, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x37, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x36, 0x37, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x43, 0x49, 0x50, 0xE1, 0x01, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x2F, 0x0A, 0x1C, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xD0, 0x01, 0x01, 0x0A, 0xE5, 0x01, 0x0A, 0x14, 0x12, 0x0B, 0x5B, 0x32, 0x2D, 0x35, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x12, 0x2B, 0x12, 0x1B, 0x28, 0x3F, 0x3A, 0x32, 0x5C, 0x64, 0x7C, 0x33, 0x5B, 0x31, 0x33, 0x2D, 0x37, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x2D, 0x35, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x32, 0x05, 0x32, 0x31, 0x32, 0x33, 0x34, 0x1A, 0x24, 0x12, 0x14, 0x28, 0x3F, 0x3A, 0x35, 0x5B, 0x30, 0x2D, 0x36, 0x38, 0x5D, 0x7C, 0x37, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x32, 0x05, 0x37, 0x31, 0x32, 0x33, 0x34, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x43, 0x4B, 0x50, 0xAA, 0x05, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x1B, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xAD, 0x06, 0x0A, 0x24, 0x12, 0x18, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x30, 0x30, 0x7C, 0x31, 0x32, 0x33, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x31, 0x31, 0x7D, 0x12, 0x59, 0x12, 0x44, 0x28, 0x3F, 0x3A, 0x32, 0x7C, 0x33, 0x32, 0x7C, 0x34, 0x31, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x7C, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x33, 0x2D, 0x35, 0x5D, 0x7C, 0x34, 0x5B, 0x32, 0x33, 0x35, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x37, 0x38, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x33, 0x2D, 0x35, 0x37, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x37, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x39, 0x7D, 0x32, 0x08, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x1A, 0x21, 0x12, 0x0B, 0x39, 0x5B, 0x36, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x38, 0x2C, 0x39, 0x7D, 0x32, 0x09, 0x39, 0x36, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x22, 0x29, 0x12, 0x12, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x7C, 0x31, 0x32, 0x33, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x39, 0x2C, 0x31, 0x31, 0x7D, 0x32, 0x09, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x23, 0x12, 0x0A, 0x36, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x1A, 0x09, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x2C, 0x31, 0x31, 0x7D, 0x32, 0x0A, 0x36, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x1B, 0x12, 0x07, 0x34, 0x34, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x34, 0x34, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x4A, 0x02, 0x43, 0x4C, 0x50, 0x38, 0x5A, 0x36, 0x28, 0x3F, 0x3A, 0x30, 0x7C, 0x31, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x30, 0x2D, 0x36, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x2D, 0x35, 0x37, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x33, 0x2D, 0x35, 0x38, 0x5D, 0x7C, 0x36, 0x39, 0x7C, 0x37, 0x5B, 0x30, 0x31, 0x36, 0x37, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x31, 0x38, 0x5D, 0x29, 0x29, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x33, 0x30, 0x7C, 0x28, 0x31, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x30, 0x2D, 0x36, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x2D, 0x35, 0x37, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x33, 0x2D, 0x35, 0x38, 0x5D, 0x7C, 0x36, 0x39, 0x7C, 0x37, 0x5B, 0x30, 0x31, 0x36, 0x37, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x31, 0x38, 0x5D, 0x29, 0x29, 0x9A, 0x01, 0x30, 0x0A, 0x11, 0x28, 0x32, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x32, 0x22, 0x04, 0x28, 0x24, 0x31, 0x29, 0x2A, 0x08, 0x24, 0x43, 0x43, 0x20, 0x28, 0x24, 0x31, 0x29, 0x9A, 0x01, 0x4B, 0x0A, 0x17, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x2C, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x16, 0x5B, 0x33, 0x35, 0x37, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x33, 0x2D, 0x35, 0x37, 0x5D, 0x22, 0x04, 0x28, 0x24, 0x31, 0x29, 0x2A, 0x08, 0x24, 0x43, 0x43, 0x20, 0x28, 0x24, 0x31, 0x29, 0x9A, 0x01, 0x2C, 0x0A, 0x16, 0x28, 0x39, 0x29, 0x28, 0x5B, 0x36, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x39, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x29, 0x0A, 0x12, 0x28, 0x34, 0x34, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x02, 0x34, 0x34, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x30, 0x0A, 0x18, 0x28, 0x5B, 0x36, 0x38, 0x5D, 0x30, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x04, 0x36, 0x30, 0x7C, 0x38, 0x22, 0x02, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x33, 0x0A, 0x1A, 0x28, 0x36, 0x30, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x02, 0x36, 0x30, 0x22, 0x02, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x29, 0x0A, 0x14, 0x28, 0x31, 0x32, 0x33, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x31, 0x22, 0x02, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xC6, 0x02, 0x0A, 0x15, 0x12, 0x0C, 0x5B, 0x32, 0x33, 0x37, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x12, 0x21, 0x12, 0x0E, 0x28, 0x3F, 0x3A, 0x32, 0x32, 0x7C, 0x33, 0x33, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x32, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x1A, 0x1C, 0x12, 0x09, 0x5B, 0x37, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x37, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x22, 0x1B, 0x12, 0x08, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x2A, 0x1A, 0x12, 0x07, 0x38, 0x38, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x38, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x43, 0x4D, 0x50, 0xED, 0x01, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x3E, 0x0A, 0x20, 0x28, 0x5B, 0x32, 0x33, 0x37, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x09, 0x5B, 0x32, 0x33, 0x37, 0x39, 0x5D, 0x7C, 0x38, 0x38, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x27, 0x0A, 0x13, 0x28, 0x38, 0x30, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x02, 0x38, 0x30, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xAA, 0x13, 0x0A, 0x2C, 0x12, 0x20, 0x5B, 0x31, 0x2D, 0x37, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x31, 0x31, 0x7D, 0x7C, 0x38, 0x5B, 0x30, 0x2D, 0x33, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x39, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x31, 0x32, 0x7D, 0x12, 0xEF, 0x03, 0x12, 0xD6, 0x03, 0x32, 0x31, 0x5C, 0x64, 0x7B, 0x38, 0x2C, 0x31, 0x30, 0x7D, 0x7C, 0x28, 0x3F, 0x3A, 0x31, 0x30, 0x7C, 0x32, 0x5B, 0x30, 0x32, 0x2D, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x31, 0x31, 0x7C, 0x37, 0x5B, 0x31, 0x35, 0x39, 0x5D, 0x29, 0x7C, 0x34, 0x5B, 0x31, 0x33, 0x35, 0x5D, 0x31, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x31, 0x5C, 0x64, 0x7C, 0x32, 0x5B, 0x33, 0x37, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x32, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x33, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x35, 0x5D, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x33, 0x31, 0x7C, 0x35, 0x5B, 0x34, 0x35, 0x37, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x39, 0x5D, 0x29, 0x7C, 0x38, 0x39, 0x38, 0x29, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x7C, 0x28, 0x3F, 0x3A, 0x33, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x33, 0x35, 0x7C, 0x34, 0x39, 0x7C, 0x35, 0x5C, 0x64, 0x7C, 0x37, 0x5B, 0x30, 0x32, 0x2D, 0x36, 0x38, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x2D, 0x36, 0x38, 0x5D, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x31, 0x37, 0x39, 0x5D, 0x7C, 0x5B, 0x33, 0x35, 0x5D, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x34, 0x37, 0x38, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x2D, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x32, 0x33, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x30, 0x33, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x33, 0x36, 0x5D, 0x7C, 0x35, 0x5C, 0x64, 0x7C, 0x36, 0x5B, 0x31, 0x2D, 0x36, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x32, 0x38, 0x5D, 0x7C, 0x38, 0x30, 0x7C, 0x39, 0x5B, 0x32, 0x2D, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x31, 0x2D, 0x35, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x32, 0x33, 0x38, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x32, 0x5D, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x30, 0x31, 0x7C, 0x5B, 0x31, 0x35, 0x37, 0x39, 0x5D, 0x5C, 0x64, 0x7C, 0x32, 0x5B, 0x32, 0x34, 0x38, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x33, 0x2D, 0x36, 0x5D, 0x7C, 0x36, 0x5B, 0x32, 0x33, 0x36, 0x38, 0x5D, 0x29, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x32, 0x33, 0x36, 0x2D, 0x38, 0x5D, 0x7C, 0x32, 0x5B, 0x35, 0x2D, 0x37, 0x5D, 0x7C, 0x5B, 0x33, 0x37, 0x5D, 0x5C, 0x64, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x33, 0x36, 0x37, 0x38, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x2D, 0x37, 0x5D, 0x29, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x31, 0x2D, 0x33, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x31, 0x5B, 0x31, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x5B, 0x33, 0x37, 0x39, 0x5D, 0x5C, 0x64, 0x7C, 0x34, 0x5B, 0x31, 0x33, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x35, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x7C, 0x38, 0x30, 0x28, 0x3F, 0x3A, 0x32, 0x39, 0x7C, 0x36, 0x5B, 0x30, 0x33, 0x35, 0x37, 0x38, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x31, 0x38, 0x5D, 0x7C, 0x38, 0x31, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x31, 0x32, 0x7D, 0x32, 0x0A, 0x31, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x1A, 0x3D, 0x12, 0x26, 0x31, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x30, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x37, 0x7C, 0x35, 0x5B, 0x30, 0x31, 0x33, 0x35, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x35, 0x2D, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x31, 0x7D, 0x32, 0x0B, 0x31, 0x33, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x22, 0x28, 0x12, 0x0F, 0x28, 0x3F, 0x3A, 0x31, 0x30, 0x29, 0x3F, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x09, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x2C, 0x31, 0x32, 0x7D, 0x32, 0x0A, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x2A, 0x1E, 0x12, 0x0B, 0x31, 0x36, 0x5B, 0x30, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x31, 0x36, 0x38, 0x31, 0x32, 0x33, 0x34, 0x35, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x1E, 0x12, 0x08, 0x34, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x34, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x4A, 0x02, 0x43, 0x4E, 0x50, 0x56, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x2A, 0x0A, 0x10, 0x28, 0x38, 0x30, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x08, 0x38, 0x30, 0x5B, 0x32, 0x36, 0x37, 0x38, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2E, 0x0A, 0x16, 0x28, 0x5B, 0x34, 0x38, 0x5D, 0x30, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x06, 0x5B, 0x34, 0x38, 0x5D, 0x30, 0x30, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x24, 0x0A, 0x10, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x05, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x2B, 0x0A, 0x14, 0x28, 0x32, 0x31, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x36, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x02, 0x32, 0x31, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x73, 0x0A, 0x16, 0x28, 0x5B, 0x31, 0x32, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x0F, 0x31, 0x30, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x1A, 0x0F, 0x31, 0x30, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x1A, 0x26, 0x31, 0x30, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x30, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x29, 0x29, 0x7C, 0x32, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x7B, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x51, 0x33, 0x28, 0x3F, 0x3A, 0x31, 0x31, 0x7C, 0x37, 0x5B, 0x31, 0x35, 0x39, 0x5D, 0x29, 0x7C, 0x34, 0x5B, 0x31, 0x33, 0x35, 0x5D, 0x31, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x31, 0x7C, 0x32, 0x5B, 0x33, 0x37, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x32, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x33, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x35, 0x5D, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x33, 0x31, 0x7C, 0x35, 0x5B, 0x34, 0x35, 0x37, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x39, 0x5D, 0x29, 0x7C, 0x38, 0x39, 0x38, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0xD7, 0x02, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0xAC, 0x02, 0x33, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x33, 0x35, 0x7C, 0x34, 0x39, 0x7C, 0x35, 0x7C, 0x37, 0x5B, 0x30, 0x32, 0x2D, 0x36, 0x38, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x2D, 0x36, 0x38, 0x5D, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x31, 0x37, 0x39, 0x5D, 0x7C, 0x5B, 0x33, 0x35, 0x5D, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x34, 0x37, 0x38, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x2D, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x32, 0x33, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x30, 0x33, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x33, 0x36, 0x5D, 0x7C, 0x35, 0x7C, 0x36, 0x5B, 0x31, 0x2D, 0x36, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x32, 0x38, 0x5D, 0x7C, 0x38, 0x30, 0x7C, 0x39, 0x5B, 0x32, 0x2D, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x31, 0x2D, 0x35, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x32, 0x33, 0x38, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x32, 0x5D, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x30, 0x31, 0x7C, 0x5B, 0x31, 0x35, 0x37, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x32, 0x34, 0x38, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x33, 0x2D, 0x36, 0x5D, 0x7C, 0x36, 0x5B, 0x32, 0x33, 0x36, 0x38, 0x5D, 0x29, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x32, 0x33, 0x36, 0x2D, 0x38, 0x5D, 0x7C, 0x32, 0x5B, 0x35, 0x2D, 0x37, 0x5D, 0x7C, 0x5B, 0x33, 0x37, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x33, 0x36, 0x37, 0x38, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x2D, 0x37, 0x5D, 0x29, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x31, 0x2D, 0x33, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x31, 0x5B, 0x31, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x5B, 0x33, 0x37, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x33, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x35, 0x5D, 0x29, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x32, 0x0A, 0x19, 0x28, 0x31, 0x5B, 0x33, 0x2D, 0x35, 0x38, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x07, 0x31, 0x5B, 0x33, 0x2D, 0x35, 0x38, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x37, 0x0A, 0x15, 0x28, 0x31, 0x30, 0x38, 0x30, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x03, 0x31, 0x30, 0x38, 0x1A, 0x04, 0x31, 0x30, 0x38, 0x30, 0x1A, 0x05, 0x31, 0x30, 0x38, 0x30, 0x30, 0x22, 0x00, 0x2A, 0x00, 0xA2, 0x01, 0x26, 0x0A, 0x14, 0x28, 0x32, 0x31, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x36, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x02, 0x32, 0x31, 0x2A, 0x00, 0xA2, 0x01, 0x6E, 0x0A, 0x16, 0x28, 0x5B, 0x31, 0x32, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x0F, 0x31, 0x30, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x1A, 0x0F, 0x31, 0x30, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x1A, 0x26, 0x31, 0x30, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x30, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x29, 0x29, 0x7C, 0x32, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x2A, 0x00, 0xA2, 0x01, 0x25, 0x0A, 0x10, 0x28, 0x38, 0x30, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x08, 0x38, 0x30, 0x5B, 0x32, 0x36, 0x37, 0x38, 0x5D, 0x2A, 0x00, 0xA2, 0x01, 0x76, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x51, 0x33, 0x28, 0x3F, 0x3A, 0x31, 0x31, 0x7C, 0x37, 0x5B, 0x31, 0x35, 0x39, 0x5D, 0x29, 0x7C, 0x34, 0x5B, 0x31, 0x33, 0x35, 0x5D, 0x31, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x31, 0x7C, 0x32, 0x5B, 0x33, 0x37, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x32, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x33, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x35, 0x5D, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x33, 0x31, 0x7C, 0x35, 0x5B, 0x34, 0x35, 0x37, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x39, 0x5D, 0x29, 0x7C, 0x38, 0x39, 0x38, 0x2A, 0x00, 0xA2, 0x01, 0xD2, 0x02, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0xAC, 0x02, 0x33, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x33, 0x35, 0x7C, 0x34, 0x39, 0x7C, 0x35, 0x7C, 0x37, 0x5B, 0x30, 0x32, 0x2D, 0x36, 0x38, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x2D, 0x36, 0x38, 0x5D, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x31, 0x37, 0x39, 0x5D, 0x7C, 0x5B, 0x33, 0x35, 0x5D, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x34, 0x37, 0x38, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x2D, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x32, 0x33, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x30, 0x33, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x33, 0x36, 0x5D, 0x7C, 0x35, 0x7C, 0x36, 0x5B, 0x31, 0x2D, 0x36, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x32, 0x38, 0x5D, 0x7C, 0x38, 0x30, 0x7C, 0x39, 0x5B, 0x32, 0x2D, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x31, 0x2D, 0x35, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x32, 0x33, 0x38, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x32, 0x5D, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x30, 0x31, 0x7C, 0x5B, 0x31, 0x35, 0x37, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x32, 0x34, 0x38, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x33, 0x2D, 0x36, 0x5D, 0x7C, 0x36, 0x5B, 0x32, 0x33, 0x36, 0x38, 0x5D, 0x29, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x32, 0x33, 0x36, 0x2D, 0x38, 0x5D, 0x7C, 0x32, 0x5B, 0x35, 0x2D, 0x37, 0x5D, 0x7C, 0x5B, 0x33, 0x37, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x33, 0x36, 0x37, 0x38, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x2D, 0x37, 0x5D, 0x29, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x31, 0x2D, 0x33, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x31, 0x5B, 0x31, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x5B, 0x33, 0x37, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x33, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x35, 0x5D, 0x29, 0x2A, 0x00, 0xA2, 0x01, 0x30, 0x0A, 0x19, 0x28, 0x31, 0x5B, 0x33, 0x2D, 0x35, 0x38, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x07, 0x31, 0x5B, 0x33, 0x2D, 0x35, 0x38, 0x5D, 0x2A, 0x00, 0xA2, 0x01, 0x2C, 0x0A, 0x16, 0x28, 0x5B, 0x34, 0x38, 0x5D, 0x30, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x06, 0x5B, 0x34, 0x38, 0x5D, 0x30, 0x30, 0x2A, 0x00, 0xA2, 0x01, 0x35, 0x0A, 0x15, 0x28, 0x31, 0x30, 0x38, 0x30, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x03, 0x31, 0x30, 0x38, 0x1A, 0x04, 0x31, 0x30, 0x38, 0x30, 0x1A, 0x05, 0x31, 0x30, 0x38, 0x30, 0x30, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xFC, 0x05, 0x0A, 0x27, 0x12, 0x1B, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x33, 0x5D, 0x5C, 0x64, 0x7B, 0x30, 0x2C, 0x33, 0x7D, 0x7C, 0x5B, 0x32, 0x34, 0x2D, 0x38, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x31, 0x31, 0x7D, 0x12, 0x24, 0x12, 0x11, 0x5B, 0x31, 0x32, 0x34, 0x2D, 0x38, 0x5D, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x1A, 0x34, 0x12, 0x1E, 0x33, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x2D, 0x32, 0x34, 0x5D, 0x7C, 0x31, 0x5B, 0x30, 0x2D, 0x38, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x31, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x33, 0x32, 0x31, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x22, 0x20, 0x12, 0x09, 0x31, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x31, 0x7D, 0x32, 0x0B, 0x31, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x2A, 0x2D, 0x12, 0x16, 0x31, 0x39, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x31, 0x5D, 0x7C, 0x34, 0x5B, 0x37, 0x38, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x31, 0x7D, 0x32, 0x0B, 0x31, 0x39, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x43, 0x4F, 0x50, 0x39, 0x5A, 0x11, 0x30, 0x30, 0x5B, 0x35, 0x37, 0x39, 0x5D, 0x7C, 0x23, 0x35, 0x35, 0x35, 0x7C, 0x23, 0x39, 0x39, 0x39, 0x62, 0x01, 0x30, 0x7A, 0x14, 0x30, 0x28, 0x5B, 0x33, 0x35, 0x37, 0x39, 0x5D, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x34, 0x34, 0x7C, 0x35, 0x36, 0x29, 0x29, 0x9A, 0x01, 0x6C, 0x0A, 0x0B, 0x28, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x1F, 0x31, 0x28, 0x3F, 0x3A, 0x38, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x30, 0x2D, 0x33, 0x5D, 0x7C, 0x5B, 0x32, 0x2D, 0x37, 0x5D, 0x29, 0x7C, 0x5B, 0x32, 0x34, 0x2D, 0x38, 0x5D, 0x1A, 0x26, 0x31, 0x28, 0x3F, 0x3A, 0x38, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x30, 0x39, 0x7C, 0x5B, 0x31, 0x2D, 0x33, 0x5D, 0x29, 0x7C, 0x5B, 0x32, 0x2D, 0x37, 0x5D, 0x29, 0x7C, 0x5B, 0x32, 0x34, 0x2D, 0x38, 0x5D, 0x22, 0x04, 0x28, 0x24, 0x31, 0x29, 0x2A, 0x07, 0x30, 0x24, 0x43, 0x43, 0x20, 0x24, 0x31, 0x9A, 0x01, 0x25, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x01, 0x33, 0x22, 0x00, 0x2A, 0x07, 0x30, 0x24, 0x43, 0x43, 0x20, 0x24, 0x31, 0x9A, 0x01, 0x4E, 0x0A, 0x11, 0x28, 0x31, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x0D, 0x31, 0x28, 0x3F, 0x3A, 0x38, 0x30, 0x7C, 0x39, 0x5B, 0x30, 0x34, 0x5D, 0x29, 0x1A, 0x19, 0x31, 0x28, 0x3F, 0x3A, 0x38, 0x30, 0x30, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x31, 0x5D, 0x7C, 0x34, 0x5B, 0x37, 0x38, 0x5D, 0x29, 0x29, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xA2, 0x01, 0x5F, 0x0A, 0x0B, 0x28, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x1F, 0x31, 0x28, 0x3F, 0x3A, 0x38, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x30, 0x2D, 0x33, 0x5D, 0x7C, 0x5B, 0x32, 0x2D, 0x37, 0x5D, 0x29, 0x7C, 0x5B, 0x32, 0x34, 0x2D, 0x38, 0x5D, 0x1A, 0x26, 0x31, 0x28, 0x3F, 0x3A, 0x38, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x30, 0x39, 0x7C, 0x5B, 0x31, 0x2D, 0x33, 0x5D, 0x29, 0x7C, 0x5B, 0x32, 0x2D, 0x37, 0x5D, 0x29, 0x7C, 0x5B, 0x32, 0x34, 0x2D, 0x38, 0x5D, 0x2A, 0x00, 0xA2, 0x01, 0x1C, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x01, 0x33, 0x2A, 0x00, 0xA2, 0x01, 0x49, 0x0A, 0x11, 0x28, 0x31, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x0D, 0x31, 0x28, 0x3F, 0x3A, 0x38, 0x30, 0x7C, 0x39, 0x5B, 0x30, 0x34, 0x5D, 0x29, 0x1A, 0x19, 0x31, 0x28, 0x3F, 0x3A, 0x38, 0x30, 0x30, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x31, 0x5D, 0x7C, 0x34, 0x5B, 0x37, 0x38, 0x5D, 0x29, 0x29, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xF9, 0x02, 0x0A, 0x19, 0x12, 0x0D, 0x5B, 0x32, 0x34, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x38, 0x2C, 0x31, 0x30, 0x7D, 0x12, 0x1F, 0x12, 0x0C, 0x32, 0x5B, 0x32, 0x34, 0x2D, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x32, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x1A, 0x2B, 0x12, 0x18, 0x38, 0x28, 0x3F, 0x3A, 0x5B, 0x33, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7C, 0x37, 0x5B, 0x30, 0x2D, 0x33, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x33, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x1E, 0x12, 0x08, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x2A, 0x22, 0x12, 0x0C, 0x39, 0x30, 0x5B, 0x30, 0x35, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x39, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x1C, 0x12, 0x09, 0x34, 0x30, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x34, 0x30, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x4A, 0x02, 0x43, 0x52, 0x50, 0xFA, 0x03, 0x5A, 0x02, 0x30, 0x30, 0x7A, 0x06, 0x28, 0x31, 0x39, 0x30, 0x30, 0x29, 0x9A, 0x01, 0x2E, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x0B, 0x5B, 0x32, 0x34, 0x5D, 0x7C, 0x38, 0x5B, 0x33, 0x2D, 0x39, 0x5D, 0x22, 0x00, 0x2A, 0x06, 0x24, 0x43, 0x43, 0x20, 0x24, 0x31, 0x9A, 0x01, 0x32, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x05, 0x5B, 0x38, 0x39, 0x5D, 0x30, 0x22, 0x00, 0x2A, 0x06, 0x24, 0x43, 0x43, 0x20, 0x24, 0x31, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xF8, 0x02, 0x0A, 0x18, 0x12, 0x0D, 0x5B, 0x32, 0x2D, 0x35, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x37, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x38, 0x7D, 0x12, 0x6B, 0x12, 0x56, 0x32, 0x5B, 0x31, 0x2D, 0x34, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x36, 0x7D, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x31, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x7C, 0x5B, 0x32, 0x33, 0x5D, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x36, 0x7D, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x32, 0x35, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x36, 0x7D, 0x7C, 0x5B, 0x33, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x7C, 0x5B, 0x37, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x36, 0x7D, 0x29, 0x7C, 0x37, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x37, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x38, 0x7D, 0x32, 0x08, 0x37, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x1A, 0x19, 0x12, 0x06, 0x35, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x35, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x43, 0x55, 0x50, 0x35, 0x5A, 0x03, 0x31, 0x31, 0x39, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x22, 0x0A, 0x0D, 0x28, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x37, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x01, 0x37, 0x22, 0x05, 0x28, 0x30, 0x24, 0x31, 0x29, 0x2A, 0x00, 0x9A, 0x01, 0x29, 0x0A, 0x10, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x36, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x05, 0x5B, 0x32, 0x2D, 0x34, 0x5D, 0x22, 0x05, 0x28, 0x30, 0x24, 0x31, 0x29, 0x2A, 0x00, 0x9A, 0x01, 0x1E, 0x0A, 0x0B, 0x28, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x01, 0x35, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x88, 0x02, 0x0A, 0x13, 0x12, 0x0A, 0x5B, 0x32, 0x35, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x12, 0x49, 0x12, 0x37, 0x32, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x31, 0x2D, 0x37, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x2D, 0x38, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x32, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x32, 0x35, 0x36, 0x5D, 0x7C, 0x36, 0x5C, 0x64, 0x7C, 0x37, 0x5B, 0x31, 0x2D, 0x33, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x2D, 0x35, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x32, 0x32, 0x31, 0x31, 0x32, 0x33, 0x34, 0x1A, 0x21, 0x12, 0x0F, 0x28, 0x3F, 0x3A, 0x39, 0x5C, 0x64, 0x7C, 0x35, 0x39, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x39, 0x39, 0x31, 0x31, 0x32, 0x33, 0x34, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x43, 0x56, 0x50, 0xEE, 0x01, 0x5A, 0x01, 0x30, 0x9A, 0x01, 0x25, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xA5, 0x02, 0x0A, 0x14, 0x12, 0x0B, 0x5B, 0x32, 0x37, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x12, 0x1E, 0x12, 0x0B, 0x32, 0x5B, 0x32, 0x2D, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x32, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x1A, 0x33, 0x12, 0x20, 0x37, 0x37, 0x37, 0x37, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x5B, 0x36, 0x39, 0x5D, 0x5C, 0x64, 0x7C, 0x37, 0x5B, 0x36, 0x37, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x39, 0x36, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x1C, 0x12, 0x09, 0x38, 0x30, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x30, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x2A, 0x1C, 0x12, 0x09, 0x39, 0x30, 0x30, 0x39, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x39, 0x30, 0x30, 0x39, 0x31, 0x32, 0x33, 0x34, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x1B, 0x12, 0x08, 0x37, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x37, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x43, 0x59, 0x50, 0xE5, 0x02, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x1E, 0x0A, 0x11, 0x28, 0x5B, 0x32, 0x37, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xE9, 0x02, 0x0A, 0x13, 0x12, 0x0A, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x12, 0x3D, 0x12, 0x29, 0x32, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x7C, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x31, 0x32, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x33, 0x2D, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x1A, 0x2D, 0x12, 0x19, 0x36, 0x30, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x7C, 0x37, 0x5B, 0x32, 0x33, 0x37, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x36, 0x30, 0x31, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x1C, 0x12, 0x08, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x21, 0x12, 0x0D, 0x39, 0x30, 0x5B, 0x30, 0x36, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x39, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x1F, 0x12, 0x0B, 0x38, 0x5B, 0x31, 0x33, 0x34, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x31, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x3A, 0x1F, 0x12, 0x0B, 0x37, 0x30, 0x5B, 0x30, 0x31, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x37, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x43, 0x5A, 0x50, 0xA4, 0x03, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x2A, 0x0A, 0x1A, 0x28, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x9F, 0x0C, 0x0A, 0x4D, 0x12, 0x41, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x31, 0x33, 0x7D, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x31, 0x32, 0x7D, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x34, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x7C, 0x5B, 0x30, 0x2D, 0x33, 0x35, 0x2D, 0x37, 0x5D, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x32, 0x2C, 0x37, 0x7D, 0x29, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x32, 0x2C, 0x31, 0x34, 0x7D, 0x12, 0xC5, 0x01, 0x12, 0xAE, 0x01, 0x5B, 0x32, 0x34, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x31, 0x33, 0x7D, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x33, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x31, 0x31, 0x7D, 0x7C, 0x32, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x7C, 0x5B, 0x33, 0x38, 0x5D, 0x5B, 0x30, 0x2D, 0x38, 0x5D, 0x7C, 0x5B, 0x31, 0x32, 0x34, 0x2D, 0x36, 0x5D, 0x5C, 0x64, 0x7C, 0x5B, 0x37, 0x39, 0x5D, 0x5B, 0x30, 0x2D, 0x37, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x31, 0x30, 0x7D, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x7C, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x31, 0x30, 0x7D, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x31, 0x30, 0x7D, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x31, 0x30, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x32, 0x2C, 0x31, 0x34, 0x7D, 0x32, 0x08, 0x33, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x1A, 0x54, 0x12, 0x3A, 0x31, 0x28, 0x3F, 0x3A, 0x35, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x2D, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x32, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x7C, 0x33, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x29, 0x29, 0x1A, 0x09, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x2C, 0x31, 0x31, 0x7D, 0x32, 0x0B, 0x31, 0x35, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x22, 0x23, 0x12, 0x0A, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x1A, 0x09, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x2C, 0x31, 0x32, 0x7D, 0x32, 0x0A, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x2A, 0x31, 0x12, 0x18, 0x39, 0x30, 0x30, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x33, 0x35, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x7C, 0x39, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x29, 0x1A, 0x09, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x2C, 0x31, 0x31, 0x7D, 0x32, 0x0A, 0x39, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x32, 0x21, 0x12, 0x0B, 0x31, 0x38, 0x30, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x31, 0x31, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x38, 0x2C, 0x31, 0x34, 0x7D, 0x32, 0x08, 0x31, 0x38, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x3A, 0x1F, 0x12, 0x08, 0x37, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x31, 0x7D, 0x32, 0x0B, 0x37, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x44, 0x45, 0x50, 0x31, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x31, 0x0A, 0x11, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x31, 0x31, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x2F, 0x24, 0x32, 0x1A, 0x0E, 0x33, 0x5B, 0x30, 0x32, 0x5D, 0x7C, 0x34, 0x30, 0x7C, 0x5B, 0x36, 0x38, 0x5D, 0x39, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x6C, 0x0A, 0x11, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x31, 0x30, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x2F, 0x24, 0x32, 0x1A, 0x49, 0x32, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x31, 0x7C, 0x30, 0x5B, 0x32, 0x33, 0x38, 0x39, 0x5D, 0x7C, 0x31, 0x5B, 0x32, 0x34, 0x5D, 0x7C, 0x32, 0x38, 0x7C, 0x33, 0x34, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x5B, 0x33, 0x2D, 0x39, 0x5D, 0x5B, 0x31, 0x35, 0x5D, 0x7C, 0x34, 0x30, 0x29, 0x7C, 0x5B, 0x34, 0x2D, 0x38, 0x5D, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x31, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x30, 0x36, 0x7C, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x31, 0x29, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0xBD, 0x04, 0x0A, 0x10, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x2C, 0x38, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x2F, 0x24, 0x32, 0x1A, 0x51, 0x5B, 0x32, 0x34, 0x2D, 0x36, 0x5D, 0x7C, 0x5B, 0x37, 0x2D, 0x39, 0x5D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x5B, 0x33, 0x35, 0x36, 0x39, 0x5D, 0x5B, 0x30, 0x32, 0x2D, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x32, 0x2D, 0x34, 0x36, 0x37, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x32, 0x2D, 0x34, 0x36, 0x37, 0x5D, 0x7C, 0x38, 0x5B, 0x32, 0x2D, 0x34, 0x36, 0x2D, 0x38, 0x5D, 0x29, 0x1A, 0xC7, 0x03, 0x5B, 0x32, 0x34, 0x2D, 0x36, 0x5D, 0x7C, 0x5B, 0x37, 0x2D, 0x39, 0x5D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x33, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x31, 0x2D, 0x34, 0x36, 0x37, 0x5D, 0x7C, 0x32, 0x5B, 0x31, 0x32, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x32, 0x34, 0x35, 0x37, 0x38, 0x5D, 0x7C, 0x5B, 0x34, 0x36, 0x5D, 0x5B, 0x31, 0x32, 0x34, 0x36, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x32, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x32, 0x35, 0x36, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x34, 0x35, 0x5D, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x31, 0x33, 0x35, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x33, 0x35, 0x37, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x33, 0x35, 0x37, 0x38, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x32, 0x34, 0x36, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x33, 0x35, 0x36, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x33, 0x34, 0x36, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x31, 0x34, 0x5D, 0x7C, 0x32, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x38, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x33, 0x35, 0x37, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x32, 0x34, 0x36, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x2D, 0x34, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x33, 0x34, 0x36, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x33, 0x35, 0x36, 0x38, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x32, 0x34, 0x36, 0x5D, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x33, 0x35, 0x36, 0x5D, 0x7C, 0x32, 0x5B, 0x31, 0x2D, 0x34, 0x38, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x32, 0x34, 0x2D, 0x36, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x33, 0x34, 0x37, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x33, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x32, 0x35, 0x37, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x36, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x33, 0x35, 0x5D, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x31, 0x2D, 0x37, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x33, 0x35, 0x37, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x34, 0x35, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x2D, 0x35, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x2D, 0x34, 0x5D, 0x29, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x32, 0x31, 0x7C, 0x33, 0x5B, 0x31, 0x34, 0x36, 0x38, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x33, 0x34, 0x37, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x31, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x34, 0x36, 0x37, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x33, 0x36, 0x5D, 0x29, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x31, 0x32, 0x34, 0x37, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x31, 0x33, 0x35, 0x38, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x33, 0x35, 0x37, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x33, 0x34, 0x36, 0x37, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x33, 0x36, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x34, 0x37, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x34, 0x36, 0x38, 0x5D, 0x29, 0x29, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x23, 0x0A, 0x10, 0x28, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x31, 0x2C, 0x36, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x2F, 0x24, 0x32, 0x1A, 0x01, 0x33, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x30, 0x0A, 0x14, 0x28, 0x5B, 0x31, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x0A, 0x31, 0x5B, 0x35, 0x2D, 0x37, 0x5D, 0x7C, 0x38, 0x30, 0x30, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x43, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x31, 0x30, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x0A, 0x28, 0x3F, 0x3A, 0x31, 0x38, 0x7C, 0x39, 0x30, 0x29, 0x30, 0x1A, 0x0D, 0x31, 0x38, 0x30, 0x7C, 0x39, 0x30, 0x30, 0x5B, 0x31, 0x33, 0x35, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2B, 0x0A, 0x13, 0x28, 0x37, 0x30, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x03, 0x37, 0x30, 0x30, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x32, 0x12, 0x1C, 0x31, 0x36, 0x28, 0x3F, 0x3A, 0x34, 0x5C, 0x64, 0x7B, 0x31, 0x2C, 0x31, 0x30, 0x7D, 0x7C, 0x5B, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x31, 0x2C, 0x31, 0x31, 0x7D, 0x29, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x31, 0x34, 0x7D, 0x32, 0x08, 0x31, 0x36, 0x34, 0x31, 0x32, 0x33, 0x34, 0x35, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xE1, 0x01, 0x0A, 0x13, 0x12, 0x0A, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x12, 0x27, 0x12, 0x16, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x30, 0x35, 0x5D, 0x7C, 0x5B, 0x32, 0x2D, 0x35, 0x5D, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x32, 0x06, 0x32, 0x35, 0x31, 0x32, 0x33, 0x34, 0x1A, 0x1B, 0x12, 0x0A, 0x5B, 0x36, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x32, 0x06, 0x36, 0x30, 0x31, 0x32, 0x33, 0x34, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x44, 0x4A, 0x50, 0xFD, 0x01, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x25, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xE5, 0x02, 0x0A, 0x13, 0x12, 0x0A, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x12, 0x4E, 0x12, 0x3B, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x33, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x32, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x36, 0x2D, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x33, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x1A, 0x49, 0x12, 0x36, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x30, 0x2D, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x2D, 0x32, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x2D, 0x32, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x2D, 0x33, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x31, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x32, 0x5D, 0x7C, 0x38, 0x31, 0x7C, 0x39, 0x39, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x32, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x1A, 0x12, 0x07, 0x38, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x1A, 0x12, 0x07, 0x39, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x39, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x44, 0x4B, 0x50, 0x2D, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x31, 0x0A, 0x1E, 0x28, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x90, 0x03, 0x0A, 0x1E, 0x12, 0x0B, 0x5B, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x12, 0x52, 0x12, 0x33, 0x37, 0x36, 0x37, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x35, 0x35, 0x7C, 0x36, 0x36, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x30, 0x31, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x2D, 0x32, 0x35, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x35, 0x30, 0x5B, 0x30, 0x2D, 0x34, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x32, 0x0A, 0x37, 0x36, 0x37, 0x34, 0x32, 0x30, 0x31, 0x32, 0x33, 0x34, 0x1A, 0x45, 0x12, 0x2F, 0x37, 0x36, 0x37, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x33, 0x34, 0x36, 0x5D, 0x35, 0x7C, 0x37, 0x5B, 0x35, 0x2D, 0x37, 0x5D, 0x29, 0x7C, 0x33, 0x31, 0x5B, 0x35, 0x2D, 0x37, 0x5D, 0x7C, 0x36, 0x31, 0x5B, 0x34, 0x2D, 0x36, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x37, 0x36, 0x37, 0x32, 0x32, 0x35, 0x31, 0x32, 0x33, 0x34, 0x22, 0x33, 0x12, 0x1D, 0x38, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x35, 0x35, 0x7C, 0x36, 0x36, 0x7C, 0x37, 0x37, 0x7C, 0x38, 0x38, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x30, 0x30, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x23, 0x12, 0x0D, 0x39, 0x30, 0x30, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x39, 0x30, 0x30, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x2D, 0x12, 0x17, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x33, 0x33, 0x7C, 0x34, 0x34, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x35, 0x30, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x44, 0x4D, 0x50, 0x01, 0x5A, 0x03, 0x30, 0x31, 0x31, 0x62, 0x01, 0x31, 0x7A, 0x01, 0x31, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xBA, 0x01, 0x03, 0x37, 0x36, 0x37, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xDF, 0x02, 0x0A, 0x1D, 0x12, 0x0A, 0x5B, 0x35, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x12, 0x30, 0x12, 0x11, 0x38, 0x5B, 0x30, 0x32, 0x34, 0x5D, 0x39, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x32, 0x0A, 0x38, 0x30, 0x39, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x1A, 0x30, 0x12, 0x11, 0x38, 0x5B, 0x30, 0x32, 0x34, 0x5D, 0x39, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x32, 0x0A, 0x38, 0x30, 0x39, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x22, 0x33, 0x12, 0x1D, 0x38, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x35, 0x35, 0x7C, 0x36, 0x36, 0x7C, 0x37, 0x37, 0x7C, 0x38, 0x38, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x30, 0x30, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x23, 0x12, 0x0D, 0x39, 0x30, 0x30, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x39, 0x30, 0x30, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x2D, 0x12, 0x17, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x33, 0x33, 0x7C, 0x34, 0x34, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x35, 0x30, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x44, 0x4F, 0x50, 0x01, 0x5A, 0x03, 0x30, 0x31, 0x31, 0x62, 0x01, 0x31, 0x7A, 0x01, 0x31, 0x90, 0x01, 0x01, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xBA, 0x01, 0x07, 0x38, 0x5B, 0x30, 0x32, 0x34, 0x5D, 0x39, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x93, 0x04, 0x0A, 0x21, 0x12, 0x16, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x2D, 0x34, 0x5D, 0x7C, 0x5B, 0x35, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x38, 0x2C, 0x39, 0x7D, 0x12, 0x47, 0x12, 0x32, 0x28, 0x3F, 0x3A, 0x31, 0x5C, 0x64, 0x7C, 0x32, 0x5B, 0x30, 0x31, 0x34, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x2D, 0x38, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x31, 0x33, 0x35, 0x36, 0x38, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x7C, 0x39, 0x36, 0x31, 0x39, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x38, 0x2C, 0x39, 0x7D, 0x32, 0x08, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x1A, 0x2E, 0x12, 0x1A, 0x28, 0x3F, 0x3A, 0x35, 0x5B, 0x35, 0x36, 0x5D, 0x7C, 0x36, 0x5B, 0x36, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x37, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x35, 0x35, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x22, 0x1C, 0x12, 0x08, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x23, 0x12, 0x0F, 0x38, 0x30, 0x5B, 0x33, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x31, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x30, 0x38, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x20, 0x12, 0x0C, 0x38, 0x30, 0x5B, 0x31, 0x32, 0x5D, 0x31, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x30, 0x31, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x1F, 0x12, 0x0B, 0x39, 0x38, 0x5B, 0x32, 0x33, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x39, 0x38, 0x33, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x4A, 0x02, 0x44, 0x5A, 0x50, 0xD5, 0x01, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x3B, 0x0A, 0x1E, 0x28, 0x5B, 0x31, 0x2D, 0x34, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x05, 0x5B, 0x31, 0x2D, 0x34, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x3E, 0x0A, 0x21, 0x28, 0x5B, 0x35, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x05, 0x5B, 0x35, 0x2D, 0x38, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x33, 0x0A, 0x1A, 0x28, 0x39, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x01, 0x39, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xF7, 0x03, 0x0A, 0x20, 0x12, 0x14, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x7C, 0x31, 0x5C, 0x64, 0x7B, 0x39, 0x2C, 0x31, 0x30, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x31, 0x31, 0x7D, 0x12, 0x24, 0x12, 0x0F, 0x5B, 0x32, 0x2D, 0x37, 0x5D, 0x5B, 0x32, 0x2D, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x32, 0x08, 0x32, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x1A, 0x1C, 0x12, 0x09, 0x5B, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x39, 0x39, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x25, 0x12, 0x0B, 0x31, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x37, 0x7D, 0x1A, 0x09, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x2C, 0x31, 0x31, 0x7D, 0x32, 0x0B, 0x31, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x45, 0x43, 0x50, 0xD1, 0x04, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x2E, 0x0A, 0x12, 0x28, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x05, 0x5B, 0x32, 0x2D, 0x37, 0x5D, 0x22, 0x05, 0x28, 0x30, 0x24, 0x31, 0x29, 0x2A, 0x00, 0x9A, 0x01, 0x2E, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x04, 0x5B, 0x38, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2B, 0x0A, 0x16, 0x28, 0x31, 0x38, 0x30, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x31, 0x22, 0x02, 0x24, 0x31, 0x2A, 0x00, 0xA2, 0x01, 0x27, 0x0A, 0x12, 0x28, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x05, 0x5B, 0x32, 0x2D, 0x37, 0x5D, 0x2A, 0x00, 0xA2, 0x01, 0x29, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x04, 0x5B, 0x38, 0x39, 0x5D, 0x2A, 0x00, 0xA2, 0x01, 0x27, 0x0A, 0x16, 0x28, 0x31, 0x38, 0x30, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xE9, 0x05, 0x0A, 0x23, 0x12, 0x17, 0x5B, 0x33, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x37, 0x7D, 0x7C, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x37, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x31, 0x30, 0x7D, 0x12, 0x42, 0x12, 0x2E, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x32, 0x33, 0x35, 0x38, 0x39, 0x5D, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x30, 0x5C, 0x64, 0x7C, 0x5B, 0x33, 0x2D, 0x38, 0x5D, 0x29, 0x7C, 0x36, 0x5C, 0x64, 0x7C, 0x37, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x38, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x32, 0x07, 0x33, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x1A, 0x69, 0x12, 0x54, 0x28, 0x3F, 0x3A, 0x35, 0x5C, 0x64, 0x7C, 0x38, 0x5B, 0x31, 0x2D, 0x35, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x32, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x7C, 0x31, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x7C, 0x39, 0x35, 0x29, 0x7C, 0x35, 0x5B, 0x30, 0x2D, 0x34, 0x37, 0x38, 0x5D, 0x5C, 0x64, 0x7C, 0x36, 0x34, 0x5B, 0x30, 0x2D, 0x34, 0x5D, 0x7C, 0x36, 0x35, 0x5B, 0x31, 0x2D, 0x35, 0x38, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x32, 0x08, 0x35, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x22, 0x32, 0x12, 0x1C, 0x38, 0x30, 0x30, 0x28, 0x3F, 0x3A, 0x30, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x7C, 0x31, 0x5C, 0x64, 0x7C, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x08, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x2A, 0x1A, 0x12, 0x08, 0x39, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x39, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x1F, 0x12, 0x0C, 0x37, 0x30, 0x5B, 0x30, 0x2D, 0x32, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x37, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x45, 0x45, 0x50, 0xF4, 0x02, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x9C, 0x01, 0x0A, 0x15, 0x28, 0x5B, 0x33, 0x34, 0x2D, 0x37, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x2D, 0x5B, 0x33, 0x36, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x33, 0x2D, 0x38, 0x5D, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x2D, 0x32, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x2D, 0x34, 0x37, 0x38, 0x5D, 0x7C, 0x36, 0x5B, 0x34, 0x35, 0x5D, 0x29, 0x7C, 0x37, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x1A, 0x49, 0x5B, 0x33, 0x36, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x33, 0x2D, 0x38, 0x5D, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x32, 0x5D, 0x7C, 0x31, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x2D, 0x38, 0x5D, 0x7C, 0x39, 0x35, 0x29, 0x7C, 0x35, 0x5B, 0x30, 0x2D, 0x34, 0x37, 0x38, 0x5D, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x34, 0x5B, 0x30, 0x2D, 0x34, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x35, 0x38, 0x39, 0x5D, 0x29, 0x29, 0x7C, 0x37, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x26, 0x0A, 0x12, 0x28, 0x37, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x02, 0x37, 0x30, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x2F, 0x0A, 0x14, 0x28, 0x38, 0x30, 0x30, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x03, 0x38, 0x30, 0x30, 0x1A, 0x04, 0x38, 0x30, 0x30, 0x30, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x4F, 0x0A, 0x15, 0x28, 0x5B, 0x34, 0x35, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x12, 0x34, 0x30, 0x7C, 0x35, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x5B, 0x31, 0x2D, 0x35, 0x5D, 0x29, 0x1A, 0x17, 0x34, 0x30, 0x7C, 0x35, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x31, 0x2D, 0x35, 0x5D, 0x29, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x1F, 0x12, 0x0D, 0x38, 0x30, 0x30, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x38, 0x30, 0x30, 0x32, 0x31, 0x32, 0x33, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x98, 0x04, 0x0A, 0x23, 0x12, 0x17, 0x31, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x39, 0x7D, 0x7C, 0x5B, 0x32, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x31, 0x30, 0x7D, 0x12, 0xAF, 0x01, 0x12, 0x98, 0x01, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x33, 0x35, 0x5D, 0x5B, 0x32, 0x33, 0x5D, 0x7C, 0x32, 0x5B, 0x32, 0x33, 0x5D, 0x5C, 0x64, 0x7C, 0x33, 0x5C, 0x64, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x32, 0x2D, 0x34, 0x5D, 0x7C, 0x5B, 0x35, 0x37, 0x38, 0x5D, 0x5B, 0x32, 0x33, 0x5D, 0x7C, 0x36, 0x34, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x32, 0x33, 0x34, 0x5D, 0x7C, 0x5B, 0x35, 0x37, 0x5D, 0x5B, 0x32, 0x33, 0x5D, 0x29, 0x7C, 0x36, 0x5B, 0x32, 0x34, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x33, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x38, 0x5D, 0x5B, 0x32, 0x2D, 0x34, 0x5D, 0x7C, 0x34, 0x32, 0x7C, 0x36, 0x5B, 0x32, 0x33, 0x5D, 0x29, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x35, 0x5D, 0x32, 0x7C, 0x33, 0x5B, 0x32, 0x34, 0x5D, 0x7C, 0x36, 0x5B, 0x32, 0x33, 0x5D, 0x7C, 0x37, 0x5B, 0x32, 0x2D, 0x34, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x7C, 0x31, 0x5B, 0x36, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x39, 0x7D, 0x32, 0x09, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x30, 0x1A, 0x23, 0x12, 0x0F, 0x31, 0x5B, 0x30, 0x2D, 0x32, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x31, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x22, 0x1E, 0x12, 0x08, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x2A, 0x1E, 0x12, 0x08, 0x39, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x39, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x45, 0x47, 0x50, 0x14, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x23, 0x0A, 0x0D, 0x28, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x04, 0x5B, 0x32, 0x33, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x30, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x10, 0x5B, 0x31, 0x34, 0x2D, 0x36, 0x5D, 0x7C, 0x5B, 0x38, 0x39, 0x5D, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x31, 0x0A, 0x16, 0x28, 0x5B, 0x38, 0x39, 0x5D, 0x30, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x06, 0x5B, 0x38, 0x39, 0x5D, 0x30, 0x30, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x89, 0x02, 0x0A, 0x15, 0x12, 0x0A, 0x5B, 0x31, 0x37, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x37, 0x7D, 0x12, 0x3D, 0x12, 0x29, 0x31, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x31, 0x32, 0x35, 0x36, 0x38, 0x5D, 0x7C, 0x32, 0x30, 0x7C, 0x34, 0x30, 0x7C, 0x35, 0x35, 0x7C, 0x36, 0x5B, 0x31, 0x34, 0x36, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x7C, 0x38, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x37, 0x7D, 0x32, 0x07, 0x38, 0x33, 0x37, 0x30, 0x33, 0x36, 0x32, 0x1A, 0x25, 0x12, 0x13, 0x31, 0x37, 0x5B, 0x31, 0x2D, 0x33, 0x5D, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x7C, 0x37, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x37, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x45, 0x52, 0x50, 0xA3, 0x02, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x25, 0x0A, 0x12, 0x28, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xD5, 0x02, 0x0A, 0x13, 0x12, 0x0A, 0x5B, 0x35, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x12, 0x22, 0x12, 0x0E, 0x5B, 0x38, 0x39, 0x5D, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x1A, 0x1A, 0x12, 0x06, 0x36, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x36, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x22, 0x1F, 0x12, 0x0B, 0x5B, 0x38, 0x39, 0x5D, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x20, 0x12, 0x0C, 0x38, 0x30, 0x5B, 0x33, 0x36, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x30, 0x33, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x1F, 0x12, 0x0B, 0x39, 0x30, 0x5B, 0x31, 0x32, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x39, 0x30, 0x31, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x3A, 0x1B, 0x12, 0x07, 0x37, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x37, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x45, 0x53, 0x50, 0x22, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x34, 0x0A, 0x21, 0x28, 0x5B, 0x35, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x1B, 0x12, 0x07, 0x35, 0x31, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x35, 0x31, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x0A, 0xF5, 0x06, 0x0A, 0x16, 0x12, 0x0B, 0x5B, 0x31, 0x2D, 0x35, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x12, 0xA6, 0x05, 0x12, 0x8F, 0x05, 0x28, 0x3F, 0x3A, 0x31, 0x31, 0x28, 0x3F, 0x3A, 0x31, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x31, 0x32, 0x34, 0x5D, 0x7C, 0x32, 0x5B, 0x32, 0x2D, 0x35, 0x37, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x2D, 0x35, 0x5D, 0x7C, 0x35, 0x5B, 0x35, 0x2D, 0x38, 0x5D, 0x7C, 0x38, 0x5B, 0x36, 0x2D, 0x38, 0x5D, 0x29, 0x7C, 0x32, 0x28, 0x3F, 0x3A, 0x31, 0x33, 0x7C, 0x33, 0x5B, 0x36, 0x2D, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x38, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x32, 0x2D, 0x36, 0x5D, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x30, 0x31, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x2D, 0x32, 0x38, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x32, 0x38, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x2D, 0x34, 0x5D, 0x7C, 0x38, 0x37, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x36, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x32, 0x2D, 0x34, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x2D, 0x32, 0x33, 0x5D, 0x7C, 0x36, 0x5B, 0x35, 0x2D, 0x38, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x35, 0x37, 0x5D, 0x7C, 0x34, 0x34, 0x7C, 0x35, 0x5B, 0x30, 0x2D, 0x34, 0x5D, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x31, 0x38, 0x7C, 0x32, 0x5B, 0x36, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x35, 0x2D, 0x37, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x35, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x2D, 0x35, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x31, 0x35, 0x2D, 0x38, 0x5D, 0x29, 0x29, 0x7C, 0x32, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x31, 0x31, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x32, 0x32, 0x5B, 0x30, 0x2D, 0x37, 0x5D, 0x7C, 0x33, 0x33, 0x5C, 0x64, 0x7C, 0x34, 0x34, 0x5B, 0x31, 0x34, 0x36, 0x37, 0x5D, 0x7C, 0x36, 0x36, 0x5B, 0x31, 0x2D, 0x36, 0x38, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x31, 0x31, 0x5B, 0x31, 0x32, 0x34, 0x2D, 0x36, 0x5D, 0x7C, 0x33, 0x33, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x7C, 0x34, 0x34, 0x5B, 0x31, 0x34, 0x36, 0x37, 0x5D, 0x7C, 0x35, 0x35, 0x5B, 0x31, 0x34, 0x5D, 0x7C, 0x36, 0x36, 0x5B, 0x31, 0x2D, 0x33, 0x36, 0x37, 0x39, 0x5D, 0x7C, 0x37, 0x37, 0x5B, 0x31, 0x32, 0x34, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x38, 0x38, 0x30, 0x29, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x33, 0x28, 0x3F, 0x3A, 0x31, 0x31, 0x5B, 0x30, 0x2D, 0x34, 0x36, 0x2D, 0x38, 0x5D, 0x7C, 0x32, 0x32, 0x5B, 0x30, 0x2D, 0x36, 0x5D, 0x7C, 0x33, 0x33, 0x5B, 0x30, 0x31, 0x33, 0x34, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x34, 0x34, 0x5B, 0x30, 0x34, 0x5D, 0x7C, 0x35, 0x35, 0x5B, 0x30, 0x2D, 0x36, 0x5D, 0x7C, 0x36, 0x36, 0x5B, 0x30, 0x31, 0x34, 0x36, 0x37, 0x5D, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x34, 0x34, 0x5B, 0x30, 0x2D, 0x38, 0x5D, 0x7C, 0x35, 0x35, 0x5B, 0x30, 0x2D, 0x36, 0x39, 0x5D, 0x7C, 0x36, 0x36, 0x5B, 0x30, 0x2D, 0x33, 0x5D, 0x7C, 0x37, 0x37, 0x5B, 0x31, 0x2D, 0x35, 0x5D, 0x29, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x36, 0x28, 0x3F, 0x3A, 0x32, 0x32, 0x5B, 0x30, 0x2D, 0x32, 0x34, 0x2D, 0x37, 0x5D, 0x7C, 0x33, 0x33, 0x5B, 0x31, 0x2D, 0x35, 0x5D, 0x7C, 0x34, 0x34, 0x5B, 0x31, 0x33, 0x2D, 0x36, 0x39, 0x5D, 0x7C, 0x35, 0x35, 0x5B, 0x31, 0x34, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x36, 0x36, 0x30, 0x7C, 0x38, 0x38, 0x5B, 0x31, 0x2D, 0x34, 0x5D, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x31, 0x31, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x32, 0x32, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x33, 0x33, 0x5B, 0x31, 0x33, 0x2D, 0x37, 0x5D, 0x7C, 0x34, 0x34, 0x5B, 0x31, 0x33, 0x2D, 0x36, 0x5D, 0x7C, 0x35, 0x35, 0x5B, 0x31, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x29, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x37, 0x28, 0x3F, 0x3A, 0x32, 0x32, 0x37, 0x7C, 0x35, 0x35, 0x5B, 0x30, 0x35, 0x5D, 0x7C, 0x28, 0x3F, 0x3A, 0x36, 0x36, 0x7C, 0x37, 0x37, 0x29, 0x5B, 0x31, 0x34, 0x2D, 0x38, 0x5D, 0x29, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x31, 0x31, 0x5B, 0x31, 0x34, 0x39, 0x5D, 0x7C, 0x32, 0x32, 0x5B, 0x30, 0x31, 0x33, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x33, 0x33, 0x5B, 0x30, 0x2D, 0x36, 0x38, 0x5D, 0x7C, 0x34, 0x34, 0x5B, 0x30, 0x31, 0x33, 0x2D, 0x38, 0x5D, 0x7C, 0x35, 0x35, 0x30, 0x7C, 0x36, 0x36, 0x5B, 0x31, 0x2D, 0x35, 0x5D, 0x7C, 0x37, 0x37, 0x5C, 0x64, 0x29, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x32, 0x09, 0x31, 0x31, 0x31, 0x31, 0x31, 0x32, 0x33, 0x34, 0x35, 0x1A, 0x20, 0x12, 0x0C, 0x39, 0x31, 0x5B, 0x30, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x39, 0x31, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x45, 0x54, 0x50, 0xFB, 0x01, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x2B, 0x0A, 0x18, 0x28, 0x5B, 0x31, 0x2D, 0x35, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xA0, 0x05, 0x0A, 0x23, 0x12, 0x17, 0x31, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x31, 0x31, 0x7D, 0x7C, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x31, 0x30, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x31, 0x32, 0x7D, 0x12, 0x7A, 0x12, 0x62, 0x31, 0x28, 0x3F, 0x3A, 0x5B, 0x33, 0x35, 0x36, 0x38, 0x39, 0x5D, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x39, 0x7D, 0x7C, 0x5B, 0x34, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x31, 0x30, 0x7D, 0x29, 0x7C, 0x32, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x39, 0x7D, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x39, 0x7D, 0x7C, 0x39, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x38, 0x7D, 0x29, 0x7C, 0x5B, 0x35, 0x36, 0x38, 0x39, 0x5D, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x39, 0x7D, 0x7C, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x31, 0x32, 0x7D, 0x32, 0x0A, 0x31, 0x33, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x1A, 0x2A, 0x12, 0x13, 0x34, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x31, 0x30, 0x7D, 0x7C, 0x35, 0x30, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x38, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x31, 0x31, 0x7D, 0x32, 0x09, 0x34, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x22, 0x22, 0x12, 0x0A, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x37, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x2A, 0x23, 0x12, 0x0D, 0x5B, 0x36, 0x37, 0x5D, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x36, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x38, 0x2C, 0x39, 0x7D, 0x32, 0x09, 0x36, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x46, 0x49, 0x50, 0xE6, 0x02, 0x5A, 0x0A, 0x30, 0x30, 0x7C, 0x39, 0x39, 0x5B, 0x30, 0x34, 0x39, 0x5D, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x37, 0x0A, 0x11, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x31, 0x30, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x14, 0x32, 0x5B, 0x30, 0x39, 0x5D, 0x7C, 0x5B, 0x31, 0x34, 0x5D, 0x7C, 0x35, 0x30, 0x7C, 0x37, 0x5B, 0x31, 0x33, 0x35, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2E, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x31, 0x31, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x0E, 0x5B, 0x32, 0x35, 0x36, 0x38, 0x39, 0x5D, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x7C, 0x33, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2A, 0x0A, 0x12, 0x28, 0x5B, 0x36, 0x2D, 0x38, 0x5D, 0x30, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x37, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x06, 0x5B, 0x36, 0x2D, 0x38, 0x5D, 0x30, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0xA1, 0x01, 0x12, 0x8A, 0x01, 0x31, 0x30, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x37, 0x7D, 0x7C, 0x32, 0x28, 0x3F, 0x3A, 0x30, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x36, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x37, 0x7D, 0x7C, 0x32, 0x5B, 0x31, 0x34, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x31, 0x2C, 0x36, 0x7D, 0x7C, 0x5B, 0x33, 0x2D, 0x35, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x2C, 0x37, 0x7D, 0x7C, 0x39, 0x5B, 0x30, 0x2D, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x31, 0x2C, 0x36, 0x7D, 0x29, 0x7C, 0x39, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x38, 0x7D, 0x29, 0x7C, 0x33, 0x30, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x37, 0x7D, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x31, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x7C, 0x33, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x7C, 0x35, 0x5B, 0x30, 0x33, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x2C, 0x37, 0x7D, 0x29, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x08, 0x31, 0x30, 0x31, 0x31, 0x32, 0x33, 0x34, 0x35, 0x0A, 0xD8, 0x02, 0x0A, 0x26, 0x12, 0x13, 0x5B, 0x33, 0x36, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x7C, 0x30, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x3F, 0x12, 0x2F, 0x12, 0x1D, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x30, 0x2D, 0x35, 0x5D, 0x7C, 0x36, 0x5B, 0x32, 0x35, 0x2D, 0x37, 0x5D, 0x7C, 0x38, 0x5B, 0x35, 0x38, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x33, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x1A, 0x27, 0x12, 0x15, 0x28, 0x3F, 0x3A, 0x37, 0x5B, 0x30, 0x2D, 0x34, 0x5D, 0x7C, 0x39, 0x5B, 0x32, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x37, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x22, 0x20, 0x12, 0x09, 0x30, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x31, 0x7D, 0x32, 0x0B, 0x30, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x46, 0x4A, 0x50, 0xA7, 0x05, 0x5A, 0x09, 0x30, 0x28, 0x3F, 0x3A, 0x30, 0x7C, 0x35, 0x32, 0x29, 0x8A, 0x01, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x23, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x06, 0x5B, 0x33, 0x36, 0x2D, 0x39, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x28, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x30, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xD0, 0x01, 0x01, 0x0A, 0xAB, 0x01, 0x0A, 0x13, 0x12, 0x0A, 0x5B, 0x32, 0x2D, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x12, 0x1B, 0x12, 0x0B, 0x5B, 0x32, 0x2D, 0x34, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x32, 0x05, 0x33, 0x31, 0x32, 0x33, 0x34, 0x1A, 0x19, 0x12, 0x09, 0x5B, 0x35, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x32, 0x05, 0x35, 0x31, 0x32, 0x33, 0x34, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x46, 0x4B, 0x50, 0xF4, 0x03, 0x5A, 0x02, 0x30, 0x30, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xF4, 0x01, 0x0A, 0x12, 0x12, 0x09, 0x5B, 0x33, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x12, 0x30, 0x12, 0x1E, 0x33, 0x5B, 0x32, 0x33, 0x35, 0x37, 0x5D, 0x30, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x7C, 0x39, 0x5B, 0x32, 0x2D, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x33, 0x32, 0x30, 0x31, 0x32, 0x33, 0x34, 0x1A, 0x30, 0x12, 0x1E, 0x33, 0x5B, 0x32, 0x33, 0x35, 0x37, 0x5D, 0x30, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x7C, 0x39, 0x5B, 0x32, 0x2D, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x33, 0x35, 0x30, 0x31, 0x32, 0x33, 0x34, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x46, 0x4D, 0x50, 0xB3, 0x05, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x1B, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xDB, 0x02, 0x0A, 0x13, 0x12, 0x0A, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x12, 0x2A, 0x12, 0x19, 0x28, 0x3F, 0x3A, 0x32, 0x30, 0x7C, 0x5B, 0x33, 0x2D, 0x34, 0x5D, 0x5C, 0x64, 0x7C, 0x38, 0x5B, 0x31, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x32, 0x06, 0x32, 0x30, 0x31, 0x32, 0x33, 0x34, 0x1A, 0x2C, 0x12, 0x1B, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5C, 0x64, 0x7C, 0x37, 0x5B, 0x31, 0x2D, 0x37, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x32, 0x06, 0x32, 0x31, 0x31, 0x32, 0x33, 0x34, 0x22, 0x1F, 0x12, 0x0E, 0x38, 0x30, 0x5B, 0x32, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x32, 0x06, 0x38, 0x30, 0x32, 0x31, 0x32, 0x33, 0x2A, 0x34, 0x12, 0x23, 0x39, 0x30, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x33, 0x34, 0x35, 0x5D, 0x5B, 0x31, 0x35, 0x2D, 0x37, 0x5D, 0x7C, 0x32, 0x5B, 0x31, 0x32, 0x35, 0x2D, 0x37, 0x5D, 0x7C, 0x39, 0x39, 0x29, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x32, 0x06, 0x39, 0x30, 0x31, 0x31, 0x32, 0x33, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x24, 0x12, 0x13, 0x28, 0x3F, 0x3A, 0x36, 0x5B, 0x30, 0x2D, 0x33, 0x36, 0x5D, 0x7C, 0x38, 0x38, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x32, 0x06, 0x36, 0x30, 0x31, 0x32, 0x33, 0x34, 0x4A, 0x02, 0x46, 0x4F, 0x50, 0xAA, 0x02, 0x5A, 0x02, 0x30, 0x30, 0x7A, 0x13, 0x28, 0x31, 0x30, 0x28, 0x3F, 0x3A, 0x30, 0x31, 0x7C, 0x5B, 0x31, 0x32, 0x5D, 0x30, 0x7C, 0x38, 0x38, 0x29, 0x29, 0x9A, 0x01, 0x17, 0x0A, 0x07, 0x28, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x29, 0x12, 0x02, 0x24, 0x31, 0x22, 0x00, 0x2A, 0x06, 0x24, 0x43, 0x43, 0x20, 0x24, 0x31, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xB7, 0x03, 0x0A, 0x13, 0x12, 0x0A, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x12, 0x1E, 0x12, 0x0A, 0x5B, 0x31, 0x2D, 0x35, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x1A, 0x26, 0x12, 0x12, 0x36, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x7C, 0x37, 0x5B, 0x35, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x36, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x22, 0x1B, 0x12, 0x07, 0x38, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x2A, 0x23, 0x12, 0x0F, 0x38, 0x39, 0x5B, 0x31, 0x2D, 0x33, 0x37, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x39, 0x31, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x32, 0x12, 0x1E, 0x38, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x30, 0x31, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x31, 0x35, 0x36, 0x5D, 0x7C, 0x38, 0x34, 0x7C, 0x39, 0x30, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x31, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x1A, 0x12, 0x06, 0x39, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x39, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x4A, 0x02, 0x46, 0x52, 0x50, 0x21, 0x5A, 0x08, 0x5B, 0x30, 0x34, 0x35, 0x37, 0x39, 0x5D, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x8A, 0x01, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x45, 0x0A, 0x24, 0x28, 0x5B, 0x31, 0x2D, 0x37, 0x39, 0x5D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0E, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x20, 0x24, 0x35, 0x1A, 0x06, 0x5B, 0x31, 0x2D, 0x37, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x37, 0x0A, 0x1D, 0x28, 0x38, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x01, 0x38, 0x22, 0x04, 0x30, 0x20, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xEF, 0x03, 0x0A, 0x1C, 0x12, 0x11, 0x5B, 0x34, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x7C, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x38, 0x7D, 0x12, 0x5A, 0x12, 0x49, 0x28, 0x3F, 0x3A, 0x34, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x34, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x7C, 0x32, 0x5B, 0x30, 0x34, 0x5D, 0x29, 0x7C, 0x28, 0x3F, 0x3A, 0x35, 0x5B, 0x30, 0x34, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x32, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5C, 0x64, 0x7C, 0x38, 0x5B, 0x32, 0x33, 0x36, 0x5D, 0x7C, 0x39, 0x5B, 0x30, 0x32, 0x33, 0x36, 0x38, 0x5D, 0x29, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x32, 0x06, 0x34, 0x34, 0x31, 0x32, 0x33, 0x34, 0x1A, 0xAF, 0x01, 0x12, 0x9B, 0x01, 0x30, 0x28, 0x3F, 0x3A, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x38, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x2D, 0x34, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x2D, 0x32, 0x36, 0x5D, 0x7C, 0x39, 0x5B, 0x32, 0x33, 0x38, 0x5D, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x33, 0x2D, 0x37, 0x5D, 0x7C, 0x31, 0x5B, 0x30, 0x31, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x2D, 0x37, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x2D, 0x35, 0x38, 0x39, 0x5D, 0x7C, 0x37, 0x31, 0x7C, 0x38, 0x33, 0x7C, 0x39, 0x5B, 0x35, 0x37, 0x5D, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x32, 0x2D, 0x35, 0x5D, 0x7C, 0x32, 0x5B, 0x38, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x31, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x2D, 0x33, 0x34, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x36, 0x37, 0x5D, 0x5C, 0x64, 0x7C, 0x38, 0x5B, 0x34, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x30, 0x31, 0x34, 0x36, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x30, 0x36, 0x30, 0x33, 0x31, 0x32, 0x33, 0x34, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x47, 0x41, 0x50, 0xF1, 0x01, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x2C, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x05, 0x5B, 0x34, 0x2D, 0x39, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x30, 0x0A, 0x1A, 0x28, 0x30, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x01, 0x30, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xD0, 0x01, 0x01, 0x0A, 0xE4, 0x14, 0x0A, 0x14, 0x12, 0x08, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x31, 0x30, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x31, 0x30, 0x7D, 0x12, 0xF9, 0x0A, 0x12, 0xE0, 0x0A, 0x32, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x31, 0x33, 0x37, 0x38, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x31, 0x38, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x31, 0x37, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x2D, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x30, 0x31, 0x32, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x7C, 0x31, 0x28, 0x3F, 0x3A, 0x28, 0x3F, 0x3A, 0x31, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x30, 0x2D, 0x34, 0x38, 0x5D, 0x7C, 0x5B, 0x34, 0x36, 0x5D, 0x5B, 0x30, 0x2D, 0x34, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x31, 0x32, 0x37, 0x38, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x2D, 0x33, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x31, 0x33, 0x34, 0x39, 0x5D, 0x29, 0x7C, 0x32, 0x31, 0x5B, 0x30, 0x2D, 0x37, 0x5D, 0x7C, 0x33, 0x31, 0x5B, 0x30, 0x2D, 0x38, 0x5D, 0x7C, 0x5B, 0x34, 0x35, 0x39, 0x5D, 0x31, 0x5C, 0x64, 0x7C, 0x36, 0x31, 0x5B, 0x30, 0x2D, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x7C, 0x31, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x32, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x33, 0x2D, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x33, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x5B, 0x35, 0x38, 0x5D, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x2D, 0x34, 0x37, 0x38, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x31, 0x33, 0x2D, 0x39, 0x5D, 0x7C, 0x39, 0x5C, 0x64, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x30, 0x5C, 0x64, 0x7C, 0x5B, 0x32, 0x35, 0x5D, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x32, 0x2D, 0x35, 0x37, 0x39, 0x5D, 0x7C, 0x5B, 0x34, 0x36, 0x38, 0x5D, 0x5B, 0x30, 0x2D, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x32, 0x33, 0x35, 0x36, 0x37, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x32, 0x34, 0x35, 0x37, 0x38, 0x5D, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x33, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x32, 0x38, 0x5D, 0x5B, 0x30, 0x32, 0x2D, 0x35, 0x37, 0x38, 0x39, 0x5D, 0x7C, 0x5B, 0x33, 0x37, 0x5D, 0x5C, 0x64, 0x7C, 0x34, 0x5B, 0x30, 0x32, 0x2D, 0x36, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x2D, 0x38, 0x5D, 0x7C, 0x5B, 0x36, 0x39, 0x5D, 0x5B, 0x30, 0x2D, 0x37, 0x39, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x31, 0x32, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x32, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x31, 0x35, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x33, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x5C, 0x64, 0x7C, 0x37, 0x5B, 0x30, 0x2D, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x2D, 0x34, 0x36, 0x38, 0x5D, 0x7C, 0x39, 0x5B, 0x30, 0x2D, 0x35, 0x37, 0x38, 0x39, 0x5D, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x33, 0x34, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x2D, 0x33, 0x35, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x5B, 0x33, 0x38, 0x5D, 0x5B, 0x30, 0x31, 0x33, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x2D, 0x34, 0x36, 0x37, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x2D, 0x36, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x33, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x2D, 0x38, 0x5D, 0x7C, 0x39, 0x5B, 0x30, 0x31, 0x32, 0x34, 0x35, 0x37, 0x38, 0x5D, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x32, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x32, 0x5C, 0x64, 0x7C, 0x33, 0x5B, 0x30, 0x32, 0x33, 0x36, 0x37, 0x38, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x33, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x2D, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x31, 0x33, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x2D, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x32, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x31, 0x2D, 0x35, 0x37, 0x38, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x32, 0x2D, 0x35, 0x37, 0x38, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x2D, 0x35, 0x37, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x32, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x32, 0x2D, 0x36, 0x39, 0x5D, 0x7C, 0x37, 0x5C, 0x64, 0x7C, 0x38, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x30, 0x32, 0x35, 0x36, 0x39, 0x5D, 0x29, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x32, 0x2D, 0x35, 0x38, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x32, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x2D, 0x35, 0x37, 0x38, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x2D, 0x35, 0x37, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x32, 0x33, 0x34, 0x37, 0x38, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x31, 0x32, 0x34, 0x35, 0x37, 0x38, 0x5D, 0x7C, 0x38, 0x5C, 0x64, 0x7C, 0x39, 0x5B, 0x32, 0x2D, 0x35, 0x37, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x7C, 0x31, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x30, 0x28, 0x3F, 0x3A, 0x34, 0x36, 0x5B, 0x31, 0x2D, 0x34, 0x5D, 0x7C, 0x38, 0x37, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x35, 0x34, 0x35, 0x5B, 0x31, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x37, 0x36, 0x28, 0x3F, 0x3A, 0x32, 0x5C, 0x64, 0x7C, 0x33, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x2D, 0x36, 0x5D, 0x29, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x37, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x30, 0x2D, 0x34, 0x5D, 0x7C, 0x33, 0x5B, 0x32, 0x2D, 0x35, 0x5D, 0x29, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x2D, 0x34, 0x37, 0x38, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x33, 0x34, 0x35, 0x5D, 0x29, 0x29, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x36, 0x33, 0x38, 0x5B, 0x32, 0x2D, 0x35, 0x5D, 0x7C, 0x36, 0x34, 0x37, 0x5B, 0x32, 0x33, 0x5D, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x34, 0x37, 0x5B, 0x30, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x34, 0x5B, 0x30, 0x31, 0x35, 0x37, 0x38, 0x39, 0x5D, 0x29, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x30, 0x34, 0x34, 0x5B, 0x31, 0x2D, 0x37, 0x5D, 0x7C, 0x32, 0x30, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x32, 0x33, 0x5D, 0x7C, 0x38, 0x5C, 0x64, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x30, 0x28, 0x3F, 0x3A, 0x33, 0x30, 0x7C, 0x35, 0x5B, 0x32, 0x2D, 0x35, 0x37, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x7C, 0x37, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x29, 0x7C, 0x31, 0x34, 0x30, 0x29, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x30, 0x35, 0x32, 0x7C, 0x38, 0x37, 0x5B, 0x31, 0x32, 0x33, 0x5D, 0x29, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x32, 0x34, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x32, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x36, 0x5C, 0x64, 0x29, 0x7C, 0x32, 0x37, 0x36, 0x5C, 0x64, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x32, 0x36, 0x5B, 0x30, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x38, 0x36, 0x29, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x30, 0x36, 0x28, 0x3F, 0x3A, 0x34, 0x5C, 0x64, 0x7C, 0x37, 0x5B, 0x34, 0x2D, 0x37, 0x39, 0x5D, 0x29, 0x7C, 0x32, 0x39, 0x35, 0x5B, 0x35, 0x36, 0x37, 0x5D, 0x7C, 0x33, 0x35, 0x5B, 0x33, 0x34, 0x5D, 0x5C, 0x64, 0x7C, 0x34, 0x37, 0x28, 0x3F, 0x3A, 0x32, 0x34, 0x7C, 0x36, 0x31, 0x29, 0x7C, 0x35, 0x39, 0x28, 0x3F, 0x3A, 0x35, 0x5B, 0x30, 0x38, 0x5D, 0x7C, 0x36, 0x5B, 0x36, 0x37, 0x5D, 0x7C, 0x37, 0x34, 0x29, 0x7C, 0x39, 0x35, 0x35, 0x5B, 0x30, 0x2D, 0x34, 0x5D, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x32, 0x36, 0x28, 0x3F, 0x3A, 0x36, 0x5B, 0x31, 0x33, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x2D, 0x37, 0x5D, 0x29, 0x7C, 0x34, 0x34, 0x32, 0x5C, 0x64, 0x7C, 0x35, 0x30, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x30, 0x2D, 0x33, 0x5D, 0x7C, 0x5B, 0x33, 0x2D, 0x36, 0x38, 0x5D, 0x32, 0x7C, 0x37, 0x36, 0x29, 0x29, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x32, 0x37, 0x5B, 0x35, 0x36, 0x5D, 0x5C, 0x64, 0x7C, 0x33, 0x37, 0x28, 0x3F, 0x3A, 0x35, 0x5B, 0x32, 0x2D, 0x35, 0x5D, 0x7C, 0x38, 0x5B, 0x32, 0x33, 0x39, 0x5D, 0x29, 0x7C, 0x38, 0x34, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x32, 0x2D, 0x35, 0x38, 0x5D, 0x29, 0x29, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x30, 0x28, 0x3F, 0x3A, 0x30, 0x28, 0x3F, 0x3A, 0x36, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x7C, 0x38, 0x35, 0x29, 0x7C, 0x35, 0x32, 0x5C, 0x64, 0x29, 0x7C, 0x33, 0x35, 0x38, 0x33, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x36, 0x36, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x30, 0x31, 0x5D, 0x7C, 0x38, 0x31, 0x29, 0x29, 0x7C, 0x36, 0x33, 0x28, 0x3F, 0x3A, 0x32, 0x33, 0x7C, 0x33, 0x5B, 0x31, 0x2D, 0x34, 0x5D, 0x29, 0x7C, 0x39, 0x35, 0x36, 0x31, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x7C, 0x31, 0x37, 0x36, 0x38, 0x38, 0x38, 0x5B, 0x32, 0x33, 0x34, 0x36, 0x37, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x7C, 0x31, 0x36, 0x39, 0x37, 0x37, 0x5B, 0x32, 0x33, 0x5D, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x31, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x1A, 0xB0, 0x01, 0x12, 0x99, 0x01, 0x37, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x2D, 0x34, 0x5D, 0x5C, 0x64, 0x5C, 0x64, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x2D, 0x38, 0x5D, 0x7C, 0x5B, 0x31, 0x33, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7C, 0x32, 0x5B, 0x30, 0x2D, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x31, 0x2D, 0x37, 0x5D, 0x5C, 0x64, 0x7C, 0x38, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x30, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x29, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x31, 0x34, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7C, 0x5B, 0x32, 0x33, 0x5D, 0x5B, 0x30, 0x2D, 0x38, 0x5D, 0x29, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x34, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7C, 0x31, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x2D, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x37, 0x34, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x48, 0x12, 0x27, 0x38, 0x30, 0x28, 0x3F, 0x3A, 0x30, 0x28, 0x3F, 0x3A, 0x31, 0x31, 0x31, 0x31, 0x7C, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x37, 0x7D, 0x29, 0x7C, 0x38, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x29, 0x7C, 0x35, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x11, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x32, 0x2C, 0x33, 0x7D, 0x29, 0x3F, 0x32, 0x0A, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x2A, 0x39, 0x12, 0x23, 0x28, 0x3F, 0x3A, 0x38, 0x37, 0x5B, 0x31, 0x32, 0x33, 0x5D, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x31, 0x5D, 0x5C, 0x64, 0x7C, 0x38, 0x5B, 0x30, 0x2D, 0x33, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x39, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x32, 0x42, 0x12, 0x23, 0x38, 0x28, 0x3F, 0x3A, 0x34, 0x28, 0x3F, 0x3A, 0x35, 0x34, 0x36, 0x34, 0x5C, 0x64, 0x7C, 0x5B, 0x32, 0x2D, 0x35, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x29, 0x7C, 0x37, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x29, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x32, 0x0A, 0x38, 0x34, 0x33, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x3A, 0x1D, 0x12, 0x07, 0x37, 0x30, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x37, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x42, 0x1D, 0x12, 0x07, 0x35, 0x36, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x35, 0x36, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x4A, 0x02, 0x47, 0x42, 0x50, 0x2C, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x6A, 0x02, 0x20, 0x78, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x37, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x0D, 0x32, 0x7C, 0x35, 0x5B, 0x35, 0x36, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x36, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x3D, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x13, 0x31, 0x28, 0x3F, 0x3A, 0x31, 0x7C, 0x5C, 0x64, 0x31, 0x29, 0x7C, 0x33, 0x7C, 0x39, 0x5B, 0x30, 0x31, 0x38, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x8C, 0x01, 0x0A, 0x10, 0x28, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x35, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x16, 0x31, 0x28, 0x3F, 0x3A, 0x33, 0x38, 0x7C, 0x35, 0x5B, 0x32, 0x33, 0x5D, 0x7C, 0x36, 0x39, 0x7C, 0x37, 0x36, 0x7C, 0x39, 0x34, 0x29, 0x1A, 0x1F, 0x31, 0x28, 0x3F, 0x3A, 0x33, 0x38, 0x37, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x32, 0x34, 0x7C, 0x33, 0x39, 0x29, 0x7C, 0x36, 0x39, 0x37, 0x7C, 0x37, 0x36, 0x38, 0x7C, 0x39, 0x34, 0x36, 0x29, 0x1A, 0x31, 0x31, 0x28, 0x3F, 0x3A, 0x33, 0x38, 0x37, 0x33, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x32, 0x34, 0x32, 0x7C, 0x33, 0x39, 0x5B, 0x34, 0x35, 0x36, 0x5D, 0x29, 0x7C, 0x36, 0x39, 0x37, 0x5B, 0x33, 0x34, 0x37, 0x5D, 0x7C, 0x37, 0x36, 0x38, 0x5B, 0x33, 0x34, 0x37, 0x5D, 0x7C, 0x39, 0x34, 0x36, 0x37, 0x29, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x24, 0x0A, 0x11, 0x28, 0x31, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x36, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x01, 0x31, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2A, 0x0A, 0x0F, 0x28, 0x37, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x09, 0x37, 0x5B, 0x31, 0x2D, 0x35, 0x37, 0x38, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x3F, 0x0A, 0x0C, 0x28, 0x38, 0x30, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x03, 0x38, 0x30, 0x30, 0x1A, 0x04, 0x38, 0x30, 0x30, 0x31, 0x1A, 0x05, 0x38, 0x30, 0x30, 0x31, 0x31, 0x1A, 0x06, 0x38, 0x30, 0x30, 0x31, 0x31, 0x31, 0x1A, 0x07, 0x38, 0x30, 0x30, 0x31, 0x31, 0x31, 0x31, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x3B, 0x0A, 0x0E, 0x28, 0x38, 0x34, 0x35, 0x29, 0x28, 0x34, 0x36, 0x29, 0x28, 0x34, 0x5C, 0x64, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x03, 0x38, 0x34, 0x35, 0x1A, 0x04, 0x38, 0x34, 0x35, 0x34, 0x1A, 0x05, 0x38, 0x34, 0x35, 0x34, 0x36, 0x1A, 0x06, 0x38, 0x34, 0x35, 0x34, 0x36, 0x34, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x3D, 0x0A, 0x16, 0x28, 0x38, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x12, 0x38, 0x28, 0x3F, 0x3A, 0x34, 0x5B, 0x32, 0x2D, 0x35, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x2D, 0x33, 0x5D, 0x29, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2B, 0x0A, 0x14, 0x28, 0x38, 0x30, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x02, 0x38, 0x30, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x27, 0x0A, 0x0F, 0x28, 0x5B, 0x35, 0x38, 0x5D, 0x30, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x06, 0x5B, 0x35, 0x38, 0x5D, 0x30, 0x30, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x51, 0x12, 0x3B, 0x37, 0x36, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x31, 0x32, 0x5D, 0x7C, 0x32, 0x5B, 0x33, 0x35, 0x36, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x31, 0x33, 0x34, 0x5D, 0x7C, 0x35, 0x5B, 0x34, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x2D, 0x33, 0x36, 0x39, 0x5D, 0x7C, 0x37, 0x37, 0x7C, 0x38, 0x31, 0x7C, 0x39, 0x5B, 0x33, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x37, 0x36, 0x34, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0xB0, 0x01, 0x01, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x29, 0x12, 0x13, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x30, 0x33, 0x34, 0x37, 0x5D, 0x7C, 0x35, 0x35, 0x29, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x35, 0x35, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x0A, 0xC3, 0x03, 0x0A, 0x1E, 0x12, 0x0B, 0x5B, 0x34, 0x35, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x12, 0x85, 0x01, 0x12, 0x66, 0x34, 0x37, 0x33, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x30, 0x2D, 0x32, 0x5D, 0x7C, 0x36, 0x39, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x38, 0x39, 0x5D, 0x7C, 0x38, 0x36, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x36, 0x5D, 0x38, 0x7C, 0x33, 0x5B, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x2D, 0x34, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x35, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x37, 0x33, 0x7C, 0x39, 0x30, 0x29, 0x7C, 0x36, 0x33, 0x5B, 0x36, 0x38, 0x5D, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x35, 0x38, 0x7C, 0x38, 0x34, 0x29, 0x7C, 0x39, 0x33, 0x38, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x32, 0x0A, 0x34, 0x37, 0x33, 0x32, 0x36, 0x39, 0x31, 0x32, 0x33, 0x34, 0x1A, 0x44, 0x12, 0x2E, 0x34, 0x37, 0x33, 0x28, 0x3F, 0x3A, 0x34, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x33, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x31, 0x5B, 0x30, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x32, 0x30, 0x7C, 0x35, 0x38, 0x29, 0x7C, 0x35, 0x33, 0x5B, 0x33, 0x2D, 0x38, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x34, 0x37, 0x33, 0x34, 0x30, 0x33, 0x31, 0x32, 0x33, 0x34, 0x22, 0x33, 0x12, 0x1D, 0x38, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x35, 0x35, 0x7C, 0x36, 0x36, 0x7C, 0x37, 0x37, 0x7C, 0x38, 0x38, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x30, 0x30, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x23, 0x12, 0x0D, 0x39, 0x30, 0x30, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x39, 0x30, 0x30, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x2D, 0x12, 0x17, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x33, 0x33, 0x7C, 0x34, 0x34, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x35, 0x30, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x47, 0x44, 0x50, 0x01, 0x5A, 0x03, 0x30, 0x31, 0x31, 0x62, 0x01, 0x31, 0x7A, 0x01, 0x31, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xBA, 0x01, 0x03, 0x34, 0x37, 0x33, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xBC, 0x03, 0x0A, 0x1E, 0x12, 0x13, 0x5B, 0x31, 0x33, 0x2D, 0x37, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x7C, 0x38, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x39, 0x7D, 0x12, 0x67, 0x12, 0x52, 0x28, 0x3F, 0x3A, 0x33, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x35, 0x36, 0x5D, 0x5C, 0x64, 0x7C, 0x34, 0x5B, 0x31, 0x32, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x2D, 0x34, 0x5D, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x31, 0x5C, 0x64, 0x7C, 0x32, 0x5B, 0x32, 0x2D, 0x37, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x7C, 0x37, 0x5B, 0x32, 0x33, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x2D, 0x37, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x38, 0x7D, 0x32, 0x08, 0x33, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x1A, 0x41, 0x12, 0x2E, 0x28, 0x3F, 0x3A, 0x31, 0x34, 0x7C, 0x35, 0x5B, 0x30, 0x31, 0x35, 0x37, 0x38, 0x5D, 0x7C, 0x36, 0x5B, 0x32, 0x38, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x31, 0x34, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x30, 0x2D, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x35, 0x35, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x1C, 0x12, 0x08, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x47, 0x45, 0x50, 0xE3, 0x07, 0x5A, 0x04, 0x38, 0x7E, 0x31, 0x30, 0x62, 0x01, 0x38, 0x7A, 0x01, 0x38, 0x9A, 0x01, 0x3C, 0x0A, 0x1C, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x07, 0x5B, 0x31, 0x33, 0x2D, 0x37, 0x39, 0x5D, 0x22, 0x04, 0x38, 0x20, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x34, 0x0A, 0x1A, 0x28, 0x38, 0x30, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x01, 0x38, 0x22, 0x04, 0x38, 0x20, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x67, 0x0A, 0x00, 0x12, 0x00, 0x1A, 0x00, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x47, 0x46, 0x50, 0xD2, 0x04, 0x5A, 0x02, 0x30, 0x30, 0x90, 0x01, 0x01, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x93, 0x04, 0x0A, 0x1B, 0x12, 0x0F, 0x5B, 0x31, 0x33, 0x35, 0x37, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x39, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x31, 0x30, 0x7D, 0x12, 0x21, 0x12, 0x09, 0x31, 0x34, 0x38, 0x31, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x31, 0x34, 0x38, 0x31, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x1A, 0x2B, 0x12, 0x15, 0x37, 0x28, 0x3F, 0x3A, 0x37, 0x38, 0x31, 0x7C, 0x38, 0x33, 0x39, 0x7C, 0x39, 0x31, 0x31, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x37, 0x37, 0x38, 0x31, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x48, 0x12, 0x27, 0x38, 0x30, 0x28, 0x3F, 0x3A, 0x30, 0x28, 0x3F, 0x3A, 0x31, 0x31, 0x31, 0x31, 0x7C, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x37, 0x7D, 0x29, 0x7C, 0x38, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x29, 0x7C, 0x35, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x11, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x32, 0x2C, 0x33, 0x7D, 0x29, 0x3F, 0x32, 0x0A, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x2A, 0x39, 0x12, 0x23, 0x28, 0x3F, 0x3A, 0x38, 0x37, 0x5B, 0x31, 0x32, 0x33, 0x5D, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x31, 0x5D, 0x5C, 0x64, 0x7C, 0x38, 0x5B, 0x30, 0x2D, 0x33, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x39, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x32, 0x42, 0x12, 0x23, 0x38, 0x28, 0x3F, 0x3A, 0x34, 0x28, 0x3F, 0x3A, 0x35, 0x34, 0x36, 0x34, 0x5C, 0x64, 0x7C, 0x5B, 0x32, 0x2D, 0x35, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x29, 0x7C, 0x37, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x29, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x32, 0x0A, 0x38, 0x34, 0x33, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x3A, 0x1D, 0x12, 0x07, 0x37, 0x30, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x37, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x42, 0x1D, 0x12, 0x07, 0x35, 0x36, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x35, 0x36, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x4A, 0x02, 0x47, 0x47, 0x50, 0x2C, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x6A, 0x02, 0x20, 0x78, 0x7A, 0x01, 0x30, 0xAA, 0x01, 0x51, 0x12, 0x3B, 0x37, 0x36, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x31, 0x32, 0x5D, 0x7C, 0x32, 0x5B, 0x33, 0x35, 0x36, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x31, 0x33, 0x34, 0x5D, 0x7C, 0x35, 0x5B, 0x34, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x2D, 0x33, 0x36, 0x39, 0x5D, 0x7C, 0x37, 0x37, 0x7C, 0x38, 0x31, 0x7C, 0x39, 0x5B, 0x33, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x37, 0x36, 0x34, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x29, 0x12, 0x13, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x30, 0x33, 0x34, 0x37, 0x5D, 0x7C, 0x35, 0x35, 0x29, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x35, 0x35, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x0A, 0x84, 0x03, 0x0A, 0x17, 0x12, 0x0C, 0x5B, 0x32, 0x33, 0x35, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x38, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x12, 0x99, 0x01, 0x12, 0x82, 0x01, 0x33, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x32, 0x33, 0x37, 0x5D, 0x5C, 0x64, 0x7C, 0x5B, 0x31, 0x36, 0x37, 0x5D, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x30, 0x2D, 0x36, 0x5D, 0x7C, 0x37, 0x5C, 0x64, 0x29, 0x7C, 0x32, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x30, 0x2D, 0x35, 0x5D, 0x7C, 0x37, 0x5C, 0x64, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x30, 0x2D, 0x33, 0x37, 0x5D, 0x7C, 0x37, 0x5C, 0x64, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x37, 0x5D, 0x5C, 0x64, 0x7C, 0x33, 0x30, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x30, 0x2D, 0x37, 0x5D, 0x7C, 0x37, 0x5C, 0x64, 0x29, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x30, 0x2D, 0x32, 0x5D, 0x7C, 0x37, 0x5C, 0x64, 0x29, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x32, 0x30, 0x7C, 0x37, 0x5C, 0x64, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x32, 0x09, 0x33, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x1A, 0x3E, 0x12, 0x2A, 0x32, 0x28, 0x3F, 0x3A, 0x28, 0x3F, 0x3A, 0x5B, 0x34, 0x37, 0x5D, 0x5C, 0x64, 0x7C, 0x30, 0x38, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x7C, 0x5B, 0x33, 0x36, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x29, 0x7C, 0x35, 0x34, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x32, 0x33, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x47, 0x48, 0x50, 0xE9, 0x01, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x28, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x8B, 0x02, 0x0A, 0x14, 0x12, 0x0B, 0x5B, 0x32, 0x35, 0x36, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x12, 0x32, 0x12, 0x1F, 0x32, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x5C, 0x64, 0x7C, 0x31, 0x36, 0x5B, 0x30, 0x2D, 0x37, 0x5D, 0x7C, 0x32, 0x32, 0x5B, 0x32, 0x34, 0x35, 0x37, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x32, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x1A, 0x25, 0x12, 0x12, 0x28, 0x3F, 0x3A, 0x35, 0x5B, 0x34, 0x2D, 0x38, 0x5D, 0x7C, 0x36, 0x30, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x35, 0x37, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x1A, 0x12, 0x07, 0x38, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x20, 0x12, 0x0D, 0x38, 0x5B, 0x31, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x38, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x1A, 0x12, 0x07, 0x38, 0x37, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x37, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x47, 0x49, 0x50, 0xDE, 0x02, 0x5A, 0x02, 0x30, 0x30, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x9D, 0x02, 0x0A, 0x15, 0x12, 0x0C, 0x5B, 0x31, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x12, 0x39, 0x12, 0x28, 0x28, 0x3F, 0x3A, 0x31, 0x39, 0x7C, 0x33, 0x5B, 0x31, 0x2D, 0x36, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x34, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x34, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x39, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x32, 0x06, 0x33, 0x32, 0x31, 0x30, 0x30, 0x30, 0x1A, 0x20, 0x12, 0x0F, 0x5B, 0x32, 0x34, 0x35, 0x5D, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x32, 0x06, 0x32, 0x32, 0x31, 0x32, 0x33, 0x34, 0x22, 0x18, 0x12, 0x07, 0x38, 0x30, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x32, 0x06, 0x38, 0x30, 0x31, 0x32, 0x33, 0x34, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x1B, 0x12, 0x0A, 0x33, 0x5B, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x32, 0x06, 0x33, 0x38, 0x31, 0x32, 0x33, 0x34, 0x4A, 0x02, 0x47, 0x4C, 0x50, 0xAB, 0x02, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x25, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xAD, 0x02, 0x0A, 0x13, 0x12, 0x0A, 0x5B, 0x33, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x12, 0x7B, 0x12, 0x69, 0x28, 0x3F, 0x3A, 0x34, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x33, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x30, 0x32, 0x34, 0x36, 0x37, 0x39, 0x5D, 0x7C, 0x5B, 0x36, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x35, 0x34, 0x5B, 0x30, 0x2D, 0x37, 0x5D, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x5B, 0x36, 0x37, 0x5D, 0x5C, 0x64, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x30, 0x34, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x33, 0x35, 0x5D, 0x7C, 0x33, 0x5B, 0x35, 0x38, 0x5D, 0x7C, 0x34, 0x38, 0x29, 0x29, 0x7C, 0x38, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x35, 0x36, 0x36, 0x31, 0x32, 0x33, 0x34, 0x1A, 0x1D, 0x12, 0x0B, 0x5B, 0x33, 0x36, 0x37, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x33, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x47, 0x4D, 0x50, 0xDC, 0x01, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x1B, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xCF, 0x02, 0x0A, 0x14, 0x12, 0x0B, 0x5B, 0x33, 0x35, 0x36, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x12, 0x4B, 0x12, 0x38, 0x33, 0x30, 0x28, 0x3F, 0x3A, 0x32, 0x34, 0x7C, 0x33, 0x5B, 0x31, 0x32, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x2D, 0x37, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x33, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x38, 0x39, 0x5D, 0x7C, 0x5B, 0x37, 0x38, 0x5D, 0x31, 0x7C, 0x39, 0x5B, 0x31, 0x34, 0x37, 0x38, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x33, 0x30, 0x32, 0x34, 0x31, 0x32, 0x33, 0x34, 0x1A, 0x5A, 0x12, 0x47, 0x35, 0x35, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x30, 0x28, 0x3F, 0x3A, 0x32, 0x5C, 0x64, 0x7C, 0x33, 0x5B, 0x33, 0x34, 0x36, 0x37, 0x5D, 0x7C, 0x35, 0x5B, 0x32, 0x34, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x5B, 0x32, 0x34, 0x35, 0x37, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x34, 0x5D, 0x30, 0x7C, 0x33, 0x35, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x36, 0x30, 0x32, 0x30, 0x31, 0x32, 0x33, 0x34, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x47, 0x4E, 0x50, 0xE0, 0x01, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x2F, 0x0A, 0x1C, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xD4, 0x02, 0x0A, 0x12, 0x12, 0x09, 0x5B, 0x35, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x12, 0x51, 0x12, 0x3D, 0x35, 0x39, 0x30, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x31, 0x32, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x2D, 0x36, 0x38, 0x5D, 0x7C, 0x33, 0x5B, 0x32, 0x38, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x32, 0x36, 0x2D, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x36, 0x37, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x31, 0x38, 0x5D, 0x7C, 0x5B, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x35, 0x39, 0x30, 0x32, 0x30, 0x31, 0x32, 0x33, 0x34, 0x1A, 0x58, 0x12, 0x44, 0x36, 0x39, 0x30, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x31, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x31, 0x33, 0x2D, 0x35, 0x5D, 0x7C, 0x5B, 0x33, 0x2D, 0x35, 0x5D, 0x5C, 0x64, 0x7C, 0x36, 0x5B, 0x30, 0x2D, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x2D, 0x36, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x2D, 0x36, 0x5D, 0x7C, 0x39, 0x5B, 0x30, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x36, 0x39, 0x30, 0x33, 0x30, 0x31, 0x32, 0x33, 0x34, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x47, 0x50, 0x50, 0xCE, 0x04, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x29, 0x0A, 0x16, 0x28, 0x5B, 0x35, 0x36, 0x5D, 0x39, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xB0, 0x01, 0x01, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xF4, 0x02, 0x0A, 0x17, 0x12, 0x0C, 0x5B, 0x32, 0x33, 0x35, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x39, 0x7D, 0x12, 0x48, 0x12, 0x32, 0x33, 0x28, 0x3F, 0x3A, 0x33, 0x28, 0x3F, 0x3A, 0x33, 0x5C, 0x64, 0x5B, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x30, 0x2D, 0x32, 0x34, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x5B, 0x34, 0x36, 0x5D, 0x29, 0x7C, 0x35, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x5B, 0x37, 0x2D, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x39, 0x7D, 0x32, 0x09, 0x33, 0x33, 0x33, 0x30, 0x39, 0x31, 0x32, 0x33, 0x34, 0x1A, 0x26, 0x12, 0x10, 0x28, 0x3F, 0x3A, 0x32, 0x32, 0x32, 0x7C, 0x35, 0x35, 0x31, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x39, 0x7D, 0x32, 0x09, 0x32, 0x32, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x24, 0x12, 0x0E, 0x38, 0x30, 0x5C, 0x64, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x24, 0x12, 0x0E, 0x39, 0x30, 0x5C, 0x64, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x39, 0x7D, 0x32, 0x09, 0x39, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x47, 0x51, 0x50, 0xF0, 0x01, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x2C, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x05, 0x5B, 0x32, 0x33, 0x35, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x21, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x04, 0x5B, 0x38, 0x39, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x81, 0x06, 0x0A, 0x15, 0x12, 0x0B, 0x5B, 0x32, 0x36, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x12, 0xF1, 0x02, 0x12, 0xDA, 0x02, 0x32, 0x28, 0x3F, 0x3A, 0x31, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x7C, 0x32, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x2D, 0x37, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x34, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x2D, 0x35, 0x5D, 0x7C, 0x5B, 0x32, 0x38, 0x39, 0x5D, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x31, 0x5C, 0x64, 0x7C, 0x32, 0x5B, 0x31, 0x2D, 0x35, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x2D, 0x34, 0x5D, 0x7C, 0x5B, 0x34, 0x35, 0x5D, 0x5B, 0x31, 0x2D, 0x33, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x2D, 0x37, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x2D, 0x36, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x2D, 0x37, 0x39, 0x5D, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x31, 0x5C, 0x64, 0x7C, 0x32, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x2D, 0x34, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x33, 0x2D, 0x35, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x2D, 0x35, 0x37, 0x38, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x2D, 0x35, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x31, 0x5C, 0x64, 0x7C, 0x32, 0x5B, 0x31, 0x2D, 0x33, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x32, 0x34, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x36, 0x5D, 0x7C, 0x5B, 0x33, 0x39, 0x5D, 0x5B, 0x31, 0x2D, 0x34, 0x5D, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x31, 0x5C, 0x64, 0x7C, 0x33, 0x5B, 0x32, 0x34, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x2D, 0x37, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x33, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x32, 0x36, 0x39, 0x5D, 0x5B, 0x31, 0x2D, 0x36, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x34, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x5D, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x31, 0x5C, 0x64, 0x7C, 0x5B, 0x32, 0x33, 0x5D, 0x5B, 0x31, 0x2D, 0x35, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x2D, 0x37, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x35, 0x37, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x33, 0x34, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x35, 0x2D, 0x37, 0x5D, 0x29, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x31, 0x5C, 0x64, 0x7C, 0x32, 0x5B, 0x31, 0x2D, 0x35, 0x5D, 0x7C, 0x5B, 0x33, 0x34, 0x5D, 0x5B, 0x31, 0x2D, 0x34, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x2D, 0x37, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x1A, 0x1D, 0x12, 0x07, 0x36, 0x39, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x36, 0x39, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x22, 0x1E, 0x12, 0x08, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x2A, 0x21, 0x12, 0x0B, 0x39, 0x30, 0x5B, 0x31, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x39, 0x30, 0x39, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x32, 0x2B, 0x12, 0x15, 0x38, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x31, 0x36, 0x5D, 0x7C, 0x31, 0x32, 0x7C, 0x32, 0x35, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x30, 0x31, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x3A, 0x1D, 0x12, 0x07, 0x37, 0x30, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x37, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x47, 0x52, 0x50, 0x1E, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x2C, 0x0A, 0x16, 0x28, 0x5B, 0x32, 0x37, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x04, 0x32, 0x31, 0x7C, 0x37, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x34, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x0D, 0x32, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x31, 0x7C, 0x5B, 0x36, 0x38, 0x39, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x2A, 0x0A, 0x0F, 0x28, 0x32, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x0C, 0x32, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xCB, 0x02, 0x0A, 0x28, 0x12, 0x15, 0x5B, 0x32, 0x2D, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x7C, 0x31, 0x5B, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x12, 0x22, 0x12, 0x0F, 0x5B, 0x32, 0x36, 0x37, 0x5D, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x32, 0x32, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x1A, 0x1D, 0x12, 0x0A, 0x5B, 0x33, 0x34, 0x35, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x35, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x22, 0x22, 0x12, 0x0B, 0x31, 0x38, 0x5B, 0x30, 0x31, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x31, 0x7D, 0x32, 0x0B, 0x31, 0x38, 0x30, 0x30, 0x31, 0x31, 0x31, 0x32, 0x32, 0x32, 0x32, 0x2A, 0x1E, 0x12, 0x07, 0x31, 0x39, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x31, 0x7D, 0x32, 0x0B, 0x31, 0x39, 0x30, 0x30, 0x31, 0x31, 0x31, 0x32, 0x32, 0x32, 0x32, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x47, 0x54, 0x50, 0xF6, 0x03, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x22, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x05, 0x5B, 0x32, 0x2D, 0x37, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x28, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x31, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xE6, 0x05, 0x0A, 0x1E, 0x12, 0x0B, 0x5B, 0x35, 0x36, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x12, 0xF4, 0x01, 0x12, 0xD4, 0x01, 0x36, 0x37, 0x31, 0x28, 0x3F, 0x3A, 0x33, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x33, 0x5B, 0x33, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x33, 0x34, 0x39, 0x5D, 0x7C, 0x35, 0x35, 0x7C, 0x36, 0x5B, 0x32, 0x36, 0x5D, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x35, 0x36, 0x7C, 0x37, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x32, 0x33, 0x36, 0x37, 0x38, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x35, 0x35, 0x7C, 0x36, 0x5B, 0x32, 0x2D, 0x35, 0x5D, 0x7C, 0x38, 0x38, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x32, 0x2D, 0x35, 0x37, 0x38, 0x5D, 0x7C, 0x34, 0x5B, 0x32, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x33, 0x34, 0x5D, 0x7C, 0x37, 0x38, 0x7C, 0x38, 0x5B, 0x35, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x37, 0x39, 0x5D, 0x37, 0x7C, 0x32, 0x5B, 0x30, 0x31, 0x36, 0x37, 0x5D, 0x7C, 0x33, 0x5B, 0x34, 0x35, 0x5D, 0x7C, 0x38, 0x5B, 0x37, 0x38, 0x39, 0x5D, 0x29, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x2D, 0x35, 0x37, 0x38, 0x39, 0x5D, 0x38, 0x7C, 0x36, 0x5B, 0x34, 0x38, 0x5D, 0x29, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x32, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x37, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x37, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x37, 0x38, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x37, 0x38, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x32, 0x0A, 0x36, 0x37, 0x31, 0x33, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x1A, 0xF4, 0x01, 0x12, 0xD4, 0x01, 0x36, 0x37, 0x31, 0x28, 0x3F, 0x3A, 0x33, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x33, 0x5B, 0x33, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x33, 0x34, 0x39, 0x5D, 0x7C, 0x35, 0x35, 0x7C, 0x36, 0x5B, 0x32, 0x36, 0x5D, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x35, 0x36, 0x7C, 0x37, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x32, 0x33, 0x36, 0x37, 0x38, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x35, 0x35, 0x7C, 0x36, 0x5B, 0x32, 0x2D, 0x35, 0x5D, 0x7C, 0x38, 0x38, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x32, 0x2D, 0x35, 0x37, 0x38, 0x5D, 0x7C, 0x34, 0x5B, 0x32, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x33, 0x34, 0x5D, 0x7C, 0x37, 0x38, 0x7C, 0x38, 0x5B, 0x35, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x37, 0x39, 0x5D, 0x37, 0x7C, 0x32, 0x5B, 0x30, 0x31, 0x36, 0x37, 0x5D, 0x7C, 0x33, 0x5B, 0x34, 0x35, 0x5D, 0x7C, 0x38, 0x5B, 0x37, 0x38, 0x39, 0x5D, 0x29, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x2D, 0x35, 0x37, 0x38, 0x39, 0x5D, 0x38, 0x7C, 0x36, 0x5B, 0x34, 0x38, 0x5D, 0x29, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x32, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x37, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x37, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x37, 0x38, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x37, 0x38, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x32, 0x0A, 0x36, 0x37, 0x31, 0x33, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x22, 0x33, 0x12, 0x1D, 0x38, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x35, 0x35, 0x7C, 0x36, 0x36, 0x7C, 0x37, 0x37, 0x7C, 0x38, 0x38, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x30, 0x30, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x23, 0x12, 0x0D, 0x39, 0x30, 0x30, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x39, 0x30, 0x30, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x2D, 0x12, 0x17, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x33, 0x33, 0x7C, 0x34, 0x34, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x35, 0x30, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x47, 0x55, 0x50, 0x01, 0x5A, 0x03, 0x30, 0x31, 0x31, 0x62, 0x01, 0x31, 0x7A, 0x01, 0x31, 0x90, 0x01, 0x01, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xBA, 0x01, 0x03, 0x36, 0x37, 0x31, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xF6, 0x01, 0x0A, 0x14, 0x12, 0x0B, 0x5B, 0x33, 0x35, 0x36, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x12, 0x44, 0x12, 0x32, 0x33, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x30, 0x31, 0x32, 0x35, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x32, 0x34, 0x35, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x32, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x34, 0x5D, 0x7C, 0x37, 0x30, 0x7C, 0x39, 0x5B, 0x31, 0x2D, 0x34, 0x36, 0x37, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x33, 0x32, 0x30, 0x31, 0x32, 0x33, 0x34, 0x1A, 0x1C, 0x12, 0x0A, 0x5B, 0x35, 0x2D, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x35, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x47, 0x57, 0x50, 0xF5, 0x01, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x1B, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xD8, 0x02, 0x0A, 0x16, 0x12, 0x0D, 0x5B, 0x32, 0x2D, 0x34, 0x36, 0x37, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x12, 0x7A, 0x12, 0x68, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x2D, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x2D, 0x34, 0x5D, 0x7C, 0x35, 0x5B, 0x33, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x5C, 0x64, 0x7C, 0x37, 0x5B, 0x30, 0x2D, 0x32, 0x34, 0x2D, 0x37, 0x39, 0x5D, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x32, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x33, 0x5C, 0x64, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x34, 0x5B, 0x30, 0x2D, 0x32, 0x34, 0x5D, 0x7C, 0x35, 0x5B, 0x35, 0x36, 0x5D, 0x29, 0x7C, 0x37, 0x37, 0x5B, 0x31, 0x2D, 0x35, 0x37, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x32, 0x32, 0x30, 0x31, 0x32, 0x33, 0x34, 0x1A, 0x18, 0x12, 0x06, 0x36, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x36, 0x30, 0x39, 0x31, 0x32, 0x33, 0x34, 0x22, 0x22, 0x12, 0x10, 0x28, 0x3F, 0x3A, 0x32, 0x38, 0x39, 0x7C, 0x38, 0x36, 0x32, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x32, 0x38, 0x39, 0x31, 0x32, 0x33, 0x34, 0x2A, 0x1B, 0x12, 0x09, 0x39, 0x30, 0x30, 0x38, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x39, 0x30, 0x30, 0x38, 0x31, 0x32, 0x33, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x47, 0x59, 0x50, 0xD0, 0x04, 0x5A, 0x03, 0x30, 0x30, 0x31, 0x9A, 0x01, 0x1B, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xA6, 0x03, 0x0A, 0x2B, 0x12, 0x1F, 0x5B, 0x32, 0x33, 0x35, 0x2D, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x7C, 0x38, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x7C, 0x39, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x31, 0x30, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x38, 0x2C, 0x31, 0x31, 0x7D, 0x12, 0x1C, 0x12, 0x09, 0x5B, 0x32, 0x33, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x1A, 0x1E, 0x12, 0x0B, 0x5B, 0x35, 0x2D, 0x37, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x35, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x22, 0x1C, 0x12, 0x08, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x1F, 0x12, 0x08, 0x39, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x31, 0x7D, 0x32, 0x0B, 0x39, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x1E, 0x12, 0x0B, 0x38, 0x5B, 0x31, 0x2D, 0x33, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x31, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x48, 0x4B, 0x50, 0xD4, 0x06, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x39, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x1C, 0x5B, 0x32, 0x33, 0x35, 0x2D, 0x37, 0x5D, 0x7C, 0x5B, 0x38, 0x39, 0x5D, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x29, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x28, 0x0A, 0x13, 0x28, 0x38, 0x30, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x03, 0x38, 0x30, 0x30, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x32, 0x0A, 0x1A, 0x28, 0x39, 0x30, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x03, 0x39, 0x30, 0x30, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x9E, 0x03, 0x0A, 0x15, 0x12, 0x0C, 0x5B, 0x32, 0x33, 0x37, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x12, 0xE8, 0x01, 0x12, 0xD4, 0x01, 0x32, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x31, 0x39, 0x5D, 0x7C, 0x31, 0x5B, 0x31, 0x2D, 0x33, 0x36, 0x5D, 0x7C, 0x5B, 0x32, 0x33, 0x5D, 0x5C, 0x64, 0x7C, 0x34, 0x5B, 0x30, 0x35, 0x36, 0x5D, 0x7C, 0x35, 0x5B, 0x35, 0x37, 0x5D, 0x7C, 0x39, 0x5B, 0x30, 0x31, 0x5D, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x32, 0x7C, 0x33, 0x2D, 0x35, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x33, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x2D, 0x36, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x34, 0x5B, 0x33, 0x2D, 0x35, 0x5D, 0x7C, 0x35, 0x5C, 0x64, 0x7C, 0x36, 0x5B, 0x35, 0x36, 0x5D, 0x7C, 0x37, 0x34, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x34, 0x5B, 0x30, 0x2D, 0x33, 0x37, 0x38, 0x5D, 0x7C, 0x5B, 0x35, 0x36, 0x5D, 0x5C, 0x64, 0x7C, 0x5B, 0x37, 0x38, 0x5D, 0x5B, 0x30, 0x2D, 0x38, 0x5D, 0x7C, 0x39, 0x5B, 0x30, 0x31, 0x5D, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x36, 0x5B, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x33, 0x34, 0x5D, 0x29, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x37, 0x39, 0x7C, 0x38, 0x5B, 0x30, 0x2D, 0x33, 0x35, 0x37, 0x38, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x2D, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x32, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x1A, 0x1E, 0x12, 0x0B, 0x5B, 0x33, 0x37, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x39, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x48, 0x4E, 0x50, 0xF8, 0x03, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x1B, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xA8, 0x06, 0x0A, 0x25, 0x12, 0x19, 0x5B, 0x31, 0x2D, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x38, 0x7D, 0x7C, 0x5B, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x31, 0x31, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x31, 0x32, 0x7D, 0x12, 0x4F, 0x12, 0x3A, 0x28, 0x3F, 0x3A, 0x31, 0x7C, 0x36, 0x5B, 0x30, 0x32, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x7C, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x30, 0x2D, 0x33, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x2D, 0x35, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x32, 0x2D, 0x34, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x33, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x39, 0x7D, 0x32, 0x08, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x1A, 0x27, 0x12, 0x10, 0x39, 0x5B, 0x31, 0x32, 0x35, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x31, 0x30, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x38, 0x2C, 0x31, 0x32, 0x7D, 0x32, 0x09, 0x39, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x22, 0x25, 0x12, 0x0D, 0x38, 0x30, 0x5B, 0x30, 0x31, 0x5D, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x37, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x2A, 0x20, 0x12, 0x0D, 0x36, 0x5B, 0x31, 0x34, 0x35, 0x5D, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x37, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x39, 0x7D, 0x32, 0x06, 0x36, 0x31, 0x31, 0x32, 0x33, 0x34, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x22, 0x12, 0x0C, 0x37, 0x5B, 0x34, 0x35, 0x5D, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x37, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x39, 0x7D, 0x32, 0x09, 0x37, 0x34, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x48, 0x52, 0x50, 0x81, 0x03, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x27, 0x0A, 0x11, 0x28, 0x31, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x31, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x31, 0x0A, 0x16, 0x28, 0x36, 0x5B, 0x30, 0x32, 0x39, 0x5D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x06, 0x36, 0x5B, 0x30, 0x32, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x31, 0x0A, 0x17, 0x28, 0x5B, 0x32, 0x2D, 0x35, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x05, 0x5B, 0x32, 0x2D, 0x35, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x32, 0x0A, 0x1C, 0x28, 0x39, 0x5B, 0x31, 0x32, 0x35, 0x38, 0x39, 0x5D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x39, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x3A, 0x0A, 0x21, 0x28, 0x39, 0x5B, 0x31, 0x32, 0x35, 0x38, 0x39, 0x5D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x01, 0x39, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x34, 0x0A, 0x17, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x2C, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x08, 0x36, 0x5B, 0x31, 0x34, 0x35, 0x5D, 0x7C, 0x37, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x34, 0x0A, 0x17, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x08, 0x36, 0x5B, 0x31, 0x34, 0x35, 0x5D, 0x7C, 0x37, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2E, 0x0A, 0x18, 0x28, 0x38, 0x30, 0x5B, 0x30, 0x31, 0x5D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x2C, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x38, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2E, 0x0A, 0x18, 0x28, 0x38, 0x30, 0x5B, 0x30, 0x31, 0x5D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x38, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x9B, 0x02, 0x0A, 0x15, 0x12, 0x0C, 0x5B, 0x32, 0x2D, 0x34, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x12, 0x2D, 0x12, 0x1A, 0x32, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x34, 0x5D, 0x5C, 0x64, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x35, 0x5D, 0x7C, 0x39, 0x34, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x32, 0x32, 0x34, 0x35, 0x33, 0x33, 0x30, 0x30, 0x1A, 0x26, 0x12, 0x13, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x33, 0x34, 0x31, 0x30, 0x31, 0x32, 0x33, 0x34, 0x22, 0x19, 0x12, 0x06, 0x38, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x1E, 0x12, 0x0B, 0x39, 0x38, 0x5B, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x39, 0x38, 0x39, 0x30, 0x31, 0x32, 0x33, 0x34, 0x4A, 0x02, 0x48, 0x54, 0x50, 0xFD, 0x03, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x25, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xAF, 0x03, 0x0A, 0x12, 0x12, 0x07, 0x5C, 0x64, 0x7B, 0x38, 0x2C, 0x39, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x39, 0x7D, 0x12, 0x71, 0x12, 0x5C, 0x28, 0x3F, 0x3A, 0x31, 0x5C, 0x64, 0x7C, 0x32, 0x28, 0x3F, 0x3A, 0x31, 0x5C, 0x64, 0x7C, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x33, 0x5B, 0x32, 0x2D, 0x37, 0x5D, 0x7C, 0x34, 0x5B, 0x32, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x32, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x32, 0x33, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x31, 0x5C, 0x64, 0x7C, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x38, 0x5B, 0x32, 0x2D, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x32, 0x2D, 0x36, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x39, 0x7D, 0x32, 0x08, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x1A, 0x28, 0x12, 0x14, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x37, 0x5D, 0x30, 0x7C, 0x33, 0x5B, 0x30, 0x31, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x32, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x22, 0x1A, 0x12, 0x07, 0x38, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x1D, 0x12, 0x0A, 0x39, 0x5B, 0x30, 0x31, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x39, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x1A, 0x12, 0x07, 0x34, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x34, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x48, 0x55, 0x50, 0x24, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x02, 0x30, 0x36, 0x7A, 0x02, 0x30, 0x36, 0x9A, 0x01, 0x28, 0x0A, 0x11, 0x28, 0x31, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x31, 0x22, 0x04, 0x28, 0x24, 0x31, 0x29, 0x2A, 0x00, 0x9A, 0x01, 0x32, 0x0A, 0x17, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x05, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x22, 0x04, 0x28, 0x24, 0x31, 0x29, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xDD, 0x07, 0x0A, 0x19, 0x12, 0x0D, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x31, 0x30, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x31, 0x31, 0x7D, 0x12, 0xB1, 0x03, 0x12, 0x99, 0x03, 0x32, 0x5B, 0x31, 0x32, 0x34, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x7C, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x5B, 0x33, 0x35, 0x5D, 0x5B, 0x31, 0x2D, 0x34, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x2D, 0x38, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x2D, 0x36, 0x5D, 0x7C, 0x38, 0x5C, 0x64, 0x7C, 0x39, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x31, 0x7C, 0x32, 0x5B, 0x31, 0x2D, 0x35, 0x37, 0x38, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x2D, 0x36, 0x38, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x2D, 0x33, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x36, 0x38, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x2D, 0x34, 0x36, 0x5D, 0x7C, 0x38, 0x5C, 0x64, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x31, 0x2D, 0x35, 0x38, 0x39, 0x5D, 0x7C, 0x31, 0x5B, 0x30, 0x31, 0x33, 0x34, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x2D, 0x33, 0x36, 0x2D, 0x38, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x2D, 0x32, 0x34, 0x2D, 0x36, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x33, 0x37, 0x38, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x2D, 0x35, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x33, 0x34, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x32, 0x34, 0x35, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x32, 0x35, 0x2D, 0x38, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x32, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x38, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x34, 0x36, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x31, 0x39, 0x3F, 0x7C, 0x5B, 0x32, 0x35, 0x5D, 0x5C, 0x64, 0x7C, 0x33, 0x5B, 0x31, 0x2D, 0x34, 0x36, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x2D, 0x36, 0x5D, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x31, 0x2D, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x31, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x33, 0x36, 0x5D, 0x5C, 0x64, 0x7C, 0x34, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x2D, 0x33, 0x36, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x31, 0x32, 0x5D, 0x7C, 0x31, 0x5B, 0x30, 0x31, 0x33, 0x34, 0x2D, 0x38, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x2D, 0x34, 0x37, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x32, 0x35, 0x2D, 0x38, 0x5D, 0x7C, 0x36, 0x5B, 0x32, 0x33, 0x36, 0x37, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x35, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x31, 0x33, 0x34, 0x36, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x38, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x09, 0x36, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x1A, 0x27, 0x12, 0x10, 0x38, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x39, 0x2C, 0x31, 0x31, 0x7D, 0x32, 0x09, 0x38, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x22, 0x2D, 0x12, 0x15, 0x31, 0x37, 0x37, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x38, 0x7D, 0x7C, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x37, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x38, 0x2C, 0x31, 0x31, 0x7D, 0x32, 0x0A, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x2A, 0x1E, 0x12, 0x08, 0x38, 0x30, 0x39, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x30, 0x39, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x49, 0x44, 0x50, 0x3E, 0x5A, 0x1B, 0x30, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x31, 0x37, 0x38, 0x39, 0x5D, 0x7C, 0x31, 0x30, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x31, 0x5B, 0x36, 0x37, 0x5D, 0x29, 0x29, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x30, 0x0A, 0x10, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x0C, 0x32, 0x5B, 0x31, 0x32, 0x34, 0x5D, 0x7C, 0x5B, 0x33, 0x36, 0x5D, 0x31, 0x22, 0x05, 0x28, 0x30, 0x24, 0x31, 0x29, 0x2A, 0x00, 0x9A, 0x01, 0x3E, 0x0A, 0x10, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x37, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x1A, 0x5B, 0x34, 0x35, 0x37, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x33, 0x36, 0x5D, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x22, 0x05, 0x28, 0x30, 0x24, 0x31, 0x29, 0x2A, 0x00, 0x9A, 0x01, 0x38, 0x0A, 0x1A, 0x28, 0x38, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x09, 0x38, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x21, 0x0A, 0x0E, 0x28, 0x31, 0x37, 0x37, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x38, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x01, 0x31, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x23, 0x0A, 0x0E, 0x28, 0x38, 0x30, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x37, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x03, 0x38, 0x30, 0x30, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x32, 0x0A, 0x17, 0x28, 0x38, 0x30, 0x39, 0x29, 0x28, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x03, 0x38, 0x30, 0x39, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xD9, 0x08, 0x0A, 0x1A, 0x12, 0x0E, 0x5B, 0x31, 0x32, 0x34, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x39, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x31, 0x30, 0x7D, 0x12, 0x91, 0x02, 0x12, 0xFB, 0x01, 0x31, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x7C, 0x32, 0x28, 0x3F, 0x3A, 0x31, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x37, 0x7D, 0x7C, 0x5B, 0x32, 0x34, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x7C, 0x33, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x37, 0x7D, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x32, 0x34, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x7C, 0x5B, 0x31, 0x32, 0x36, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x7C, 0x5B, 0x33, 0x34, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x37, 0x7D, 0x7C, 0x35, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x7C, 0x37, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x7C, 0x38, 0x5B, 0x30, 0x2D, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x34, 0x35, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x7C, 0x31, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x7C, 0x32, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x37, 0x7D, 0x7C, 0x5B, 0x33, 0x36, 0x37, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x7C, 0x38, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x31, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x7C, 0x34, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x37, 0x7D, 0x7C, 0x5B, 0x32, 0x33, 0x37, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x7C, 0x5B, 0x35, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x29, 0x7C, 0x37, 0x5B, 0x31, 0x34, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x31, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x7C, 0x5B, 0x30, 0x34, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x7C, 0x5B, 0x33, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x29, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x07, 0x32, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x1A, 0x31, 0x12, 0x1A, 0x38, 0x28, 0x3F, 0x3A, 0x32, 0x32, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x7C, 0x5B, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x29, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x39, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x09, 0x38, 0x35, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x1F, 0x12, 0x09, 0x31, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x31, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x38, 0x12, 0x22, 0x31, 0x35, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x30, 0x7C, 0x35, 0x39, 0x7C, 0x39, 0x5B, 0x30, 0x38, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x31, 0x35, 0x32, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x22, 0x12, 0x0C, 0x31, 0x38, 0x5B, 0x35, 0x39, 0x5D, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x31, 0x38, 0x35, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x3A, 0x1C, 0x12, 0x08, 0x37, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x37, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x42, 0x1B, 0x12, 0x07, 0x37, 0x36, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x37, 0x36, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x4A, 0x02, 0x49, 0x45, 0x50, 0xE1, 0x02, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x2B, 0x0A, 0x13, 0x28, 0x31, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x31, 0x22, 0x05, 0x28, 0x30, 0x24, 0x31, 0x29, 0x2A, 0x00, 0x9A, 0x01, 0x48, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x26, 0x32, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x33, 0x34, 0x37, 0x5D, 0x7C, 0x35, 0x5B, 0x32, 0x2D, 0x35, 0x38, 0x5D, 0x7C, 0x36, 0x5B, 0x32, 0x2D, 0x34, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x33, 0x2D, 0x39, 0x5D, 0x22, 0x05, 0x28, 0x30, 0x24, 0x31, 0x29, 0x2A, 0x00, 0x9A, 0x01, 0x2F, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x0D, 0x34, 0x30, 0x5B, 0x32, 0x34, 0x5D, 0x7C, 0x35, 0x30, 0x5B, 0x34, 0x35, 0x5D, 0x22, 0x05, 0x28, 0x30, 0x24, 0x31, 0x29, 0x2A, 0x00, 0x9A, 0x01, 0x2B, 0x0A, 0x12, 0x28, 0x34, 0x38, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x02, 0x34, 0x38, 0x22, 0x05, 0x28, 0x30, 0x24, 0x31, 0x29, 0x2A, 0x00, 0x9A, 0x01, 0x2C, 0x0A, 0x13, 0x28, 0x38, 0x31, 0x38, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x02, 0x38, 0x31, 0x22, 0x05, 0x28, 0x30, 0x24, 0x31, 0x29, 0x2A, 0x00, 0x9A, 0x01, 0x3B, 0x0A, 0x17, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x0D, 0x5B, 0x32, 0x34, 0x2D, 0x36, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x34, 0x5D, 0x22, 0x05, 0x28, 0x30, 0x24, 0x31, 0x29, 0x2A, 0x00, 0x9A, 0x01, 0x37, 0x0A, 0x18, 0x28, 0x5B, 0x37, 0x38, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x0A, 0x37, 0x36, 0x7C, 0x38, 0x5B, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2A, 0x0A, 0x13, 0x28, 0x37, 0x30, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x02, 0x37, 0x30, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x46, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x0D, 0x31, 0x28, 0x3F, 0x3A, 0x38, 0x5B, 0x30, 0x35, 0x39, 0x5D, 0x7C, 0x35, 0x29, 0x1A, 0x0E, 0x31, 0x28, 0x3F, 0x3A, 0x38, 0x5B, 0x30, 0x35, 0x39, 0x5D, 0x30, 0x7C, 0x35, 0x29, 0x22, 0x02, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x1C, 0x12, 0x08, 0x38, 0x31, 0x38, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x31, 0x38, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x0A, 0x85, 0x06, 0x0A, 0x37, 0x12, 0x2B, 0x5B, 0x31, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x39, 0x7D, 0x7C, 0x5B, 0x32, 0x2D, 0x35, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x36, 0x7D, 0x29, 0x3F, 0x7C, 0x36, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x31, 0x30, 0x7D, 0x12, 0x2F, 0x12, 0x1A, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x2D, 0x34, 0x38, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x32, 0x2D, 0x34, 0x36, 0x2D, 0x38, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x32, 0x08, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x1A, 0x22, 0x12, 0x0E, 0x35, 0x5B, 0x30, 0x32, 0x34, 0x36, 0x37, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x35, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x22, 0x31, 0x12, 0x19, 0x31, 0x28, 0x3F, 0x3A, 0x38, 0x30, 0x5B, 0x30, 0x31, 0x5D, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x7C, 0x32, 0x35, 0x35, 0x29, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x31, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x36, 0x12, 0x1E, 0x31, 0x28, 0x3F, 0x3A, 0x32, 0x31, 0x32, 0x7C, 0x28, 0x3F, 0x3A, 0x39, 0x31, 0x39, 0x7C, 0x32, 0x30, 0x30, 0x29, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x38, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x31, 0x39, 0x31, 0x39, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x27, 0x12, 0x11, 0x31, 0x28, 0x3F, 0x3A, 0x37, 0x30, 0x30, 0x7C, 0x38, 0x30, 0x39, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x31, 0x37, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x1B, 0x12, 0x07, 0x37, 0x37, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x37, 0x37, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x4A, 0x02, 0x49, 0x4C, 0x50, 0xCC, 0x07, 0x5A, 0x0E, 0x30, 0x28, 0x3F, 0x3A, 0x30, 0x7C, 0x31, 0x5B, 0x32, 0x2D, 0x34, 0x38, 0x5D, 0x29, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x33, 0x0A, 0x17, 0x28, 0x5B, 0x32, 0x2D, 0x34, 0x38, 0x39, 0x5D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x07, 0x5B, 0x32, 0x2D, 0x34, 0x38, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2F, 0x0A, 0x16, 0x28, 0x5B, 0x35, 0x37, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x04, 0x5B, 0x35, 0x37, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x3A, 0x0A, 0x1D, 0x28, 0x31, 0x29, 0x28, 0x5B, 0x37, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x2D, 0x24, 0x34, 0x1A, 0x06, 0x31, 0x5B, 0x37, 0x2D, 0x39, 0x5D, 0x22, 0x02, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x21, 0x0A, 0x0D, 0x28, 0x31, 0x32, 0x35, 0x35, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x1A, 0x03, 0x31, 0x32, 0x35, 0x22, 0x02, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2B, 0x0A, 0x14, 0x28, 0x31, 0x32, 0x30, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x03, 0x31, 0x32, 0x30, 0x22, 0x02, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2B, 0x0A, 0x14, 0x28, 0x31, 0x32, 0x31, 0x32, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x03, 0x31, 0x32, 0x31, 0x22, 0x02, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x1D, 0x0A, 0x07, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x03, 0x2A, 0x24, 0x31, 0x1A, 0x07, 0x5B, 0x32, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x22, 0x02, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x2E, 0x12, 0x16, 0x31, 0x37, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x7C, 0x5B, 0x32, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x31, 0x37, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0xCA, 0x01, 0x1B, 0x12, 0x0C, 0x5B, 0x32, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x32, 0x04, 0x32, 0x32, 0x35, 0x30, 0x0A, 0xC2, 0x03, 0x0A, 0x1B, 0x12, 0x0F, 0x5B, 0x31, 0x33, 0x35, 0x37, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x39, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x31, 0x30, 0x7D, 0x12, 0x21, 0x12, 0x09, 0x31, 0x36, 0x32, 0x34, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x31, 0x36, 0x32, 0x34, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x1A, 0x23, 0x12, 0x0D, 0x37, 0x5B, 0x35, 0x36, 0x39, 0x5D, 0x32, 0x34, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x37, 0x39, 0x32, 0x34, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x21, 0x12, 0x0B, 0x38, 0x30, 0x38, 0x31, 0x36, 0x32, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x30, 0x38, 0x31, 0x36, 0x32, 0x34, 0x35, 0x36, 0x37, 0x2A, 0x31, 0x12, 0x1B, 0x28, 0x3F, 0x3A, 0x38, 0x37, 0x32, 0x32, 0x39, 0x39, 0x7C, 0x39, 0x30, 0x5B, 0x30, 0x31, 0x36, 0x37, 0x5D, 0x36, 0x32, 0x34, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x39, 0x30, 0x31, 0x36, 0x32, 0x34, 0x37, 0x38, 0x39, 0x30, 0x32, 0x3C, 0x12, 0x26, 0x38, 0x28, 0x3F, 0x3A, 0x34, 0x28, 0x3F, 0x3A, 0x34, 0x30, 0x5B, 0x34, 0x39, 0x5D, 0x30, 0x36, 0x7C, 0x35, 0x36, 0x32, 0x34, 0x5C, 0x64, 0x29, 0x7C, 0x37, 0x30, 0x36, 0x32, 0x34, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x34, 0x35, 0x36, 0x32, 0x34, 0x37, 0x38, 0x39, 0x30, 0x3A, 0x1D, 0x12, 0x07, 0x37, 0x30, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x37, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x42, 0x1D, 0x12, 0x07, 0x35, 0x36, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x35, 0x36, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x4A, 0x02, 0x49, 0x4D, 0x50, 0x2C, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x6A, 0x02, 0x20, 0x78, 0x7A, 0x01, 0x30, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x5E, 0x12, 0x48, 0x33, 0x28, 0x3F, 0x3A, 0x30, 0x38, 0x31, 0x36, 0x32, 0x5C, 0x64, 0x7C, 0x33, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x34, 0x30, 0x5B, 0x34, 0x39, 0x5D, 0x30, 0x36, 0x7C, 0x35, 0x36, 0x32, 0x34, 0x5C, 0x64, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x30, 0x36, 0x32, 0x34, 0x5C, 0x64, 0x7C, 0x32, 0x32, 0x39, 0x39, 0x5C, 0x64, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x7C, 0x35, 0x35, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x35, 0x35, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x0A, 0xF6, 0x17, 0x0A, 0x23, 0x12, 0x17, 0x31, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x31, 0x31, 0x7D, 0x7C, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x39, 0x2C, 0x31, 0x30, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x31, 0x32, 0x7D, 0x12, 0xC0, 0x08, 0x12, 0xA7, 0x08, 0x28, 0x3F, 0x3A, 0x31, 0x31, 0x7C, 0x32, 0x5B, 0x30, 0x32, 0x5D, 0x7C, 0x33, 0x33, 0x7C, 0x34, 0x5B, 0x30, 0x34, 0x5D, 0x7C, 0x37, 0x39, 0x7C, 0x38, 0x30, 0x29, 0x5B, 0x32, 0x2D, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x7C, 0x28, 0x3F, 0x3A, 0x31, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x30, 0x2D, 0x32, 0x34, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x2D, 0x32, 0x35, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x34, 0x35, 0x5D, 0x7C, 0x5B, 0x35, 0x39, 0x5D, 0x5B, 0x31, 0x34, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x31, 0x34, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x32, 0x35, 0x37, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x31, 0x33, 0x34, 0x36, 0x5D, 0x29, 0x7C, 0x32, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x32, 0x35, 0x37, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x31, 0x33, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x31, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x31, 0x33, 0x37, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x31, 0x35, 0x38, 0x5D, 0x7C, 0x37, 0x38, 0x7C, 0x38, 0x5B, 0x31, 0x35, 0x36, 0x38, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x34, 0x5D, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x32, 0x36, 0x7C, 0x34, 0x5B, 0x31, 0x2D, 0x33, 0x5D, 0x7C, 0x35, 0x5B, 0x33, 0x34, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x31, 0x34, 0x38, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x32, 0x2D, 0x34, 0x36, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x35, 0x39, 0x5D, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x33, 0x36, 0x5D, 0x7C, 0x32, 0x5B, 0x31, 0x2D, 0x34, 0x37, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x35, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x32, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x32, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x2D, 0x32, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x31, 0x33, 0x2D, 0x35, 0x37, 0x5D, 0x7C, 0x39, 0x5B, 0x30, 0x31, 0x34, 0x2D, 0x37, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x33, 0x36, 0x5D, 0x5B, 0x32, 0x35, 0x5D, 0x7C, 0x32, 0x32, 0x7C, 0x34, 0x5B, 0x32, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x32, 0x5D, 0x7C, 0x5B, 0x37, 0x38, 0x5D, 0x31, 0x7C, 0x39, 0x5B, 0x31, 0x35, 0x5D, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x31, 0x32, 0x7C, 0x5B, 0x32, 0x33, 0x34, 0x35, 0x5D, 0x31, 0x7C, 0x35, 0x37, 0x7C, 0x36, 0x5B, 0x31, 0x33, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x34, 0x5D, 0x7C, 0x38, 0x30, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x31, 0x32, 0x7C, 0x32, 0x5B, 0x31, 0x34, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x33, 0x34, 0x5D, 0x7C, 0x34, 0x5B, 0x34, 0x37, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x35, 0x5D, 0x7C, 0x5B, 0x36, 0x37, 0x5D, 0x31, 0x7C, 0x38, 0x38, 0x29, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x31, 0x36, 0x7C, 0x32, 0x5B, 0x30, 0x31, 0x34, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x32, 0x36, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x33, 0x36, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x37, 0x38, 0x5D, 0x7C, 0x38, 0x5B, 0x33, 0x34, 0x5D, 0x7C, 0x39, 0x31, 0x29, 0x29, 0x5B, 0x32, 0x2D, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x7C, 0x28, 0x3F, 0x3A, 0x28, 0x3F, 0x3A, 0x31, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x33, 0x35, 0x2D, 0x38, 0x5D, 0x7C, 0x33, 0x5B, 0x33, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x32, 0x33, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x35, 0x39, 0x5D, 0x5B, 0x30, 0x32, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x32, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x33, 0x34, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x32, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x32, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x31, 0x33, 0x34, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x32, 0x34, 0x2D, 0x38, 0x5D, 0x7C, 0x34, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x32, 0x35, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x32, 0x2D, 0x34, 0x36, 0x37, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x33, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x32, 0x2D, 0x34, 0x37, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x32, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x30, 0x31, 0x7C, 0x31, 0x5B, 0x37, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x31, 0x2D, 0x35, 0x5D, 0x7C, 0x34, 0x5B, 0x32, 0x35, 0x2D, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x32, 0x35, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x32, 0x33, 0x35, 0x2D, 0x37, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x32, 0x2D, 0x34, 0x36, 0x37, 0x5D, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x31, 0x34, 0x35, 0x37, 0x38, 0x5D, 0x7C, 0x32, 0x5B, 0x35, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x32, 0x2D, 0x34, 0x36, 0x37, 0x5D, 0x7C, 0x35, 0x5B, 0x34, 0x2D, 0x37, 0x5D, 0x7C, 0x36, 0x5B, 0x33, 0x35, 0x5D, 0x7C, 0x37, 0x33, 0x7C, 0x38, 0x5B, 0x32, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x32, 0x33, 0x38, 0x39, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x36, 0x5D, 0x5B, 0x31, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x31, 0x34, 0x2D, 0x38, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x33, 0x34, 0x36, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x34, 0x2D, 0x36, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x34, 0x36, 0x5D, 0x7C, 0x37, 0x5B, 0x32, 0x2D, 0x34, 0x5D, 0x7C, 0x38, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x7C, 0x39, 0x5B, 0x32, 0x34, 0x36, 0x5D, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x31, 0x33, 0x35, 0x38, 0x5D, 0x7C, 0x32, 0x5B, 0x32, 0x34, 0x35, 0x37, 0x5D, 0x7C, 0x33, 0x5B, 0x32, 0x2D, 0x34, 0x5D, 0x7C, 0x34, 0x5B, 0x32, 0x33, 0x35, 0x2D, 0x37, 0x5D, 0x7C, 0x35, 0x5B, 0x32, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x32, 0x34, 0x2D, 0x35, 0x38, 0x5D, 0x7C, 0x37, 0x5B, 0x32, 0x33, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x2D, 0x36, 0x5D, 0x29, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x31, 0x33, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x32, 0x33, 0x35, 0x2D, 0x38, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x33, 0x2D, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x2D, 0x32, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5C, 0x64, 0x7C, 0x36, 0x5B, 0x32, 0x34, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x2D, 0x36, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x32, 0x35, 0x36, 0x5D, 0x7C, 0x39, 0x5B, 0x32, 0x2D, 0x34, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x30, 0x31, 0x33, 0x2D, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x32, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x32, 0x36, 0x37, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x32, 0x2D, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x36, 0x37, 0x5D, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x39, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x30, 0x2D, 0x36, 0x5D, 0x7C, 0x5B, 0x30, 0x31, 0x33, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x29, 0x29, 0x29, 0x5B, 0x32, 0x2D, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x31, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x1A, 0x95, 0x03, 0x12, 0xFE, 0x02, 0x28, 0x3F, 0x3A, 0x37, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x35, 0x36, 0x38, 0x5D, 0x7C, 0x39, 0x5B, 0x33, 0x39, 0x5D, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x30, 0x37, 0x7C, 0x37, 0x5B, 0x33, 0x36, 0x37, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x36, 0x38, 0x39, 0x5D, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x30, 0x35, 0x7C, 0x31, 0x5B, 0x31, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x32, 0x39, 0x5D, 0x5B, 0x38, 0x39, 0x5D, 0x7C, 0x33, 0x39, 0x7C, 0x38, 0x5B, 0x33, 0x38, 0x39, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x2D, 0x35, 0x5D, 0x7C, 0x5B, 0x34, 0x37, 0x5D, 0x39, 0x7C, 0x35, 0x30, 0x7C, 0x36, 0x5B, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x38, 0x39, 0x5D, 0x5B, 0x37, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x32, 0x37, 0x5D, 0x7C, 0x31, 0x32, 0x7C, 0x32, 0x30, 0x7C, 0x33, 0x5B, 0x31, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x34, 0x35, 0x5D, 0x7C, 0x36, 0x5B, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x36, 0x37, 0x5D, 0x7C, 0x39, 0x5B, 0x36, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x32, 0x38, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x32, 0x7C, 0x36, 0x30, 0x7C, 0x39, 0x5B, 0x35, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x33, 0x5D, 0x5B, 0x30, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x31, 0x34, 0x7C, 0x32, 0x5B, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x32, 0x35, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x31, 0x35, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x30, 0x33, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7C, 0x39, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x31, 0x35, 0x38, 0x39, 0x5D, 0x7C, 0x31, 0x5B, 0x32, 0x34, 0x5D, 0x7C, 0x32, 0x5B, 0x32, 0x33, 0x36, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x32, 0x33, 0x34, 0x35, 0x38, 0x5D, 0x7C, 0x35, 0x32, 0x7C, 0x36, 0x5B, 0x30, 0x35, 0x38, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x32, 0x35, 0x36, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x37, 0x39, 0x5D, 0x5C, 0x64, 0x7C, 0x34, 0x34, 0x29, 0x7C, 0x39, 0x5B, 0x30, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x39, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x22, 0x30, 0x12, 0x18, 0x31, 0x28, 0x3F, 0x3A, 0x36, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x7C, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x38, 0x7D, 0x29, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x38, 0x2C, 0x31, 0x32, 0x7D, 0x32, 0x0A, 0x31, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x49, 0x4E, 0x50, 0x5B, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0xF6, 0x01, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x5A, 0x37, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x30, 0x35, 0x37, 0x39, 0x5D, 0x7C, 0x33, 0x39, 0x7C, 0x34, 0x5B, 0x30, 0x2D, 0x33, 0x38, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x7C, 0x37, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x2D, 0x37, 0x39, 0x5D, 0x29, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x31, 0x35, 0x38, 0x39, 0x5D, 0x7C, 0x31, 0x5B, 0x30, 0x32, 0x34, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x34, 0x37, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x30, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x39, 0x1A, 0x70, 0x37, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x30, 0x35, 0x37, 0x39, 0x5D, 0x7C, 0x33, 0x39, 0x7C, 0x34, 0x5B, 0x30, 0x2D, 0x33, 0x38, 0x39, 0x5D, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x2D, 0x35, 0x5D, 0x7C, 0x34, 0x39, 0x7C, 0x35, 0x30, 0x7C, 0x5B, 0x36, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x36, 0x7C, 0x37, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x2D, 0x37, 0x39, 0x5D, 0x29, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x31, 0x35, 0x38, 0x39, 0x5D, 0x7C, 0x31, 0x5B, 0x30, 0x32, 0x34, 0x5D, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x37, 0x39, 0x5D, 0x7C, 0x34, 0x34, 0x29, 0x7C, 0x39, 0x5B, 0x30, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x39, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x46, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x1C, 0x31, 0x31, 0x7C, 0x32, 0x5B, 0x30, 0x32, 0x5D, 0x7C, 0x33, 0x33, 0x7C, 0x34, 0x5B, 0x30, 0x34, 0x5D, 0x7C, 0x37, 0x39, 0x7C, 0x38, 0x30, 0x5B, 0x32, 0x2D, 0x36, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x6A, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x40, 0x31, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x30, 0x2D, 0x32, 0x34, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x2D, 0x32, 0x35, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x34, 0x35, 0x5D, 0x7C, 0x5B, 0x35, 0x36, 0x39, 0x5D, 0x5B, 0x31, 0x34, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x32, 0x35, 0x37, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x33, 0x34, 0x36, 0x5D, 0x7C, 0x5B, 0x36, 0x38, 0x5D, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x29, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x63, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x39, 0x32, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x32, 0x35, 0x37, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x31, 0x33, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x31, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x31, 0x33, 0x37, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x31, 0x35, 0x38, 0x5D, 0x7C, 0x37, 0x38, 0x7C, 0x38, 0x5B, 0x31, 0x35, 0x36, 0x38, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x34, 0x5D, 0x29, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x57, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x2D, 0x33, 0x28, 0x3F, 0x3A, 0x32, 0x36, 0x7C, 0x34, 0x5B, 0x31, 0x2D, 0x33, 0x5D, 0x7C, 0x35, 0x5B, 0x33, 0x34, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x31, 0x34, 0x38, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x32, 0x2D, 0x34, 0x36, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x35, 0x39, 0x5D, 0x29, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x6E, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x44, 0x34, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x33, 0x36, 0x5D, 0x7C, 0x32, 0x5B, 0x31, 0x2D, 0x34, 0x37, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x35, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x32, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x32, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x2D, 0x32, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x31, 0x33, 0x2D, 0x35, 0x37, 0x5D, 0x7C, 0x39, 0x5B, 0x30, 0x31, 0x34, 0x2D, 0x37, 0x5D, 0x29, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x53, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x29, 0x35, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x33, 0x36, 0x5D, 0x5B, 0x32, 0x35, 0x5D, 0x7C, 0x32, 0x32, 0x7C, 0x34, 0x5B, 0x32, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x32, 0x5D, 0x7C, 0x5B, 0x37, 0x38, 0x5D, 0x31, 0x7C, 0x39, 0x5B, 0x31, 0x35, 0x5D, 0x29, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x4B, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x21, 0x36, 0x28, 0x3F, 0x3A, 0x31, 0x32, 0x7C, 0x5B, 0x32, 0x33, 0x34, 0x35, 0x5D, 0x31, 0x7C, 0x35, 0x37, 0x7C, 0x36, 0x5B, 0x31, 0x33, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x34, 0x5D, 0x7C, 0x38, 0x30, 0x29, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x86, 0x01, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x29, 0x37, 0x28, 0x3F, 0x3A, 0x31, 0x32, 0x7C, 0x32, 0x5B, 0x31, 0x34, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x33, 0x34, 0x5D, 0x7C, 0x34, 0x5B, 0x34, 0x37, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x35, 0x5D, 0x7C, 0x5B, 0x36, 0x37, 0x5D, 0x31, 0x7C, 0x38, 0x38, 0x29, 0x1A, 0x31, 0x37, 0x28, 0x3F, 0x3A, 0x31, 0x32, 0x7C, 0x32, 0x5B, 0x31, 0x34, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x33, 0x34, 0x5D, 0x7C, 0x34, 0x5B, 0x34, 0x37, 0x5D, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x31, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x5B, 0x36, 0x37, 0x5D, 0x31, 0x7C, 0x38, 0x38, 0x29, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x56, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x2C, 0x38, 0x28, 0x3F, 0x3A, 0x31, 0x36, 0x7C, 0x32, 0x5B, 0x30, 0x31, 0x34, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x32, 0x36, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x33, 0x36, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x37, 0x38, 0x5D, 0x7C, 0x38, 0x5B, 0x33, 0x34, 0x5D, 0x7C, 0x39, 0x31, 0x29, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x46, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x1C, 0x31, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x2D, 0x35, 0x37, 0x39, 0x5D, 0x7C, 0x5B, 0x36, 0x38, 0x5D, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x31, 0x0A, 0x14, 0x28, 0x31, 0x36, 0x30, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x03, 0x31, 0x36, 0x30, 0x1A, 0x04, 0x31, 0x36, 0x30, 0x30, 0x22, 0x02, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x29, 0x0A, 0x0F, 0x28, 0x31, 0x38, 0x30, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x35, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x03, 0x31, 0x38, 0x30, 0x1A, 0x04, 0x31, 0x38, 0x30, 0x30, 0x22, 0x02, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x3C, 0x0A, 0x19, 0x28, 0x31, 0x38, 0x5B, 0x30, 0x36, 0x5D, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x2C, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x06, 0x31, 0x38, 0x5B, 0x30, 0x36, 0x5D, 0x1A, 0x07, 0x31, 0x38, 0x5B, 0x30, 0x36, 0x5D, 0x30, 0x22, 0x02, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x23, 0x12, 0x0C, 0x31, 0x38, 0x36, 0x30, 0x33, 0x34, 0x35, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x31, 0x7D, 0x32, 0x0B, 0x31, 0x38, 0x36, 0x30, 0x33, 0x34, 0x35, 0x31, 0x32, 0x33, 0x34, 0x0A, 0xC3, 0x01, 0x0A, 0x0F, 0x12, 0x06, 0x33, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x12, 0x19, 0x12, 0x07, 0x33, 0x37, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x33, 0x37, 0x30, 0x39, 0x31, 0x30, 0x30, 0x1A, 0x19, 0x12, 0x07, 0x33, 0x38, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x33, 0x38, 0x30, 0x31, 0x32, 0x33, 0x34, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x49, 0x4F, 0x50, 0xF6, 0x01, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x1B, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xFF, 0x02, 0x0A, 0x18, 0x12, 0x0C, 0x5B, 0x31, 0x2D, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x31, 0x30, 0x7D, 0x12, 0x4B, 0x12, 0x36, 0x31, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x7C, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x31, 0x33, 0x2D, 0x35, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x32, 0x33, 0x36, 0x37, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x32, 0x33, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x33, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x32, 0x36, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x37, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x39, 0x7D, 0x32, 0x08, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x1A, 0x21, 0x12, 0x0B, 0x37, 0x5B, 0x35, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x37, 0x39, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x49, 0x51, 0x50, 0xC4, 0x07, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x27, 0x0A, 0x11, 0x28, 0x31, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x31, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x33, 0x0A, 0x19, 0x28, 0x5B, 0x32, 0x2D, 0x36, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x05, 0x5B, 0x32, 0x2D, 0x36, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2E, 0x0A, 0x18, 0x28, 0x37, 0x5B, 0x35, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x37, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xAA, 0x06, 0x0A, 0x24, 0x12, 0x18, 0x5B, 0x32, 0x2D, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x39, 0x7D, 0x7C, 0x5B, 0x31, 0x37, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x31, 0x30, 0x7D, 0x12, 0xBA, 0x03, 0x12, 0xA1, 0x03, 0x32, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x2C, 0x37, 0x7D, 0x7C, 0x35, 0x31, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x37, 0x7D, 0x29, 0x7C, 0x28, 0x3F, 0x3A, 0x32, 0x34, 0x31, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x31, 0x31, 0x7C, 0x35, 0x5B, 0x32, 0x33, 0x5D, 0x29, 0x7C, 0x34, 0x34, 0x31, 0x7C, 0x35, 0x5B, 0x31, 0x34, 0x5D, 0x31, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x37, 0x7D, 0x7C, 0x28, 0x3F, 0x3A, 0x33, 0x28, 0x3F, 0x3A, 0x33, 0x34, 0x7C, 0x34, 0x31, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x31, 0x31, 0x7C, 0x35, 0x32, 0x29, 0x7C, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x37, 0x7D, 0x7C, 0x28, 0x3F, 0x3A, 0x31, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x33, 0x34, 0x35, 0x38, 0x39, 0x5D, 0x5B, 0x31, 0x32, 0x5D, 0x7C, 0x5B, 0x32, 0x37, 0x5D, 0x5B, 0x31, 0x2D, 0x34, 0x5D, 0x29, 0x7C, 0x32, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x31, 0x38, 0x39, 0x5D, 0x7C, 0x5B, 0x33, 0x36, 0x38, 0x39, 0x5D, 0x5B, 0x31, 0x32, 0x5D, 0x7C, 0x34, 0x32, 0x7C, 0x35, 0x5B, 0x32, 0x35, 0x36, 0x5D, 0x7C, 0x37, 0x5B, 0x33, 0x34, 0x5D, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x31, 0x32, 0x7C, 0x32, 0x5B, 0x31, 0x2D, 0x34, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x32, 0x35, 0x5D, 0x7C, 0x34, 0x5B, 0x32, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x31, 0x7C, 0x5B, 0x36, 0x2D, 0x39, 0x5D, 0x5B, 0x31, 0x32, 0x5D, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x5B, 0x31, 0x32, 0x5D, 0x7C, 0x32, 0x5B, 0x31, 0x2D, 0x34, 0x36, 0x37, 0x5D, 0x7C, 0x34, 0x5B, 0x32, 0x2D, 0x34, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x31, 0x32, 0x7C, 0x32, 0x5B, 0x38, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x2D, 0x35, 0x5D, 0x7C, 0x34, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x7C, 0x5B, 0x35, 0x2D, 0x37, 0x5D, 0x5B, 0x31, 0x32, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x32, 0x34, 0x35, 0x5D, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x31, 0x32, 0x7C, 0x5B, 0x33, 0x34, 0x37, 0x2D, 0x39, 0x5D, 0x5B, 0x31, 0x32, 0x5D, 0x7C, 0x35, 0x31, 0x7C, 0x36, 0x5B, 0x31, 0x2D, 0x36, 0x5D, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x33, 0x35, 0x38, 0x39, 0x5D, 0x5B, 0x31, 0x32, 0x5D, 0x7C, 0x32, 0x5B, 0x31, 0x32, 0x38, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x2D, 0x34, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x2D, 0x36, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x2D, 0x33, 0x5D, 0x29, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x34, 0x35, 0x5D, 0x5B, 0x31, 0x32, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x32, 0x34, 0x35, 0x37, 0x38, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x32, 0x35, 0x36, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x32, 0x34, 0x35, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x1A, 0x2C, 0x12, 0x16, 0x39, 0x28, 0x3F, 0x3A, 0x31, 0x5C, 0x64, 0x7C, 0x33, 0x5B, 0x31, 0x32, 0x34, 0x2D, 0x38, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x39, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x22, 0x12, 0x0C, 0x39, 0x39, 0x33, 0x5B, 0x31, 0x32, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x39, 0x39, 0x33, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x4A, 0x02, 0x49, 0x52, 0x50, 0x62, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x29, 0x0A, 0x12, 0x28, 0x32, 0x31, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x02, 0x32, 0x31, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x39, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x0F, 0x5B, 0x31, 0x33, 0x2D, 0x38, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x25, 0x12, 0x0F, 0x39, 0x34, 0x33, 0x5B, 0x32, 0x34, 0x36, 0x37, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x39, 0x34, 0x33, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x1F, 0x12, 0x09, 0x39, 0x39, 0x39, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x39, 0x39, 0x39, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x0A, 0xDA, 0x04, 0x0A, 0x1D, 0x12, 0x12, 0x5B, 0x34, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x7C, 0x33, 0x38, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x12, 0xB3, 0x01, 0x12, 0xA0, 0x01, 0x28, 0x3F, 0x3A, 0x34, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x30, 0x2D, 0x32, 0x34, 0x35, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x2D, 0x37, 0x5D, 0x7C, 0x5B, 0x33, 0x37, 0x5D, 0x5B, 0x30, 0x2D, 0x38, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x32, 0x34, 0x35, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x2D, 0x33, 0x35, 0x36, 0x5D, 0x7C, 0x36, 0x5C, 0x64, 0x7C, 0x38, 0x5B, 0x30, 0x2D, 0x34, 0x36, 0x2D, 0x38, 0x5D, 0x7C, 0x39, 0x5B, 0x30, 0x31, 0x33, 0x2D, 0x37, 0x39, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x35, 0x7C, 0x5B, 0x31, 0x35, 0x36, 0x5D, 0x5C, 0x64, 0x7C, 0x32, 0x5B, 0x30, 0x32, 0x35, 0x37, 0x38, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x31, 0x33, 0x2D, 0x36, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x33, 0x2D, 0x36, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x2D, 0x32, 0x35, 0x37, 0x38, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x2D, 0x32, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x30, 0x31, 0x33, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x29, 0x7C, 0x38, 0x37, 0x5B, 0x32, 0x33, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x34, 0x31, 0x30, 0x31, 0x32, 0x33, 0x34, 0x1A, 0x97, 0x01, 0x12, 0x82, 0x01, 0x33, 0x38, 0x5B, 0x35, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x7C, 0x28, 0x3F, 0x3A, 0x36, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x30, 0x31, 0x34, 0x2D, 0x38, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x2D, 0x38, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x2D, 0x32, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x2D, 0x32, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x32, 0x39, 0x5D, 0x7C, 0x5B, 0x36, 0x37, 0x5D, 0x5B, 0x30, 0x2D, 0x36, 0x39, 0x5D, 0x7C, 0x5B, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x35, 0x5B, 0x30, 0x35, 0x37, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x2D, 0x37, 0x5D, 0x29, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x30, 0x2D, 0x35, 0x5D, 0x7C, 0x5B, 0x34, 0x36, 0x39, 0x5D, 0x5C, 0x64, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x32, 0x07, 0x36, 0x31, 0x30, 0x31, 0x32, 0x33, 0x34, 0x22, 0x1A, 0x12, 0x08, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x2A, 0x19, 0x12, 0x07, 0x39, 0x30, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x39, 0x30, 0x31, 0x31, 0x32, 0x33, 0x34, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x21, 0x12, 0x0F, 0x34, 0x39, 0x5B, 0x30, 0x31, 0x33, 0x2D, 0x37, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x34, 0x39, 0x33, 0x31, 0x32, 0x33, 0x34, 0x4A, 0x02, 0x49, 0x53, 0x50, 0xE2, 0x02, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x22, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x05, 0x5B, 0x34, 0x2D, 0x39, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x29, 0x0A, 0x16, 0x28, 0x33, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x33, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xBE, 0x06, 0x0A, 0x1B, 0x12, 0x0F, 0x5B, 0x30, 0x31, 0x33, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x31, 0x30, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x31, 0x31, 0x7D, 0x12, 0x53, 0x12, 0x3B, 0x30, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x39, 0x7D, 0x7C, 0x5B, 0x31, 0x33, 0x2D, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x31, 0x35, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x38, 0x7D, 0x7C, 0x5B, 0x32, 0x2D, 0x34, 0x36, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x38, 0x7D, 0x29, 0x29, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x31, 0x31, 0x7D, 0x32, 0x0A, 0x30, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x1A, 0x1F, 0x12, 0x08, 0x33, 0x5C, 0x64, 0x7B, 0x38, 0x2C, 0x39, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x39, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x09, 0x33, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x22, 0x29, 0x12, 0x13, 0x38, 0x30, 0x28, 0x3F, 0x3A, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x7C, 0x33, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x29, 0x12, 0x13, 0x38, 0x39, 0x28, 0x3F, 0x3A, 0x32, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x7C, 0x39, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x29, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x39, 0x39, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x25, 0x12, 0x0D, 0x38, 0x34, 0x5B, 0x37, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x37, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x39, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x34, 0x38, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x3A, 0x22, 0x12, 0x0A, 0x31, 0x37, 0x38, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x37, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x39, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x31, 0x37, 0x38, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x49, 0x54, 0x50, 0x27, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x2E, 0x0A, 0x17, 0x28, 0x30, 0x5B, 0x32, 0x36, 0x5D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x05, 0x30, 0x5B, 0x32, 0x36, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x2C, 0x0A, 0x15, 0x28, 0x30, 0x5B, 0x32, 0x36, 0x5D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x05, 0x30, 0x5B, 0x32, 0x36, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x24, 0x0A, 0x10, 0x28, 0x30, 0x5B, 0x32, 0x36, 0x5D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x36, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x05, 0x30, 0x5B, 0x32, 0x36, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x3A, 0x0A, 0x18, 0x28, 0x30, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x10, 0x30, 0x5B, 0x31, 0x33, 0x2D, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x5B, 0x30, 0x31, 0x35, 0x39, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x30, 0x0A, 0x11, 0x28, 0x30, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x36, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x10, 0x30, 0x5B, 0x31, 0x33, 0x2D, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x5B, 0x30, 0x31, 0x35, 0x39, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x3A, 0x0A, 0x16, 0x28, 0x30, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x12, 0x30, 0x5B, 0x31, 0x33, 0x2D, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x5B, 0x32, 0x2D, 0x34, 0x36, 0x2D, 0x38, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x32, 0x0A, 0x11, 0x28, 0x30, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x36, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x12, 0x30, 0x5B, 0x31, 0x33, 0x2D, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x5B, 0x32, 0x2D, 0x34, 0x36, 0x2D, 0x38, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x3B, 0x0A, 0x17, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x12, 0x5B, 0x31, 0x33, 0x5D, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x34, 0x5B, 0x37, 0x38, 0x5D, 0x29, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x28, 0x0A, 0x10, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x36, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x09, 0x38, 0x28, 0x3F, 0x3A, 0x30, 0x33, 0x7C, 0x39, 0x29, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xD0, 0x01, 0x01, 0x0A, 0xF5, 0x04, 0x0A, 0x1B, 0x12, 0x0F, 0x5B, 0x31, 0x33, 0x35, 0x37, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x39, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x31, 0x30, 0x7D, 0x12, 0x21, 0x12, 0x09, 0x31, 0x35, 0x33, 0x34, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x31, 0x35, 0x33, 0x34, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x1A, 0x36, 0x12, 0x20, 0x37, 0x28, 0x3F, 0x3A, 0x35, 0x30, 0x39, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x39, 0x37, 0x29, 0x7C, 0x38, 0x32, 0x39, 0x7C, 0x39, 0x33, 0x37, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x37, 0x37, 0x39, 0x37, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x31, 0x12, 0x1B, 0x38, 0x30, 0x28, 0x3F, 0x3A, 0x30, 0x37, 0x28, 0x3F, 0x3A, 0x33, 0x35, 0x7C, 0x38, 0x31, 0x29, 0x7C, 0x38, 0x39, 0x30, 0x31, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x30, 0x30, 0x37, 0x33, 0x35, 0x34, 0x35, 0x36, 0x37, 0x2A, 0x44, 0x12, 0x2E, 0x28, 0x3F, 0x3A, 0x38, 0x37, 0x31, 0x32, 0x30, 0x36, 0x7C, 0x39, 0x30, 0x28, 0x3F, 0x3A, 0x30, 0x36, 0x36, 0x5B, 0x35, 0x39, 0x5D, 0x7C, 0x31, 0x38, 0x31, 0x30, 0x7C, 0x37, 0x31, 0x28, 0x3F, 0x3A, 0x30, 0x37, 0x7C, 0x35, 0x35, 0x29, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x39, 0x30, 0x31, 0x38, 0x31, 0x30, 0x35, 0x36, 0x37, 0x38, 0x32, 0x4E, 0x12, 0x38, 0x38, 0x28, 0x3F, 0x3A, 0x34, 0x28, 0x3F, 0x3A, 0x34, 0x28, 0x3F, 0x3A, 0x34, 0x28, 0x3F, 0x3A, 0x30, 0x35, 0x7C, 0x34, 0x32, 0x7C, 0x36, 0x39, 0x29, 0x7C, 0x37, 0x30, 0x33, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x34, 0x31, 0x7C, 0x38, 0x30, 0x30, 0x29, 0x29, 0x7C, 0x37, 0x30, 0x30, 0x30, 0x32, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x34, 0x34, 0x37, 0x30, 0x33, 0x34, 0x35, 0x36, 0x37, 0x3A, 0x21, 0x12, 0x0B, 0x37, 0x30, 0x31, 0x35, 0x31, 0x31, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x37, 0x30, 0x31, 0x35, 0x31, 0x31, 0x35, 0x36, 0x37, 0x38, 0x42, 0x1D, 0x12, 0x07, 0x35, 0x36, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x35, 0x36, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x4A, 0x02, 0x4A, 0x45, 0x50, 0x2C, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x6A, 0x02, 0x20, 0x78, 0x7A, 0x01, 0x30, 0xAA, 0x01, 0x51, 0x12, 0x3B, 0x37, 0x36, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x31, 0x32, 0x5D, 0x7C, 0x32, 0x5B, 0x33, 0x35, 0x36, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x31, 0x33, 0x34, 0x5D, 0x7C, 0x35, 0x5B, 0x34, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x2D, 0x33, 0x36, 0x39, 0x5D, 0x7C, 0x37, 0x37, 0x7C, 0x38, 0x31, 0x7C, 0x39, 0x5B, 0x33, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x37, 0x36, 0x34, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x7C, 0x12, 0x66, 0x33, 0x28, 0x3F, 0x3A, 0x30, 0x28, 0x3F, 0x3A, 0x30, 0x37, 0x28, 0x3F, 0x3A, 0x33, 0x35, 0x7C, 0x38, 0x31, 0x29, 0x7C, 0x38, 0x39, 0x30, 0x31, 0x29, 0x7C, 0x33, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x34, 0x28, 0x3F, 0x3A, 0x34, 0x28, 0x3F, 0x3A, 0x30, 0x35, 0x7C, 0x34, 0x32, 0x7C, 0x36, 0x39, 0x29, 0x7C, 0x37, 0x30, 0x33, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x34, 0x31, 0x7C, 0x38, 0x30, 0x30, 0x29, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x30, 0x32, 0x7C, 0x31, 0x32, 0x30, 0x36, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x7C, 0x35, 0x35, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x35, 0x35, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x0A, 0xF7, 0x03, 0x0A, 0x1D, 0x12, 0x0A, 0x5B, 0x35, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x12, 0x8C, 0x01, 0x12, 0x6D, 0x38, 0x37, 0x36, 0x28, 0x3F, 0x3A, 0x28, 0x3F, 0x3A, 0x35, 0x5B, 0x30, 0x2D, 0x32, 0x36, 0x5D, 0x7C, 0x36, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x7C, 0x28, 0x3F, 0x3A, 0x37, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x32, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x5B, 0x31, 0x2D, 0x36, 0x5D, 0x5C, 0x64, 0x7C, 0x38, 0x5B, 0x30, 0x35, 0x36, 0x5D, 0x7C, 0x39, 0x5B, 0x34, 0x35, 0x5D, 0x29, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x7C, 0x31, 0x5B, 0x30, 0x32, 0x33, 0x37, 0x38, 0x5D, 0x7C, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x7C, 0x39, 0x5B, 0x32, 0x2D, 0x34, 0x36, 0x38, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x32, 0x0A, 0x38, 0x37, 0x36, 0x35, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x1A, 0x72, 0x12, 0x5C, 0x38, 0x37, 0x36, 0x28, 0x3F, 0x3A, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x31, 0x37, 0x38, 0x5D, 0x7C, 0x5B, 0x33, 0x34, 0x38, 0x5D, 0x5C, 0x64, 0x7C, 0x35, 0x5B, 0x37, 0x38, 0x5D, 0x29, 0x5C, 0x64, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x37, 0x5D, 0x7C, 0x37, 0x5C, 0x64, 0x7C, 0x38, 0x5B, 0x31, 0x2D, 0x34, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x30, 0x2D, 0x33, 0x36, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x31, 0x5D, 0x39, 0x7C, 0x39, 0x5B, 0x30, 0x35, 0x37, 0x39, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x37, 0x36, 0x32, 0x31, 0x30, 0x31, 0x32, 0x33, 0x34, 0x22, 0x33, 0x12, 0x1D, 0x38, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x35, 0x35, 0x7C, 0x36, 0x36, 0x7C, 0x37, 0x37, 0x7C, 0x38, 0x38, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x30, 0x30, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x23, 0x12, 0x0D, 0x39, 0x30, 0x30, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x39, 0x30, 0x30, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x2D, 0x12, 0x17, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x33, 0x33, 0x7C, 0x34, 0x34, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x35, 0x30, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4A, 0x4D, 0x50, 0x01, 0x5A, 0x03, 0x30, 0x31, 0x31, 0x62, 0x01, 0x31, 0x7A, 0x01, 0x31, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xBA, 0x01, 0x03, 0x38, 0x37, 0x36, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xE0, 0x03, 0x0A, 0x19, 0x12, 0x0E, 0x5B, 0x32, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x12, 0x25, 0x12, 0x10, 0x5B, 0x32, 0x33, 0x35, 0x36, 0x5D, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x32, 0x08, 0x36, 0x32, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x1A, 0x2D, 0x12, 0x19, 0x37, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x7C, 0x39, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x37, 0x39, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x1A, 0x12, 0x07, 0x38, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x2A, 0x1B, 0x12, 0x08, 0x39, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x39, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x32, 0x1A, 0x12, 0x07, 0x38, 0x35, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x35, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x3A, 0x1B, 0x12, 0x07, 0x37, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x37, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4A, 0x4F, 0x50, 0xC2, 0x07, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x2F, 0x0A, 0x12, 0x28, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x06, 0x5B, 0x32, 0x33, 0x35, 0x36, 0x5D, 0x22, 0x05, 0x28, 0x30, 0x24, 0x31, 0x29, 0x2A, 0x00, 0x9A, 0x01, 0x42, 0x0A, 0x1F, 0x28, 0x37, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0E, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x20, 0x24, 0x35, 0x1A, 0x08, 0x37, 0x5B, 0x34, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x29, 0x0A, 0x10, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x36, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x07, 0x37, 0x30, 0x7C, 0x5B, 0x38, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x26, 0x12, 0x13, 0x38, 0x28, 0x3F, 0x3A, 0x31, 0x30, 0x7C, 0x5B, 0x37, 0x38, 0x5D, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x37, 0x31, 0x30, 0x31, 0x32, 0x33, 0x34, 0x0A, 0x95, 0x23, 0x0A, 0x14, 0x12, 0x08, 0x5C, 0x64, 0x7B, 0x39, 0x2C, 0x31, 0x30, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x39, 0x2C, 0x31, 0x30, 0x7D, 0x12, 0x93, 0x02, 0x12, 0xFE, 0x01, 0x28, 0x3F, 0x3A, 0x31, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x32, 0x33, 0x36, 0x2D, 0x38, 0x5D, 0x7C, 0x32, 0x5B, 0x33, 0x2D, 0x36, 0x5D, 0x7C, 0x33, 0x5B, 0x33, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x32, 0x2D, 0x36, 0x5D, 0x7C, 0x5B, 0x35, 0x38, 0x5D, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x7C, 0x36, 0x5B, 0x32, 0x2D, 0x37, 0x5D, 0x7C, 0x37, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x29, 0x7C, 0x32, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7C, 0x5B, 0x33, 0x36, 0x5D, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x36, 0x5B, 0x30, 0x32, 0x33, 0x35, 0x2D, 0x38, 0x5D, 0x7C, 0x5B, 0x32, 0x2D, 0x35, 0x37, 0x38, 0x5D, 0x5C, 0x64, 0x7C, 0x39, 0x5B, 0x32, 0x2D, 0x35, 0x39, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x36, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x7C, 0x5B, 0x32, 0x2D, 0x35, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x32, 0x35, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x33, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x32, 0x36, 0x37, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x5B, 0x36, 0x37, 0x39, 0x5D, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x32, 0x2D, 0x35, 0x38, 0x5D, 0x5C, 0x64, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x33, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x1A, 0x21, 0x12, 0x0B, 0x5B, 0x37, 0x2D, 0x39, 0x5D, 0x30, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x37, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x22, 0x1C, 0x12, 0x08, 0x31, 0x32, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x31, 0x32, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x1C, 0x12, 0x08, 0x39, 0x39, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x39, 0x39, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x1B, 0x12, 0x07, 0x36, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x36, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x42, 0x1D, 0x12, 0x07, 0x35, 0x30, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x35, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x4A, 0x02, 0x4A, 0x50, 0x50, 0x51, 0x5A, 0x03, 0x30, 0x31, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x34, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x0A, 0x28, 0x3F, 0x3A, 0x31, 0x32, 0x7C, 0x39, 0x39, 0x29, 0x30, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x31, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x07, 0x5B, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x30, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0xF6, 0x03, 0x0A, 0x12, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x5A, 0x31, 0x28, 0x3F, 0x3A, 0x32, 0x36, 0x7C, 0x33, 0x5B, 0x37, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x35, 0x36, 0x5D, 0x7C, 0x35, 0x5B, 0x34, 0x2D, 0x36, 0x38, 0x5D, 0x7C, 0x36, 0x5B, 0x33, 0x2D, 0x35, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x37, 0x36, 0x7C, 0x39, 0x37, 0x29, 0x7C, 0x34, 0x39, 0x39, 0x7C, 0x37, 0x34, 0x36, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x38, 0x39, 0x5D, 0x7C, 0x36, 0x33, 0x7C, 0x34, 0x37, 0x7C, 0x35, 0x31, 0x29, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x34, 0x39, 0x7C, 0x38, 0x30, 0x7C, 0x39, 0x5B, 0x31, 0x36, 0x5D, 0x29, 0x1A, 0xAC, 0x01, 0x31, 0x28, 0x3F, 0x3A, 0x32, 0x36, 0x37, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x37, 0x5B, 0x32, 0x34, 0x37, 0x5D, 0x7C, 0x39, 0x5B, 0x32, 0x37, 0x38, 0x5D, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x35, 0x5B, 0x36, 0x37, 0x5D, 0x7C, 0x36, 0x36, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x34, 0x37, 0x7C, 0x35, 0x38, 0x7C, 0x36, 0x34, 0x7C, 0x38, 0x5B, 0x36, 0x37, 0x5D, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x32, 0x34, 0x35, 0x5D, 0x7C, 0x34, 0x38, 0x7C, 0x35, 0x5B, 0x34, 0x2D, 0x36, 0x38, 0x5D, 0x29, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x37, 0x36, 0x7C, 0x39, 0x37, 0x29, 0x39, 0x7C, 0x34, 0x39, 0x39, 0x5B, 0x32, 0x34, 0x36, 0x38, 0x5D, 0x7C, 0x37, 0x34, 0x36, 0x38, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x33, 0x28, 0x3F, 0x3A, 0x38, 0x5B, 0x37, 0x38, 0x5D, 0x7C, 0x39, 0x36, 0x29, 0x7C, 0x36, 0x33, 0x36, 0x7C, 0x34, 0x37, 0x37, 0x7C, 0x35, 0x31, 0x5B, 0x32, 0x34, 0x5D, 0x29, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x34, 0x39, 0x36, 0x7C, 0x38, 0x30, 0x32, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x32, 0x33, 0x5D, 0x7C, 0x36, 0x39, 0x29, 0x29, 0x1A, 0xC3, 0x01, 0x31, 0x28, 0x3F, 0x3A, 0x32, 0x36, 0x37, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x37, 0x5B, 0x32, 0x34, 0x37, 0x5D, 0x7C, 0x39, 0x5B, 0x32, 0x37, 0x38, 0x5D, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x35, 0x5B, 0x36, 0x37, 0x5D, 0x7C, 0x36, 0x36, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x34, 0x37, 0x7C, 0x35, 0x38, 0x7C, 0x36, 0x34, 0x7C, 0x38, 0x5B, 0x36, 0x37, 0x5D, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x32, 0x34, 0x35, 0x5D, 0x7C, 0x34, 0x38, 0x7C, 0x35, 0x5B, 0x34, 0x2D, 0x36, 0x38, 0x5D, 0x29, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x37, 0x36, 0x39, 0x7C, 0x39, 0x37, 0x39, 0x5B, 0x32, 0x2D, 0x36, 0x39, 0x5D, 0x29, 0x7C, 0x34, 0x39, 0x39, 0x5B, 0x32, 0x34, 0x36, 0x38, 0x5D, 0x7C, 0x37, 0x34, 0x36, 0x38, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x33, 0x28, 0x3F, 0x3A, 0x38, 0x5B, 0x37, 0x38, 0x5D, 0x7C, 0x39, 0x36, 0x5B, 0x32, 0x34, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x36, 0x33, 0x36, 0x5B, 0x32, 0x2D, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x37, 0x37, 0x7C, 0x35, 0x31, 0x5B, 0x32, 0x34, 0x5D, 0x29, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x34, 0x39, 0x36, 0x7C, 0x38, 0x30, 0x32, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x32, 0x33, 0x5D, 0x7C, 0x36, 0x39, 0x29, 0x29, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0xFB, 0x14, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0xA7, 0x03, 0x31, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x33, 0x2D, 0x36, 0x5D, 0x7C, 0x33, 0x5B, 0x33, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x32, 0x2D, 0x36, 0x5D, 0x7C, 0x35, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x7C, 0x5B, 0x36, 0x38, 0x5D, 0x5B, 0x32, 0x2D, 0x37, 0x5D, 0x7C, 0x37, 0x5B, 0x32, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x2D, 0x35, 0x37, 0x38, 0x5D, 0x29, 0x7C, 0x32, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x30, 0x33, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x33, 0x2D, 0x35, 0x38, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x2D, 0x34, 0x36, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x34, 0x2D, 0x38, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x31, 0x33, 0x2D, 0x38, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x32, 0x2D, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x33, 0x5D, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x32, 0x38, 0x5D, 0x7C, 0x33, 0x5B, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x33, 0x35, 0x2D, 0x37, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x35, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x38, 0x30, 0x7C, 0x39, 0x5B, 0x33, 0x2D, 0x35, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x31, 0x2D, 0x33, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x34, 0x35, 0x37, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x31, 0x33, 0x2D, 0x38, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x34, 0x2D, 0x37, 0x5D, 0x7C, 0x39, 0x5B, 0x34, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x31, 0x35, 0x5D, 0x7C, 0x33, 0x5B, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x33, 0x35, 0x2D, 0x38, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x2D, 0x34, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x30, 0x31, 0x34, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x34, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x33, 0x2D, 0x38, 0x5D, 0x7C, 0x34, 0x5B, 0x35, 0x2D, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x35, 0x37, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x33, 0x2D, 0x35, 0x37, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x29, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x33, 0x5D, 0x30, 0x7C, 0x34, 0x5B, 0x30, 0x32, 0x2D, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x32, 0x34, 0x35, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x32, 0x2D, 0x34, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x32, 0x2D, 0x37, 0x5D, 0x7C, 0x39, 0x5B, 0x33, 0x2D, 0x37, 0x5D, 0x29, 0x1A, 0x9E, 0x05, 0x31, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x33, 0x2D, 0x36, 0x5D, 0x7C, 0x33, 0x5B, 0x33, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x32, 0x2D, 0x36, 0x5D, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x33, 0x36, 0x2D, 0x38, 0x5D, 0x7C, 0x5B, 0x34, 0x35, 0x5D, 0x5B, 0x32, 0x2D, 0x36, 0x39, 0x5D, 0x29, 0x7C, 0x5B, 0x36, 0x38, 0x5D, 0x5B, 0x32, 0x2D, 0x37, 0x5D, 0x7C, 0x37, 0x5B, 0x32, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x2D, 0x35, 0x37, 0x38, 0x5D, 0x29, 0x7C, 0x32, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x32, 0x33, 0x5D, 0x29, 0x7C, 0x33, 0x5B, 0x33, 0x2D, 0x35, 0x38, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x2D, 0x34, 0x36, 0x38, 0x5D, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x35, 0x5B, 0x37, 0x38, 0x5D, 0x7C, 0x37, 0x5B, 0x32, 0x2D, 0x34, 0x5D, 0x7C, 0x5B, 0x30, 0x34, 0x36, 0x38, 0x5D, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x31, 0x33, 0x35, 0x2D, 0x38, 0x5D, 0x7C, 0x34, 0x5B, 0x32, 0x2D, 0x35, 0x5D, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x36, 0x37, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x32, 0x2D, 0x37, 0x5D, 0x29, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x32, 0x34, 0x35, 0x37, 0x38, 0x5D, 0x7C, 0x33, 0x5B, 0x32, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x36, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x31, 0x31, 0x7C, 0x33, 0x5B, 0x32, 0x2D, 0x34, 0x5D, 0x29, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x32, 0x33, 0x37, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x33, 0x5B, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x33, 0x35, 0x2D, 0x37, 0x5D, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x35, 0x39, 0x5D, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x7C, 0x5B, 0x36, 0x38, 0x5D, 0x29, 0x7C, 0x38, 0x30, 0x7C, 0x39, 0x5B, 0x33, 0x2D, 0x35, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x31, 0x2D, 0x33, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x34, 0x35, 0x37, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x31, 0x33, 0x2D, 0x38, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x34, 0x2D, 0x37, 0x5D, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x5B, 0x38, 0x39, 0x5D, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x7C, 0x5B, 0x34, 0x2D, 0x37, 0x5D, 0x29, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x31, 0x35, 0x5D, 0x7C, 0x33, 0x5B, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x33, 0x35, 0x2D, 0x38, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x2D, 0x34, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x31, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x36, 0x2D, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x32, 0x2D, 0x34, 0x37, 0x38, 0x5D, 0x7C, 0x36, 0x5B, 0x32, 0x2D, 0x35, 0x38, 0x39, 0x5D, 0x29, 0x29, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x34, 0x5B, 0x34, 0x2D, 0x38, 0x5D, 0x7C, 0x39, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x37, 0x5B, 0x32, 0x2D, 0x35, 0x36, 0x5D, 0x7C, 0x5B, 0x33, 0x2D, 0x36, 0x5D, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x32, 0x2D, 0x35, 0x5D, 0x29, 0x7C, 0x34, 0x5B, 0x35, 0x2D, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x5B, 0x33, 0x37, 0x5D, 0x7C, 0x35, 0x5B, 0x34, 0x2D, 0x37, 0x5D, 0x7C, 0x36, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x7C, 0x39, 0x5B, 0x32, 0x33, 0x36, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x37, 0x5B, 0x35, 0x37, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x33, 0x2D, 0x35, 0x37, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x29, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x33, 0x5D, 0x30, 0x7C, 0x34, 0x5B, 0x30, 0x32, 0x2D, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x32, 0x34, 0x35, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x32, 0x2D, 0x34, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x32, 0x2D, 0x37, 0x5D, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x33, 0x34, 0x5D, 0x7C, 0x5B, 0x34, 0x2D, 0x37, 0x5D, 0x29, 0x29, 0x1A, 0xFD, 0x05, 0x31, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x33, 0x2D, 0x36, 0x5D, 0x7C, 0x33, 0x5B, 0x33, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x32, 0x2D, 0x36, 0x5D, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x33, 0x36, 0x2D, 0x38, 0x5D, 0x7C, 0x5B, 0x34, 0x35, 0x5D, 0x5B, 0x32, 0x2D, 0x36, 0x39, 0x5D, 0x29, 0x7C, 0x5B, 0x36, 0x38, 0x5D, 0x5B, 0x32, 0x2D, 0x37, 0x5D, 0x7C, 0x37, 0x5B, 0x32, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x2D, 0x35, 0x37, 0x38, 0x5D, 0x29, 0x7C, 0x32, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x32, 0x33, 0x5D, 0x29, 0x7C, 0x33, 0x5B, 0x33, 0x2D, 0x35, 0x38, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x2D, 0x34, 0x36, 0x38, 0x5D, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x35, 0x5B, 0x37, 0x38, 0x5D, 0x7C, 0x37, 0x5B, 0x32, 0x2D, 0x34, 0x5D, 0x7C, 0x5B, 0x30, 0x34, 0x36, 0x38, 0x5D, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x31, 0x33, 0x35, 0x2D, 0x38, 0x5D, 0x7C, 0x34, 0x5B, 0x32, 0x2D, 0x35, 0x5D, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x36, 0x37, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x32, 0x2D, 0x37, 0x5D, 0x29, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x32, 0x34, 0x35, 0x37, 0x38, 0x5D, 0x7C, 0x33, 0x5B, 0x32, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x36, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x31, 0x31, 0x7C, 0x33, 0x5B, 0x32, 0x2D, 0x34, 0x5D, 0x29, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x32, 0x33, 0x37, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x33, 0x5B, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x33, 0x35, 0x2D, 0x37, 0x5D, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x35, 0x39, 0x5D, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x7C, 0x5B, 0x36, 0x38, 0x5D, 0x29, 0x7C, 0x38, 0x30, 0x7C, 0x39, 0x5B, 0x33, 0x2D, 0x35, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x31, 0x2D, 0x33, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x34, 0x35, 0x37, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x31, 0x33, 0x2D, 0x38, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x34, 0x2D, 0x37, 0x5D, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x5B, 0x38, 0x39, 0x5D, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x7C, 0x5B, 0x34, 0x2D, 0x37, 0x5D, 0x29, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x31, 0x35, 0x5D, 0x7C, 0x33, 0x5B, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x33, 0x35, 0x2D, 0x38, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x2D, 0x34, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x31, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x36, 0x2D, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x32, 0x2D, 0x34, 0x37, 0x38, 0x5D, 0x7C, 0x36, 0x5B, 0x32, 0x2D, 0x35, 0x38, 0x39, 0x5D, 0x29, 0x29, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x34, 0x5B, 0x34, 0x2D, 0x38, 0x5D, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x5B, 0x33, 0x35, 0x37, 0x38, 0x5D, 0x7C, 0x32, 0x30, 0x7C, 0x34, 0x5B, 0x30, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x35, 0x36, 0x5D, 0x29, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x37, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x2D, 0x35, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x2D, 0x35, 0x39, 0x5D, 0x29, 0x7C, 0x5B, 0x33, 0x2D, 0x36, 0x5D, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x32, 0x2D, 0x35, 0x5D, 0x29, 0x7C, 0x34, 0x5B, 0x35, 0x2D, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x5B, 0x33, 0x37, 0x5D, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x5B, 0x34, 0x36, 0x37, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x31, 0x34, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x7C, 0x39, 0x5B, 0x30, 0x32, 0x2D, 0x36, 0x39, 0x5D, 0x29, 0x7C, 0x38, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x33, 0x36, 0x2D, 0x38, 0x5D, 0x7C, 0x39, 0x5B, 0x32, 0x33, 0x5D, 0x29, 0x29, 0x7C, 0x37, 0x5B, 0x35, 0x37, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x33, 0x2D, 0x35, 0x37, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x29, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x33, 0x5D, 0x30, 0x7C, 0x34, 0x5B, 0x30, 0x32, 0x2D, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x32, 0x34, 0x35, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x32, 0x2D, 0x34, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x32, 0x2D, 0x37, 0x5D, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x33, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x2D, 0x32, 0x34, 0x36, 0x38, 0x39, 0x5D, 0x29, 0x7C, 0x34, 0x5B, 0x32, 0x2D, 0x36, 0x39, 0x5D, 0x7C, 0x5B, 0x35, 0x2D, 0x37, 0x5D, 0x29, 0x29, 0x1A, 0x85, 0x06, 0x31, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x33, 0x2D, 0x36, 0x5D, 0x7C, 0x33, 0x5B, 0x33, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x32, 0x2D, 0x36, 0x5D, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x33, 0x36, 0x2D, 0x38, 0x5D, 0x7C, 0x5B, 0x34, 0x35, 0x5D, 0x5B, 0x32, 0x2D, 0x36, 0x39, 0x5D, 0x29, 0x7C, 0x5B, 0x36, 0x38, 0x5D, 0x5B, 0x32, 0x2D, 0x37, 0x5D, 0x7C, 0x37, 0x5B, 0x32, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x2D, 0x35, 0x37, 0x38, 0x5D, 0x29, 0x7C, 0x32, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x32, 0x33, 0x5D, 0x29, 0x7C, 0x33, 0x5B, 0x33, 0x2D, 0x35, 0x38, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x2D, 0x34, 0x36, 0x38, 0x5D, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x35, 0x5B, 0x37, 0x38, 0x5D, 0x7C, 0x37, 0x5B, 0x32, 0x2D, 0x34, 0x5D, 0x7C, 0x5B, 0x30, 0x34, 0x36, 0x38, 0x5D, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x31, 0x33, 0x35, 0x2D, 0x38, 0x5D, 0x7C, 0x34, 0x5B, 0x32, 0x2D, 0x35, 0x5D, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x36, 0x37, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x32, 0x2D, 0x37, 0x5D, 0x29, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x32, 0x34, 0x35, 0x37, 0x38, 0x5D, 0x7C, 0x33, 0x5B, 0x32, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x36, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x31, 0x31, 0x7C, 0x33, 0x5B, 0x32, 0x2D, 0x34, 0x5D, 0x29, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x32, 0x33, 0x37, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x33, 0x5B, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x33, 0x35, 0x2D, 0x37, 0x5D, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x35, 0x39, 0x5D, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x7C, 0x5B, 0x36, 0x38, 0x5D, 0x29, 0x7C, 0x38, 0x30, 0x7C, 0x39, 0x5B, 0x33, 0x2D, 0x35, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x31, 0x2D, 0x33, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x34, 0x35, 0x37, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x31, 0x33, 0x2D, 0x38, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x34, 0x2D, 0x37, 0x5D, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x5B, 0x38, 0x39, 0x5D, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x7C, 0x5B, 0x34, 0x2D, 0x37, 0x5D, 0x29, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x31, 0x35, 0x5D, 0x7C, 0x33, 0x5B, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x33, 0x35, 0x2D, 0x38, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x2D, 0x34, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x31, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x36, 0x2D, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x32, 0x2D, 0x34, 0x37, 0x38, 0x5D, 0x7C, 0x36, 0x5B, 0x32, 0x2D, 0x35, 0x38, 0x39, 0x5D, 0x29, 0x29, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x34, 0x5B, 0x34, 0x2D, 0x38, 0x5D, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x5B, 0x33, 0x35, 0x37, 0x38, 0x5D, 0x7C, 0x32, 0x30, 0x7C, 0x34, 0x5B, 0x30, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x35, 0x5B, 0x32, 0x35, 0x5D, 0x7C, 0x36, 0x30, 0x29, 0x29, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x37, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x2D, 0x35, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x2D, 0x35, 0x39, 0x5D, 0x29, 0x7C, 0x5B, 0x33, 0x2D, 0x36, 0x5D, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x32, 0x2D, 0x35, 0x5D, 0x29, 0x7C, 0x34, 0x5B, 0x35, 0x2D, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x5B, 0x33, 0x37, 0x5D, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x5B, 0x34, 0x36, 0x37, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x31, 0x34, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x7C, 0x39, 0x5B, 0x30, 0x32, 0x2D, 0x36, 0x39, 0x5D, 0x29, 0x7C, 0x38, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x33, 0x36, 0x2D, 0x38, 0x5D, 0x7C, 0x39, 0x5B, 0x32, 0x33, 0x5D, 0x29, 0x29, 0x7C, 0x37, 0x5B, 0x35, 0x37, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x33, 0x2D, 0x35, 0x37, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x29, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x33, 0x5D, 0x30, 0x7C, 0x34, 0x5B, 0x30, 0x32, 0x2D, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x32, 0x34, 0x35, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x32, 0x2D, 0x34, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x32, 0x2D, 0x37, 0x5D, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x33, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x2D, 0x32, 0x34, 0x36, 0x38, 0x39, 0x5D, 0x29, 0x7C, 0x34, 0x5B, 0x32, 0x2D, 0x36, 0x39, 0x5D, 0x7C, 0x5B, 0x35, 0x2D, 0x37, 0x5D, 0x29, 0x29, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0xE4, 0x03, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x77, 0x31, 0x7C, 0x32, 0x28, 0x3F, 0x3A, 0x32, 0x33, 0x7C, 0x35, 0x5B, 0x35, 0x2D, 0x38, 0x39, 0x5D, 0x7C, 0x36, 0x34, 0x7C, 0x37, 0x38, 0x7C, 0x38, 0x5B, 0x33, 0x39, 0x5D, 0x7C, 0x39, 0x31, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x32, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x36, 0x34, 0x7C, 0x37, 0x5B, 0x33, 0x34, 0x37, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x2D, 0x35, 0x38, 0x39, 0x5D, 0x7C, 0x33, 0x39, 0x29, 0x7C, 0x36, 0x30, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x5B, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x32, 0x37, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x31, 0x32, 0x34, 0x35, 0x38, 0x39, 0x5D, 0x29, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x33, 0x35, 0x2D, 0x38, 0x5D, 0x7C, 0x39, 0x33, 0x29, 0x1A, 0x9A, 0x01, 0x31, 0x7C, 0x32, 0x28, 0x3F, 0x3A, 0x32, 0x33, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x5B, 0x35, 0x37, 0x5D, 0x7C, 0x5B, 0x36, 0x38, 0x5D, 0x30, 0x7C, 0x39, 0x5B, 0x31, 0x39, 0x5D, 0x29, 0x7C, 0x36, 0x34, 0x7C, 0x37, 0x38, 0x7C, 0x38, 0x5B, 0x33, 0x39, 0x5D, 0x7C, 0x39, 0x31, 0x37, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x5B, 0x36, 0x38, 0x5D, 0x7C, 0x32, 0x30, 0x7C, 0x39, 0x5B, 0x31, 0x37, 0x38, 0x5D, 0x29, 0x7C, 0x36, 0x34, 0x7C, 0x37, 0x5B, 0x33, 0x34, 0x37, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x2D, 0x35, 0x38, 0x39, 0x5D, 0x7C, 0x33, 0x39, 0x5B, 0x36, 0x37, 0x5D, 0x29, 0x7C, 0x36, 0x30, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x5B, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x32, 0x37, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x31, 0x32, 0x34, 0x35, 0x38, 0x39, 0x5D, 0x29, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x33, 0x35, 0x2D, 0x38, 0x5D, 0x7C, 0x39, 0x33, 0x5B, 0x33, 0x34, 0x5D, 0x29, 0x1A, 0xA3, 0x01, 0x31, 0x7C, 0x32, 0x28, 0x3F, 0x3A, 0x32, 0x33, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x5B, 0x35, 0x37, 0x5D, 0x7C, 0x5B, 0x36, 0x38, 0x5D, 0x30, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x31, 0x37, 0x7C, 0x39, 0x39, 0x29, 0x29, 0x7C, 0x36, 0x34, 0x7C, 0x37, 0x38, 0x7C, 0x38, 0x5B, 0x33, 0x39, 0x5D, 0x7C, 0x39, 0x31, 0x37, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x5B, 0x36, 0x38, 0x5D, 0x7C, 0x32, 0x30, 0x7C, 0x39, 0x5B, 0x31, 0x37, 0x38, 0x5D, 0x29, 0x7C, 0x36, 0x34, 0x7C, 0x37, 0x5B, 0x33, 0x34, 0x37, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x2D, 0x35, 0x38, 0x39, 0x5D, 0x7C, 0x33, 0x39, 0x5B, 0x36, 0x37, 0x5D, 0x29, 0x7C, 0x36, 0x30, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x5B, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x32, 0x37, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x31, 0x32, 0x34, 0x35, 0x38, 0x39, 0x5D, 0x29, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x33, 0x35, 0x2D, 0x38, 0x5D, 0x7C, 0x39, 0x33, 0x28, 0x3F, 0x3A, 0x33, 0x31, 0x7C, 0x34, 0x29, 0x29, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x4D, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x23, 0x32, 0x28, 0x3F, 0x3A, 0x39, 0x5B, 0x31, 0x34, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x37, 0x34, 0x7C, 0x5B, 0x33, 0x34, 0x5D, 0x37, 0x7C, 0x5B, 0x35, 0x36, 0x5D, 0x39, 0x29, 0x7C, 0x38, 0x32, 0x7C, 0x39, 0x39, 0x33, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x40, 0x0A, 0x12, 0x28, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x19, 0x33, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x30, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x31, 0x5D, 0x29, 0x7C, 0x36, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x30, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x06, 0x5B, 0x32, 0x34, 0x37, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x8C, 0x03, 0x0A, 0x14, 0x12, 0x08, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x31, 0x30, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x31, 0x30, 0x7D, 0x12, 0x38, 0x12, 0x22, 0x28, 0x3F, 0x3A, 0x32, 0x30, 0x7C, 0x34, 0x5B, 0x30, 0x2D, 0x36, 0x5D, 0x7C, 0x35, 0x5C, 0x64, 0x7C, 0x36, 0x5B, 0x30, 0x2D, 0x32, 0x34, 0x2D, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x37, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x39, 0x7D, 0x32, 0x09, 0x32, 0x30, 0x32, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x1A, 0x3D, 0x12, 0x29, 0x37, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x30, 0x2D, 0x36, 0x5D, 0x7C, 0x32, 0x5C, 0x64, 0x7C, 0x33, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x2D, 0x32, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x32, 0x33, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x37, 0x31, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x28, 0x12, 0x11, 0x38, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x38, 0x38, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x37, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x39, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x09, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x27, 0x12, 0x10, 0x39, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x31, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x37, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x38, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x09, 0x39, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4B, 0x45, 0x50, 0xFE, 0x01, 0x5A, 0x03, 0x30, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x2A, 0x0A, 0x10, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x37, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x08, 0x5B, 0x32, 0x2D, 0x36, 0x5D, 0x7C, 0x39, 0x31, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x29, 0x0A, 0x10, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x37, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x07, 0x5B, 0x37, 0x38, 0x5D, 0x7C, 0x39, 0x30, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xA1, 0x04, 0x0A, 0x17, 0x12, 0x0C, 0x5B, 0x33, 0x35, 0x36, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x39, 0x7D, 0x12, 0xEA, 0x01, 0x12, 0xD3, 0x01, 0x28, 0x3F, 0x3A, 0x33, 0x28, 0x3F, 0x3A, 0x31, 0x28, 0x3F, 0x3A, 0x32, 0x5C, 0x64, 0x7C, 0x33, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x32, 0x7C, 0x36, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x29, 0x7C, 0x32, 0x28, 0x3F, 0x3A, 0x32, 0x32, 0x7C, 0x33, 0x5B, 0x30, 0x2D, 0x34, 0x37, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x2D, 0x37, 0x5D, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x32, 0x32, 0x7C, 0x35, 0x5B, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x2D, 0x34, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x32, 0x32, 0x7C, 0x33, 0x5B, 0x34, 0x2D, 0x37, 0x5D, 0x7C, 0x35, 0x39, 0x7C, 0x36, 0x5B, 0x30, 0x2D, 0x35, 0x5D, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x32, 0x32, 0x7C, 0x35, 0x5B, 0x33, 0x35, 0x2D, 0x37, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x2D, 0x33, 0x5D, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x32, 0x32, 0x7C, 0x33, 0x5B, 0x34, 0x36, 0x38, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x7C, 0x35, 0x39, 0x7C, 0x36, 0x5C, 0x64, 0x7C, 0x37, 0x5B, 0x35, 0x2D, 0x37, 0x5D, 0x29, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x32, 0x32, 0x7C, 0x34, 0x5B, 0x31, 0x2D, 0x37, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x2D, 0x38, 0x5D, 0x29, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x30, 0x39, 0x7C, 0x31, 0x32, 0x7C, 0x32, 0x5B, 0x32, 0x2D, 0x34, 0x5D, 0x29, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x39, 0x7D, 0x32, 0x09, 0x33, 0x31, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x1A, 0x35, 0x12, 0x21, 0x35, 0x5B, 0x31, 0x32, 0x34, 0x2D, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x35, 0x5D, 0x7C, 0x37, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x37, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x1C, 0x12, 0x08, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4B, 0x47, 0x50, 0xE4, 0x07, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x36, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x0C, 0x33, 0x31, 0x5B, 0x32, 0x35, 0x5D, 0x7C, 0x5B, 0x35, 0x2D, 0x38, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x30, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x10, 0x33, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x33, 0x36, 0x5D, 0x7C, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x29, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xCB, 0x03, 0x0A, 0x18, 0x12, 0x0C, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x31, 0x30, 0x7D, 0x12, 0x45, 0x12, 0x30, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x33, 0x2D, 0x36, 0x5D, 0x7C, 0x33, 0x5B, 0x32, 0x2D, 0x36, 0x5D, 0x7C, 0x34, 0x5B, 0x32, 0x2D, 0x34, 0x5D, 0x7C, 0x5B, 0x35, 0x2D, 0x37, 0x5D, 0x5B, 0x32, 0x2D, 0x35, 0x5D, 0x29, 0x5B, 0x32, 0x2D, 0x34, 0x37, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x38, 0x7D, 0x32, 0x08, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x1A, 0x4A, 0x12, 0x37, 0x28, 0x3F, 0x3A, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x30, 0x2D, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x2D, 0x34, 0x39, 0x5D, 0x29, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x38, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x32, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x39, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x22, 0x2C, 0x12, 0x16, 0x31, 0x38, 0x30, 0x30, 0x28, 0x3F, 0x3A, 0x31, 0x5C, 0x64, 0x7C, 0x32, 0x5B, 0x30, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x31, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x2C, 0x12, 0x16, 0x31, 0x39, 0x30, 0x30, 0x28, 0x3F, 0x3A, 0x31, 0x5C, 0x64, 0x7C, 0x32, 0x5B, 0x30, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x31, 0x39, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4B, 0x48, 0x50, 0xD7, 0x06, 0x5A, 0x07, 0x30, 0x30, 0x5B, 0x31, 0x37, 0x38, 0x5D, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x38, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x0E, 0x31, 0x5C, 0x64, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2F, 0x0A, 0x17, 0x28, 0x31, 0x5B, 0x38, 0x39, 0x5D, 0x30, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x06, 0x31, 0x5B, 0x38, 0x39, 0x5D, 0x30, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xD9, 0x01, 0x0A, 0x15, 0x12, 0x0C, 0x5B, 0x32, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x12, 0x2A, 0x12, 0x1A, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x33, 0x34, 0x5D, 0x5C, 0x64, 0x7C, 0x35, 0x30, 0x7C, 0x38, 0x5B, 0x31, 0x2D, 0x35, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x32, 0x05, 0x33, 0x31, 0x32, 0x33, 0x34, 0x1A, 0x19, 0x12, 0x09, 0x5B, 0x36, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x32, 0x05, 0x36, 0x31, 0x32, 0x33, 0x34, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4B, 0x49, 0x50, 0xAE, 0x05, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x14, 0x0A, 0x07, 0x28, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x29, 0x12, 0x02, 0x24, 0x31, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xE6, 0x01, 0x0A, 0x12, 0x12, 0x09, 0x5B, 0x33, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x12, 0x2F, 0x12, 0x1D, 0x37, 0x28, 0x3F, 0x3A, 0x36, 0x5B, 0x30, 0x2D, 0x33, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x2D, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x37, 0x37, 0x31, 0x32, 0x33, 0x34, 0x35, 0x1A, 0x1C, 0x12, 0x0A, 0x33, 0x5B, 0x32, 0x33, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x33, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4B, 0x4D, 0x50, 0x8D, 0x02, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x22, 0x0A, 0x12, 0x28, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x80, 0x03, 0x0A, 0x1D, 0x12, 0x0A, 0x5B, 0x35, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x12, 0x44, 0x12, 0x25, 0x38, 0x36, 0x39, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x32, 0x39, 0x7C, 0x33, 0x36, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x36, 0x5B, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x30, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x32, 0x0A, 0x38, 0x36, 0x39, 0x32, 0x33, 0x36, 0x31, 0x32, 0x33, 0x34, 0x1A, 0x44, 0x12, 0x2E, 0x38, 0x36, 0x39, 0x28, 0x3F, 0x3A, 0x35, 0x28, 0x3F, 0x3A, 0x35, 0x5B, 0x36, 0x2D, 0x38, 0x5D, 0x7C, 0x36, 0x5B, 0x35, 0x2D, 0x37, 0x5D, 0x29, 0x7C, 0x36, 0x36, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x36, 0x5B, 0x32, 0x2D, 0x35, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x36, 0x39, 0x35, 0x35, 0x36, 0x31, 0x32, 0x33, 0x34, 0x22, 0x33, 0x12, 0x1D, 0x38, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x35, 0x35, 0x7C, 0x36, 0x36, 0x7C, 0x37, 0x37, 0x7C, 0x38, 0x38, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x30, 0x30, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x23, 0x12, 0x0D, 0x39, 0x30, 0x30, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x39, 0x30, 0x30, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x2D, 0x12, 0x17, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x33, 0x33, 0x7C, 0x34, 0x34, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x35, 0x30, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4B, 0x4E, 0x50, 0x01, 0x5A, 0x03, 0x30, 0x31, 0x31, 0x62, 0x01, 0x31, 0x7A, 0x01, 0x31, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xBA, 0x01, 0x03, 0x38, 0x36, 0x39, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x6D, 0x0A, 0x00, 0x12, 0x00, 0x1A, 0x00, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4B, 0x50, 0x50, 0xD2, 0x06, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x90, 0x01, 0x01, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xCA, 0x0B, 0x0A, 0x20, 0x12, 0x14, 0x5B, 0x31, 0x2D, 0x37, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x39, 0x7D, 0x7C, 0x38, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x31, 0x30, 0x7D, 0x12, 0x4C, 0x12, 0x36, 0x28, 0x3F, 0x3A, 0x32, 0x7C, 0x5B, 0x33, 0x34, 0x5D, 0x5B, 0x31, 0x2D, 0x33, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x35, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x2D, 0x34, 0x5D, 0x29, 0x28, 0x3F, 0x3A, 0x31, 0x5C, 0x64, 0x7B, 0x32, 0x2C, 0x33, 0x7D, 0x7C, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x37, 0x7D, 0x29, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x08, 0x32, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x1A, 0x28, 0x12, 0x10, 0x31, 0x5B, 0x30, 0x2D, 0x32, 0x35, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x39, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x31, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x22, 0x1B, 0x12, 0x07, 0x38, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x2A, 0x20, 0x12, 0x0C, 0x36, 0x30, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x36, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x1D, 0x12, 0x07, 0x35, 0x30, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x35, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x42, 0x1D, 0x12, 0x07, 0x37, 0x30, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x37, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x4A, 0x02, 0x4B, 0x52, 0x50, 0x52, 0x5A, 0x18, 0x30, 0x30, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x32, 0x34, 0x2D, 0x36, 0x38, 0x5D, 0x7C, 0x5B, 0x33, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x62, 0x01, 0x30, 0x7A, 0x15, 0x30, 0x28, 0x38, 0x5B, 0x31, 0x2D, 0x34, 0x36, 0x2D, 0x38, 0x5D, 0x7C, 0x38, 0x35, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x3F, 0x9A, 0x01, 0x77, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x1F, 0x31, 0x28, 0x3F, 0x3A, 0x30, 0x7C, 0x31, 0x5B, 0x31, 0x39, 0x5D, 0x7C, 0x5B, 0x36, 0x39, 0x5D, 0x39, 0x7C, 0x35, 0x5B, 0x34, 0x35, 0x38, 0x5D, 0x29, 0x7C, 0x5B, 0x35, 0x37, 0x5D, 0x30, 0x1A, 0x25, 0x31, 0x28, 0x3F, 0x3A, 0x30, 0x7C, 0x31, 0x5B, 0x31, 0x39, 0x5D, 0x7C, 0x5B, 0x36, 0x39, 0x5D, 0x39, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x34, 0x34, 0x7C, 0x35, 0x39, 0x7C, 0x38, 0x29, 0x29, 0x7C, 0x5B, 0x35, 0x37, 0x5D, 0x30, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x07, 0x30, 0x24, 0x43, 0x43, 0x2D, 0x24, 0x31, 0x9A, 0x01, 0x9F, 0x01, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x31, 0x31, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x36, 0x39, 0x5D, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x7C, 0x5B, 0x37, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x34, 0x5D, 0x29, 0x7C, 0x5B, 0x36, 0x38, 0x5D, 0x30, 0x7C, 0x5B, 0x33, 0x2D, 0x39, 0x5D, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x1A, 0x3B, 0x31, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x36, 0x39, 0x5D, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x7C, 0x5B, 0x37, 0x38, 0x5D, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x2D, 0x33, 0x5D, 0x7C, 0x34, 0x5B, 0x35, 0x36, 0x5D, 0x29, 0x29, 0x7C, 0x5B, 0x36, 0x38, 0x5D, 0x30, 0x7C, 0x5B, 0x33, 0x2D, 0x39, 0x5D, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x07, 0x30, 0x24, 0x43, 0x43, 0x2D, 0x24, 0x31, 0x9A, 0x01, 0x37, 0x0A, 0x12, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x03, 0x31, 0x33, 0x31, 0x1A, 0x04, 0x31, 0x33, 0x31, 0x32, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x07, 0x30, 0x24, 0x43, 0x43, 0x2D, 0x24, 0x31, 0x9A, 0x01, 0x3F, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x03, 0x31, 0x33, 0x31, 0x1A, 0x09, 0x31, 0x33, 0x31, 0x5B, 0x31, 0x33, 0x2D, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x07, 0x30, 0x24, 0x43, 0x43, 0x2D, 0x24, 0x31, 0x9A, 0x01, 0x38, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x07, 0x31, 0x33, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x07, 0x30, 0x24, 0x43, 0x43, 0x2D, 0x24, 0x31, 0x9A, 0x01, 0x3D, 0x0A, 0x1C, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x2D, 0x24, 0x34, 0x1A, 0x02, 0x33, 0x30, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x07, 0x30, 0x24, 0x43, 0x43, 0x2D, 0x24, 0x31, 0x9A, 0x01, 0x73, 0x0A, 0x12, 0x28, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x12, 0x32, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x36, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x2D, 0x34, 0x36, 0x37, 0x5D, 0x29, 0x1A, 0x31, 0x32, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x36, 0x5D, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x30, 0x31, 0x7C, 0x31, 0x5B, 0x34, 0x35, 0x5D, 0x7C, 0x32, 0x5B, 0x31, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x33, 0x39, 0x7C, 0x34, 0x7C, 0x36, 0x5B, 0x36, 0x37, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x37, 0x38, 0x5D, 0x29, 0x29, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x07, 0x30, 0x24, 0x43, 0x43, 0x2D, 0x24, 0x31, 0x9A, 0x01, 0x8F, 0x01, 0x0A, 0x12, 0x28, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x16, 0x32, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x30, 0x2D, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x34, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x29, 0x1A, 0x49, 0x32, 0x28, 0x3F, 0x3A, 0x33, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x31, 0x5B, 0x30, 0x2D, 0x33, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x32, 0x2D, 0x36, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x2D, 0x38, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x2D, 0x35, 0x38, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x2D, 0x36, 0x39, 0x5D, 0x7C, 0x5B, 0x35, 0x38, 0x39, 0x5D, 0x29, 0x7C, 0x5B, 0x34, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x29, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x07, 0x30, 0x24, 0x43, 0x43, 0x2D, 0x24, 0x31, 0x9A, 0x01, 0x30, 0x0A, 0x0D, 0x28, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x1A, 0x0A, 0x32, 0x31, 0x5B, 0x30, 0x2D, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x07, 0x30, 0x24, 0x43, 0x43, 0x2D, 0x24, 0x31, 0x9A, 0x01, 0x4D, 0x0A, 0x10, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x1A, 0x0B, 0x5B, 0x33, 0x2D, 0x39, 0x5D, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x31, 0x1A, 0x17, 0x5B, 0x33, 0x2D, 0x39, 0x5D, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x31, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x2D, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x29, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x07, 0x30, 0x24, 0x43, 0x43, 0x2D, 0x24, 0x31, 0x9A, 0x01, 0x6C, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x1A, 0x15, 0x31, 0x28, 0x3F, 0x3A, 0x35, 0x5B, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x34, 0x36, 0x37, 0x38, 0x5D, 0x29, 0x1A, 0x2F, 0x31, 0x28, 0x3F, 0x3A, 0x35, 0x28, 0x3F, 0x3A, 0x34, 0x34, 0x7C, 0x36, 0x36, 0x7C, 0x37, 0x37, 0x7C, 0x38, 0x38, 0x7C, 0x39, 0x39, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x34, 0x34, 0x7C, 0x36, 0x5B, 0x31, 0x36, 0x5D, 0x7C, 0x37, 0x30, 0x7C, 0x38, 0x38, 0x29, 0x29, 0x22, 0x02, 0x24, 0x31, 0x2A, 0x07, 0x30, 0x24, 0x43, 0x43, 0x2D, 0x24, 0x31, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x47, 0x12, 0x34, 0x31, 0x28, 0x3F, 0x3A, 0x35, 0x28, 0x3F, 0x3A, 0x34, 0x34, 0x7C, 0x36, 0x36, 0x7C, 0x37, 0x37, 0x7C, 0x38, 0x38, 0x7C, 0x39, 0x39, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x34, 0x34, 0x7C, 0x36, 0x5B, 0x31, 0x36, 0x5D, 0x7C, 0x37, 0x30, 0x7C, 0x38, 0x38, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x31, 0x35, 0x34, 0x34, 0x31, 0x32, 0x33, 0x34, 0x0A, 0x95, 0x03, 0x0A, 0x19, 0x12, 0x0E, 0x5B, 0x31, 0x32, 0x35, 0x36, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x37, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x12, 0x60, 0x12, 0x4B, 0x28, 0x3F, 0x3A, 0x31, 0x38, 0x5C, 0x64, 0x7C, 0x32, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x33, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x7C, 0x34, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x33, 0x34, 0x5D, 0x7C, 0x5B, 0x32, 0x2D, 0x34, 0x36, 0x5D, 0x5C, 0x64, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x33, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x2D, 0x37, 0x5D, 0x29, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x32, 0x08, 0x32, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x1A, 0x6D, 0x12, 0x5A, 0x28, 0x3F, 0x3A, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x2D, 0x32, 0x5D, 0x7C, 0x35, 0x5C, 0x64, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x33, 0x34, 0x36, 0x37, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x31, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x5C, 0x64, 0x7C, 0x37, 0x5B, 0x30, 0x36, 0x37, 0x5D, 0x7C, 0x39, 0x39, 0x29, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x34, 0x39, 0x5D, 0x7C, 0x36, 0x36, 0x7C, 0x5B, 0x37, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x35, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4B, 0x57, 0x50, 0xC5, 0x07, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x25, 0x0A, 0x10, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x06, 0x5B, 0x31, 0x32, 0x36, 0x39, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x20, 0x0A, 0x10, 0x28, 0x35, 0x5B, 0x30, 0x35, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x01, 0x35, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xE4, 0x03, 0x0A, 0x1E, 0x12, 0x0B, 0x5B, 0x33, 0x35, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x12, 0x81, 0x01, 0x12, 0x62, 0x33, 0x34, 0x35, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x32, 0x32, 0x7C, 0x34, 0x34, 0x29, 0x7C, 0x34, 0x34, 0x34, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x32, 0x33, 0x7C, 0x33, 0x38, 0x7C, 0x34, 0x30, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x36, 0x5B, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x37, 0x29, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x31, 0x5B, 0x34, 0x35, 0x5D, 0x7C, 0x32, 0x35, 0x7C, 0x34, 0x5B, 0x38, 0x39, 0x5D, 0x7C, 0x38, 0x38, 0x29, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x31, 0x34, 0x7C, 0x34, 0x5B, 0x30, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x32, 0x0A, 0x33, 0x34, 0x35, 0x32, 0x32, 0x32, 0x31, 0x32, 0x33, 0x34, 0x1A, 0x5D, 0x12, 0x47, 0x33, 0x34, 0x35, 0x28, 0x3F, 0x3A, 0x33, 0x32, 0x5B, 0x33, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x34, 0x36, 0x37, 0x5D, 0x7C, 0x32, 0x5B, 0x35, 0x2D, 0x37, 0x5D, 0x7C, 0x34, 0x5B, 0x35, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x36, 0x37, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x38, 0x39, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x33, 0x34, 0x35, 0x33, 0x32, 0x33, 0x31, 0x32, 0x33, 0x34, 0x22, 0x33, 0x12, 0x1D, 0x38, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x35, 0x35, 0x7C, 0x36, 0x36, 0x7C, 0x37, 0x37, 0x7C, 0x38, 0x38, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x30, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x2A, 0x2F, 0x12, 0x19, 0x39, 0x30, 0x30, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x7C, 0x33, 0x34, 0x35, 0x39, 0x37, 0x36, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x39, 0x30, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x2D, 0x12, 0x17, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x33, 0x33, 0x7C, 0x34, 0x34, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x35, 0x30, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4B, 0x59, 0x50, 0x01, 0x5A, 0x03, 0x30, 0x31, 0x31, 0x62, 0x01, 0x31, 0x7A, 0x01, 0x31, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xBA, 0x01, 0x03, 0x33, 0x34, 0x35, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x90, 0x06, 0x0A, 0x20, 0x12, 0x16, 0x28, 0x3F, 0x3A, 0x37, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x7C, 0x38, 0x30, 0x5B, 0x30, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x12, 0xE6, 0x03, 0x12, 0xCF, 0x03, 0x37, 0x28, 0x3F, 0x3A, 0x31, 0x28, 0x3F, 0x3A, 0x30, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x33, 0x5D, 0x5C, 0x64, 0x7C, 0x34, 0x5B, 0x30, 0x32, 0x33, 0x5D, 0x7C, 0x35, 0x39, 0x7C, 0x36, 0x33, 0x29, 0x7C, 0x31, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x33, 0x5D, 0x5C, 0x64, 0x7C, 0x34, 0x5B, 0x30, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x35, 0x39, 0x29, 0x7C, 0x32, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x33, 0x5D, 0x5C, 0x64, 0x7C, 0x35, 0x39, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x32, 0x5C, 0x64, 0x7C, 0x33, 0x5B, 0x31, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x2D, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x39, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x32, 0x5C, 0x64, 0x7C, 0x33, 0x5B, 0x30, 0x31, 0x33, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x2D, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x37, 0x39, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x32, 0x5C, 0x64, 0x7C, 0x33, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x2D, 0x37, 0x5D, 0x7C, 0x35, 0x39, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x32, 0x5C, 0x64, 0x7C, 0x5B, 0x33, 0x34, 0x5D, 0x5C, 0x64, 0x7C, 0x35, 0x5B, 0x31, 0x39, 0x5D, 0x7C, 0x36, 0x31, 0x29, 0x7C, 0x37, 0x32, 0x5C, 0x64, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x37, 0x5D, 0x5C, 0x64, 0x7C, 0x33, 0x5B, 0x31, 0x2D, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x2D, 0x35, 0x5D, 0x7C, 0x29, 0x29, 0x7C, 0x32, 0x28, 0x3F, 0x3A, 0x31, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x33, 0x5D, 0x5C, 0x64, 0x7C, 0x34, 0x5B, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x33, 0x34, 0x36, 0x39, 0x5D, 0x29, 0x7C, 0x32, 0x28, 0x3F, 0x3A, 0x32, 0x5C, 0x64, 0x7C, 0x33, 0x5B, 0x30, 0x36, 0x37, 0x39, 0x5D, 0x7C, 0x34, 0x36, 0x7C, 0x35, 0x5B, 0x31, 0x32, 0x36, 0x37, 0x39, 0x5D, 0x7C, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x33, 0x34, 0x5D, 0x5C, 0x64, 0x7C, 0x35, 0x5B, 0x31, 0x33, 0x39, 0x5D, 0x7C, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x32, 0x5C, 0x64, 0x7C, 0x33, 0x5B, 0x31, 0x32, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x39, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x33, 0x5D, 0x5C, 0x64, 0x7C, 0x34, 0x5B, 0x30, 0x31, 0x32, 0x34, 0x36, 0x2D, 0x38, 0x5D, 0x7C, 0x35, 0x39, 0x7C, 0x36, 0x31, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x32, 0x5C, 0x64, 0x7C, 0x33, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x2D, 0x34, 0x5D, 0x7C, 0x35, 0x39, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x33, 0x5D, 0x5C, 0x64, 0x7C, 0x34, 0x30, 0x7C, 0x35, 0x5B, 0x32, 0x37, 0x39, 0x5D, 0x7C, 0x37, 0x5C, 0x64, 0x29, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x33, 0x5D, 0x5C, 0x64, 0x7C, 0x34, 0x5B, 0x30, 0x2D, 0x33, 0x5D, 0x7C, 0x35, 0x39, 0x29, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x32, 0x5C, 0x64, 0x7C, 0x33, 0x5B, 0x31, 0x32, 0x34, 0x35, 0x37, 0x38, 0x5D, 0x7C, 0x35, 0x39, 0x29, 0x29, 0x7C, 0x33, 0x36, 0x32, 0x32, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x37, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x1A, 0x46, 0x12, 0x30, 0x37, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x31, 0x32, 0x35, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x7C, 0x36, 0x5B, 0x30, 0x32, 0x2D, 0x34, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x7C, 0x37, 0x5B, 0x31, 0x35, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x37, 0x37, 0x31, 0x30, 0x30, 0x30, 0x39, 0x39, 0x39, 0x38, 0x22, 0x1E, 0x12, 0x08, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x2A, 0x1E, 0x12, 0x08, 0x38, 0x30, 0x39, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x30, 0x39, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x1E, 0x12, 0x08, 0x37, 0x35, 0x31, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x37, 0x35, 0x31, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x4A, 0x02, 0x4B, 0x5A, 0x50, 0x07, 0x5A, 0x04, 0x38, 0x7E, 0x31, 0x30, 0x62, 0x01, 0x38, 0x7A, 0x01, 0x38, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x1E, 0x12, 0x08, 0x37, 0x35, 0x31, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x37, 0x35, 0x31, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xD0, 0x02, 0x0A, 0x19, 0x12, 0x0D, 0x5B, 0x32, 0x2D, 0x35, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x31, 0x30, 0x7D, 0x12, 0x28, 0x12, 0x13, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x2D, 0x35, 0x37, 0x5D, 0x31, 0x7C, 0x35, 0x34, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x38, 0x7D, 0x32, 0x08, 0x32, 0x31, 0x32, 0x31, 0x32, 0x38, 0x36, 0x32, 0x1A, 0x36, 0x12, 0x20, 0x32, 0x30, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x32, 0x33, 0x5D, 0x7C, 0x35, 0x5B, 0x34, 0x2D, 0x36, 0x5D, 0x7C, 0x37, 0x37, 0x7C, 0x39, 0x5B, 0x38, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x32, 0x30, 0x32, 0x33, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4C, 0x41, 0x50, 0xD8, 0x06, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x33, 0x0A, 0x19, 0x28, 0x32, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x02, 0x32, 0x30, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x36, 0x0A, 0x18, 0x28, 0x5B, 0x32, 0x2D, 0x35, 0x37, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x09, 0x32, 0x31, 0x7C, 0x5B, 0x33, 0x2D, 0x35, 0x37, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xB6, 0x03, 0x0A, 0x18, 0x12, 0x0D, 0x5B, 0x31, 0x33, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x37, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x12, 0x45, 0x12, 0x33, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x34, 0x2D, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x2D, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7C, 0x36, 0x32, 0x29, 0x7C, 0x5B, 0x38, 0x39, 0x5D, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x31, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x1A, 0x33, 0x12, 0x1E, 0x28, 0x3F, 0x3A, 0x33, 0x5C, 0x64, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x31, 0x5D, 0x5C, 0x64, 0x7C, 0x36, 0x5B, 0x36, 0x37, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x32, 0x08, 0x37, 0x31, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x1D, 0x12, 0x0A, 0x39, 0x5B, 0x30, 0x31, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x39, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x1D, 0x12, 0x0A, 0x38, 0x5B, 0x30, 0x31, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4C, 0x42, 0x50, 0xC1, 0x07, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x48, 0x0A, 0x12, 0x28, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x21, 0x5B, 0x31, 0x33, 0x2D, 0x36, 0x5D, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x2D, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x32, 0x29, 0x7C, 0x5B, 0x38, 0x39, 0x5D, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x44, 0x0A, 0x17, 0x28, 0x5B, 0x37, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x18, 0x5B, 0x38, 0x39, 0x5D, 0x5B, 0x30, 0x31, 0x5D, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x31, 0x5D, 0x7C, 0x36, 0x5B, 0x36, 0x37, 0x5D, 0x29, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xAC, 0x03, 0x0A, 0x1E, 0x12, 0x0B, 0x5B, 0x35, 0x37, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x12, 0x50, 0x12, 0x31, 0x37, 0x35, 0x38, 0x28, 0x3F, 0x3A, 0x32, 0x33, 0x34, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x35, 0x5B, 0x30, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x2D, 0x32, 0x5D, 0x29, 0x7C, 0x36, 0x33, 0x38, 0x7C, 0x37, 0x35, 0x38, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x32, 0x0A, 0x37, 0x35, 0x38, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x1A, 0x63, 0x12, 0x4D, 0x37, 0x35, 0x38, 0x28, 0x3F, 0x3A, 0x32, 0x38, 0x5B, 0x34, 0x2D, 0x37, 0x5D, 0x7C, 0x33, 0x38, 0x34, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x36, 0x5B, 0x30, 0x31, 0x5D, 0x7C, 0x38, 0x5B, 0x34, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x38, 0x39, 0x5D, 0x7C, 0x32, 0x30, 0x7C, 0x38, 0x34, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x2D, 0x34, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x37, 0x35, 0x38, 0x32, 0x38, 0x34, 0x35, 0x36, 0x37, 0x38, 0x22, 0x33, 0x12, 0x1D, 0x38, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x35, 0x35, 0x7C, 0x36, 0x36, 0x7C, 0x37, 0x37, 0x7C, 0x38, 0x38, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x30, 0x30, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x23, 0x12, 0x0D, 0x39, 0x30, 0x30, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x39, 0x30, 0x30, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x2D, 0x12, 0x17, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x33, 0x33, 0x7C, 0x34, 0x34, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x35, 0x30, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4C, 0x43, 0x50, 0x01, 0x5A, 0x03, 0x30, 0x31, 0x31, 0x62, 0x01, 0x31, 0x7A, 0x01, 0x31, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xBA, 0x01, 0x03, 0x37, 0x35, 0x38, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xAE, 0x05, 0x0A, 0x29, 0x12, 0x1E, 0x28, 0x3F, 0x3A, 0x36, 0x36, 0x7C, 0x38, 0x30, 0x7C, 0x39, 0x30, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x7C, 0x5B, 0x32, 0x33, 0x37, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x12, 0x56, 0x12, 0x44, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x31, 0x37, 0x7C, 0x33, 0x5C, 0x64, 0x7C, 0x36, 0x5B, 0x30, 0x32, 0x2D, 0x35, 0x38, 0x5D, 0x7C, 0x39, 0x36, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x30, 0x32, 0x7C, 0x37, 0x5B, 0x30, 0x31, 0x33, 0x35, 0x37, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x34, 0x38, 0x5D, 0x7C, 0x39, 0x5B, 0x30, 0x32, 0x36, 0x39, 0x5D, 0x29, 0x7C, 0x38, 0x37, 0x30, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x1A, 0x6D, 0x12, 0x57, 0x36, 0x36, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x31, 0x37, 0x38, 0x5D, 0x5B, 0x30, 0x2D, 0x34, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x32, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x33, 0x36, 0x5D, 0x5C, 0x64, 0x7C, 0x34, 0x5B, 0x31, 0x32, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x34, 0x35, 0x5D, 0x7C, 0x39, 0x5B, 0x30, 0x31, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x34, 0x5B, 0x32, 0x2D, 0x35, 0x39, 0x5D, 0x7C, 0x35, 0x36, 0x7C, 0x5B, 0x36, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x32, 0x09, 0x36, 0x36, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x22, 0x3D, 0x12, 0x29, 0x38, 0x30, 0x28, 0x3F, 0x3A, 0x30, 0x28, 0x3F, 0x3A, 0x30, 0x37, 0x7C, 0x32, 0x5B, 0x32, 0x33, 0x38, 0x5D, 0x7C, 0x37, 0x39, 0x7C, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x7C, 0x39, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x32, 0x07, 0x38, 0x30, 0x30, 0x32, 0x32, 0x32, 0x32, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x4F, 0x12, 0x3B, 0x39, 0x30, 0x28, 0x3F, 0x3A, 0x30, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x32, 0x37, 0x38, 0x5D, 0x7C, 0x37, 0x39, 0x7C, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x7C, 0x31, 0x28, 0x3F, 0x3A, 0x32, 0x33, 0x7C, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x36, 0x36, 0x7C, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x32, 0x07, 0x39, 0x30, 0x30, 0x32, 0x32, 0x32, 0x32, 0x3A, 0x1A, 0x12, 0x08, 0x37, 0x30, 0x31, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x37, 0x30, 0x31, 0x31, 0x32, 0x33, 0x34, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4C, 0x49, 0x50, 0xA7, 0x03, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x35, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x0E, 0x5B, 0x32, 0x33, 0x5D, 0x7C, 0x37, 0x5B, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x37, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x26, 0x0A, 0x13, 0x28, 0x36, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x36, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x30, 0x0A, 0x18, 0x28, 0x5B, 0x37, 0x2D, 0x39, 0x5D, 0x30, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x06, 0x5B, 0x37, 0x2D, 0x39, 0x5D, 0x30, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x39, 0x0A, 0x1E, 0x28, 0x5B, 0x38, 0x39, 0x5D, 0x30, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0C, 0x30, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x05, 0x5B, 0x38, 0x39, 0x5D, 0x30, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xD3, 0x02, 0x0A, 0x15, 0x12, 0x0A, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x12, 0x52, 0x12, 0x3C, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x38, 0x39, 0x5D, 0x31, 0x7C, 0x32, 0x5B, 0x31, 0x33, 0x2D, 0x37, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x35, 0x37, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x32, 0x34, 0x35, 0x37, 0x5D, 0x7C, 0x36, 0x5B, 0x33, 0x35, 0x2D, 0x37, 0x5D, 0x29, 0x5B, 0x32, 0x2D, 0x35, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x32, 0x09, 0x31, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x1A, 0x21, 0x12, 0x0D, 0x37, 0x5B, 0x31, 0x32, 0x35, 0x37, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x37, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4C, 0x4B, 0x50, 0x5E, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x31, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x31, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x07, 0x5B, 0x31, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2B, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x37, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xD0, 0x02, 0x0A, 0x21, 0x12, 0x16, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x37, 0x39, 0x5D, 0x5C, 0x64, 0x7C, 0x5B, 0x34, 0x2D, 0x36, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x12, 0x19, 0x12, 0x06, 0x32, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x1A, 0x34, 0x12, 0x20, 0x28, 0x3F, 0x3A, 0x34, 0x5B, 0x36, 0x37, 0x5D, 0x7C, 0x35, 0x5C, 0x64, 0x7C, 0x36, 0x5B, 0x34, 0x2D, 0x38, 0x5D, 0x7C, 0x37, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x32, 0x07, 0x34, 0x36, 0x31, 0x32, 0x33, 0x34, 0x35, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x1A, 0x12, 0x07, 0x39, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x39, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4C, 0x52, 0x50, 0xE7, 0x01, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x31, 0x0A, 0x17, 0x28, 0x5B, 0x32, 0x37, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x05, 0x5B, 0x32, 0x37, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2F, 0x0A, 0x15, 0x28, 0x5B, 0x34, 0x2D, 0x36, 0x5D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x05, 0x5B, 0x34, 0x2D, 0x36, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xE3, 0x01, 0x0A, 0x14, 0x12, 0x0B, 0x5B, 0x32, 0x35, 0x36, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x12, 0x19, 0x12, 0x06, 0x32, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x32, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x1A, 0x1C, 0x12, 0x09, 0x5B, 0x35, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x35, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x20, 0x12, 0x0D, 0x38, 0x30, 0x30, 0x5B, 0x32, 0x35, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x30, 0x30, 0x32, 0x31, 0x32, 0x33, 0x34, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4C, 0x53, 0x50, 0x8A, 0x02, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x1B, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xD5, 0x03, 0x0A, 0x13, 0x12, 0x0A, 0x5B, 0x33, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x12, 0x2F, 0x12, 0x1C, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x31, 0x34, 0x37, 0x38, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x32, 0x34, 0x2D, 0x36, 0x5D, 0x7C, 0x35, 0x32, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x33, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x1A, 0x19, 0x12, 0x06, 0x36, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x36, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x22, 0x1B, 0x12, 0x08, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x2A, 0x20, 0x12, 0x0D, 0x39, 0x30, 0x5B, 0x30, 0x32, 0x33, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x39, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4C, 0x54, 0x50, 0xF2, 0x02, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x38, 0x7A, 0x01, 0x38, 0x9A, 0x01, 0x4C, 0x0A, 0x1D, 0x28, 0x5B, 0x33, 0x34, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x16, 0x33, 0x37, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x31, 0x7C, 0x35, 0x5B, 0x34, 0x35, 0x5D, 0x7C, 0x36, 0x5B, 0x32, 0x2D, 0x34, 0x5D, 0x29, 0x22, 0x04, 0x38, 0x20, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x5D, 0x0A, 0x1C, 0x28, 0x5B, 0x33, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x2B, 0x33, 0x5B, 0x31, 0x34, 0x38, 0x5D, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x34, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x39, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x31, 0x38, 0x39, 0x5D, 0x7C, 0x32, 0x38, 0x29, 0x7C, 0x5B, 0x36, 0x38, 0x39, 0x5D, 0x22, 0x04, 0x38, 0x20, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x33, 0x0A, 0x15, 0x28, 0x35, 0x29, 0x28, 0x32, 0x5B, 0x30, 0x2D, 0x37, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x08, 0x35, 0x32, 0x5B, 0x30, 0x2D, 0x37, 0x39, 0x5D, 0x22, 0x04, 0x38, 0x20, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xE5, 0x0A, 0x0A, 0x3F, 0x12, 0x33, 0x5B, 0x32, 0x34, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x31, 0x30, 0x7D, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x2D, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x2C, 0x39, 0x7D, 0x7C, 0x35, 0x5B, 0x30, 0x31, 0x33, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x31, 0x2C, 0x38, 0x7D, 0x29, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x31, 0x31, 0x7D, 0x12, 0xFD, 0x02, 0x12, 0xE6, 0x02, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x32, 0x5C, 0x64, 0x7B, 0x31, 0x2C, 0x32, 0x7D, 0x7C, 0x33, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x36, 0x37, 0x5D, 0x5C, 0x64, 0x7C, 0x34, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x3F, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x35, 0x5D, 0x5C, 0x64, 0x3F, 0x7C, 0x39, 0x5B, 0x30, 0x2D, 0x32, 0x34, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x3F, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x35, 0x39, 0x5D, 0x5B, 0x30, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x31, 0x33, 0x5D, 0x5C, 0x64, 0x7C, 0x5B, 0x32, 0x36, 0x5D, 0x5B, 0x30, 0x31, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x2D, 0x32, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x2D, 0x33, 0x38, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x38, 0x5D, 0x29, 0x5C, 0x64, 0x3F, 0x7C, 0x34, 0x5C, 0x64, 0x7B, 0x32, 0x2C, 0x33, 0x7D, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x31, 0x34, 0x35, 0x38, 0x5D, 0x5C, 0x64, 0x7C, 0x5B, 0x32, 0x37, 0x5D, 0x5B, 0x30, 0x2D, 0x36, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x2D, 0x33, 0x5D, 0x7C, 0x5B, 0x36, 0x39, 0x5D, 0x5B, 0x30, 0x2D, 0x37, 0x5D, 0x29, 0x5C, 0x64, 0x3F, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x30, 0x31, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x35, 0x5D, 0x7C, 0x5B, 0x34, 0x35, 0x5D, 0x5B, 0x30, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x36, 0x37, 0x39, 0x5D, 0x5B, 0x30, 0x38, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x36, 0x2D, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x3F, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x31, 0x5B, 0x30, 0x2D, 0x33, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x33, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x34, 0x36, 0x39, 0x5D, 0x39, 0x7C, 0x5B, 0x35, 0x38, 0x5D, 0x5B, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x38, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x3F, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x38, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x2D, 0x34, 0x39, 0x5D, 0x7C, 0x33, 0x37, 0x7C, 0x34, 0x39, 0x7C, 0x35, 0x5B, 0x30, 0x2D, 0x32, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x30, 0x2D, 0x34, 0x37, 0x38, 0x5D, 0x29, 0x5C, 0x64, 0x3F, 0x29, 0x5C, 0x64, 0x7B, 0x31, 0x2C, 0x37, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x31, 0x31, 0x7D, 0x32, 0x08, 0x32, 0x37, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x1A, 0x23, 0x12, 0x0F, 0x36, 0x5B, 0x32, 0x36, 0x39, 0x5D, 0x5B, 0x31, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x36, 0x32, 0x38, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x1B, 0x12, 0x08, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x2A, 0x1E, 0x12, 0x0B, 0x39, 0x30, 0x5B, 0x30, 0x31, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x39, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x32, 0x1B, 0x12, 0x08, 0x38, 0x30, 0x31, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x30, 0x31, 0x31, 0x32, 0x33, 0x34, 0x35, 0x3A, 0x1A, 0x12, 0x07, 0x37, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x37, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x42, 0x1E, 0x12, 0x09, 0x32, 0x30, 0x5C, 0x64, 0x7B, 0x32, 0x2C, 0x38, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x07, 0x32, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x4A, 0x02, 0x4C, 0x55, 0x50, 0xE0, 0x02, 0x5A, 0x02, 0x30, 0x30, 0x7A, 0x30, 0x28, 0x31, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x36, 0x5D, 0x7C, 0x31, 0x5B, 0x31, 0x32, 0x5D, 0x7C, 0x33, 0x35, 0x7C, 0x34, 0x5B, 0x30, 0x34, 0x5D, 0x7C, 0x35, 0x35, 0x7C, 0x36, 0x5B, 0x32, 0x36, 0x5D, 0x7C, 0x37, 0x37, 0x7C, 0x38, 0x38, 0x7C, 0x39, 0x39, 0x29, 0x5C, 0x64, 0x29, 0x9A, 0x01, 0x45, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x22, 0x5B, 0x32, 0x33, 0x2D, 0x35, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x38, 0x39, 0x5D, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x30, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x29, 0x22, 0x00, 0x2A, 0x06, 0x24, 0x43, 0x43, 0x20, 0x24, 0x31, 0x9A, 0x01, 0x4F, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x22, 0x5B, 0x32, 0x33, 0x2D, 0x35, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x38, 0x39, 0x5D, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x30, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x29, 0x22, 0x00, 0x2A, 0x06, 0x24, 0x43, 0x43, 0x20, 0x24, 0x31, 0x9A, 0x01, 0x2F, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x02, 0x32, 0x30, 0x22, 0x00, 0x2A, 0x06, 0x24, 0x43, 0x43, 0x20, 0x24, 0x31, 0x9A, 0x01, 0x4B, 0x0A, 0x1E, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x31, 0x2C, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x12, 0x32, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x33, 0x36, 0x37, 0x5D, 0x7C, 0x34, 0x5B, 0x33, 0x2D, 0x38, 0x5D, 0x29, 0x22, 0x00, 0x2A, 0x06, 0x24, 0x43, 0x43, 0x20, 0x24, 0x31, 0x9A, 0x01, 0x39, 0x0A, 0x1C, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x02, 0x32, 0x30, 0x22, 0x00, 0x2A, 0x06, 0x24, 0x43, 0x43, 0x20, 0x24, 0x31, 0x9A, 0x01, 0x55, 0x0A, 0x25, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x31, 0x2C, 0x32, 0x7D, 0x29, 0x12, 0x0E, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x20, 0x24, 0x35, 0x1A, 0x12, 0x32, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x33, 0x36, 0x37, 0x5D, 0x7C, 0x34, 0x5B, 0x33, 0x2D, 0x38, 0x5D, 0x29, 0x22, 0x00, 0x2A, 0x06, 0x24, 0x43, 0x43, 0x20, 0x24, 0x31, 0x9A, 0x01, 0x6D, 0x0A, 0x1E, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x31, 0x2C, 0x34, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x34, 0x32, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x32, 0x35, 0x38, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x32, 0x5D, 0x29, 0x7C, 0x5B, 0x33, 0x2D, 0x35, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x38, 0x39, 0x5D, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x30, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x29, 0x22, 0x00, 0x2A, 0x06, 0x24, 0x43, 0x43, 0x20, 0x24, 0x31, 0x9A, 0x01, 0x39, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x0C, 0x5B, 0x38, 0x39, 0x5D, 0x30, 0x5B, 0x30, 0x31, 0x5D, 0x7C, 0x37, 0x30, 0x22, 0x00, 0x2A, 0x06, 0x24, 0x43, 0x43, 0x20, 0x24, 0x31, 0x9A, 0x01, 0x2E, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x36, 0x22, 0x00, 0x2A, 0x06, 0x24, 0x43, 0x43, 0x20, 0x24, 0x31, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xF9, 0x01, 0x0A, 0x14, 0x12, 0x0B, 0x5B, 0x32, 0x36, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x12, 0x19, 0x12, 0x06, 0x36, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x36, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x1A, 0x19, 0x12, 0x06, 0x32, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x22, 0x1A, 0x12, 0x07, 0x38, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x1A, 0x12, 0x07, 0x39, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x39, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4C, 0x56, 0x50, 0xF3, 0x02, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x28, 0x0A, 0x18, 0x28, 0x5B, 0x32, 0x36, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x80, 0x02, 0x0A, 0x17, 0x12, 0x0C, 0x5B, 0x32, 0x35, 0x36, 0x37, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x12, 0x3B, 0x12, 0x25, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x31, 0x33, 0x34, 0x35, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x33, 0x34, 0x37, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x32, 0x33, 0x34, 0x37, 0x39, 0x5D, 0x7C, 0x37, 0x31, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x32, 0x09, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x1A, 0x1F, 0x12, 0x0B, 0x39, 0x5B, 0x31, 0x2D, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x39, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4C, 0x59, 0x50, 0xDA, 0x01, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x22, 0x0A, 0x12, 0x28, 0x5B, 0x32, 0x35, 0x36, 0x37, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x90, 0x05, 0x0A, 0x14, 0x12, 0x0B, 0x5B, 0x35, 0x36, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x12, 0x9E, 0x01, 0x12, 0x89, 0x01, 0x35, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x31, 0x35, 0x2D, 0x37, 0x5D, 0x5C, 0x64, 0x7C, 0x32, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x32, 0x2D, 0x35, 0x37, 0x5D, 0x7C, 0x34, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x7C, 0x38, 0x5B, 0x32, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x29, 0x5C, 0x64, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x30, 0x5C, 0x64, 0x7C, 0x5B, 0x38, 0x39, 0x5D, 0x30, 0x29, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x2D, 0x34, 0x5D, 0x5C, 0x64, 0x7C, 0x5B, 0x35, 0x37, 0x5D, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x32, 0x33, 0x35, 0x2D, 0x38, 0x5D, 0x7C, 0x39, 0x5B, 0x33, 0x2D, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x30, 0x5C, 0x64, 0x7C, 0x5B, 0x38, 0x39, 0x5D, 0x30, 0x29, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x35, 0x32, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x1A, 0x39, 0x12, 0x25, 0x36, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x36, 0x5D, 0x7C, 0x5B, 0x31, 0x34, 0x2D, 0x37, 0x5D, 0x5C, 0x64, 0x7C, 0x32, 0x5B, 0x32, 0x33, 0x36, 0x5D, 0x7C, 0x33, 0x33, 0x7C, 0x39, 0x39, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x36, 0x35, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x1B, 0x12, 0x07, 0x38, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x2A, 0x1B, 0x12, 0x07, 0x38, 0x39, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x39, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4D, 0x41, 0x50, 0xD4, 0x01, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x3A, 0x0A, 0x12, 0x28, 0x5B, 0x35, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x1A, 0x16, 0x35, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x30, 0x31, 0x35, 0x2D, 0x37, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x2D, 0x34, 0x5D, 0x29, 0x7C, 0x36, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x64, 0x0A, 0x12, 0x28, 0x5B, 0x35, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x1A, 0x18, 0x35, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x32, 0x2D, 0x34, 0x38, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x35, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x38, 0x39, 0x32, 0x1A, 0x26, 0x35, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x2D, 0x34, 0x38, 0x5D, 0x7C, 0x39, 0x30, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x5B, 0x35, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x38, 0x30, 0x29, 0x29, 0x7C, 0x38, 0x39, 0x32, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x3B, 0x0A, 0x0F, 0x28, 0x35, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x1A, 0x0A, 0x35, 0x28, 0x3F, 0x3A, 0x32, 0x39, 0x7C, 0x33, 0x38, 0x29, 0x1A, 0x0E, 0x35, 0x28, 0x3F, 0x3A, 0x32, 0x39, 0x7C, 0x33, 0x38, 0x29, 0x5B, 0x38, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2F, 0x0A, 0x0E, 0x28, 0x38, 0x5B, 0x30, 0x39, 0x5D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x1A, 0x0F, 0x38, 0x28, 0x3F, 0x3A, 0x30, 0x7C, 0x39, 0x5B, 0x30, 0x31, 0x33, 0x2D, 0x39, 0x5D, 0x29, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x8E, 0x03, 0x0A, 0x18, 0x12, 0x0D, 0x5B, 0x34, 0x36, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x38, 0x2C, 0x39, 0x7D, 0x12, 0x21, 0x12, 0x0E, 0x39, 0x5B, 0x32, 0x2D, 0x34, 0x37, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x39, 0x39, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x1A, 0x23, 0x12, 0x0D, 0x36, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x7C, 0x34, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x38, 0x2C, 0x39, 0x7D, 0x32, 0x09, 0x36, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x22, 0x22, 0x12, 0x0F, 0x28, 0x3F, 0x3A, 0x38, 0x5C, 0x64, 0x7C, 0x39, 0x30, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x39, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4D, 0x43, 0x50, 0xF9, 0x02, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x38, 0x0A, 0x1C, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x04, 0x5B, 0x38, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2B, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x34, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x3B, 0x0A, 0x1F, 0x28, 0x36, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0E, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x20, 0x24, 0x35, 0x1A, 0x01, 0x36, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x0F, 0x12, 0x06, 0x38, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xEC, 0x03, 0x0A, 0x15, 0x12, 0x0C, 0x5B, 0x32, 0x35, 0x36, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x12, 0x76, 0x12, 0x61, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x30, 0x35, 0x36, 0x39, 0x5D, 0x7C, 0x32, 0x5C, 0x64, 0x7C, 0x33, 0x5B, 0x30, 0x31, 0x35, 0x2D, 0x37, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x2D, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x2D, 0x32, 0x34, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x32, 0x2D, 0x35, 0x38, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x2D, 0x33, 0x37, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x33, 0x34, 0x37, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x33, 0x33, 0x7C, 0x35, 0x5B, 0x32, 0x35, 0x37, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x38, 0x7D, 0x32, 0x08, 0x32, 0x32, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x1A, 0x3C, 0x12, 0x29, 0x28, 0x3F, 0x3A, 0x36, 0x28, 0x3F, 0x3A, 0x35, 0x30, 0x7C, 0x37, 0x5B, 0x31, 0x32, 0x5D, 0x7C, 0x5B, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x38, 0x30, 0x7C, 0x39, 0x5C, 0x64, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x36, 0x35, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x22, 0x1B, 0x12, 0x08, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x2A, 0x1B, 0x12, 0x08, 0x39, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x39, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4D, 0x44, 0x50, 0xF5, 0x02, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x29, 0x0A, 0x12, 0x28, 0x32, 0x32, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x02, 0x32, 0x32, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x3E, 0x0A, 0x1B, 0x28, 0x5B, 0x32, 0x35, 0x2D, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x0E, 0x32, 0x5B, 0x31, 0x33, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x5B, 0x35, 0x2D, 0x37, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x25, 0x0A, 0x0F, 0x28, 0x5B, 0x38, 0x39, 0x5D, 0x30, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x04, 0x5B, 0x38, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xD2, 0x04, 0x0A, 0x17, 0x12, 0x0C, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x39, 0x7D, 0x12, 0x73, 0x12, 0x5E, 0x28, 0x3F, 0x3A, 0x32, 0x30, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x32, 0x2D, 0x37, 0x5D, 0x7C, 0x31, 0x5B, 0x33, 0x35, 0x2D, 0x37, 0x5D, 0x7C, 0x32, 0x5B, 0x33, 0x36, 0x37, 0x5D, 0x7C, 0x33, 0x5B, 0x34, 0x2D, 0x37, 0x5D, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x32, 0x33, 0x37, 0x5D, 0x7C, 0x31, 0x5B, 0x32, 0x34, 0x36, 0x37, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x34, 0x37, 0x5D, 0x7C, 0x31, 0x5B, 0x32, 0x37, 0x5D, 0x7C, 0x32, 0x5B, 0x33, 0x37, 0x38, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x38, 0x7D, 0x32, 0x08, 0x33, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x1A, 0x4D, 0x12, 0x38, 0x36, 0x28, 0x3F, 0x3A, 0x33, 0x32, 0x5C, 0x64, 0x7C, 0x5B, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x5B, 0x33, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x30, 0x2D, 0x32, 0x5D, 0x5C, 0x64, 0x29, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x38, 0x2C, 0x39, 0x7D, 0x32, 0x08, 0x36, 0x37, 0x36, 0x32, 0x32, 0x39, 0x30, 0x31, 0x22, 0x1F, 0x12, 0x0C, 0x38, 0x30, 0x30, 0x5B, 0x32, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x30, 0x30, 0x38, 0x30, 0x30, 0x30, 0x32, 0x2A, 0x35, 0x12, 0x22, 0x28, 0x3F, 0x3A, 0x38, 0x38, 0x5C, 0x64, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x34, 0x5B, 0x31, 0x33, 0x2D, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x36, 0x2D, 0x38, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x39, 0x34, 0x35, 0x31, 0x35, 0x31, 0x35, 0x31, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x22, 0x12, 0x0F, 0x37, 0x38, 0x5B, 0x31, 0x33, 0x34, 0x35, 0x37, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x37, 0x38, 0x31, 0x30, 0x38, 0x37, 0x38, 0x30, 0x4A, 0x02, 0x4D, 0x45, 0x50, 0xFE, 0x02, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x61, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x10, 0x5B, 0x32, 0x2D, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x33, 0x37, 0x38, 0x39, 0x5D, 0x1A, 0x25, 0x5B, 0x32, 0x2D, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x5B, 0x33, 0x38, 0x39, 0x5D, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x2D, 0x38, 0x5D, 0x7C, 0x39, 0x5B, 0x33, 0x2D, 0x39, 0x5D, 0x29, 0x29, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x3A, 0x0A, 0x15, 0x28, 0x36, 0x37, 0x29, 0x28, 0x39, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x03, 0x36, 0x37, 0x39, 0x1A, 0x08, 0x36, 0x37, 0x39, 0x5B, 0x30, 0x2D, 0x32, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x1A, 0x12, 0x07, 0x37, 0x37, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x37, 0x37, 0x32, 0x37, 0x33, 0x30, 0x31, 0x32, 0x0A, 0xBD, 0x02, 0x0A, 0x14, 0x12, 0x09, 0x5B, 0x32, 0x33, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x12, 0x69, 0x12, 0x53, 0x32, 0x28, 0x3F, 0x3A, 0x30, 0x28, 0x3F, 0x3A, 0x28, 0x3F, 0x3A, 0x32, 0x5C, 0x64, 0x7C, 0x34, 0x5B, 0x34, 0x37, 0x5D, 0x7C, 0x35, 0x5B, 0x33, 0x34, 0x36, 0x37, 0x5D, 0x7C, 0x36, 0x5B, 0x32, 0x37, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x32, 0x36, 0x38, 0x5D, 0x7C, 0x39, 0x5B, 0x32, 0x34, 0x35, 0x5D, 0x29, 0x5C, 0x64, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x32, 0x39, 0x5D, 0x7C, 0x5B, 0x33, 0x35, 0x5D, 0x5C, 0x64, 0x29, 0x29, 0x7C, 0x32, 0x31, 0x30, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x32, 0x09, 0x32, 0x30, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x1A, 0x20, 0x12, 0x0C, 0x33, 0x5B, 0x30, 0x32, 0x2D, 0x34, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x33, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4D, 0x47, 0x50, 0x85, 0x02, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x33, 0x0A, 0x1D, 0x28, 0x5B, 0x32, 0x33, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xE5, 0x01, 0x0A, 0x12, 0x12, 0x09, 0x5B, 0x35, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x12, 0x35, 0x12, 0x21, 0x35, 0x39, 0x30, 0x28, 0x3F, 0x3A, 0x31, 0x30, 0x7C, 0x32, 0x5B, 0x37, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x32, 0x38, 0x5D, 0x7C, 0x5B, 0x37, 0x38, 0x5D, 0x37, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x35, 0x39, 0x30, 0x32, 0x37, 0x31, 0x32, 0x33, 0x34, 0x1A, 0x34, 0x12, 0x20, 0x36, 0x39, 0x30, 0x28, 0x3F, 0x3A, 0x31, 0x30, 0x7C, 0x32, 0x5B, 0x32, 0x37, 0x5D, 0x7C, 0x36, 0x36, 0x7C, 0x37, 0x37, 0x7C, 0x38, 0x5B, 0x37, 0x38, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x36, 0x39, 0x30, 0x32, 0x32, 0x31, 0x32, 0x33, 0x34, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4D, 0x46, 0x50, 0xCE, 0x04, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x6E, 0x0A, 0x00, 0x12, 0x00, 0x1A, 0x00, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4D, 0x48, 0x50, 0xB4, 0x05, 0x5A, 0x03, 0x30, 0x31, 0x31, 0x62, 0x01, 0x31, 0x7A, 0x01, 0x31, 0x90, 0x01, 0x01, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x8F, 0x04, 0x0A, 0x15, 0x12, 0x0C, 0x5B, 0x32, 0x2D, 0x35, 0x37, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x12, 0x87, 0x01, 0x12, 0x72, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x33, 0x5D, 0x5C, 0x64, 0x7C, 0x35, 0x5B, 0x31, 0x32, 0x35, 0x5D, 0x7C, 0x36, 0x31, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x33, 0x2D, 0x36, 0x5D, 0x7C, 0x32, 0x5B, 0x32, 0x2D, 0x36, 0x5D, 0x7C, 0x33, 0x5B, 0x32, 0x2D, 0x35, 0x5D, 0x7C, 0x34, 0x5B, 0x32, 0x33, 0x35, 0x5D, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x33, 0x5D, 0x5B, 0x32, 0x2D, 0x36, 0x5D, 0x7C, 0x34, 0x5B, 0x33, 0x2D, 0x36, 0x5D, 0x7C, 0x35, 0x5B, 0x32, 0x35, 0x5D, 0x7C, 0x36, 0x5B, 0x32, 0x35, 0x2D, 0x38, 0x5D, 0x7C, 0x37, 0x5B, 0x32, 0x34, 0x2D, 0x36, 0x5D, 0x7C, 0x38, 0x5B, 0x34, 0x2D, 0x36, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x38, 0x7D, 0x32, 0x08, 0x32, 0x32, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x1A, 0x21, 0x12, 0x0E, 0x37, 0x5B, 0x30, 0x2D, 0x32, 0x35, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x37, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x22, 0x1B, 0x12, 0x08, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x2A, 0x1F, 0x12, 0x0C, 0x35, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x35, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x32, 0x2B, 0x12, 0x18, 0x38, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4D, 0x4B, 0x50, 0x85, 0x03, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x27, 0x0A, 0x11, 0x28, 0x32, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x32, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x31, 0x0A, 0x17, 0x28, 0x5B, 0x33, 0x34, 0x37, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x05, 0x5B, 0x33, 0x34, 0x37, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x39, 0x0A, 0x1D, 0x28, 0x5B, 0x35, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x04, 0x5B, 0x35, 0x38, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xEB, 0x02, 0x0A, 0x15, 0x12, 0x0C, 0x5B, 0x32, 0x34, 0x36, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x12, 0x53, 0x12, 0x40, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x30, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x30, 0x2D, 0x35, 0x38, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x32, 0x37, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x31, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x35, 0x2D, 0x37, 0x5D, 0x7C, 0x5B, 0x33, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x29, 0x7C, 0x34, 0x34, 0x32, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x32, 0x30, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x1A, 0x50, 0x12, 0x3D, 0x28, 0x3F, 0x3A, 0x36, 0x28, 0x3F, 0x3A, 0x5B, 0x35, 0x36, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x38, 0x5D, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x33, 0x35, 0x37, 0x39, 0x5D, 0x5B, 0x30, 0x2D, 0x34, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x31, 0x34, 0x2D, 0x37, 0x5D, 0x7C, 0x36, 0x5C, 0x64, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x36, 0x35, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x22, 0x1B, 0x12, 0x08, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4D, 0x4C, 0x50, 0xDF, 0x01, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x33, 0x0A, 0x20, 0x28, 0x5B, 0x32, 0x34, 0x36, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x84, 0x04, 0x0A, 0x22, 0x12, 0x17, 0x5B, 0x31, 0x32, 0x34, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x37, 0x7D, 0x7C, 0x39, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x39, 0x7D, 0x12, 0x4C, 0x12, 0x38, 0x28, 0x3F, 0x3A, 0x31, 0x5C, 0x64, 0x7C, 0x32, 0x7C, 0x34, 0x5B, 0x32, 0x2D, 0x36, 0x5D, 0x7C, 0x35, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x5C, 0x64, 0x7C, 0x37, 0x5B, 0x30, 0x2D, 0x35, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x2D, 0x36, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x7C, 0x31, 0x33, 0x33, 0x33, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x38, 0x7D, 0x32, 0x07, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x1A, 0x2C, 0x12, 0x17, 0x39, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x35, 0x36, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7C, 0x34, 0x34, 0x34, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x38, 0x2C, 0x39, 0x7D, 0x32, 0x08, 0x39, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4D, 0x4D, 0x50, 0x5F, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x24, 0x0A, 0x11, 0x28, 0x31, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x31, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x31, 0x0A, 0x13, 0x28, 0x31, 0x29, 0x28, 0x33, 0x29, 0x28, 0x33, 0x33, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x03, 0x31, 0x33, 0x33, 0x1A, 0x04, 0x31, 0x33, 0x33, 0x33, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x24, 0x0A, 0x11, 0x28, 0x32, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x32, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x2C, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x05, 0x5B, 0x34, 0x2D, 0x38, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x1E, 0x0A, 0x0D, 0x28, 0x39, 0x34, 0x34, 0x34, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x02, 0x39, 0x34, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x32, 0x0A, 0x18, 0x28, 0x39, 0x29, 0x28, 0x5B, 0x32, 0x35, 0x36, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x08, 0x39, 0x5B, 0x32, 0x35, 0x36, 0x38, 0x39, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xF2, 0x04, 0x0A, 0x23, 0x12, 0x17, 0x5B, 0x31, 0x32, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x7C, 0x5B, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x31, 0x30, 0x7D, 0x12, 0x7A, 0x12, 0x64, 0x5B, 0x31, 0x32, 0x5D, 0x28, 0x3F, 0x3A, 0x31, 0x5C, 0x64, 0x7C, 0x32, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x2D, 0x33, 0x5D, 0x5C, 0x64, 0x3F, 0x7C, 0x37, 0x5C, 0x64, 0x29, 0x7C, 0x33, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x31, 0x2C, 0x32, 0x7D, 0x7C, 0x34, 0x5B, 0x32, 0x2D, 0x36, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x31, 0x2C, 0x32, 0x7D, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x34, 0x36, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x31, 0x2C, 0x32, 0x7D, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x7C, 0x28, 0x3F, 0x3A, 0x35, 0x5B, 0x30, 0x35, 0x36, 0x38, 0x5D, 0x7C, 0x37, 0x30, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x08, 0x37, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x1A, 0x2A, 0x12, 0x17, 0x28, 0x3F, 0x3A, 0x38, 0x5B, 0x38, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x35, 0x36, 0x38, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x38, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x1E, 0x12, 0x0B, 0x37, 0x5B, 0x35, 0x36, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x37, 0x35, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x4A, 0x02, 0x4D, 0x4E, 0x50, 0xD0, 0x07, 0x5A, 0x03, 0x30, 0x30, 0x31, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x30, 0x0A, 0x16, 0x28, 0x5B, 0x31, 0x32, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x05, 0x5B, 0x31, 0x32, 0x5D, 0x31, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2E, 0x0A, 0x12, 0x28, 0x5B, 0x31, 0x32, 0x5D, 0x32, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x36, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x0A, 0x5B, 0x31, 0x32, 0x5D, 0x32, 0x5B, 0x31, 0x2D, 0x33, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x49, 0x0A, 0x12, 0x28, 0x5B, 0x31, 0x32, 0x5D, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x10, 0x5B, 0x31, 0x32, 0x5D, 0x28, 0x3F, 0x3A, 0x32, 0x37, 0x7C, 0x5B, 0x33, 0x2D, 0x35, 0x5D, 0x29, 0x1A, 0x13, 0x5B, 0x31, 0x32, 0x5D, 0x28, 0x3F, 0x3A, 0x32, 0x37, 0x7C, 0x5B, 0x33, 0x2D, 0x35, 0x5D, 0x5C, 0x64, 0x29, 0x32, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x25, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x06, 0x5B, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x22, 0x02, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x4F, 0x0A, 0x14, 0x28, 0x5B, 0x31, 0x32, 0x5D, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x35, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x10, 0x5B, 0x31, 0x32, 0x5D, 0x28, 0x3F, 0x3A, 0x32, 0x37, 0x7C, 0x5B, 0x33, 0x2D, 0x35, 0x5D, 0x29, 0x1A, 0x17, 0x5B, 0x31, 0x32, 0x5D, 0x28, 0x3F, 0x3A, 0x32, 0x37, 0x7C, 0x5B, 0x33, 0x2D, 0x35, 0x5D, 0x5C, 0x64, 0x29, 0x5B, 0x34, 0x2D, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xE9, 0x01, 0x0A, 0x13, 0x12, 0x0A, 0x5B, 0x32, 0x36, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x12, 0x32, 0x12, 0x1F, 0x28, 0x3F, 0x3A, 0x32, 0x38, 0x5B, 0x32, 0x2D, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x32, 0x2D, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x32, 0x38, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x1A, 0x1D, 0x12, 0x0A, 0x36, 0x5B, 0x32, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x36, 0x36, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4D, 0x4F, 0x50, 0xD5, 0x06, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x20, 0x0A, 0x13, 0x28, 0x5B, 0x32, 0x36, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xB6, 0x03, 0x0A, 0x1E, 0x12, 0x0B, 0x5B, 0x35, 0x36, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x12, 0x5D, 0x12, 0x3E, 0x36, 0x37, 0x30, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x33, 0x2D, 0x35, 0x5D, 0x7C, 0x38, 0x38, 0x7C, 0x35, 0x36, 0x29, 0x7C, 0x33, 0x32, 0x5B, 0x32, 0x33, 0x5D, 0x7C, 0x34, 0x5B, 0x33, 0x38, 0x5D, 0x33, 0x7C, 0x35, 0x33, 0x32, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x36, 0x34, 0x7C, 0x37, 0x30, 0x7C, 0x38, 0x5C, 0x64, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x32, 0x0A, 0x36, 0x37, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x1A, 0x5D, 0x12, 0x3E, 0x36, 0x37, 0x30, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x33, 0x2D, 0x35, 0x5D, 0x7C, 0x38, 0x38, 0x7C, 0x35, 0x36, 0x29, 0x7C, 0x33, 0x32, 0x5B, 0x32, 0x33, 0x5D, 0x7C, 0x34, 0x5B, 0x33, 0x38, 0x5D, 0x33, 0x7C, 0x35, 0x33, 0x32, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x36, 0x34, 0x7C, 0x37, 0x30, 0x7C, 0x38, 0x5C, 0x64, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x32, 0x0A, 0x36, 0x37, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x22, 0x33, 0x12, 0x1D, 0x38, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x35, 0x35, 0x7C, 0x36, 0x36, 0x7C, 0x37, 0x37, 0x7C, 0x38, 0x38, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x30, 0x30, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x23, 0x12, 0x0D, 0x39, 0x30, 0x30, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x39, 0x30, 0x30, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x2D, 0x12, 0x17, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x33, 0x33, 0x7C, 0x34, 0x34, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x35, 0x30, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4D, 0x50, 0x50, 0x01, 0x5A, 0x03, 0x30, 0x31, 0x31, 0x62, 0x01, 0x31, 0x7A, 0x01, 0x31, 0x90, 0x01, 0x01, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xBA, 0x01, 0x03, 0x36, 0x37, 0x30, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x6D, 0x0A, 0x00, 0x12, 0x00, 0x1A, 0x00, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4D, 0x51, 0x50, 0xD4, 0x04, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x90, 0x01, 0x01, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xCC, 0x02, 0x0A, 0x14, 0x12, 0x0B, 0x5B, 0x32, 0x2D, 0x34, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x12, 0x33, 0x12, 0x20, 0x32, 0x35, 0x5B, 0x30, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x7C, 0x33, 0x35, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x7C, 0x34, 0x35, 0x5B, 0x31, 0x2D, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x33, 0x35, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x1A, 0x59, 0x12, 0x46, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x32, 0x5C, 0x64, 0x7C, 0x37, 0x30, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x33, 0x5C, 0x64, 0x7C, 0x36, 0x5B, 0x31, 0x2D, 0x33, 0x36, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x2D, 0x33, 0x5D, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x34, 0x5C, 0x64, 0x7C, 0x36, 0x5B, 0x30, 0x34, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x34, 0x2D, 0x39, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x32, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x1B, 0x12, 0x08, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4D, 0x52, 0x50, 0xDE, 0x01, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x32, 0x0A, 0x1F, 0x28, 0x5B, 0x32, 0x2D, 0x34, 0x38, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xC4, 0x02, 0x0A, 0x1E, 0x12, 0x0B, 0x5B, 0x35, 0x36, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x12, 0x2A, 0x12, 0x0B, 0x36, 0x36, 0x34, 0x34, 0x39, 0x31, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x32, 0x0A, 0x36, 0x36, 0x34, 0x34, 0x39, 0x31, 0x32, 0x33, 0x34, 0x35, 0x1A, 0x21, 0x12, 0x0B, 0x36, 0x36, 0x34, 0x34, 0x39, 0x32, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x36, 0x36, 0x34, 0x34, 0x39, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x33, 0x12, 0x1D, 0x38, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x35, 0x35, 0x7C, 0x36, 0x36, 0x7C, 0x37, 0x37, 0x7C, 0x38, 0x38, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x30, 0x30, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x23, 0x12, 0x0D, 0x39, 0x30, 0x30, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x39, 0x30, 0x30, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x2D, 0x12, 0x17, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x33, 0x33, 0x7C, 0x34, 0x34, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x35, 0x30, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4D, 0x53, 0x50, 0x01, 0x5A, 0x03, 0x30, 0x31, 0x31, 0x62, 0x01, 0x31, 0x7A, 0x01, 0x31, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xBA, 0x01, 0x03, 0x36, 0x36, 0x34, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xF8, 0x02, 0x0A, 0x14, 0x12, 0x0B, 0x5B, 0x32, 0x35, 0x37, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x12, 0x3C, 0x12, 0x29, 0x32, 0x28, 0x3F, 0x3A, 0x30, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x30, 0x2D, 0x36, 0x5D, 0x7C, 0x5B, 0x36, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x7C, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x32, 0x31, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x1A, 0x59, 0x12, 0x46, 0x28, 0x3F, 0x3A, 0x37, 0x28, 0x3F, 0x3A, 0x32, 0x31, 0x30, 0x7C, 0x5B, 0x37, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x7C, 0x29, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x31, 0x33, 0x5D, 0x5C, 0x64, 0x7C, 0x36, 0x39, 0x36, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x31, 0x2D, 0x33, 0x5D, 0x7C, 0x38, 0x39, 0x7C, 0x39, 0x37, 0x29, 0x7C, 0x39, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x39, 0x36, 0x39, 0x36, 0x31, 0x32, 0x33, 0x34, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x41, 0x12, 0x2E, 0x35, 0x30, 0x28, 0x3F, 0x3A, 0x30, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x31, 0x36, 0x37, 0x39, 0x5D, 0x7C, 0x34, 0x5C, 0x64, 0x29, 0x7C, 0x5B, 0x31, 0x36, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x7C, 0x37, 0x5B, 0x30, 0x36, 0x5D, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x35, 0x30, 0x30, 0x33, 0x31, 0x32, 0x33, 0x34, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4D, 0x54, 0x50, 0xE4, 0x02, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x1B, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x1C, 0x12, 0x09, 0x37, 0x31, 0x31, 0x37, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x37, 0x31, 0x31, 0x37, 0x31, 0x32, 0x33, 0x34, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x85, 0x03, 0x0A, 0x13, 0x12, 0x0A, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x12, 0x68, 0x12, 0x56, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x33, 0x34, 0x37, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7C, 0x31, 0x5B, 0x30, 0x2D, 0x38, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x2D, 0x37, 0x39, 0x5D, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x31, 0x33, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x7C, 0x32, 0x5B, 0x34, 0x2D, 0x37, 0x5D, 0x29, 0x7C, 0x5B, 0x35, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x31, 0x34, 0x7C, 0x33, 0x5B, 0x31, 0x32, 0x39, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x32, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x1A, 0x4A, 0x12, 0x38, 0x28, 0x3F, 0x3A, 0x32, 0x35, 0x5C, 0x64, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x31, 0x32, 0x33, 0x38, 0x39, 0x5D, 0x7C, 0x39, 0x5C, 0x64, 0x29, 0x7C, 0x37, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x7C, 0x38, 0x37, 0x5B, 0x31, 0x35, 0x2D, 0x37, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x32, 0x35, 0x31, 0x32, 0x33, 0x34, 0x35, 0x22, 0x1E, 0x12, 0x0C, 0x38, 0x30, 0x5B, 0x30, 0x31, 0x32, 0x5D, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x2A, 0x19, 0x12, 0x07, 0x33, 0x30, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x33, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4D, 0x55, 0x50, 0xE6, 0x01, 0x5A, 0x0E, 0x30, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x2D, 0x37, 0x5D, 0x30, 0x7C, 0x33, 0x33, 0x29, 0x8A, 0x01, 0x03, 0x30, 0x32, 0x30, 0x9A, 0x01, 0x20, 0x0A, 0x13, 0x28, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x9A, 0x03, 0x0A, 0x29, 0x12, 0x1D, 0x5B, 0x33, 0x36, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x7C, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x29, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x31, 0x30, 0x7D, 0x12, 0x4D, 0x12, 0x3B, 0x28, 0x3F, 0x3A, 0x33, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x31, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x2D, 0x35, 0x39, 0x5D, 0x7C, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x5B, 0x35, 0x36, 0x37, 0x5D, 0x5B, 0x30, 0x32, 0x34, 0x36, 0x38, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x32, 0x34, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x39, 0x30, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x36, 0x37, 0x30, 0x31, 0x32, 0x33, 0x34, 0x1A, 0x28, 0x12, 0x16, 0x28, 0x3F, 0x3A, 0x37, 0x5B, 0x33, 0x2D, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x36, 0x2D, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x37, 0x37, 0x31, 0x32, 0x33, 0x34, 0x35, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x1E, 0x12, 0x08, 0x39, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x39, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4D, 0x56, 0x50, 0xC0, 0x07, 0x5A, 0x09, 0x30, 0x28, 0x3F, 0x3A, 0x30, 0x7C, 0x31, 0x39, 0x29, 0x8A, 0x01, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x34, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x1A, 0x17, 0x5B, 0x33, 0x36, 0x37, 0x5D, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x30, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x29, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x2A, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x03, 0x39, 0x30, 0x30, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x1A, 0x12, 0x08, 0x37, 0x38, 0x31, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x37, 0x38, 0x31, 0x32, 0x33, 0x34, 0x35, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xBF, 0x03, 0x0A, 0x33, 0x12, 0x28, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x33, 0x2D, 0x35, 0x5D, 0x7C, 0x5B, 0x32, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x7C, 0x5B, 0x38, 0x39, 0x5D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x3F, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x12, 0x2B, 0x12, 0x17, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x32, 0x31, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x32, 0x07, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x1A, 0x3B, 0x12, 0x25, 0x28, 0x3F, 0x3A, 0x5B, 0x33, 0x2D, 0x35, 0x5D, 0x7C, 0x37, 0x37, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x38, 0x5C, 0x64, 0x29, 0x3F, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x39, 0x5C, 0x64, 0x29, 0x3F, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x32, 0x09, 0x39, 0x39, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4D, 0x57, 0x50, 0x89, 0x02, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x2D, 0x0A, 0x12, 0x28, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x06, 0x5B, 0x31, 0x33, 0x2D, 0x35, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2C, 0x0A, 0x16, 0x28, 0x32, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x32, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x28, 0x0A, 0x12, 0x28, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x37, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2F, 0x0A, 0x16, 0x28, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x04, 0x5B, 0x38, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x9D, 0x0D, 0x0A, 0x19, 0x12, 0x0D, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x39, 0x2C, 0x31, 0x30, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x31, 0x31, 0x7D, 0x12, 0xC1, 0x03, 0x12, 0xA8, 0x03, 0x28, 0x3F, 0x3A, 0x33, 0x33, 0x7C, 0x35, 0x35, 0x7C, 0x38, 0x31, 0x29, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x7C, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x2D, 0x38, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x33, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x2D, 0x35, 0x38, 0x5D, 0x7C, 0x39, 0x5B, 0x34, 0x36, 0x37, 0x5D, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x31, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x5B, 0x32, 0x34, 0x35, 0x38, 0x5D, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x2D, 0x35, 0x5D, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x31, 0x2D, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x32, 0x34, 0x2D, 0x36, 0x5D, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x33, 0x37, 0x5D, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x32, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x38, 0x38, 0x7C, 0x39, 0x5B, 0x31, 0x2D, 0x37, 0x39, 0x5D, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x32, 0x2D, 0x36, 0x38, 0x5D, 0x7C, 0x5B, 0x32, 0x33, 0x34, 0x5D, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x33, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x32, 0x34, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x2D, 0x37, 0x5D, 0x7C, 0x38, 0x5B, 0x36, 0x37, 0x5D, 0x7C, 0x39, 0x5B, 0x34, 0x2D, 0x38, 0x5D, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x33, 0x34, 0x36, 0x37, 0x5D, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x33, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x2D, 0x36, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x37, 0x5D, 0x29, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x31, 0x33, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x2D, 0x36, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x32, 0x34, 0x2D, 0x36, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x32, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x2D, 0x33, 0x37, 0x38, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x32, 0x34, 0x37, 0x39, 0x5D, 0x29, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x33, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x31, 0x2D, 0x34, 0x5D, 0x7C, 0x33, 0x5B, 0x32, 0x2D, 0x34, 0x36, 0x2D, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x33, 0x34, 0x38, 0x5D, 0x7C, 0x5B, 0x36, 0x39, 0x5D, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x32, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x32, 0x32, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x1A, 0xC5, 0x03, 0x12, 0xAD, 0x03, 0x31, 0x28, 0x3F, 0x3A, 0x28, 0x3F, 0x3A, 0x33, 0x33, 0x7C, 0x35, 0x35, 0x7C, 0x38, 0x31, 0x29, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x7C, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x2D, 0x38, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x33, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x2D, 0x35, 0x38, 0x5D, 0x7C, 0x39, 0x5B, 0x34, 0x36, 0x37, 0x5D, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x31, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x5B, 0x32, 0x34, 0x35, 0x38, 0x5D, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x2D, 0x35, 0x5D, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x31, 0x2D, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x32, 0x34, 0x2D, 0x36, 0x5D, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x33, 0x37, 0x5D, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x32, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x38, 0x38, 0x7C, 0x39, 0x5B, 0x31, 0x2D, 0x37, 0x39, 0x5D, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x32, 0x2D, 0x36, 0x38, 0x5D, 0x7C, 0x5B, 0x32, 0x2D, 0x34, 0x5D, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x33, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x32, 0x34, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x2D, 0x37, 0x5D, 0x7C, 0x38, 0x5B, 0x36, 0x37, 0x5D, 0x7C, 0x39, 0x5B, 0x34, 0x2D, 0x38, 0x5D, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x33, 0x34, 0x36, 0x37, 0x5D, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x33, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x2D, 0x36, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x37, 0x5D, 0x29, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x31, 0x33, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x2D, 0x36, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x32, 0x34, 0x2D, 0x36, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x32, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x2D, 0x33, 0x37, 0x38, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x32, 0x34, 0x37, 0x39, 0x5D, 0x29, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x33, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x31, 0x2D, 0x34, 0x5D, 0x7C, 0x33, 0x5B, 0x32, 0x2D, 0x34, 0x36, 0x2D, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x33, 0x34, 0x38, 0x5D, 0x7C, 0x5B, 0x36, 0x39, 0x5D, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x32, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x29, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x31, 0x7D, 0x32, 0x0B, 0x31, 0x32, 0x32, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x22, 0x1E, 0x12, 0x08, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x2A, 0x1E, 0x12, 0x08, 0x39, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x39, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4D, 0x58, 0x50, 0x34, 0x5A, 0x05, 0x30, 0x5B, 0x30, 0x39, 0x5D, 0x62, 0x02, 0x30, 0x31, 0x7A, 0x14, 0x30, 0x5B, 0x31, 0x32, 0x5D, 0x7C, 0x30, 0x34, 0x5B, 0x34, 0x35, 0x5D, 0x28, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x29, 0x82, 0x01, 0x03, 0x31, 0x24, 0x31, 0x9A, 0x01, 0x36, 0x0A, 0x17, 0x28, 0x5B, 0x33, 0x35, 0x38, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x08, 0x33, 0x33, 0x7C, 0x35, 0x35, 0x7C, 0x38, 0x31, 0x22, 0x05, 0x30, 0x31, 0x20, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x55, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x29, 0x5B, 0x32, 0x34, 0x36, 0x37, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x32, 0x34, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x38, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x30, 0x2D, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x22, 0x05, 0x30, 0x31, 0x20, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x3D, 0x0A, 0x18, 0x31, 0x28, 0x5B, 0x33, 0x35, 0x38, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x0C, 0x30, 0x34, 0x35, 0x20, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x0D, 0x31, 0x28, 0x3F, 0x3A, 0x33, 0x33, 0x7C, 0x35, 0x35, 0x7C, 0x38, 0x31, 0x29, 0x22, 0x02, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x5B, 0x0A, 0x16, 0x31, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x0C, 0x30, 0x34, 0x35, 0x20, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x2D, 0x31, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x34, 0x36, 0x37, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x32, 0x34, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x38, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x29, 0x22, 0x02, 0x24, 0x31, 0x2A, 0x00, 0xA2, 0x01, 0x2F, 0x0A, 0x17, 0x28, 0x5B, 0x33, 0x35, 0x38, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x08, 0x33, 0x33, 0x7C, 0x35, 0x35, 0x7C, 0x38, 0x31, 0x2A, 0x00, 0xA2, 0x01, 0x4E, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x29, 0x5B, 0x32, 0x34, 0x36, 0x37, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x32, 0x34, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x38, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x30, 0x2D, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x2A, 0x00, 0xA2, 0x01, 0x3A, 0x0A, 0x1A, 0x28, 0x31, 0x29, 0x28, 0x5B, 0x33, 0x35, 0x38, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x0D, 0x31, 0x28, 0x3F, 0x3A, 0x33, 0x33, 0x7C, 0x35, 0x35, 0x7C, 0x38, 0x31, 0x29, 0x2A, 0x00, 0xA2, 0x01, 0x58, 0x0A, 0x18, 0x28, 0x31, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x2D, 0x31, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x34, 0x36, 0x37, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x32, 0x34, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x38, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x29, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xBD, 0x04, 0x0A, 0x19, 0x12, 0x0D, 0x5B, 0x31, 0x33, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x31, 0x30, 0x7D, 0x12, 0x35, 0x12, 0x1F, 0x28, 0x3F, 0x3A, 0x33, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x7C, 0x5B, 0x34, 0x2D, 0x37, 0x39, 0x5D, 0x5C, 0x64, 0x7C, 0x38, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x39, 0x7D, 0x32, 0x09, 0x33, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x1A, 0x22, 0x12, 0x0E, 0x31, 0x5B, 0x30, 0x2D, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x22, 0x22, 0x12, 0x0C, 0x31, 0x5B, 0x33, 0x38, 0x5D, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x31, 0x33, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x1F, 0x12, 0x09, 0x31, 0x36, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x31, 0x36, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x1F, 0x12, 0x09, 0x31, 0x37, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x31, 0x37, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x42, 0x1E, 0x12, 0x08, 0x31, 0x35, 0x34, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x31, 0x35, 0x34, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x4A, 0x02, 0x4D, 0x59, 0x50, 0x3C, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x31, 0x0A, 0x16, 0x28, 0x5B, 0x34, 0x2D, 0x37, 0x39, 0x5D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x06, 0x5B, 0x34, 0x2D, 0x37, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x27, 0x0A, 0x11, 0x28, 0x33, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x33, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x3D, 0x0A, 0x18, 0x28, 0x5B, 0x31, 0x38, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x10, 0x31, 0x5B, 0x30, 0x2D, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x38, 0x0A, 0x1B, 0x28, 0x31, 0x29, 0x28, 0x5B, 0x33, 0x36, 0x2D, 0x38, 0x5D, 0x30, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x2D, 0x24, 0x34, 0x1A, 0x08, 0x31, 0x5B, 0x33, 0x36, 0x2D, 0x38, 0x5D, 0x30, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x2A, 0x0A, 0x13, 0x28, 0x31, 0x35, 0x34, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x02, 0x31, 0x35, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xC3, 0x02, 0x0A, 0x16, 0x12, 0x0B, 0x5B, 0x32, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x38, 0x2C, 0x39, 0x7D, 0x12, 0x38, 0x12, 0x25, 0x32, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x33, 0x34, 0x36, 0x5D, 0x5C, 0x64, 0x7C, 0x35, 0x5B, 0x30, 0x2D, 0x32, 0x5D, 0x7C, 0x5B, 0x37, 0x38, 0x5D, 0x5B, 0x31, 0x32, 0x5D, 0x7C, 0x39, 0x33, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x32, 0x31, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x1A, 0x1E, 0x12, 0x0A, 0x38, 0x5B, 0x32, 0x34, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x22, 0x1C, 0x12, 0x08, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4D, 0x5A, 0x50, 0x82, 0x02, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x31, 0x0A, 0x18, 0x28, 0x5B, 0x32, 0x38, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x07, 0x32, 0x7C, 0x38, 0x5B, 0x32, 0x34, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x28, 0x0A, 0x14, 0x28, 0x38, 0x30, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x02, 0x38, 0x30, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x81, 0x06, 0x0A, 0x16, 0x12, 0x0B, 0x5B, 0x36, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x38, 0x2C, 0x39, 0x7D, 0x12, 0xF9, 0x02, 0x12, 0xE2, 0x02, 0x36, 0x28, 0x3F, 0x3A, 0x31, 0x28, 0x3F, 0x3A, 0x31, 0x37, 0x7C, 0x32, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x31, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7C, 0x5B, 0x32, 0x33, 0x2D, 0x36, 0x5D, 0x7C, 0x37, 0x5C, 0x64, 0x3F, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x32, 0x5C, 0x64, 0x7C, 0x33, 0x5B, 0x33, 0x37, 0x38, 0x5D, 0x29, 0x7C, 0x34, 0x5B, 0x30, 0x31, 0x5D, 0x7C, 0x36, 0x39, 0x7C, 0x37, 0x5B, 0x30, 0x31, 0x34, 0x5D, 0x29, 0x7C, 0x32, 0x28, 0x3F, 0x3A, 0x31, 0x37, 0x7C, 0x32, 0x35, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x2D, 0x33, 0x36, 0x2D, 0x38, 0x5D, 0x7C, 0x34, 0x5C, 0x64, 0x3F, 0x29, 0x7C, 0x36, 0x39, 0x7C, 0x37, 0x30, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x31, 0x37, 0x7C, 0x32, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x32, 0x33, 0x37, 0x5D, 0x5C, 0x64, 0x3F, 0x7C, 0x5B, 0x31, 0x34, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x29, 0x7C, 0x33, 0x34, 0x7C, 0x36, 0x5B, 0x32, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x31, 0x5D, 0x7C, 0x38, 0x31, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x31, 0x37, 0x7C, 0x32, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x31, 0x32, 0x5D, 0x7C, 0x37, 0x3F, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x36, 0x5D, 0x7C, 0x31, 0x5C, 0x64, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x31, 0x33, 0x35, 0x37, 0x5D, 0x7C, 0x5B, 0x32, 0x35, 0x5D, 0x5C, 0x64, 0x3F, 0x29, 0x7C, 0x36, 0x39, 0x7C, 0x37, 0x5B, 0x30, 0x31, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x31, 0x37, 0x7C, 0x32, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x34, 0x35, 0x39, 0x5D, 0x7C, 0x5B, 0x32, 0x33, 0x36, 0x37, 0x38, 0x5D, 0x5C, 0x64, 0x3F, 0x29, 0x7C, 0x36, 0x39, 0x7C, 0x37, 0x5B, 0x30, 0x31, 0x5D, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x31, 0x37, 0x7C, 0x32, 0x28, 0x3F, 0x3A, 0x35, 0x7C, 0x36, 0x5C, 0x64, 0x3F, 0x29, 0x7C, 0x33, 0x38, 0x7C, 0x34, 0x32, 0x7C, 0x36, 0x39, 0x7C, 0x37, 0x5B, 0x30, 0x31, 0x5D, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x31, 0x37, 0x7C, 0x32, 0x28, 0x3F, 0x3A, 0x5B, 0x35, 0x36, 0x39, 0x5D, 0x7C, 0x5B, 0x32, 0x33, 0x34, 0x5D, 0x5C, 0x64, 0x3F, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x30, 0x5C, 0x64, 0x3F, 0x7C, 0x5B, 0x31, 0x33, 0x5D, 0x29, 0x7C, 0x36, 0x39, 0x7C, 0x37, 0x5B, 0x30, 0x31, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x38, 0x2C, 0x39, 0x7D, 0x32, 0x09, 0x36, 0x31, 0x32, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x1A, 0x26, 0x12, 0x12, 0x28, 0x3F, 0x3A, 0x36, 0x30, 0x7C, 0x38, 0x5B, 0x31, 0x32, 0x35, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x31, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x1D, 0x12, 0x09, 0x38, 0x37, 0x30, 0x31, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x37, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x1B, 0x12, 0x08, 0x38, 0x38, 0x36, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x38, 0x36, 0x31, 0x32, 0x33, 0x34, 0x35, 0x4A, 0x02, 0x4E, 0x41, 0x50, 0x88, 0x02, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x2E, 0x0A, 0x13, 0x28, 0x38, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x06, 0x38, 0x5B, 0x31, 0x32, 0x35, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2B, 0x0A, 0x15, 0x28, 0x36, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x2C, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x36, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x29, 0x0A, 0x12, 0x28, 0x38, 0x38, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x02, 0x38, 0x38, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2B, 0x0A, 0x13, 0x28, 0x38, 0x37, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x03, 0x38, 0x37, 0x30, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x6D, 0x0A, 0x00, 0x12, 0x00, 0x1A, 0x00, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4E, 0x43, 0x50, 0xAF, 0x05, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x90, 0x01, 0x01, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x93, 0x03, 0x0A, 0x13, 0x12, 0x0A, 0x5B, 0x30, 0x32, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x12, 0x6F, 0x12, 0x5C, 0x32, 0x28, 0x3F, 0x3A, 0x30, 0x28, 0x3F, 0x3A, 0x32, 0x30, 0x7C, 0x33, 0x5B, 0x31, 0x2D, 0x37, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x33, 0x34, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x34, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x34, 0x35, 0x37, 0x38, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x2D, 0x35, 0x37, 0x38, 0x5D, 0x29, 0x7C, 0x31, 0x28, 0x3F, 0x3A, 0x34, 0x5B, 0x31, 0x34, 0x35, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x34, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x34, 0x2D, 0x36, 0x38, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x36, 0x39, 0x5D, 0x7C, 0x38, 0x38, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x32, 0x30, 0x32, 0x30, 0x31, 0x32, 0x33, 0x34, 0x1A, 0x20, 0x12, 0x0D, 0x39, 0x5B, 0x30, 0x33, 0x34, 0x36, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x39, 0x33, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x1A, 0x12, 0x07, 0x30, 0x38, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x30, 0x38, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x1A, 0x12, 0x07, 0x30, 0x39, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x30, 0x39, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4E, 0x45, 0x50, 0xE3, 0x01, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x3A, 0x0A, 0x1E, 0x28, 0x5B, 0x30, 0x32, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x07, 0x5B, 0x32, 0x39, 0x5D, 0x7C, 0x30, 0x39, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x26, 0x0A, 0x12, 0x28, 0x30, 0x38, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x02, 0x30, 0x38, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xD0, 0x01, 0x01, 0x0A, 0x86, 0x02, 0x0A, 0x14, 0x12, 0x09, 0x5B, 0x31, 0x33, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x36, 0x7D, 0x12, 0x35, 0x12, 0x22, 0x28, 0x3F, 0x3A, 0x31, 0x28, 0x3F, 0x3A, 0x30, 0x36, 0x7C, 0x31, 0x37, 0x7C, 0x32, 0x38, 0x7C, 0x33, 0x39, 0x29, 0x7C, 0x33, 0x5B, 0x30, 0x31, 0x32, 0x5D, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x36, 0x7D, 0x32, 0x06, 0x31, 0x30, 0x36, 0x36, 0x30, 0x39, 0x1A, 0x1A, 0x12, 0x07, 0x33, 0x38, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x36, 0x7D, 0x32, 0x06, 0x33, 0x38, 0x31, 0x32, 0x33, 0x34, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4E, 0x46, 0x50, 0xA0, 0x05, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x1E, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x01, 0x31, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x1B, 0x0A, 0x0B, 0x28, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x01, 0x33, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x82, 0x06, 0x0A, 0x26, 0x12, 0x1A, 0x5B, 0x31, 0x2D, 0x36, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x38, 0x7D, 0x7C, 0x5B, 0x37, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x31, 0x33, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x31, 0x34, 0x7D, 0x12, 0x96, 0x01, 0x12, 0x80, 0x01, 0x5B, 0x31, 0x32, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x37, 0x7D, 0x7C, 0x39, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x7C, 0x28, 0x3F, 0x3A, 0x34, 0x5B, 0x30, 0x32, 0x33, 0x35, 0x36, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x32, 0x33, 0x36, 0x38, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x32, 0x2D, 0x34, 0x36, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x35, 0x36, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x7C, 0x28, 0x3F, 0x3A, 0x34, 0x5B, 0x34, 0x37, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x34, 0x35, 0x37, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x35, 0x37, 0x38, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x2D, 0x33, 0x35, 0x37, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x36, 0x7D, 0x7C, 0x28, 0x3F, 0x3A, 0x37, 0x38, 0x7C, 0x34, 0x31, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x39, 0x7D, 0x32, 0x08, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x1A, 0x4A, 0x12, 0x34, 0x28, 0x3F, 0x3A, 0x37, 0x30, 0x28, 0x3F, 0x3A, 0x5B, 0x33, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7C, 0x32, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x31, 0x5B, 0x32, 0x33, 0x36, 0x38, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x30, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x22, 0x25, 0x12, 0x0B, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x31, 0x31, 0x7D, 0x1A, 0x09, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x2C, 0x31, 0x34, 0x7D, 0x32, 0x0B, 0x38, 0x30, 0x30, 0x31, 0x37, 0x35, 0x39, 0x31, 0x37, 0x35, 0x39, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x24, 0x12, 0x0B, 0x37, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x31, 0x31, 0x7D, 0x1A, 0x09, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x2C, 0x31, 0x34, 0x7D, 0x32, 0x0A, 0x37, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4E, 0x47, 0x50, 0xEA, 0x01, 0x5A, 0x03, 0x30, 0x30, 0x39, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x31, 0x0A, 0x17, 0x28, 0x5B, 0x31, 0x32, 0x39, 0x5D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x05, 0x5B, 0x31, 0x32, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x4D, 0x0A, 0x19, 0x28, 0x5B, 0x33, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x2C, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x1F, 0x5B, 0x33, 0x2D, 0x36, 0x5D, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x30, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x38, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x38, 0x0A, 0x1B, 0x28, 0x5B, 0x37, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x08, 0x37, 0x30, 0x7C, 0x38, 0x5B, 0x30, 0x31, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x33, 0x0A, 0x18, 0x28, 0x5B, 0x37, 0x38, 0x5D, 0x30, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x35, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x06, 0x5B, 0x37, 0x38, 0x5D, 0x30, 0x30, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x33, 0x0A, 0x18, 0x28, 0x5B, 0x37, 0x38, 0x5D, 0x30, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x36, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x06, 0x5B, 0x37, 0x38, 0x5D, 0x30, 0x30, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x29, 0x0A, 0x12, 0x28, 0x37, 0x38, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x02, 0x37, 0x38, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xDB, 0x01, 0x0A, 0x13, 0x12, 0x0A, 0x5B, 0x31, 0x32, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x12, 0x19, 0x12, 0x06, 0x32, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x1A, 0x19, 0x12, 0x06, 0x38, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x22, 0x1C, 0x12, 0x09, 0x31, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x31, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4E, 0x49, 0x50, 0xF9, 0x03, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x1B, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xAF, 0x04, 0x0A, 0x18, 0x12, 0x0C, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x39, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x31, 0x30, 0x7D, 0x12, 0x4F, 0x12, 0x3B, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x30, 0x31, 0x33, 0x35, 0x2D, 0x38, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x32, 0x2D, 0x36, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x2D, 0x36, 0x38, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x31, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x35, 0x37, 0x5D, 0x5C, 0x64, 0x7C, 0x38, 0x5B, 0x34, 0x37, 0x38, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x31, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x1A, 0x20, 0x12, 0x0C, 0x36, 0x5B, 0x31, 0x2D, 0x35, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x36, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x22, 0x1F, 0x12, 0x0A, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x37, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x07, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x2A, 0x23, 0x12, 0x0E, 0x39, 0x30, 0x5B, 0x30, 0x36, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x37, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x07, 0x39, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x10, 0x12, 0x07, 0x38, 0x35, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x4A, 0x02, 0x4E, 0x4C, 0x50, 0x1F, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x5E, 0x0A, 0x19, 0x28, 0x5B, 0x31, 0x2D, 0x35, 0x37, 0x38, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x30, 0x31, 0x5B, 0x30, 0x33, 0x35, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x33, 0x34, 0x36, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x33, 0x35, 0x36, 0x38, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x33, 0x35, 0x36, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x33, 0x35, 0x38, 0x5D, 0x7C, 0x37, 0x7C, 0x38, 0x5B, 0x34, 0x35, 0x38, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x56, 0x0A, 0x1A, 0x28, 0x5B, 0x31, 0x2D, 0x35, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x27, 0x31, 0x5B, 0x31, 0x36, 0x2D, 0x38, 0x5D, 0x7C, 0x32, 0x5B, 0x32, 0x35, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x32, 0x34, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x32, 0x34, 0x36, 0x37, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x1D, 0x0A, 0x0A, 0x28, 0x36, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x01, 0x36, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x28, 0x0A, 0x12, 0x28, 0x5B, 0x38, 0x39, 0x5D, 0x30, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x37, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x04, 0x38, 0x30, 0x7C, 0x39, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x8D, 0x04, 0x0A, 0x24, 0x12, 0x11, 0x30, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x7C, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x12, 0x47, 0x12, 0x34, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x31, 0x2D, 0x34, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x37, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x2D, 0x37, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x2D, 0x34, 0x36, 0x37, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x2D, 0x38, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x1A, 0x28, 0x12, 0x15, 0x28, 0x3F, 0x3A, 0x34, 0x5B, 0x30, 0x31, 0x35, 0x2D, 0x38, 0x5D, 0x7C, 0x39, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x34, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x22, 0x1E, 0x12, 0x0B, 0x38, 0x30, 0x5B, 0x30, 0x31, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x2A, 0x1E, 0x12, 0x0B, 0x38, 0x32, 0x5B, 0x30, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x32, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x32, 0x2D, 0x12, 0x1A, 0x38, 0x31, 0x30, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x2D, 0x36, 0x5D, 0x7C, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x31, 0x30, 0x32, 0x31, 0x32, 0x33, 0x34, 0x3A, 0x1B, 0x12, 0x08, 0x38, 0x38, 0x30, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x38, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4E, 0x4F, 0x50, 0x2F, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x31, 0x0A, 0x1A, 0x28, 0x5B, 0x34, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x05, 0x5B, 0x34, 0x38, 0x39, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x3C, 0x0A, 0x20, 0x28, 0x5B, 0x32, 0x33, 0x35, 0x2D, 0x37, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x07, 0x5B, 0x32, 0x33, 0x35, 0x2D, 0x37, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xB0, 0x01, 0x01, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x42, 0x12, 0x28, 0x30, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x7C, 0x38, 0x31, 0x28, 0x3F, 0x3A, 0x30, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x31, 0x5C, 0x64, 0x29, 0x7C, 0x35, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x32, 0x05, 0x30, 0x31, 0x32, 0x33, 0x34, 0xD0, 0x01, 0x01, 0x0A, 0xBF, 0x03, 0x0A, 0x24, 0x12, 0x18, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x37, 0x7D, 0x7C, 0x39, 0x38, 0x5B, 0x34, 0x35, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x31, 0x30, 0x7D, 0x12, 0x6C, 0x12, 0x57, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x30, 0x31, 0x34, 0x2D, 0x36, 0x5D, 0x7C, 0x32, 0x5B, 0x31, 0x33, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x33, 0x35, 0x2D, 0x38, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x33, 0x35, 0x2D, 0x37, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x33, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x2D, 0x34, 0x36, 0x37, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x2D, 0x37, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x38, 0x7D, 0x32, 0x08, 0x31, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x30, 0x1A, 0x21, 0x12, 0x0B, 0x39, 0x38, 0x5B, 0x34, 0x35, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x39, 0x38, 0x34, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4E, 0x50, 0x50, 0xD1, 0x07, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x31, 0x0A, 0x16, 0x28, 0x31, 0x29, 0x28, 0x5B, 0x34, 0x2D, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x06, 0x31, 0x5B, 0x34, 0x2D, 0x36, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x3D, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x13, 0x31, 0x5B, 0x30, 0x31, 0x5D, 0x7C, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x2D, 0x37, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2D, 0x0A, 0x16, 0x28, 0x39, 0x38, 0x5B, 0x34, 0x35, 0x5D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x02, 0x39, 0x38, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xD5, 0x01, 0x0A, 0x13, 0x12, 0x0A, 0x5B, 0x34, 0x35, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x12, 0x22, 0x12, 0x10, 0x28, 0x3F, 0x3A, 0x34, 0x34, 0x34, 0x7C, 0x38, 0x38, 0x38, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x34, 0x34, 0x34, 0x31, 0x32, 0x33, 0x34, 0x1A, 0x1E, 0x12, 0x0C, 0x35, 0x35, 0x5B, 0x35, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x35, 0x35, 0x35, 0x31, 0x32, 0x33, 0x34, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4E, 0x52, 0x50, 0xA2, 0x05, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x1B, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xA8, 0x01, 0x0A, 0x13, 0x12, 0x0A, 0x5B, 0x31, 0x2D, 0x35, 0x5D, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x12, 0x18, 0x12, 0x09, 0x5B, 0x33, 0x34, 0x5D, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x32, 0x04, 0x34, 0x30, 0x30, 0x32, 0x1A, 0x19, 0x12, 0x0A, 0x5B, 0x31, 0x32, 0x35, 0x5D, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x32, 0x04, 0x31, 0x32, 0x33, 0x34, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4E, 0x55, 0x50, 0xAB, 0x05, 0x5A, 0x02, 0x30, 0x30, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xC2, 0x05, 0x0A, 0x2A, 0x12, 0x1E, 0x36, 0x5B, 0x32, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x7C, 0x5B, 0x32, 0x2D, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x31, 0x30, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x31, 0x31, 0x7D, 0x12, 0x4E, 0x12, 0x39, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x32, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x5B, 0x34, 0x39, 0x5D, 0x5B, 0x32, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x32, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x32, 0x2D, 0x35, 0x38, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x7C, 0x32, 0x34, 0x30, 0x39, 0x39, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x32, 0x08, 0x33, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x1A, 0x63, 0x12, 0x4C, 0x32, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x37, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x7C, 0x31, 0x28, 0x3F, 0x3A, 0x30, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x37, 0x7D, 0x7C, 0x5B, 0x31, 0x32, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x36, 0x7D, 0x7C, 0x5B, 0x33, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x29, 0x7C, 0x5B, 0x32, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x7C, 0x34, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x29, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x38, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x09, 0x32, 0x31, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x22, 0x2B, 0x12, 0x14, 0x35, 0x30, 0x38, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x37, 0x7D, 0x7C, 0x38, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x38, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x38, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x09, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x20, 0x12, 0x09, 0x39, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x39, 0x2C, 0x31, 0x31, 0x7D, 0x32, 0x09, 0x39, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4E, 0x5A, 0x50, 0x40, 0x5A, 0x0A, 0x30, 0x28, 0x3F, 0x3A, 0x30, 0x7C, 0x31, 0x36, 0x31, 0x29, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x8A, 0x01, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x39, 0x0A, 0x17, 0x28, 0x5B, 0x33, 0x34, 0x36, 0x37, 0x39, 0x5D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x0D, 0x5B, 0x33, 0x34, 0x36, 0x37, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2B, 0x0A, 0x14, 0x28, 0x32, 0x31, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x02, 0x32, 0x31, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x44, 0x0A, 0x1D, 0x28, 0x5B, 0x32, 0x35, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x12, 0x32, 0x5B, 0x30, 0x32, 0x34, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x7C, 0x5B, 0x38, 0x39, 0x5D, 0x30, 0x30, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x36, 0x0A, 0x17, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x0A, 0x32, 0x5B, 0x30, 0x31, 0x36, 0x39, 0x5D, 0x7C, 0x38, 0x36, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x30, 0x0A, 0x0E, 0x28, 0x32, 0x34, 0x30, 0x39, 0x39, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x03, 0x32, 0x34, 0x30, 0x1A, 0x04, 0x32, 0x34, 0x30, 0x39, 0x1A, 0x05, 0x32, 0x34, 0x30, 0x39, 0x39, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x21, 0x12, 0x0C, 0x5B, 0x32, 0x38, 0x5D, 0x36, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x37, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x38, 0x2C, 0x39, 0x7D, 0x32, 0x08, 0x32, 0x36, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xD7, 0x02, 0x0A, 0x2E, 0x12, 0x23, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x33, 0x2D, 0x36, 0x5D, 0x7C, 0x35, 0x7C, 0x39, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x7C, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x36, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x12, 0x1E, 0x12, 0x0B, 0x32, 0x5B, 0x33, 0x2D, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x32, 0x33, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x1A, 0x1E, 0x12, 0x0B, 0x39, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x39, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x29, 0x12, 0x14, 0x38, 0x30, 0x30, 0x37, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x35, 0x7D, 0x7C, 0x35, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x32, 0x08, 0x38, 0x30, 0x30, 0x37, 0x31, 0x32, 0x33, 0x34, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4F, 0x4D, 0x50, 0xC8, 0x07, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x1C, 0x0A, 0x0C, 0x28, 0x32, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x01, 0x32, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x1F, 0x0A, 0x0F, 0x28, 0x39, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x01, 0x39, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x24, 0x0A, 0x11, 0x28, 0x5B, 0x35, 0x38, 0x5D, 0x30, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x36, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x04, 0x5B, 0x35, 0x38, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x6D, 0x0A, 0x00, 0x12, 0x00, 0x1A, 0x00, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x50, 0x41, 0x50, 0xFB, 0x03, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x90, 0x01, 0x01, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xF6, 0x02, 0x0A, 0x18, 0x12, 0x0D, 0x5B, 0x31, 0x34, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x39, 0x7D, 0x12, 0x46, 0x12, 0x31, 0x28, 0x3F, 0x3A, 0x31, 0x5C, 0x64, 0x7C, 0x34, 0x5B, 0x31, 0x2D, 0x34, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x34, 0x36, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x2D, 0x37, 0x5D, 0x7C, 0x37, 0x5B, 0x32, 0x2D, 0x34, 0x36, 0x5D, 0x7C, 0x38, 0x5B, 0x32, 0x2D, 0x34, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x38, 0x7D, 0x32, 0x08, 0x31, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x1A, 0x1A, 0x12, 0x06, 0x39, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x39, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x50, 0x45, 0x50, 0x33, 0x5A, 0x14, 0x31, 0x39, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x31, 0x32, 0x34, 0x5D, 0x7C, 0x37, 0x37, 0x7C, 0x39, 0x30, 0x29, 0x30, 0x30, 0x62, 0x01, 0x30, 0x6A, 0x07, 0x20, 0x41, 0x6E, 0x65, 0x78, 0x6F, 0x20, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x1E, 0x0A, 0x0A, 0x28, 0x31, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x01, 0x31, 0x22, 0x04, 0x28, 0x24, 0x31, 0x29, 0x2A, 0x00, 0x9A, 0x01, 0x28, 0x0A, 0x10, 0x28, 0x5B, 0x34, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x05, 0x5B, 0x34, 0x2D, 0x38, 0x5D, 0x22, 0x04, 0x28, 0x24, 0x31, 0x29, 0x2A, 0x00, 0x9A, 0x01, 0x2B, 0x0A, 0x16, 0x28, 0x39, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x39, 0x22, 0x02, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x67, 0x0A, 0x00, 0x12, 0x00, 0x1A, 0x00, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x50, 0x46, 0x50, 0xB1, 0x05, 0x5A, 0x02, 0x30, 0x30, 0x90, 0x01, 0x01, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x83, 0x03, 0x0A, 0x17, 0x12, 0x0C, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x37, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x12, 0x55, 0x12, 0x43, 0x28, 0x3F, 0x3A, 0x33, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x7C, 0x34, 0x5B, 0x32, 0x35, 0x37, 0x5D, 0x5C, 0x64, 0x7C, 0x35, 0x5B, 0x33, 0x34, 0x5D, 0x5C, 0x64, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x32, 0x39, 0x7C, 0x34, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x38, 0x35, 0x5B, 0x30, 0x32, 0x2D, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x37, 0x38, 0x5D, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x33, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x1A, 0x33, 0x12, 0x1F, 0x28, 0x3F, 0x3A, 0x36, 0x38, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x32, 0x36, 0x5D, 0x5C, 0x64, 0x7C, 0x33, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x32, 0x07, 0x36, 0x38, 0x31, 0x32, 0x33, 0x34, 0x35, 0x22, 0x1A, 0x12, 0x08, 0x31, 0x38, 0x30, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x31, 0x38, 0x30, 0x31, 0x32, 0x33, 0x34, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x1A, 0x12, 0x08, 0x32, 0x37, 0x35, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x32, 0x37, 0x35, 0x31, 0x32, 0x33, 0x34, 0x4A, 0x02, 0x50, 0x47, 0x50, 0xA3, 0x05, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x24, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x07, 0x5B, 0x31, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x32, 0x0A, 0x19, 0x28, 0x37, 0x5B, 0x31, 0x2D, 0x33, 0x36, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x07, 0x37, 0x5B, 0x31, 0x2D, 0x33, 0x36, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xF3, 0x06, 0x0A, 0x24, 0x12, 0x18, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x7C, 0x31, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x31, 0x33, 0x7D, 0x12, 0x4D, 0x12, 0x38, 0x28, 0x3F, 0x3A, 0x32, 0x7C, 0x33, 0x5B, 0x32, 0x2D, 0x36, 0x38, 0x5D, 0x7C, 0x34, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x32, 0x2D, 0x36, 0x5D, 0x7C, 0x36, 0x5B, 0x32, 0x2D, 0x35, 0x38, 0x5D, 0x7C, 0x37, 0x5B, 0x32, 0x34, 0x35, 0x37, 0x38, 0x5D, 0x7C, 0x38, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x32, 0x08, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x1A, 0x50, 0x12, 0x3A, 0x39, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x31, 0x5B, 0x30, 0x32, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x2D, 0x33, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x32, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x33, 0x34, 0x39, 0x5D, 0x7C, 0x5B, 0x38, 0x39, 0x5D, 0x39, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x39, 0x30, 0x35, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x22, 0x26, 0x12, 0x0B, 0x31, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x1A, 0x09, 0x5C, 0x64, 0x7B, 0x31, 0x31, 0x2C, 0x31, 0x33, 0x7D, 0x32, 0x0C, 0x31, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x50, 0x48, 0x50, 0x3F, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x29, 0x0A, 0x11, 0x28, 0x32, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x32, 0x22, 0x05, 0x28, 0x30, 0x24, 0x31, 0x29, 0x2A, 0x00, 0x9A, 0x01, 0xDD, 0x01, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x46, 0x33, 0x28, 0x3F, 0x3A, 0x32, 0x33, 0x7C, 0x33, 0x39, 0x7C, 0x34, 0x36, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x33, 0x2D, 0x36, 0x5D, 0x7C, 0x5B, 0x33, 0x35, 0x5D, 0x39, 0x7C, 0x34, 0x5B, 0x32, 0x36, 0x5D, 0x7C, 0x37, 0x36, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x32, 0x32, 0x7C, 0x34, 0x34, 0x29, 0x7C, 0x36, 0x34, 0x32, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x36, 0x32, 0x7C, 0x38, 0x5B, 0x32, 0x34, 0x35, 0x5D, 0x29, 0x1A, 0x73, 0x33, 0x28, 0x3F, 0x3A, 0x32, 0x33, 0x30, 0x7C, 0x33, 0x39, 0x37, 0x7C, 0x34, 0x36, 0x31, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x33, 0x35, 0x7C, 0x5B, 0x34, 0x36, 0x5D, 0x34, 0x7C, 0x35, 0x31, 0x29, 0x7C, 0x33, 0x39, 0x36, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x32, 0x32, 0x7C, 0x36, 0x33, 0x29, 0x7C, 0x35, 0x39, 0x5B, 0x33, 0x34, 0x37, 0x5D, 0x7C, 0x37, 0x36, 0x5B, 0x31, 0x35, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x32, 0x32, 0x31, 0x7C, 0x34, 0x34, 0x36, 0x29, 0x7C, 0x36, 0x34, 0x32, 0x5B, 0x32, 0x33, 0x5D, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x36, 0x32, 0x32, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x34, 0x5D, 0x32, 0x7C, 0x35, 0x5B, 0x31, 0x33, 0x5D, 0x29, 0x29, 0x22, 0x05, 0x28, 0x30, 0x24, 0x31, 0x29, 0x2A, 0x00, 0x9A, 0x01, 0x56, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x15, 0x33, 0x34, 0x36, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x32, 0x37, 0x7C, 0x39, 0x5B, 0x33, 0x35, 0x5D, 0x29, 0x7C, 0x38, 0x38, 0x33, 0x1A, 0x1D, 0x33, 0x34, 0x36, 0x39, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x32, 0x37, 0x39, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x33, 0x30, 0x7C, 0x35, 0x36, 0x29, 0x29, 0x7C, 0x38, 0x38, 0x33, 0x34, 0x22, 0x05, 0x28, 0x30, 0x24, 0x31, 0x29, 0x2A, 0x00, 0x9A, 0x01, 0x33, 0x0A, 0x17, 0x28, 0x5B, 0x33, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x05, 0x5B, 0x33, 0x2D, 0x38, 0x5D, 0x22, 0x05, 0x28, 0x30, 0x24, 0x31, 0x29, 0x2A, 0x00, 0x9A, 0x01, 0x2C, 0x0A, 0x16, 0x28, 0x39, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x39, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x27, 0x0A, 0x14, 0x28, 0x31, 0x38, 0x30, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x31, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x33, 0x0A, 0x1D, 0x28, 0x31, 0x38, 0x30, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x31, 0x2C, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x01, 0x31, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xF3, 0x0C, 0x0A, 0x4C, 0x12, 0x40, 0x31, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x7C, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x31, 0x31, 0x7D, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x31, 0x33, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x39, 0x7D, 0x7C, 0x32, 0x5C, 0x64, 0x28, 0x3F, 0x3A, 0x31, 0x31, 0x31, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x7C, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x37, 0x7D, 0x29, 0x29, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x31, 0x32, 0x7D, 0x12, 0x99, 0x02, 0x12, 0x80, 0x02, 0x28, 0x3F, 0x3A, 0x32, 0x31, 0x7C, 0x34, 0x32, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x7C, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x32, 0x35, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x31, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x2D, 0x37, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x34, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x36, 0x5D, 0x7C, 0x39, 0x31, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x7C, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x32, 0x33, 0x35, 0x38, 0x5D, 0x7C, 0x34, 0x5B, 0x32, 0x2D, 0x34, 0x5D, 0x7C, 0x39, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x29, 0x7C, 0x34, 0x35, 0x5B, 0x33, 0x34, 0x37, 0x39, 0x5D, 0x7C, 0x35, 0x34, 0x5B, 0x32, 0x2D, 0x34, 0x36, 0x37, 0x5D, 0x7C, 0x36, 0x30, 0x5B, 0x34, 0x36, 0x38, 0x5D, 0x7C, 0x37, 0x32, 0x5B, 0x32, 0x33, 0x36, 0x5D, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x32, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x32, 0x33, 0x35, 0x37, 0x38, 0x5D, 0x7C, 0x34, 0x5B, 0x33, 0x34, 0x37, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x32, 0x33, 0x35, 0x36, 0x5D, 0x29, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x31, 0x7C, 0x32, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x7C, 0x33, 0x5B, 0x32, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x32, 0x2D, 0x36, 0x5D, 0x7C, 0x36, 0x5B, 0x33, 0x35, 0x36, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x32, 0x35, 0x2D, 0x38, 0x5D, 0x29, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x36, 0x7D, 0x7C, 0x35, 0x38, 0x5B, 0x31, 0x32, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x1A, 0x42, 0x12, 0x2C, 0x33, 0x28, 0x3F, 0x3A, 0x30, 0x5C, 0x64, 0x7C, 0x31, 0x5B, 0x32, 0x2D, 0x35, 0x5D, 0x7C, 0x32, 0x5B, 0x31, 0x2D, 0x33, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x2D, 0x36, 0x5D, 0x7C, 0x34, 0x5B, 0x32, 0x2D, 0x37, 0x5D, 0x7C, 0x36, 0x34, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x33, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x22, 0x1B, 0x12, 0x08, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x2A, 0x1B, 0x12, 0x08, 0x39, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x39, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x1C, 0x12, 0x08, 0x31, 0x32, 0x32, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x31, 0x32, 0x32, 0x30, 0x34, 0x34, 0x34, 0x34, 0x34, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x50, 0x4B, 0x50, 0x5C, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0xDD, 0x01, 0x0A, 0x1A, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x31, 0x31, 0x31, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x36, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x31, 0x32, 0x35, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x2D, 0x32, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x2D, 0x37, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x34, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x36, 0x5D, 0x7C, 0x39, 0x31, 0x29, 0x31, 0x1A, 0x37, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x31, 0x32, 0x35, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x2D, 0x32, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x2D, 0x37, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x34, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x36, 0x5D, 0x7C, 0x39, 0x31, 0x29, 0x31, 0x31, 0x1A, 0x38, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x31, 0x32, 0x35, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x2D, 0x32, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x2D, 0x37, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x34, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x36, 0x5D, 0x7C, 0x39, 0x31, 0x29, 0x31, 0x31, 0x31, 0x22, 0x05, 0x28, 0x30, 0x24, 0x31, 0x29, 0x2A, 0x00, 0x9A, 0x01, 0xD2, 0x01, 0x0A, 0x1A, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x31, 0x31, 0x31, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x20, 0x32, 0x5B, 0x33, 0x34, 0x39, 0x5D, 0x7C, 0x34, 0x35, 0x7C, 0x35, 0x34, 0x7C, 0x36, 0x30, 0x7C, 0x37, 0x32, 0x7C, 0x38, 0x5B, 0x32, 0x2D, 0x35, 0x5D, 0x7C, 0x39, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x1A, 0x27, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x33, 0x34, 0x39, 0x5D, 0x7C, 0x34, 0x35, 0x7C, 0x35, 0x34, 0x7C, 0x36, 0x30, 0x7C, 0x37, 0x32, 0x7C, 0x38, 0x5B, 0x32, 0x2D, 0x35, 0x5D, 0x7C, 0x39, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x31, 0x1A, 0x28, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x33, 0x34, 0x39, 0x5D, 0x7C, 0x34, 0x35, 0x7C, 0x35, 0x34, 0x7C, 0x36, 0x30, 0x7C, 0x37, 0x32, 0x7C, 0x38, 0x5B, 0x32, 0x2D, 0x35, 0x5D, 0x7C, 0x39, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x31, 0x31, 0x1A, 0x29, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x33, 0x34, 0x39, 0x5D, 0x7C, 0x34, 0x35, 0x7C, 0x35, 0x34, 0x7C, 0x36, 0x30, 0x7C, 0x37, 0x32, 0x7C, 0x38, 0x5B, 0x32, 0x2D, 0x35, 0x5D, 0x7C, 0x39, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x31, 0x31, 0x31, 0x22, 0x05, 0x28, 0x30, 0x24, 0x31, 0x29, 0x2A, 0x00, 0x9A, 0x01, 0x5E, 0x0A, 0x10, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x3A, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x31, 0x32, 0x35, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x2D, 0x32, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x2D, 0x37, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x34, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x36, 0x5D, 0x7C, 0x39, 0x31, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x22, 0x05, 0x28, 0x30, 0x24, 0x31, 0x29, 0x2A, 0x00, 0x9A, 0x01, 0x71, 0x0A, 0x10, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x37, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x20, 0x32, 0x5B, 0x33, 0x34, 0x39, 0x5D, 0x7C, 0x34, 0x35, 0x7C, 0x35, 0x34, 0x7C, 0x36, 0x30, 0x7C, 0x37, 0x32, 0x7C, 0x38, 0x5B, 0x32, 0x2D, 0x35, 0x5D, 0x7C, 0x39, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x1A, 0x2B, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x33, 0x34, 0x39, 0x5D, 0x7C, 0x34, 0x35, 0x7C, 0x35, 0x34, 0x7C, 0x36, 0x30, 0x7C, 0x37, 0x32, 0x7C, 0x38, 0x5B, 0x32, 0x2D, 0x35, 0x5D, 0x7C, 0x39, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x22, 0x05, 0x28, 0x30, 0x24, 0x31, 0x29, 0x2A, 0x00, 0x9A, 0x01, 0x22, 0x0A, 0x0F, 0x28, 0x33, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x01, 0x33, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x30, 0x0A, 0x14, 0x28, 0x5B, 0x31, 0x35, 0x5D, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x36, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x08, 0x35, 0x38, 0x5B, 0x31, 0x32, 0x5D, 0x7C, 0x31, 0x22, 0x05, 0x28, 0x30, 0x24, 0x31, 0x29, 0x2A, 0x00, 0x9A, 0x01, 0x28, 0x0A, 0x11, 0x28, 0x35, 0x38, 0x36, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x03, 0x35, 0x38, 0x36, 0x22, 0x05, 0x28, 0x30, 0x24, 0x31, 0x29, 0x2A, 0x00, 0x9A, 0x01, 0x31, 0x0A, 0x16, 0x28, 0x5B, 0x38, 0x39, 0x5D, 0x30, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x06, 0x5B, 0x38, 0x39, 0x5D, 0x30, 0x30, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0xEC, 0x01, 0x12, 0xD1, 0x01, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x32, 0x35, 0x5D, 0x7C, 0x33, 0x5B, 0x32, 0x33, 0x35, 0x38, 0x5D, 0x7C, 0x34, 0x5B, 0x32, 0x2D, 0x34, 0x5D, 0x7C, 0x39, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x2D, 0x32, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x33, 0x34, 0x37, 0x39, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x2D, 0x37, 0x5D, 0x7C, 0x34, 0x5B, 0x32, 0x2D, 0x34, 0x36, 0x37, 0x5D, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x7C, 0x30, 0x5B, 0x34, 0x36, 0x38, 0x5D, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x34, 0x5D, 0x7C, 0x32, 0x5B, 0x32, 0x33, 0x36, 0x5D, 0x29, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x36, 0x5D, 0x7C, 0x32, 0x5B, 0x32, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x32, 0x33, 0x35, 0x37, 0x38, 0x5D, 0x7C, 0x34, 0x5B, 0x33, 0x34, 0x37, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x32, 0x33, 0x35, 0x36, 0x5D, 0x29, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x31, 0x7C, 0x32, 0x32, 0x7C, 0x33, 0x5B, 0x32, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x32, 0x2D, 0x36, 0x5D, 0x7C, 0x36, 0x5B, 0x33, 0x35, 0x36, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x32, 0x2D, 0x37, 0x5D, 0x29, 0x29, 0x31, 0x31, 0x31, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x09, 0x5C, 0x64, 0x7B, 0x31, 0x31, 0x2C, 0x31, 0x32, 0x7D, 0x32, 0x0B, 0x32, 0x31, 0x31, 0x31, 0x31, 0x38, 0x32, 0x35, 0x38, 0x38, 0x38, 0x0A, 0x91, 0x04, 0x0A, 0x13, 0x12, 0x0A, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x12, 0x66, 0x12, 0x52, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x7C, 0x32, 0x5B, 0x32, 0x2D, 0x35, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x32, 0x2D, 0x34, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x2D, 0x34, 0x36, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x32, 0x34, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x37, 0x38, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x34, 0x2D, 0x37, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x34, 0x35, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x1A, 0x34, 0x12, 0x20, 0x28, 0x3F, 0x3A, 0x35, 0x5B, 0x30, 0x31, 0x33, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x36, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x32, 0x38, 0x39, 0x5D, 0x7C, 0x38, 0x38, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x35, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x22, 0x1C, 0x12, 0x08, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x1B, 0x12, 0x07, 0x37, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x37, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x32, 0x1C, 0x12, 0x08, 0x38, 0x30, 0x31, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x1B, 0x12, 0x07, 0x33, 0x39, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x33, 0x39, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x4A, 0x02, 0x50, 0x4C, 0x50, 0x30, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x68, 0x0A, 0x1C, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x37, 0x5B, 0x31, 0x32, 0x34, 0x5D, 0x7C, 0x33, 0x5B, 0x32, 0x2D, 0x34, 0x5D, 0x7C, 0x35, 0x5B, 0x32, 0x34, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x37, 0x38, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x34, 0x2D, 0x37, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x34, 0x35, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x45, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x1E, 0x33, 0x39, 0x7C, 0x35, 0x5B, 0x30, 0x31, 0x33, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x36, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x32, 0x38, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x38, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x6D, 0x0A, 0x00, 0x12, 0x00, 0x1A, 0x00, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x50, 0x4D, 0x50, 0xFC, 0x03, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x90, 0x01, 0x01, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xE8, 0x02, 0x0A, 0x1E, 0x12, 0x0B, 0x5B, 0x35, 0x37, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x12, 0x34, 0x12, 0x15, 0x28, 0x3F, 0x3A, 0x37, 0x38, 0x37, 0x7C, 0x39, 0x33, 0x39, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x32, 0x0A, 0x37, 0x38, 0x37, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x1A, 0x34, 0x12, 0x15, 0x28, 0x3F, 0x3A, 0x37, 0x38, 0x37, 0x7C, 0x39, 0x33, 0x39, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x32, 0x0A, 0x37, 0x38, 0x37, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x22, 0x33, 0x12, 0x1D, 0x38, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x35, 0x35, 0x7C, 0x36, 0x36, 0x7C, 0x37, 0x37, 0x7C, 0x38, 0x38, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x30, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x2A, 0x23, 0x12, 0x0D, 0x39, 0x30, 0x30, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x39, 0x30, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x2D, 0x12, 0x17, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x33, 0x33, 0x7C, 0x34, 0x34, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x35, 0x30, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x50, 0x52, 0x50, 0x01, 0x5A, 0x03, 0x30, 0x31, 0x31, 0x62, 0x01, 0x31, 0x7A, 0x01, 0x31, 0x90, 0x01, 0x01, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xBA, 0x01, 0x07, 0x37, 0x38, 0x37, 0x7C, 0x39, 0x33, 0x39, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xDD, 0x03, 0x0A, 0x35, 0x12, 0x29, 0x5B, 0x32, 0x34, 0x35, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x7C, 0x31, 0x28, 0x3F, 0x3A, 0x5B, 0x37, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x7C, 0x5B, 0x34, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x2C, 0x33, 0x7D, 0x29, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x31, 0x30, 0x7D, 0x12, 0x41, 0x12, 0x2C, 0x28, 0x3F, 0x3A, 0x32, 0x32, 0x5B, 0x32, 0x33, 0x34, 0x37, 0x38, 0x39, 0x5D, 0x7C, 0x34, 0x32, 0x5B, 0x34, 0x35, 0x5D, 0x7C, 0x38, 0x32, 0x5B, 0x30, 0x31, 0x34, 0x35, 0x38, 0x5D, 0x7C, 0x39, 0x32, 0x5B, 0x33, 0x36, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x32, 0x08, 0x32, 0x32, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x1A, 0x1E, 0x12, 0x0A, 0x35, 0x5B, 0x36, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x35, 0x39, 0x39, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x1F, 0x12, 0x09, 0x31, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x31, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x21, 0x12, 0x0F, 0x31, 0x28, 0x3F, 0x3A, 0x34, 0x7C, 0x39, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x35, 0x7D, 0x32, 0x05, 0x31, 0x39, 0x31, 0x32, 0x33, 0x32, 0x1F, 0x12, 0x09, 0x31, 0x37, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x31, 0x37, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x50, 0x53, 0x50, 0xCA, 0x07, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x32, 0x0A, 0x17, 0x28, 0x5B, 0x32, 0x34, 0x38, 0x39, 0x5D, 0x29, 0x28, 0x32, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x06, 0x5B, 0x32, 0x34, 0x38, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2D, 0x0A, 0x17, 0x28, 0x35, 0x5B, 0x36, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x35, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x30, 0x0A, 0x17, 0x28, 0x31, 0x5B, 0x37, 0x38, 0x5D, 0x30, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x05, 0x31, 0x5B, 0x37, 0x38, 0x5D, 0x22, 0x02, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x9C, 0x03, 0x0A, 0x16, 0x12, 0x0D, 0x5B, 0x32, 0x2D, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x12, 0x5A, 0x12, 0x46, 0x32, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x32, 0x5D, 0x5C, 0x64, 0x7C, 0x5B, 0x33, 0x35, 0x5D, 0x5B, 0x31, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x2D, 0x35, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x2D, 0x36, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x32, 0x35, 0x36, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x1A, 0x40, 0x12, 0x2C, 0x39, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x33, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x7C, 0x32, 0x5B, 0x31, 0x32, 0x34, 0x2D, 0x37, 0x39, 0x5D, 0x5C, 0x64, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x38, 0x30, 0x7C, 0x39, 0x5C, 0x64, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x39, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x22, 0x26, 0x12, 0x12, 0x34, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x7C, 0x38, 0x30, 0x5B, 0x30, 0x32, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x1B, 0x12, 0x07, 0x37, 0x31, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x37, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x32, 0x1C, 0x12, 0x08, 0x38, 0x30, 0x38, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x30, 0x38, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x1B, 0x12, 0x07, 0x33, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x33, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x4A, 0x02, 0x50, 0x54, 0x50, 0xDF, 0x02, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x2D, 0x0A, 0x1D, 0x28, 0x5B, 0x32, 0x2D, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x68, 0x0A, 0x00, 0x12, 0x00, 0x1A, 0x00, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x50, 0x57, 0x50, 0xA8, 0x05, 0x5A, 0x03, 0x30, 0x31, 0x31, 0x90, 0x01, 0x01, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x6E, 0x0A, 0x00, 0x12, 0x00, 0x1A, 0x00, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x50, 0x59, 0x50, 0xD3, 0x04, 0x5A, 0x03, 0x30, 0x30, 0x32, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x90, 0x01, 0x01, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xA0, 0x02, 0x0A, 0x17, 0x12, 0x0C, 0x5B, 0x33, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x37, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x12, 0x1C, 0x12, 0x07, 0x34, 0x34, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x32, 0x08, 0x34, 0x34, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x1A, 0x29, 0x12, 0x14, 0x28, 0x3F, 0x3A, 0x33, 0x33, 0x7C, 0x35, 0x35, 0x7C, 0x36, 0x36, 0x7C, 0x37, 0x37, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x32, 0x08, 0x33, 0x33, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x1C, 0x12, 0x08, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x32, 0x07, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x51, 0x41, 0x50, 0xCE, 0x07, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x1F, 0x0A, 0x0F, 0x28, 0x38, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x01, 0x38, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x27, 0x0A, 0x13, 0x28, 0x5B, 0x33, 0x2D, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x05, 0x5B, 0x33, 0x2D, 0x37, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xE2, 0x02, 0x0A, 0x13, 0x12, 0x0A, 0x5B, 0x32, 0x36, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x12, 0x1C, 0x12, 0x08, 0x32, 0x36, 0x32, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x32, 0x36, 0x32, 0x31, 0x36, 0x31, 0x32, 0x33, 0x34, 0x1A, 0x26, 0x12, 0x12, 0x36, 0x28, 0x3F, 0x3A, 0x39, 0x5B, 0x32, 0x33, 0x5D, 0x7C, 0x34, 0x37, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x36, 0x39, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x1B, 0x12, 0x07, 0x38, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x2A, 0x23, 0x12, 0x0F, 0x38, 0x39, 0x5B, 0x31, 0x2D, 0x33, 0x37, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x39, 0x31, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x32, 0x12, 0x1E, 0x38, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x30, 0x31, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x31, 0x35, 0x36, 0x5D, 0x7C, 0x38, 0x34, 0x7C, 0x39, 0x30, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x31, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x52, 0x45, 0x50, 0x86, 0x02, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x37, 0x0A, 0x21, 0x28, 0x5B, 0x32, 0x36, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xB0, 0x01, 0x01, 0xBA, 0x01, 0x0B, 0x32, 0x36, 0x32, 0x7C, 0x36, 0x5B, 0x34, 0x39, 0x5D, 0x7C, 0x38, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x8D, 0x03, 0x0A, 0x15, 0x12, 0x0C, 0x5B, 0x32, 0x33, 0x37, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x12, 0x23, 0x12, 0x0F, 0x5B, 0x32, 0x33, 0x5D, 0x5B, 0x31, 0x33, 0x2D, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x32, 0x31, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x1A, 0x1F, 0x12, 0x0B, 0x37, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x37, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x22, 0x1C, 0x12, 0x08, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x20, 0x12, 0x0C, 0x39, 0x30, 0x5B, 0x30, 0x33, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x39, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x1C, 0x12, 0x08, 0x38, 0x30, 0x31, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x30, 0x31, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x3A, 0x1C, 0x12, 0x08, 0x38, 0x30, 0x32, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x30, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x52, 0x4F, 0x50, 0x28, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x6A, 0x05, 0x20, 0x69, 0x6E, 0x74, 0x20, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x33, 0x0A, 0x17, 0x28, 0x5B, 0x32, 0x33, 0x37, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x07, 0x5B, 0x32, 0x33, 0x5D, 0x31, 0x7C, 0x37, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x39, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x0F, 0x5B, 0x32, 0x33, 0x5D, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x38, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xE8, 0x03, 0x0A, 0x1C, 0x12, 0x10, 0x5B, 0x31, 0x2D, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x31, 0x31, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x31, 0x32, 0x7D, 0x12, 0x21, 0x12, 0x0C, 0x5B, 0x31, 0x2D, 0x33, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x39, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x07, 0x31, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x1A, 0x25, 0x12, 0x10, 0x36, 0x5B, 0x30, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x31, 0x30, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x31, 0x32, 0x7D, 0x32, 0x07, 0x36, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x22, 0x1F, 0x12, 0x0A, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x36, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x39, 0x7D, 0x32, 0x08, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x2A, 0x29, 0x12, 0x14, 0x28, 0x3F, 0x3A, 0x39, 0x5B, 0x30, 0x2D, 0x32, 0x5D, 0x7C, 0x34, 0x32, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x37, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x39, 0x7D, 0x32, 0x08, 0x39, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x52, 0x53, 0x50, 0xFD, 0x02, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x34, 0x0A, 0x14, 0x28, 0x5B, 0x32, 0x33, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x37, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x0E, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x33, 0x38, 0x39, 0x5D, 0x7C, 0x33, 0x39, 0x29, 0x30, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x53, 0x0A, 0x12, 0x28, 0x5B, 0x31, 0x2D, 0x34, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x38, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x2F, 0x31, 0x7C, 0x32, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x2D, 0x32, 0x34, 0x2D, 0x37, 0x5D, 0x7C, 0x5B, 0x33, 0x38, 0x39, 0x5D, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x2D, 0x38, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x34, 0x32, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x27, 0x0A, 0x14, 0x28, 0x36, 0x5B, 0x30, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x31, 0x30, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x01, 0x36, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2A, 0x0A, 0x14, 0x28, 0x5B, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x36, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x04, 0x5B, 0x38, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x82, 0x04, 0x0A, 0x15, 0x12, 0x0B, 0x5B, 0x33, 0x34, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x12, 0xB7, 0x01, 0x12, 0xA0, 0x01, 0x28, 0x3F, 0x3A, 0x33, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x31, 0x32, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x33, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x2D, 0x35, 0x38, 0x5D, 0x7C, 0x39, 0x5B, 0x30, 0x31, 0x34, 0x35, 0x5D, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x30, 0x31, 0x7C, 0x31, 0x5B, 0x31, 0x33, 0x35, 0x36, 0x5D, 0x7C, 0x32, 0x5B, 0x31, 0x33, 0x34, 0x36, 0x37, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x2D, 0x35, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x2D, 0x37, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x29, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x31, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x33, 0x2D, 0x36, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x2D, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x35, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x2D, 0x37, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x2D, 0x33, 0x37, 0x2D, 0x39, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x33, 0x30, 0x31, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x1A, 0x1C, 0x12, 0x06, 0x39, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x39, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x22, 0x21, 0x12, 0x0B, 0x38, 0x30, 0x5B, 0x30, 0x34, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x2A, 0x21, 0x12, 0x0B, 0x38, 0x30, 0x5B, 0x33, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x30, 0x39, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x52, 0x55, 0x50, 0x07, 0x5A, 0x04, 0x38, 0x7E, 0x31, 0x30, 0x62, 0x01, 0x38, 0x7A, 0x01, 0x38, 0x9A, 0x01, 0x44, 0x0A, 0x22, 0x28, 0x5B, 0x33, 0x34, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x2D, 0x24, 0x34, 0x1A, 0x07, 0x5B, 0x33, 0x34, 0x36, 0x38, 0x39, 0x5D, 0x22, 0x06, 0x38, 0x20, 0x28, 0x24, 0x31, 0x29, 0x2A, 0x00, 0x9A, 0x01, 0x2F, 0x0A, 0x16, 0x28, 0x37, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x37, 0x22, 0x06, 0x38, 0x20, 0x28, 0x24, 0x31, 0x29, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xB0, 0x01, 0x01, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xC4, 0x02, 0x0A, 0x14, 0x12, 0x0B, 0x5B, 0x32, 0x37, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x12, 0x1B, 0x12, 0x07, 0x32, 0x35, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x32, 0x35, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x1A, 0x1F, 0x12, 0x0B, 0x37, 0x5B, 0x32, 0x35, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x37, 0x32, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x1C, 0x12, 0x08, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x1C, 0x12, 0x08, 0x39, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x39, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x52, 0x57, 0x50, 0xFA, 0x01, 0x5A, 0x03, 0x30, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x29, 0x0A, 0x14, 0x28, 0x32, 0x35, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x32, 0x22, 0x02, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x34, 0x0A, 0x1A, 0x28, 0x5B, 0x37, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x05, 0x5B, 0x37, 0x2D, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x99, 0x04, 0x0A, 0x19, 0x12, 0x0D, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x31, 0x30, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x31, 0x31, 0x7D, 0x12, 0x4E, 0x12, 0x39, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x32, 0x34, 0x2D, 0x37, 0x5D, 0x7C, 0x32, 0x5B, 0x32, 0x34, 0x2D, 0x38, 0x5D, 0x7C, 0x33, 0x5B, 0x33, 0x35, 0x2D, 0x38, 0x5D, 0x7C, 0x34, 0x5B, 0x33, 0x34, 0x2D, 0x36, 0x38, 0x5D, 0x7C, 0x36, 0x5B, 0x32, 0x2D, 0x35, 0x5D, 0x7C, 0x37, 0x5B, 0x32, 0x33, 0x35, 0x2D, 0x37, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x32, 0x08, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x1A, 0x30, 0x12, 0x19, 0x28, 0x3F, 0x3A, 0x35, 0x5B, 0x30, 0x31, 0x33, 0x2D, 0x36, 0x39, 0x5D, 0x5C, 0x64, 0x7C, 0x38, 0x31, 0x31, 0x31, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x39, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x09, 0x35, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x22, 0x1E, 0x12, 0x08, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x2A, 0x20, 0x12, 0x09, 0x39, 0x32, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x31, 0x7D, 0x32, 0x0B, 0x39, 0x32, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x53, 0x41, 0x50, 0xC6, 0x07, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x33, 0x0A, 0x17, 0x28, 0x5B, 0x31, 0x2D, 0x34, 0x36, 0x37, 0x5D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x07, 0x5B, 0x31, 0x2D, 0x34, 0x36, 0x37, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2A, 0x0A, 0x14, 0x28, 0x39, 0x32, 0x30, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x39, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x29, 0x0A, 0x13, 0x28, 0x35, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x35, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2A, 0x0A, 0x13, 0x28, 0x38, 0x30, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x02, 0x38, 0x30, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2B, 0x0A, 0x14, 0x28, 0x38, 0x31, 0x31, 0x31, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x02, 0x38, 0x31, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x67, 0x0A, 0x00, 0x12, 0x00, 0x1A, 0x00, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x53, 0x42, 0x50, 0xA5, 0x05, 0x5A, 0x02, 0x30, 0x30, 0x90, 0x01, 0x01, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xBB, 0x04, 0x0A, 0x17, 0x12, 0x0C, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x36, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x37, 0x7D, 0x12, 0xD7, 0x01, 0x12, 0xC5, 0x01, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x37, 0x38, 0x5D, 0x7C, 0x32, 0x5B, 0x31, 0x34, 0x2D, 0x36, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x32, 0x2D, 0x34, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x2D, 0x33, 0x36, 0x2D, 0x38, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x36, 0x37, 0x5D, 0x7C, 0x5B, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x31, 0x2D, 0x36, 0x5D, 0x7C, 0x34, 0x5B, 0x34, 0x2D, 0x36, 0x5D, 0x7C, 0x35, 0x35, 0x7C, 0x36, 0x5B, 0x30, 0x31, 0x36, 0x5D, 0x7C, 0x37, 0x5C, 0x64, 0x7C, 0x38, 0x5B, 0x30, 0x2D, 0x35, 0x38, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x30, 0x2D, 0x35, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x35, 0x5C, 0x64, 0x7C, 0x36, 0x5B, 0x30, 0x2D, 0x32, 0x5D, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x2D, 0x32, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x31, 0x5B, 0x30, 0x2D, 0x34, 0x37, 0x38, 0x5D, 0x7C, 0x32, 0x5B, 0x31, 0x34, 0x35, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x32, 0x2D, 0x34, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x32, 0x34, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x31, 0x35, 0x5D, 0x7C, 0x37, 0x5C, 0x64, 0x7C, 0x38, 0x5B, 0x31, 0x2D, 0x33, 0x5D, 0x29, 0x7C, 0x37, 0x38, 0x5B, 0x30, 0x31, 0x33, 0x38, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x32, 0x06, 0x32, 0x31, 0x37, 0x31, 0x32, 0x33, 0x1A, 0x4F, 0x12, 0x3E, 0x28, 0x3F, 0x3A, 0x35, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x32, 0x34, 0x37, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7C, 0x36, 0x5B, 0x33, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x34, 0x36, 0x37, 0x39, 0x5D, 0x5C, 0x64, 0x7C, 0x32, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x32, 0x34, 0x2D, 0x37, 0x39, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x32, 0x06, 0x35, 0x31, 0x30, 0x31, 0x32, 0x33, 0x22, 0x1A, 0x12, 0x09, 0x38, 0x30, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x32, 0x06, 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x26, 0x12, 0x14, 0x28, 0x3F, 0x3A, 0x34, 0x34, 0x5B, 0x31, 0x2D, 0x33, 0x5D, 0x7C, 0x36, 0x34, 0x37, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x34, 0x34, 0x31, 0x30, 0x31, 0x32, 0x33, 0x4A, 0x02, 0x53, 0x43, 0x50, 0xF8, 0x01, 0x5A, 0x06, 0x30, 0x5B, 0x30, 0x2D, 0x32, 0x5D, 0x8A, 0x01, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x31, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x14, 0x5B, 0x32, 0x33, 0x35, 0x37, 0x38, 0x5D, 0x7C, 0x5B, 0x34, 0x36, 0x5D, 0x5B, 0x30, 0x2D, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x29, 0x0A, 0x12, 0x28, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x05, 0x5B, 0x34, 0x36, 0x5D, 0x34, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xF3, 0x01, 0x0A, 0x12, 0x12, 0x09, 0x5B, 0x31, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x12, 0x2C, 0x12, 0x18, 0x31, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x35, 0x5D, 0x5C, 0x64, 0x7C, 0x38, 0x5B, 0x33, 0x35, 0x36, 0x37, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x31, 0x32, 0x31, 0x32, 0x33, 0x31, 0x32, 0x33, 0x34, 0x1A, 0x20, 0x12, 0x0C, 0x39, 0x5B, 0x31, 0x32, 0x35, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x39, 0x31, 0x31, 0x32, 0x33, 0x31, 0x32, 0x33, 0x34, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x53, 0x44, 0x50, 0xF9, 0x01, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x28, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x8C, 0x11, 0x0A, 0x14, 0x12, 0x08, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x31, 0x30, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x31, 0x30, 0x7D, 0x12, 0xD5, 0x04, 0x12, 0xC0, 0x04, 0x31, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x7C, 0x5B, 0x31, 0x33, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x37, 0x7D, 0x7C, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x30, 0x2D, 0x33, 0x35, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x2D, 0x34, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x2D, 0x32, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x33, 0x2D, 0x36, 0x5D, 0x7C, 0x5B, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x36, 0x7D, 0x29, 0x7C, 0x32, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x33, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x37, 0x7D, 0x7C, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x30, 0x2D, 0x37, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x31, 0x33, 0x36, 0x2D, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x2D, 0x33, 0x38, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x31, 0x38, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x31, 0x5D, 0x7C, 0x39, 0x5B, 0x30, 0x2D, 0x35, 0x37, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x36, 0x7D, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x5B, 0x33, 0x35, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x37, 0x7D, 0x7C, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x2D, 0x34, 0x5D, 0x7C, 0x31, 0x5C, 0x64, 0x7C, 0x32, 0x5B, 0x30, 0x2D, 0x32, 0x35, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x35, 0x36, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x2D, 0x32, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x2D, 0x33, 0x5D, 0x7C, 0x39, 0x5B, 0x30, 0x32, 0x33, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x36, 0x7D, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x32, 0x34, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x37, 0x7D, 0x7C, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x30, 0x31, 0x2D, 0x38, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x31, 0x33, 0x35, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x34, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x2D, 0x32, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x31, 0x35, 0x36, 0x5D, 0x7C, 0x39, 0x5B, 0x30, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x36, 0x7D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x2D, 0x36, 0x5D, 0x7C, 0x31, 0x5B, 0x31, 0x2D, 0x35, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x2D, 0x36, 0x38, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x2D, 0x34, 0x5D, 0x7C, 0x34, 0x5C, 0x64, 0x7C, 0x35, 0x5B, 0x30, 0x2D, 0x35, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x33, 0x2D, 0x35, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x31, 0x33, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x30, 0x31, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x36, 0x7D, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x33, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x37, 0x7D, 0x7C, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x31, 0x2D, 0x33, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x2D, 0x34, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x32, 0x2D, 0x35, 0x37, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x2D, 0x33, 0x37, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x2D, 0x33, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x2D, 0x32, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x32, 0x34, 0x37, 0x5D, 0x7C, 0x39, 0x5B, 0x30, 0x2D, 0x33, 0x35, 0x36, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x36, 0x7D, 0x29, 0x7C, 0x38, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x38, 0x7D, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x30, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x37, 0x7D, 0x7C, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x30, 0x2D, 0x36, 0x38, 0x5D, 0x7C, 0x32, 0x5C, 0x64, 0x7C, 0x33, 0x5B, 0x30, 0x32, 0x2D, 0x35, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x2D, 0x34, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x2D, 0x34, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x31, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x31, 0x33, 0x35, 0x2D, 0x38, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x31, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x36, 0x7D, 0x29, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x39, 0x7D, 0x32, 0x07, 0x38, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x1A, 0x21, 0x12, 0x0D, 0x37, 0x5B, 0x30, 0x32, 0x2D, 0x34, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x37, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x22, 0x1F, 0x12, 0x09, 0x32, 0x30, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x37, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x39, 0x7D, 0x32, 0x09, 0x32, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x2A, 0x28, 0x12, 0x12, 0x39, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x33, 0x39, 0x7C, 0x34, 0x34, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x39, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x32, 0x1B, 0x12, 0x07, 0x37, 0x37, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x37, 0x37, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x53, 0x45, 0x50, 0x2E, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x35, 0x0A, 0x1C, 0x28, 0x38, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x2C, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x2C, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x01, 0x38, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x66, 0x0A, 0x21, 0x28, 0x5B, 0x31, 0x2D, 0x36, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x2C, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x2D, 0x31, 0x5B, 0x30, 0x31, 0x33, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x31, 0x33, 0x36, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x33, 0x35, 0x36, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x32, 0x34, 0x36, 0x5D, 0x7C, 0x35, 0x34, 0x7C, 0x36, 0x5B, 0x30, 0x33, 0x5D, 0x7C, 0x39, 0x30, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x58, 0x0A, 0x18, 0x28, 0x5B, 0x31, 0x2D, 0x36, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x2B, 0x31, 0x5B, 0x31, 0x33, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x31, 0x33, 0x36, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x33, 0x35, 0x36, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x32, 0x34, 0x36, 0x5D, 0x7C, 0x35, 0x34, 0x7C, 0x36, 0x5B, 0x30, 0x33, 0x5D, 0x7C, 0x39, 0x30, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x87, 0x01, 0x0A, 0x1C, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x53, 0x31, 0x5B, 0x32, 0x34, 0x35, 0x37, 0x5D, 0x7C, 0x32, 0x5B, 0x32, 0x34, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x32, 0x34, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x33, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x2D, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x32, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x32, 0x35, 0x2D, 0x38, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x2D, 0x35, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x2D, 0x33, 0x5D, 0x29, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x7F, 0x0A, 0x17, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x2C, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x53, 0x31, 0x5B, 0x32, 0x34, 0x35, 0x37, 0x5D, 0x7C, 0x32, 0x5B, 0x32, 0x34, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x32, 0x34, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x33, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x2D, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x32, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x32, 0x35, 0x2D, 0x38, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x2D, 0x35, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x2D, 0x33, 0x5D, 0x29, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x41, 0x0A, 0x20, 0x28, 0x37, 0x5B, 0x30, 0x32, 0x2D, 0x34, 0x36, 0x37, 0x5D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x09, 0x37, 0x5B, 0x30, 0x32, 0x2D, 0x34, 0x36, 0x37, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2B, 0x0A, 0x14, 0x28, 0x32, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x2C, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x02, 0x32, 0x30, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x3D, 0x0A, 0x1F, 0x28, 0x39, 0x5B, 0x30, 0x33, 0x34, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x06, 0x39, 0x5B, 0x30, 0x33, 0x34, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xA2, 0x01, 0x30, 0x0A, 0x1C, 0x28, 0x38, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x2C, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x2C, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x01, 0x38, 0x2A, 0x00, 0xA2, 0x01, 0x61, 0x0A, 0x21, 0x28, 0x5B, 0x31, 0x2D, 0x36, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x2C, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x2D, 0x31, 0x5B, 0x30, 0x31, 0x33, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x31, 0x33, 0x36, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x33, 0x35, 0x36, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x32, 0x34, 0x36, 0x5D, 0x7C, 0x35, 0x34, 0x7C, 0x36, 0x5B, 0x30, 0x33, 0x5D, 0x7C, 0x39, 0x30, 0x2A, 0x00, 0xA2, 0x01, 0x53, 0x0A, 0x18, 0x28, 0x5B, 0x31, 0x2D, 0x36, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x2B, 0x31, 0x5B, 0x31, 0x33, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x31, 0x33, 0x36, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x33, 0x35, 0x36, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x32, 0x34, 0x36, 0x5D, 0x7C, 0x35, 0x34, 0x7C, 0x36, 0x5B, 0x30, 0x33, 0x5D, 0x7C, 0x39, 0x30, 0x2A, 0x00, 0xA2, 0x01, 0x82, 0x01, 0x0A, 0x1C, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x53, 0x31, 0x5B, 0x32, 0x34, 0x35, 0x37, 0x5D, 0x7C, 0x32, 0x5B, 0x32, 0x34, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x32, 0x34, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x33, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x2D, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x32, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x32, 0x35, 0x2D, 0x38, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x2D, 0x35, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x2D, 0x33, 0x5D, 0x29, 0x2A, 0x00, 0xA2, 0x01, 0x7A, 0x0A, 0x17, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x2C, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x53, 0x31, 0x5B, 0x32, 0x34, 0x35, 0x37, 0x5D, 0x7C, 0x32, 0x5B, 0x32, 0x34, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x32, 0x34, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x33, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x2D, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x32, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x32, 0x35, 0x2D, 0x38, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x2D, 0x35, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x2D, 0x33, 0x5D, 0x29, 0x2A, 0x00, 0xA2, 0x01, 0x3C, 0x0A, 0x20, 0x28, 0x37, 0x5B, 0x30, 0x32, 0x2D, 0x34, 0x36, 0x37, 0x5D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x09, 0x37, 0x5B, 0x30, 0x32, 0x2D, 0x34, 0x36, 0x37, 0x5D, 0x2A, 0x00, 0xA2, 0x01, 0x26, 0x0A, 0x14, 0x28, 0x32, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x2C, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x02, 0x32, 0x30, 0x2A, 0x00, 0xA2, 0x01, 0x38, 0x0A, 0x1F, 0x28, 0x39, 0x5B, 0x30, 0x33, 0x34, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x06, 0x39, 0x5B, 0x30, 0x33, 0x34, 0x5D, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xF1, 0x03, 0x0A, 0x24, 0x12, 0x18, 0x5B, 0x33, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x7C, 0x5B, 0x31, 0x37, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x31, 0x30, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x38, 0x2C, 0x31, 0x31, 0x7D, 0x12, 0x1E, 0x12, 0x0B, 0x36, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x36, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x1A, 0x29, 0x12, 0x16, 0x28, 0x3F, 0x3A, 0x38, 0x5B, 0x31, 0x2D, 0x35, 0x5D, 0x7C, 0x39, 0x5B, 0x30, 0x2D, 0x38, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x22, 0x24, 0x12, 0x0A, 0x31, 0x3F, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x09, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x2C, 0x31, 0x31, 0x7D, 0x32, 0x0B, 0x31, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x2A, 0x20, 0x12, 0x09, 0x31, 0x39, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x31, 0x7D, 0x32, 0x0B, 0x31, 0x39, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x1E, 0x12, 0x0B, 0x33, 0x5B, 0x30, 0x2D, 0x32, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x33, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x4A, 0x02, 0x53, 0x47, 0x50, 0x41, 0x5A, 0x0B, 0x30, 0x5B, 0x30, 0x2D, 0x33, 0x5D, 0x5B, 0x30, 0x2D, 0x39, 0x5D, 0x9A, 0x01, 0x2F, 0x0A, 0x14, 0x28, 0x5B, 0x33, 0x36, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x0C, 0x5B, 0x33, 0x36, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x2E, 0x0A, 0x17, 0x28, 0x31, 0x5B, 0x38, 0x39, 0x5D, 0x30, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x05, 0x31, 0x5B, 0x38, 0x39, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x28, 0x0A, 0x14, 0x28, 0x37, 0x30, 0x30, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x02, 0x37, 0x30, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x27, 0x0A, 0x13, 0x28, 0x38, 0x30, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x02, 0x38, 0x30, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x20, 0x12, 0x09, 0x37, 0x30, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x31, 0x7D, 0x32, 0x0B, 0x37, 0x30, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x0A, 0xC3, 0x01, 0x0A, 0x13, 0x12, 0x0A, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x12, 0x27, 0x12, 0x18, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x2D, 0x34, 0x36, 0x38, 0x5D, 0x5C, 0x64, 0x7C, 0x37, 0x5B, 0x30, 0x31, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x32, 0x04, 0x32, 0x31, 0x35, 0x38, 0x1A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x25, 0x12, 0x16, 0x28, 0x3F, 0x3A, 0x5B, 0x35, 0x39, 0x5D, 0x5C, 0x64, 0x7C, 0x37, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x32, 0x04, 0x35, 0x30, 0x31, 0x32, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x53, 0x48, 0x50, 0xA2, 0x02, 0x5A, 0x02, 0x30, 0x30, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xD2, 0x04, 0x0A, 0x23, 0x12, 0x18, 0x5B, 0x31, 0x2D, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x37, 0x7D, 0x7C, 0x5B, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x37, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x38, 0x7D, 0x12, 0x41, 0x12, 0x2C, 0x28, 0x3F, 0x3A, 0x31, 0x5C, 0x64, 0x7C, 0x32, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x7C, 0x33, 0x5B, 0x34, 0x2D, 0x38, 0x5D, 0x7C, 0x34, 0x5B, 0x32, 0x34, 0x2D, 0x38, 0x5D, 0x7C, 0x5B, 0x35, 0x37, 0x5D, 0x5B, 0x33, 0x2D, 0x38, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x32, 0x08, 0x31, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x1A, 0x31, 0x12, 0x1E, 0x28, 0x3F, 0x3A, 0x5B, 0x33, 0x37, 0x5D, 0x5B, 0x30, 0x31, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x31, 0x39, 0x5D, 0x7C, 0x35, 0x31, 0x7C, 0x36, 0x34, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x33, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x22, 0x1E, 0x12, 0x09, 0x38, 0x30, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x36, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x2D, 0x12, 0x18, 0x39, 0x30, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x36, 0x7D, 0x7C, 0x38, 0x39, 0x5B, 0x31, 0x2D, 0x33, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x2C, 0x35, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x38, 0x7D, 0x32, 0x08, 0x39, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x25, 0x12, 0x12, 0x28, 0x3F, 0x3A, 0x35, 0x39, 0x7C, 0x38, 0x5B, 0x31, 0x2D, 0x33, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x35, 0x39, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x4A, 0x02, 0x53, 0x49, 0x50, 0x82, 0x03, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x54, 0x0A, 0x19, 0x28, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x21, 0x5B, 0x31, 0x32, 0x5D, 0x7C, 0x33, 0x5B, 0x34, 0x2D, 0x38, 0x5D, 0x7C, 0x34, 0x5B, 0x32, 0x34, 0x2D, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x33, 0x2D, 0x38, 0x5D, 0x7C, 0x37, 0x5B, 0x33, 0x2D, 0x38, 0x5D, 0x22, 0x05, 0x28, 0x30, 0x24, 0x31, 0x29, 0x2A, 0x00, 0x9A, 0x01, 0x41, 0x0A, 0x17, 0x28, 0x5B, 0x33, 0x2D, 0x37, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x15, 0x5B, 0x33, 0x37, 0x5D, 0x5B, 0x30, 0x31, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x31, 0x39, 0x5D, 0x7C, 0x35, 0x31, 0x7C, 0x36, 0x34, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2D, 0x0A, 0x13, 0x28, 0x5B, 0x38, 0x39, 0x5D, 0x5B, 0x30, 0x39, 0x5D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x36, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x08, 0x5B, 0x38, 0x39, 0x5D, 0x5B, 0x30, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2D, 0x0A, 0x12, 0x28, 0x5B, 0x35, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x09, 0x35, 0x39, 0x7C, 0x38, 0x5B, 0x31, 0x2D, 0x33, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xEB, 0x02, 0x0A, 0x25, 0x12, 0x12, 0x30, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x7C, 0x5B, 0x34, 0x37, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x12, 0x1A, 0x12, 0x07, 0x37, 0x39, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x37, 0x39, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x1A, 0x28, 0x12, 0x15, 0x28, 0x3F, 0x3A, 0x34, 0x5B, 0x30, 0x31, 0x35, 0x2D, 0x38, 0x5D, 0x7C, 0x39, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x34, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x22, 0x1E, 0x12, 0x0B, 0x38, 0x30, 0x5B, 0x30, 0x31, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x2A, 0x1E, 0x12, 0x0B, 0x38, 0x32, 0x5B, 0x30, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x32, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x32, 0x2D, 0x12, 0x1A, 0x38, 0x31, 0x30, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x2D, 0x36, 0x5D, 0x7C, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x31, 0x30, 0x32, 0x31, 0x32, 0x33, 0x34, 0x3A, 0x1B, 0x12, 0x08, 0x38, 0x38, 0x30, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x38, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x53, 0x4A, 0x50, 0x2F, 0x5A, 0x02, 0x30, 0x30, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x42, 0x12, 0x28, 0x30, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x7C, 0x38, 0x31, 0x28, 0x3F, 0x3A, 0x30, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x31, 0x5C, 0x64, 0x29, 0x7C, 0x35, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x32, 0x05, 0x30, 0x31, 0x32, 0x33, 0x34, 0xD0, 0x01, 0x01, 0x0A, 0xEC, 0x03, 0x0A, 0x15, 0x12, 0x0C, 0x5B, 0x32, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x12, 0x1E, 0x12, 0x0A, 0x5B, 0x32, 0x2D, 0x35, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x1A, 0x36, 0x12, 0x22, 0x39, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x7C, 0x31, 0x5B, 0x30, 0x2D, 0x32, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x34, 0x38, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x39, 0x31, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x1C, 0x12, 0x08, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x2A, 0x12, 0x16, 0x39, 0x28, 0x3F, 0x3A, 0x5B, 0x37, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x7C, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x29, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x39, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x1F, 0x12, 0x0B, 0x38, 0x5B, 0x35, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x35, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x2B, 0x12, 0x17, 0x36, 0x28, 0x3F, 0x3A, 0x35, 0x5B, 0x30, 0x2D, 0x34, 0x5D, 0x7C, 0x39, 0x5B, 0x30, 0x2D, 0x36, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x36, 0x39, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x4A, 0x02, 0x53, 0x4B, 0x50, 0xA5, 0x03, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x31, 0x0A, 0x18, 0x28, 0x32, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x2F, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x01, 0x32, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x3B, 0x0A, 0x1E, 0x28, 0x5B, 0x33, 0x2D, 0x35, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x2F, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x05, 0x5B, 0x33, 0x2D, 0x35, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x34, 0x0A, 0x1A, 0x28, 0x5B, 0x36, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x05, 0x5B, 0x36, 0x38, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x8D, 0x02, 0x0A, 0x17, 0x12, 0x0C, 0x5B, 0x32, 0x2D, 0x35, 0x37, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x38, 0x7D, 0x12, 0x2A, 0x12, 0x15, 0x5B, 0x32, 0x33, 0x35, 0x5D, 0x32, 0x5B, 0x32, 0x2D, 0x34, 0x5D, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x38, 0x7D, 0x32, 0x08, 0x32, 0x32, 0x32, 0x32, 0x31, 0x32, 0x33, 0x34, 0x1A, 0x3F, 0x12, 0x2A, 0x28, 0x3F, 0x3A, 0x32, 0x35, 0x7C, 0x33, 0x5B, 0x30, 0x33, 0x5D, 0x7C, 0x34, 0x34, 0x7C, 0x35, 0x5B, 0x30, 0x35, 0x36, 0x5D, 0x7C, 0x37, 0x5B, 0x36, 0x2D, 0x38, 0x5D, 0x7C, 0x38, 0x38, 0x29, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x38, 0x7D, 0x32, 0x08, 0x32, 0x35, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x53, 0x4C, 0x50, 0xE8, 0x01, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x20, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x22, 0x05, 0x28, 0x30, 0x24, 0x31, 0x29, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x88, 0x04, 0x0A, 0x19, 0x12, 0x0D, 0x5B, 0x30, 0x35, 0x2D, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x31, 0x30, 0x7D, 0x12, 0x32, 0x12, 0x1A, 0x30, 0x35, 0x34, 0x39, 0x28, 0x3F, 0x3A, 0x38, 0x5B, 0x30, 0x31, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x39, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x30, 0x35, 0x34, 0x39, 0x38, 0x38, 0x36, 0x33, 0x37, 0x37, 0x1A, 0x1D, 0x12, 0x0A, 0x36, 0x5B, 0x31, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x36, 0x36, 0x36, 0x36, 0x31, 0x32, 0x31, 0x32, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x1E, 0x12, 0x0B, 0x37, 0x5B, 0x31, 0x37, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x37, 0x31, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x1E, 0x12, 0x0B, 0x35, 0x5B, 0x31, 0x35, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x35, 0x38, 0x30, 0x30, 0x31, 0x31, 0x31, 0x30, 0x4A, 0x02, 0x53, 0x4D, 0x50, 0xFA, 0x02, 0x5A, 0x02, 0x30, 0x30, 0x7A, 0x14, 0x28, 0x3F, 0x3A, 0x30, 0x35, 0x34, 0x39, 0x29, 0x3F, 0x28, 0x5B, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x29, 0x82, 0x01, 0x06, 0x30, 0x35, 0x34, 0x39, 0x24, 0x31, 0x9A, 0x01, 0x36, 0x0A, 0x1C, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x05, 0x5B, 0x35, 0x2D, 0x37, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x1D, 0x0A, 0x0D, 0x28, 0x30, 0x35, 0x34, 0x39, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x01, 0x30, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x1C, 0x0A, 0x07, 0x28, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x29, 0x12, 0x07, 0x30, 0x35, 0x34, 0x39, 0x20, 0x24, 0x31, 0x1A, 0x04, 0x5B, 0x38, 0x39, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0xA2, 0x01, 0x34, 0x0A, 0x1C, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x05, 0x5B, 0x35, 0x2D, 0x37, 0x5D, 0x2A, 0x00, 0xA2, 0x01, 0x1D, 0x0A, 0x0D, 0x28, 0x30, 0x35, 0x34, 0x39, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x29, 0x12, 0x07, 0x28, 0x24, 0x31, 0x29, 0x20, 0x24, 0x32, 0x1A, 0x01, 0x30, 0x2A, 0x00, 0xA2, 0x01, 0x1C, 0x0A, 0x07, 0x28, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x29, 0x12, 0x09, 0x28, 0x30, 0x35, 0x34, 0x39, 0x29, 0x20, 0x24, 0x31, 0x1A, 0x04, 0x5B, 0x38, 0x39, 0x5D, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xD0, 0x01, 0x01, 0x0A, 0x9A, 0x03, 0x0A, 0x12, 0x12, 0x09, 0x5B, 0x33, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x12, 0x34, 0x12, 0x20, 0x33, 0x28, 0x3F, 0x3A, 0x30, 0x31, 0x30, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x38, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x33, 0x30, 0x31, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x1A, 0xA7, 0x01, 0x12, 0x92, 0x01, 0x37, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x31, 0x32, 0x35, 0x36, 0x5D, 0x30, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x32, 0x33, 0x5D, 0x7C, 0x32, 0x5B, 0x38, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x33, 0x34, 0x38, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x33, 0x38, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x34, 0x35, 0x5D, 0x7C, 0x38, 0x5B, 0x33, 0x2D, 0x38, 0x5D, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x30, 0x31, 0x34, 0x2D, 0x38, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x2D, 0x37, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x2D, 0x33, 0x35, 0x2D, 0x38, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x2D, 0x36, 0x5D, 0x7C, 0x5B, 0x35, 0x36, 0x5D, 0x5C, 0x64, 0x7C, 0x37, 0x5B, 0x30, 0x2D, 0x35, 0x38, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x31, 0x5D, 0x7C, 0x39, 0x5B, 0x30, 0x2D, 0x36, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x37, 0x30, 0x31, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x1E, 0x12, 0x0A, 0x33, 0x33, 0x33, 0x30, 0x31, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x33, 0x33, 0x33, 0x30, 0x31, 0x31, 0x32, 0x33, 0x34, 0x4A, 0x02, 0x53, 0x4E, 0x50, 0xDD, 0x01, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x2F, 0x0A, 0x1C, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x97, 0x02, 0x0A, 0x19, 0x12, 0x0E, 0x5B, 0x31, 0x33, 0x2D, 0x35, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x37, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x12, 0x2A, 0x12, 0x18, 0x28, 0x3F, 0x3A, 0x35, 0x5B, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x31, 0x33, 0x34, 0x5D, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x35, 0x35, 0x32, 0x32, 0x30, 0x31, 0x30, 0x1A, 0x24, 0x12, 0x11, 0x28, 0x3F, 0x3A, 0x39, 0x5B, 0x30, 0x31, 0x5D, 0x7C, 0x31, 0x35, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x39, 0x30, 0x37, 0x39, 0x32, 0x30, 0x32, 0x34, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x53, 0x4F, 0x50, 0xFC, 0x01, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x24, 0x0A, 0x0F, 0x28, 0x5B, 0x31, 0x33, 0x2D, 0x35, 0x5D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x06, 0x5B, 0x31, 0x33, 0x2D, 0x35, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x22, 0x0A, 0x0F, 0x28, 0x5B, 0x31, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x04, 0x31, 0x35, 0x7C, 0x39, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x67, 0x0A, 0x00, 0x12, 0x00, 0x1A, 0x00, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x53, 0x52, 0x50, 0xD5, 0x04, 0x5A, 0x02, 0x30, 0x30, 0x90, 0x01, 0x01, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xC9, 0x01, 0x0A, 0x12, 0x12, 0x09, 0x5B, 0x32, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x12, 0x19, 0x12, 0x07, 0x32, 0x32, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x32, 0x32, 0x32, 0x31, 0x32, 0x33, 0x34, 0x1A, 0x1C, 0x12, 0x0A, 0x39, 0x5B, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x39, 0x38, 0x31, 0x32, 0x33, 0x34, 0x35, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x53, 0x54, 0x50, 0xEF, 0x01, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x1B, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x8C, 0x03, 0x0A, 0x2F, 0x12, 0x1D, 0x5B, 0x32, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x7C, 0x5B, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x3F, 0x1A, 0x0E, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x7C, 0x5C, 0x64, 0x7B, 0x31, 0x31, 0x7D, 0x12, 0x1E, 0x12, 0x0B, 0x32, 0x5B, 0x31, 0x2D, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x1A, 0x19, 0x12, 0x06, 0x37, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x37, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x2E, 0x12, 0x12, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x3F, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x3F, 0x32, 0x07, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x2A, 0x2E, 0x12, 0x12, 0x39, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x3F, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x3F, 0x32, 0x07, 0x39, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x53, 0x56, 0x50, 0xF7, 0x03, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x21, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x04, 0x5B, 0x32, 0x37, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x21, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x04, 0x5B, 0x38, 0x39, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x2B, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x04, 0x5B, 0x38, 0x39, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xF9, 0x02, 0x0A, 0x18, 0x12, 0x0D, 0x5B, 0x31, 0x2D, 0x35, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x39, 0x7D, 0x12, 0x56, 0x12, 0x40, 0x28, 0x3F, 0x3A, 0x31, 0x28, 0x3F, 0x3A, 0x31, 0x5C, 0x64, 0x3F, 0x7C, 0x34, 0x5C, 0x64, 0x7C, 0x5B, 0x32, 0x33, 0x35, 0x36, 0x5D, 0x29, 0x7C, 0x32, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x5D, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x31, 0x5C, 0x64, 0x7C, 0x5B, 0x33, 0x34, 0x5D, 0x29, 0x7C, 0x34, 0x5B, 0x31, 0x33, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x33, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x39, 0x7D, 0x32, 0x09, 0x31, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x1A, 0x3C, 0x12, 0x28, 0x39, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x32, 0x33, 0x5D, 0x7C, 0x34, 0x5B, 0x34, 0x35, 0x37, 0x5D, 0x7C, 0x35, 0x35, 0x7C, 0x36, 0x5B, 0x36, 0x37, 0x5D, 0x7C, 0x38, 0x38, 0x7C, 0x39, 0x5B, 0x31, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x39, 0x34, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x30, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x53, 0x59, 0x50, 0xC3, 0x07, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x31, 0x0A, 0x17, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x05, 0x5B, 0x31, 0x2D, 0x35, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2E, 0x0A, 0x18, 0x28, 0x39, 0x5B, 0x33, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x39, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xF0, 0x02, 0x0A, 0x13, 0x12, 0x0A, 0x5B, 0x30, 0x32, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x12, 0x8A, 0x01, 0x12, 0x77, 0x32, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x37, 0x5D, 0x7C, 0x5B, 0x31, 0x33, 0x5D, 0x37, 0x7C, 0x32, 0x5B, 0x35, 0x37, 0x5D, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x33, 0x34, 0x5D, 0x7C, 0x5B, 0x31, 0x32, 0x37, 0x38, 0x5D, 0x33, 0x7C, 0x33, 0x5B, 0x32, 0x33, 0x5D, 0x7C, 0x5B, 0x34, 0x36, 0x5D, 0x5B, 0x33, 0x34, 0x5D, 0x29, 0x7C, 0x28, 0x3F, 0x3A, 0x34, 0x30, 0x5B, 0x34, 0x2D, 0x36, 0x39, 0x5D, 0x7C, 0x36, 0x37, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x35, 0x2D, 0x37, 0x5D, 0x7C, 0x31, 0x5B, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x32, 0x33, 0x5D, 0x5B, 0x37, 0x38, 0x5D, 0x7C, 0x34, 0x38, 0x7C, 0x35, 0x5B, 0x30, 0x31, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x32, 0x32, 0x31, 0x37, 0x31, 0x32, 0x33, 0x34, 0x1A, 0x1E, 0x12, 0x0B, 0x37, 0x5B, 0x36, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x37, 0x36, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x1C, 0x12, 0x09, 0x30, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x30, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x53, 0x5A, 0x50, 0x8C, 0x02, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x22, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x05, 0x5B, 0x30, 0x32, 0x37, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x1C, 0x12, 0x09, 0x30, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x30, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xD0, 0x01, 0x01, 0x0A, 0xA1, 0x03, 0x0A, 0x1E, 0x12, 0x0B, 0x5B, 0x35, 0x36, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x12, 0x3A, 0x12, 0x1B, 0x36, 0x34, 0x39, 0x28, 0x3F, 0x3A, 0x37, 0x31, 0x32, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x34, 0x5C, 0x64, 0x7C, 0x35, 0x30, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x32, 0x0A, 0x36, 0x34, 0x39, 0x37, 0x31, 0x32, 0x31, 0x32, 0x33, 0x34, 0x1A, 0x52, 0x12, 0x3C, 0x36, 0x34, 0x39, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x31, 0x32, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x2D, 0x35, 0x5D, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x31, 0x2D, 0x33, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x2D, 0x35, 0x37, 0x5D, 0x29, 0x7C, 0x34, 0x5B, 0x33, 0x34, 0x5D, 0x5B, 0x31, 0x32, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x36, 0x34, 0x39, 0x32, 0x33, 0x31, 0x31, 0x32, 0x33, 0x34, 0x22, 0x33, 0x12, 0x1D, 0x38, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x35, 0x35, 0x7C, 0x36, 0x36, 0x7C, 0x37, 0x37, 0x7C, 0x38, 0x38, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x30, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x2A, 0x23, 0x12, 0x0D, 0x39, 0x30, 0x30, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x39, 0x30, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x2D, 0x12, 0x17, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x33, 0x33, 0x7C, 0x34, 0x34, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x35, 0x30, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x42, 0x24, 0x12, 0x0E, 0x36, 0x34, 0x39, 0x37, 0x31, 0x5B, 0x30, 0x31, 0x5D, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x36, 0x34, 0x39, 0x37, 0x31, 0x30, 0x31, 0x32, 0x33, 0x34, 0x4A, 0x02, 0x54, 0x43, 0x50, 0x01, 0x5A, 0x03, 0x30, 0x31, 0x31, 0x62, 0x01, 0x31, 0x7A, 0x01, 0x31, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xBA, 0x01, 0x03, 0x36, 0x34, 0x39, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xA4, 0x02, 0x0A, 0x14, 0x12, 0x0B, 0x5B, 0x32, 0x36, 0x37, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x12, 0x32, 0x12, 0x1F, 0x32, 0x32, 0x28, 0x3F, 0x3A, 0x5B, 0x33, 0x37, 0x38, 0x39, 0x5D, 0x30, 0x7C, 0x35, 0x5B, 0x30, 0x2D, 0x35, 0x5D, 0x7C, 0x36, 0x5B, 0x38, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x32, 0x32, 0x35, 0x30, 0x31, 0x32, 0x33, 0x34, 0x1A, 0x40, 0x12, 0x2D, 0x28, 0x3F, 0x3A, 0x36, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x30, 0x2D, 0x37, 0x5D, 0x7C, 0x36, 0x5C, 0x64, 0x29, 0x7C, 0x37, 0x37, 0x5C, 0x64, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x35, 0x5B, 0x30, 0x2D, 0x34, 0x5D, 0x7C, 0x39, 0x5C, 0x64, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x36, 0x33, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x54, 0x44, 0x50, 0xEB, 0x01, 0x5A, 0x05, 0x30, 0x30, 0x7C, 0x31, 0x36, 0x8A, 0x01, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x2F, 0x0A, 0x1C, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x6D, 0x0A, 0x00, 0x12, 0x00, 0x1A, 0x00, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x54, 0x46, 0x50, 0x86, 0x02, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x90, 0x01, 0x01, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x88, 0x02, 0x0A, 0x14, 0x12, 0x0B, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x12, 0x33, 0x12, 0x21, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x32, 0x2D, 0x37, 0x5D, 0x7C, 0x33, 0x5B, 0x32, 0x33, 0x5D, 0x7C, 0x34, 0x34, 0x7C, 0x35, 0x35, 0x7C, 0x36, 0x36, 0x7C, 0x37, 0x37, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x32, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x1A, 0x32, 0x12, 0x20, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x35, 0x36, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x2D, 0x37, 0x5D, 0x7C, 0x39, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x30, 0x31, 0x31, 0x32, 0x33, 0x34, 0x35, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x54, 0x47, 0x50, 0xE4, 0x01, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x25, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xD0, 0x01, 0x01, 0x0A, 0xDB, 0x03, 0x0A, 0x1F, 0x12, 0x13, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x7C, 0x31, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x38, 0x2C, 0x31, 0x30, 0x7D, 0x12, 0x3F, 0x12, 0x2C, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x32, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x32, 0x2D, 0x35, 0x5D, 0x7C, 0x35, 0x5B, 0x33, 0x2D, 0x36, 0x5D, 0x7C, 0x37, 0x5B, 0x33, 0x2D, 0x37, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x1A, 0x1A, 0x12, 0x06, 0x38, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x22, 0x1F, 0x12, 0x09, 0x31, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x31, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x1F, 0x12, 0x09, 0x31, 0x39, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x31, 0x39, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x1B, 0x12, 0x07, 0x36, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x36, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x4A, 0x02, 0x54, 0x48, 0x50, 0x42, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x27, 0x0A, 0x11, 0x28, 0x32, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x32, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x33, 0x0A, 0x19, 0x28, 0x5B, 0x33, 0x2D, 0x37, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x05, 0x5B, 0x33, 0x2D, 0x37, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x27, 0x0A, 0x11, 0x28, 0x38, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x38, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2C, 0x0A, 0x17, 0x28, 0x31, 0x5B, 0x38, 0x39, 0x5D, 0x30, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x31, 0x22, 0x02, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xAA, 0x04, 0x0A, 0x16, 0x12, 0x0B, 0x5B, 0x33, 0x2D, 0x35, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x39, 0x7D, 0x12, 0x56, 0x12, 0x40, 0x28, 0x3F, 0x3A, 0x33, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x33, 0x2D, 0x35, 0x5D, 0x7C, 0x32, 0x5B, 0x32, 0x34, 0x35, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x32, 0x5D, 0x7C, 0x34, 0x5B, 0x32, 0x34, 0x2D, 0x37, 0x5D, 0x7C, 0x35, 0x5B, 0x32, 0x35, 0x5D, 0x7C, 0x37, 0x32, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x34, 0x36, 0x7C, 0x37, 0x34, 0x7C, 0x38, 0x37, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x39, 0x7D, 0x32, 0x09, 0x33, 0x37, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x1A, 0x2C, 0x12, 0x18, 0x28, 0x3F, 0x3A, 0x35, 0x30, 0x35, 0x7C, 0x39, 0x5B, 0x30, 0x2D, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x39, 0x31, 0x37, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x54, 0x4A, 0x50, 0xE0, 0x07, 0x5A, 0x04, 0x38, 0x7E, 0x31, 0x30, 0x62, 0x01, 0x38, 0x7A, 0x01, 0x38, 0x9A, 0x01, 0x3E, 0x0A, 0x1A, 0x28, 0x5B, 0x33, 0x34, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x0C, 0x5B, 0x33, 0x34, 0x5D, 0x37, 0x7C, 0x39, 0x31, 0x5B, 0x37, 0x38, 0x5D, 0x22, 0x06, 0x28, 0x38, 0x29, 0x20, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x47, 0x0A, 0x17, 0x28, 0x5B, 0x34, 0x35, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x18, 0x34, 0x5B, 0x34, 0x38, 0x5D, 0x7C, 0x35, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x31, 0x39, 0x7C, 0x5B, 0x30, 0x32, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x29, 0x22, 0x06, 0x28, 0x38, 0x29, 0x20, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x43, 0x0A, 0x13, 0x28, 0x33, 0x33, 0x31, 0x37, 0x30, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x03, 0x33, 0x33, 0x31, 0x1A, 0x04, 0x33, 0x33, 0x31, 0x37, 0x1A, 0x05, 0x33, 0x33, 0x31, 0x37, 0x30, 0x1A, 0x06, 0x33, 0x33, 0x31, 0x37, 0x30, 0x30, 0x22, 0x06, 0x28, 0x38, 0x29, 0x20, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x52, 0x0A, 0x12, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x06, 0x33, 0x5B, 0x31, 0x2D, 0x35, 0x5D, 0x1A, 0x20, 0x33, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x32, 0x34, 0x35, 0x5D, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x31, 0x5B, 0x30, 0x2D, 0x35, 0x38, 0x39, 0x5D, 0x29, 0x29, 0x22, 0x06, 0x28, 0x38, 0x29, 0x20, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x67, 0x0A, 0x00, 0x12, 0x00, 0x1A, 0x00, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x54, 0x4B, 0x50, 0xB2, 0x05, 0x5A, 0x02, 0x30, 0x30, 0x90, 0x01, 0x01, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x97, 0x02, 0x0A, 0x16, 0x12, 0x0D, 0x5B, 0x32, 0x2D, 0x34, 0x37, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x12, 0x2F, 0x12, 0x1D, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x31, 0x2D, 0x35, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x2D, 0x34, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x32, 0x31, 0x31, 0x32, 0x33, 0x34, 0x35, 0x1A, 0x1D, 0x12, 0x0B, 0x37, 0x5B, 0x32, 0x2D, 0x34, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x37, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x22, 0x19, 0x12, 0x07, 0x38, 0x30, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x38, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x2A, 0x19, 0x12, 0x07, 0x39, 0x30, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x39, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x19, 0x12, 0x07, 0x37, 0x30, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x32, 0x07, 0x37, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x54, 0x4C, 0x50, 0x9E, 0x05, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x1B, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x81, 0x02, 0x0A, 0x13, 0x12, 0x0A, 0x5B, 0x31, 0x2D, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x12, 0x2C, 0x12, 0x19, 0x28, 0x3F, 0x3A, 0x31, 0x32, 0x5C, 0x64, 0x7C, 0x32, 0x34, 0x33, 0x7C, 0x5B, 0x33, 0x2D, 0x35, 0x5D, 0x32, 0x32, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x1A, 0x1E, 0x12, 0x0B, 0x36, 0x5B, 0x36, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x36, 0x36, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x54, 0x4D, 0x50, 0xE1, 0x07, 0x5A, 0x04, 0x38, 0x7E, 0x31, 0x30, 0x62, 0x01, 0x38, 0x7A, 0x01, 0x38, 0x9A, 0x01, 0x35, 0x0A, 0x1E, 0x28, 0x5B, 0x31, 0x2D, 0x36, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x22, 0x04, 0x38, 0x20, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xFD, 0x01, 0x0A, 0x15, 0x12, 0x0C, 0x5B, 0x32, 0x34, 0x37, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x12, 0x19, 0x12, 0x06, 0x37, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x37, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x1A, 0x29, 0x12, 0x16, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x30, 0x2D, 0x37, 0x5D, 0x7C, 0x34, 0x30, 0x7C, 0x39, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x32, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x1E, 0x12, 0x0B, 0x38, 0x5B, 0x30, 0x32, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x32, 0x08, 0x38, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x54, 0x4E, 0x50, 0xD8, 0x01, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x29, 0x0A, 0x19, 0x28, 0x5B, 0x32, 0x34, 0x37, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x67, 0x0A, 0x00, 0x12, 0x00, 0x1A, 0x00, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x54, 0x4F, 0x50, 0xA4, 0x05, 0x5A, 0x02, 0x30, 0x30, 0x90, 0x01, 0x01, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xF2, 0x04, 0x0A, 0x21, 0x12, 0x15, 0x5B, 0x32, 0x2D, 0x35, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x7C, 0x34, 0x34, 0x34, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x31, 0x30, 0x7D, 0x12, 0x99, 0x01, 0x12, 0x82, 0x01, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x33, 0x5D, 0x5B, 0x32, 0x36, 0x5D, 0x7C, 0x5B, 0x32, 0x38, 0x5D, 0x5B, 0x32, 0x34, 0x36, 0x38, 0x5D, 0x7C, 0x5B, 0x34, 0x35, 0x5D, 0x5B, 0x32, 0x36, 0x38, 0x5D, 0x7C, 0x5B, 0x36, 0x37, 0x5D, 0x5B, 0x32, 0x34, 0x36, 0x5D, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x33, 0x5D, 0x5B, 0x32, 0x38, 0x5D, 0x7C, 0x5B, 0x32, 0x34, 0x2D, 0x36, 0x5D, 0x5B, 0x32, 0x34, 0x36, 0x38, 0x5D, 0x7C, 0x5B, 0x37, 0x38, 0x5D, 0x5B, 0x30, 0x32, 0x34, 0x36, 0x38, 0x5D, 0x7C, 0x39, 0x32, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x36, 0x5D, 0x5B, 0x32, 0x34, 0x36, 0x5D, 0x7C, 0x5B, 0x32, 0x33, 0x35, 0x37, 0x38, 0x5D, 0x5B, 0x32, 0x34, 0x36, 0x38, 0x5D, 0x7C, 0x34, 0x5B, 0x32, 0x36, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x1A, 0x46, 0x12, 0x30, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x2D, 0x37, 0x5D, 0x7C, 0x32, 0x32, 0x7C, 0x33, 0x5C, 0x64, 0x7C, 0x34, 0x5B, 0x31, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x35, 0x5D, 0x7C, 0x39, 0x5B, 0x32, 0x34, 0x36, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x35, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x22, 0x1E, 0x12, 0x08, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x2A, 0x1E, 0x12, 0x08, 0x39, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x39, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x54, 0x52, 0x50, 0x5A, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x48, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x1C, 0x5B, 0x32, 0x33, 0x5D, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x2D, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x2D, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x29, 0x22, 0x05, 0x28, 0x30, 0x24, 0x31, 0x29, 0x2A, 0x00, 0x9A, 0x01, 0x2F, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x05, 0x5B, 0x35, 0x38, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x28, 0x0A, 0x13, 0x28, 0x34, 0x34, 0x34, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x31, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x03, 0x34, 0x34, 0x34, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x1E, 0x12, 0x08, 0x35, 0x31, 0x32, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x35, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x26, 0x12, 0x11, 0x34, 0x34, 0x34, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x7C, 0x38, 0x35, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x07, 0x34, 0x34, 0x34, 0x31, 0x34, 0x34, 0x34, 0x0A, 0xDF, 0x03, 0x0A, 0x1D, 0x12, 0x0A, 0x5B, 0x35, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x12, 0x6D, 0x12, 0x4E, 0x38, 0x36, 0x38, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x30, 0x31, 0x7C, 0x32, 0x5B, 0x31, 0x2D, 0x34, 0x5D, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x30, 0x37, 0x7C, 0x31, 0x5B, 0x34, 0x2D, 0x36, 0x5D, 0x7C, 0x32, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x33, 0x2D, 0x36, 0x5D, 0x5C, 0x64, 0x7C, 0x37, 0x5B, 0x30, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x30, 0x2D, 0x38, 0x5D, 0x29, 0x7C, 0x38, 0x32, 0x5B, 0x31, 0x32, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x32, 0x0A, 0x38, 0x36, 0x38, 0x32, 0x32, 0x31, 0x31, 0x32, 0x33, 0x34, 0x1A, 0x7A, 0x12, 0x64, 0x38, 0x36, 0x38, 0x28, 0x3F, 0x3A, 0x32, 0x39, 0x5C, 0x64, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x31, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x5B, 0x36, 0x37, 0x39, 0x5D, 0x5C, 0x64, 0x7C, 0x38, 0x5B, 0x30, 0x2D, 0x34, 0x5D, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x32, 0x30, 0x7C, 0x37, 0x38, 0x7C, 0x38, 0x5C, 0x64, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x36, 0x38, 0x32, 0x39, 0x31, 0x31, 0x32, 0x33, 0x34, 0x22, 0x33, 0x12, 0x1D, 0x38, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x35, 0x35, 0x7C, 0x36, 0x36, 0x7C, 0x37, 0x37, 0x7C, 0x38, 0x38, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x30, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x2A, 0x23, 0x12, 0x0D, 0x39, 0x30, 0x30, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x39, 0x30, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x2D, 0x12, 0x17, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x33, 0x33, 0x7C, 0x34, 0x34, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x35, 0x30, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x54, 0x54, 0x50, 0x01, 0x5A, 0x03, 0x30, 0x31, 0x31, 0x62, 0x01, 0x31, 0x7A, 0x01, 0x31, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xBA, 0x01, 0x03, 0x38, 0x36, 0x38, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xAE, 0x01, 0x0A, 0x16, 0x12, 0x0B, 0x5B, 0x32, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x35, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x36, 0x7D, 0x12, 0x1C, 0x12, 0x0C, 0x32, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x32, 0x05, 0x32, 0x30, 0x31, 0x32, 0x33, 0x1A, 0x18, 0x12, 0x07, 0x39, 0x30, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x32, 0x06, 0x39, 0x30, 0x31, 0x32, 0x33, 0x34, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x54, 0x56, 0x50, 0xB0, 0x05, 0x5A, 0x02, 0x30, 0x30, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xE5, 0x02, 0x0A, 0x17, 0x12, 0x0C, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x38, 0x2C, 0x39, 0x7D, 0x12, 0x21, 0x12, 0x0C, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x38, 0x2C, 0x39, 0x7D, 0x32, 0x08, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x1A, 0x1A, 0x12, 0x06, 0x39, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x39, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x22, 0x1C, 0x12, 0x08, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x1C, 0x12, 0x08, 0x39, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x39, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x54, 0x57, 0x50, 0xF6, 0x06, 0x5A, 0x10, 0x30, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x32, 0x35, 0x36, 0x37, 0x39, 0x5D, 0x7C, 0x31, 0x39, 0x29, 0x62, 0x01, 0x30, 0x6A, 0x01, 0x23, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x38, 0x0A, 0x17, 0x28, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x0C, 0x5B, 0x32, 0x2D, 0x37, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x32, 0x0A, 0x19, 0x28, 0x5B, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x04, 0x38, 0x30, 0x7C, 0x39, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xC1, 0x03, 0x0A, 0x10, 0x12, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x12, 0x21, 0x12, 0x0B, 0x32, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x32, 0x09, 0x32, 0x32, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x1A, 0x2A, 0x12, 0x16, 0x28, 0x3F, 0x3A, 0x36, 0x5B, 0x31, 0x35, 0x38, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x36, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x22, 0x1F, 0x12, 0x0B, 0x38, 0x30, 0x5B, 0x30, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x1B, 0x12, 0x07, 0x39, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x39, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x26, 0x12, 0x12, 0x38, 0x28, 0x3F, 0x3A, 0x34, 0x30, 0x7C, 0x36, 0x5B, 0x30, 0x31, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x34, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x1B, 0x12, 0x07, 0x34, 0x31, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x34, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x4A, 0x02, 0x54, 0x5A, 0x50, 0xFF, 0x01, 0x5A, 0x07, 0x30, 0x30, 0x5B, 0x30, 0x35, 0x36, 0x5D, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x2F, 0x0A, 0x16, 0x28, 0x5B, 0x32, 0x34, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x04, 0x5B, 0x32, 0x34, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x32, 0x0A, 0x19, 0x28, 0x5B, 0x36, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x04, 0x5B, 0x36, 0x37, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x32, 0x0A, 0x19, 0x28, 0x5B, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x04, 0x5B, 0x38, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xE4, 0x07, 0x0A, 0x17, 0x12, 0x0C, 0x5B, 0x33, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x39, 0x7D, 0x12, 0x3D, 0x12, 0x27, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x33, 0x2D, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x37, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x32, 0x34, 0x35, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x39, 0x7D, 0x32, 0x09, 0x33, 0x31, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x1A, 0x31, 0x12, 0x1D, 0x28, 0x3F, 0x3A, 0x33, 0x39, 0x7C, 0x35, 0x30, 0x7C, 0x36, 0x5B, 0x33, 0x36, 0x2D, 0x38, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x33, 0x39, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x22, 0x1C, 0x12, 0x08, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x1C, 0x12, 0x08, 0x39, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x39, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x55, 0x41, 0x50, 0xFC, 0x02, 0x5A, 0x03, 0x30, 0x7E, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0xA4, 0x01, 0x0A, 0x18, 0x28, 0x5B, 0x33, 0x2D, 0x36, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x36, 0x33, 0x39, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x5B, 0x34, 0x35, 0x5D, 0x5B, 0x30, 0x2D, 0x35, 0x5D, 0x7C, 0x38, 0x37, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x7C, 0x36, 0x5B, 0x33, 0x37, 0x5D, 0x7C, 0x37, 0x5B, 0x33, 0x37, 0x5D, 0x29, 0x7C, 0x36, 0x5B, 0x33, 0x36, 0x2D, 0x38, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x1A, 0x3F, 0x33, 0x39, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x5B, 0x34, 0x35, 0x5D, 0x5B, 0x30, 0x2D, 0x35, 0x5D, 0x7C, 0x38, 0x37, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x31, 0x34, 0x2D, 0x37, 0x5D, 0x7C, 0x37, 0x29, 0x7C, 0x37, 0x5B, 0x33, 0x37, 0x5D, 0x29, 0x7C, 0x36, 0x5B, 0x33, 0x36, 0x2D, 0x38, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0xCA, 0x01, 0x0A, 0x1C, 0x28, 0x5B, 0x33, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x43, 0x33, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x32, 0x7C, 0x34, 0x5B, 0x31, 0x33, 0x37, 0x38, 0x5D, 0x32, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x32, 0x34, 0x35, 0x37, 0x5D, 0x32, 0x7C, 0x36, 0x5B, 0x32, 0x34, 0x5D, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x5B, 0x34, 0x39, 0x5D, 0x32, 0x7C, 0x5B, 0x31, 0x32, 0x5D, 0x5B, 0x32, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x32, 0x34, 0x5D, 0x29, 0x7C, 0x38, 0x7C, 0x39, 0x30, 0x1A, 0x54, 0x33, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x2D, 0x34, 0x36, 0x2D, 0x38, 0x5D, 0x32, 0x5B, 0x30, 0x31, 0x33, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x32, 0x29, 0x7C, 0x34, 0x5B, 0x31, 0x33, 0x37, 0x38, 0x5D, 0x32, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x32, 0x34, 0x35, 0x37, 0x5D, 0x32, 0x7C, 0x36, 0x5B, 0x32, 0x34, 0x5D, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x5B, 0x34, 0x39, 0x5D, 0x32, 0x7C, 0x5B, 0x31, 0x32, 0x5D, 0x5B, 0x32, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x32, 0x34, 0x5D, 0x29, 0x7C, 0x38, 0x7C, 0x39, 0x30, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0xD2, 0x02, 0x0A, 0x13, 0x28, 0x5B, 0x33, 0x2D, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x87, 0x01, 0x33, 0x28, 0x3F, 0x3A, 0x35, 0x5B, 0x30, 0x31, 0x33, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x31, 0x2D, 0x34, 0x36, 0x2D, 0x38, 0x5D, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x33, 0x37, 0x5D, 0x5B, 0x30, 0x31, 0x33, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x7C, 0x5B, 0x34, 0x35, 0x5D, 0x5B, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x34, 0x2D, 0x36, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x32, 0x34, 0x35, 0x5D, 0x5B, 0x30, 0x31, 0x33, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x31, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x33, 0x7C, 0x37, 0x5B, 0x34, 0x2D, 0x36, 0x5D, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x5B, 0x34, 0x39, 0x5D, 0x5B, 0x30, 0x31, 0x33, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x31, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x31, 0x32, 0x5D, 0x5B, 0x31, 0x33, 0x2D, 0x38, 0x5D, 0x29, 0x1A, 0xA2, 0x01, 0x33, 0x28, 0x3F, 0x3A, 0x35, 0x5B, 0x30, 0x31, 0x33, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x31, 0x2D, 0x34, 0x36, 0x2D, 0x38, 0x5D, 0x28, 0x3F, 0x3A, 0x32, 0x32, 0x7C, 0x5B, 0x30, 0x31, 0x33, 0x2D, 0x39, 0x5D, 0x29, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x33, 0x37, 0x5D, 0x5B, 0x30, 0x31, 0x33, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x7C, 0x5B, 0x34, 0x35, 0x5D, 0x5B, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x34, 0x2D, 0x36, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x32, 0x34, 0x35, 0x5D, 0x5B, 0x30, 0x31, 0x33, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x30, 0x32, 0x33, 0x38, 0x39, 0x5D, 0x7C, 0x5B, 0x30, 0x31, 0x35, 0x36, 0x38, 0x39, 0x5D, 0x29, 0x7C, 0x33, 0x7C, 0x37, 0x5B, 0x34, 0x2D, 0x36, 0x5D, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x5B, 0x34, 0x39, 0x5D, 0x5B, 0x30, 0x31, 0x33, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x31, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x31, 0x32, 0x5D, 0x5B, 0x31, 0x33, 0x2D, 0x38, 0x5D, 0x29, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xD2, 0x03, 0x0A, 0x10, 0x12, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x39, 0x7D, 0x12, 0x52, 0x12, 0x3C, 0x33, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x2D, 0x36, 0x5D, 0x5C, 0x64, 0x7C, 0x37, 0x5B, 0x31, 0x33, 0x36, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x33, 0x35, 0x36, 0x5D, 0x7C, 0x39, 0x36, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x7C, 0x32, 0x30, 0x28, 0x3F, 0x3A, 0x30, 0x5C, 0x64, 0x7C, 0x32, 0x34, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x39, 0x7D, 0x32, 0x09, 0x33, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x1A, 0x2D, 0x12, 0x19, 0x37, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x35, 0x37, 0x38, 0x5D, 0x5C, 0x64, 0x7C, 0x30, 0x5B, 0x30, 0x2D, 0x34, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x37, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x22, 0x21, 0x12, 0x0D, 0x38, 0x30, 0x30, 0x5B, 0x31, 0x32, 0x33, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x20, 0x12, 0x0C, 0x39, 0x30, 0x5B, 0x31, 0x32, 0x33, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x39, 0x30, 0x31, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x55, 0x47, 0x50, 0x80, 0x02, 0x5A, 0x07, 0x30, 0x30, 0x5B, 0x30, 0x35, 0x37, 0x5D, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x41, 0x0A, 0x15, 0x28, 0x5B, 0x32, 0x34, 0x37, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x1A, 0x5B, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x32, 0x30, 0x30, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x36, 0x5B, 0x34, 0x35, 0x5D, 0x7C, 0x5B, 0x37, 0x2D, 0x39, 0x5D, 0x29, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x37, 0x0A, 0x0F, 0x28, 0x5B, 0x33, 0x34, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x16, 0x33, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x2D, 0x35, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x2D, 0x33, 0x36, 0x2D, 0x39, 0x5D, 0x29, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x22, 0x0A, 0x0D, 0x28, 0x32, 0x30, 0x32, 0x34, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x03, 0x32, 0x30, 0x32, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x8E, 0x0C, 0x0A, 0x1D, 0x12, 0x0A, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x12, 0xD3, 0x04, 0x12, 0xB3, 0x04, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x31, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x34, 0x35, 0x38, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x34, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x34, 0x36, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x32, 0x37, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x36, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x33, 0x5D, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x31, 0x2D, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x31, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x31, 0x33, 0x35, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x31, 0x34, 0x36, 0x37, 0x39, 0x5D, 0x7C, 0x34, 0x37, 0x7C, 0x35, 0x5B, 0x31, 0x32, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x31, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x35, 0x36, 0x5D, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x31, 0x32, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x31, 0x5B, 0x30, 0x32, 0x2D, 0x35, 0x37, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x33, 0x2D, 0x35, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x32, 0x34, 0x35, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x32, 0x33, 0x35, 0x5D, 0x7C, 0x35, 0x38, 0x7C, 0x36, 0x39, 0x7C, 0x37, 0x5B, 0x30, 0x35, 0x38, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x34, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x31, 0x2D, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x31, 0x5B, 0x30, 0x32, 0x33, 0x35, 0x2D, 0x38, 0x5D, 0x7C, 0x32, 0x30, 0x7C, 0x33, 0x5B, 0x30, 0x31, 0x34, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x31, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x2D, 0x33, 0x37, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x31, 0x33, 0x2D, 0x35, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x35, 0x36, 0x5D, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x31, 0x5B, 0x30, 0x32, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x33, 0x36, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x31, 0x36, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x36, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x31, 0x37, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x2D, 0x32, 0x39, 0x5D, 0x7C, 0x37, 0x38, 0x7C, 0x38, 0x5B, 0x31, 0x32, 0x5D, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x31, 0x2D, 0x34, 0x36, 0x2D, 0x38, 0x5D, 0x7C, 0x31, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x34, 0x37, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x32, 0x34, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x37, 0x5D, 0x7C, 0x35, 0x5B, 0x34, 0x37, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x32, 0x33, 0x35, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x32, 0x2D, 0x35, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x35, 0x36, 0x5D, 0x29, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x31, 0x2D, 0x36, 0x38, 0x5D, 0x7C, 0x31, 0x5B, 0x30, 0x32, 0x2D, 0x38, 0x5D, 0x7C, 0x32, 0x38, 0x7C, 0x33, 0x5B, 0x30, 0x2D, 0x32, 0x35, 0x5D, 0x7C, 0x34, 0x5B, 0x33, 0x35, 0x37, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x32, 0x2D, 0x35, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x32, 0x38, 0x5D, 0x29, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x31, 0x33, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x31, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x35, 0x38, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x36, 0x37, 0x38, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x31, 0x37, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x32, 0x34, 0x36, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x2D, 0x33, 0x35, 0x38, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x35, 0x39, 0x5D, 0x29, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x32, 0x0A, 0x32, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x1A, 0xD3, 0x04, 0x12, 0xB3, 0x04, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x31, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x34, 0x35, 0x38, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x34, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x34, 0x36, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x32, 0x37, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x36, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x33, 0x5D, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x31, 0x2D, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x31, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x31, 0x33, 0x35, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x31, 0x34, 0x36, 0x37, 0x39, 0x5D, 0x7C, 0x34, 0x37, 0x7C, 0x35, 0x5B, 0x31, 0x32, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x31, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x35, 0x36, 0x5D, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x31, 0x32, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x31, 0x5B, 0x30, 0x32, 0x2D, 0x35, 0x37, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x33, 0x2D, 0x35, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x32, 0x34, 0x35, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x32, 0x33, 0x35, 0x5D, 0x7C, 0x35, 0x38, 0x7C, 0x36, 0x39, 0x7C, 0x37, 0x5B, 0x30, 0x35, 0x38, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x34, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x31, 0x2D, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x31, 0x5B, 0x30, 0x32, 0x33, 0x35, 0x2D, 0x38, 0x5D, 0x7C, 0x32, 0x30, 0x7C, 0x33, 0x5B, 0x30, 0x31, 0x34, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x31, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x2D, 0x33, 0x37, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x31, 0x33, 0x2D, 0x35, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x35, 0x36, 0x5D, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x31, 0x5B, 0x30, 0x32, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x33, 0x36, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x31, 0x36, 0x5D, 0x7C, 0x34, 0x5B, 0x31, 0x36, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x31, 0x37, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x2D, 0x32, 0x39, 0x5D, 0x7C, 0x37, 0x38, 0x7C, 0x38, 0x5B, 0x31, 0x32, 0x5D, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x31, 0x2D, 0x34, 0x36, 0x2D, 0x38, 0x5D, 0x7C, 0x31, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x34, 0x37, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x32, 0x34, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x37, 0x5D, 0x7C, 0x35, 0x5B, 0x34, 0x37, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x32, 0x33, 0x35, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x32, 0x2D, 0x35, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x35, 0x36, 0x5D, 0x29, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x31, 0x2D, 0x36, 0x38, 0x5D, 0x7C, 0x31, 0x5B, 0x30, 0x32, 0x2D, 0x38, 0x5D, 0x7C, 0x32, 0x38, 0x7C, 0x33, 0x5B, 0x30, 0x2D, 0x32, 0x35, 0x5D, 0x7C, 0x34, 0x5B, 0x33, 0x35, 0x37, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x32, 0x2D, 0x35, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x32, 0x38, 0x5D, 0x29, 0x7C, 0x39, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x31, 0x33, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x31, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x35, 0x38, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x36, 0x37, 0x38, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x31, 0x37, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x32, 0x34, 0x36, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x2D, 0x33, 0x35, 0x38, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x35, 0x39, 0x5D, 0x29, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x32, 0x0A, 0x32, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x22, 0x33, 0x12, 0x1D, 0x38, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x35, 0x35, 0x7C, 0x36, 0x36, 0x7C, 0x37, 0x37, 0x7C, 0x38, 0x38, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x30, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x2A, 0x23, 0x12, 0x0D, 0x39, 0x30, 0x30, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x39, 0x30, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x2D, 0x12, 0x17, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x33, 0x33, 0x7C, 0x34, 0x34, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x35, 0x30, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x55, 0x53, 0x50, 0x01, 0x5A, 0x03, 0x30, 0x31, 0x31, 0x62, 0x01, 0x31, 0x7A, 0x01, 0x31, 0x90, 0x01, 0x01, 0x9A, 0x01, 0x27, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x0A, 0x28, 0x24, 0x31, 0x29, 0x20, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x1B, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x22, 0x00, 0x2A, 0x00, 0xA2, 0x01, 0x23, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xB0, 0x01, 0x01, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x6D, 0x0A, 0x00, 0x12, 0x00, 0x1A, 0x00, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x55, 0x59, 0x50, 0xD6, 0x04, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x90, 0x01, 0x01, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x8C, 0x02, 0x0A, 0x15, 0x12, 0x0A, 0x5B, 0x36, 0x37, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x12, 0x30, 0x12, 0x1A, 0x28, 0x3F, 0x3A, 0x36, 0x5B, 0x31, 0x32, 0x35, 0x36, 0x37, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x2D, 0x36, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x32, 0x09, 0x36, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x1A, 0x24, 0x12, 0x0E, 0x39, 0x5B, 0x30, 0x2D, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x32, 0x09, 0x39, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x55, 0x5A, 0x50, 0xE6, 0x07, 0x5A, 0x04, 0x38, 0x7E, 0x31, 0x30, 0x62, 0x01, 0x38, 0x7A, 0x01, 0x38, 0x9A, 0x01, 0x34, 0x0A, 0x1E, 0x28, 0x5B, 0x36, 0x37, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x22, 0x03, 0x38, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xC7, 0x01, 0x0A, 0x11, 0x12, 0x07, 0x30, 0x36, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x12, 0x20, 0x12, 0x0A, 0x30, 0x36, 0x36, 0x39, 0x38, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x30, 0x36, 0x36, 0x39, 0x38, 0x31, 0x32, 0x33, 0x34, 0x35, 0x1A, 0x0A, 0x12, 0x03, 0x4E, 0x2F, 0x41, 0x1A, 0x03, 0x4E, 0x2F, 0x41, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x56, 0x41, 0x50, 0xFB, 0x02, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x22, 0x0A, 0x12, 0x28, 0x30, 0x36, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xD0, 0x01, 0x01, 0x0A, 0xBA, 0x03, 0x0A, 0x1E, 0x12, 0x0B, 0x5B, 0x35, 0x37, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x12, 0x70, 0x12, 0x51, 0x37, 0x38, 0x34, 0x28, 0x3F, 0x3A, 0x32, 0x36, 0x36, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x36, 0x5B, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5C, 0x64, 0x7C, 0x38, 0x5B, 0x30, 0x2D, 0x32, 0x34, 0x2D, 0x36, 0x5D, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x33, 0x38, 0x7C, 0x35, 0x5B, 0x30, 0x2D, 0x33, 0x36, 0x2D, 0x38, 0x5D, 0x7C, 0x38, 0x5C, 0x64, 0x7C, 0x39, 0x5B, 0x30, 0x31, 0x5D, 0x29, 0x7C, 0x35, 0x35, 0x35, 0x7C, 0x36, 0x33, 0x38, 0x7C, 0x37, 0x38, 0x34, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x32, 0x0A, 0x37, 0x38, 0x34, 0x32, 0x36, 0x36, 0x31, 0x32, 0x33, 0x34, 0x1A, 0x51, 0x12, 0x3B, 0x37, 0x38, 0x34, 0x28, 0x3F, 0x3A, 0x34, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x30, 0x2D, 0x32, 0x34, 0x5D, 0x7C, 0x35, 0x5B, 0x34, 0x35, 0x5D, 0x7C, 0x39, 0x5B, 0x32, 0x2D, 0x35, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x2D, 0x33, 0x5D, 0x7C, 0x39, 0x33, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x37, 0x38, 0x34, 0x34, 0x33, 0x30, 0x31, 0x32, 0x33, 0x34, 0x22, 0x33, 0x12, 0x1D, 0x38, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x35, 0x35, 0x7C, 0x36, 0x36, 0x7C, 0x37, 0x37, 0x7C, 0x38, 0x38, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x30, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x2A, 0x23, 0x12, 0x0D, 0x39, 0x30, 0x30, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x39, 0x30, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x2D, 0x12, 0x17, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x33, 0x33, 0x7C, 0x34, 0x34, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x35, 0x30, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x56, 0x43, 0x50, 0x01, 0x5A, 0x03, 0x30, 0x31, 0x31, 0x62, 0x01, 0x31, 0x7A, 0x01, 0x31, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xBA, 0x01, 0x03, 0x37, 0x38, 0x34, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xDB, 0x02, 0x0A, 0x18, 0x12, 0x0C, 0x5B, 0x32, 0x34, 0x35, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x31, 0x30, 0x7D, 0x12, 0x51, 0x12, 0x39, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x31, 0x32, 0x7C, 0x33, 0x5B, 0x34, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x35, 0x38, 0x5D, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x34, 0x36, 0x37, 0x5D, 0x5C, 0x64, 0x7C, 0x39, 0x5B, 0x31, 0x2D, 0x36, 0x5D, 0x29, 0x7C, 0x35, 0x30, 0x5B, 0x30, 0x31, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x32, 0x31, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x1A, 0x2D, 0x12, 0x17, 0x34, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x32, 0x34, 0x2D, 0x38, 0x5D, 0x7C, 0x32, 0x5B, 0x34, 0x36, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x34, 0x31, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x22, 0x1E, 0x12, 0x08, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x2A, 0x1E, 0x12, 0x08, 0x39, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x39, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x56, 0x45, 0x50, 0x3A, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x0A, 0x28, 0x31, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x7C, 0x30, 0x9A, 0x01, 0x24, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x06, 0x24, 0x43, 0x43, 0x20, 0x24, 0x31, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xAB, 0x03, 0x0A, 0x1E, 0x12, 0x0B, 0x5B, 0x32, 0x35, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x12, 0x5D, 0x12, 0x3E, 0x32, 0x38, 0x34, 0x28, 0x3F, 0x3A, 0x28, 0x3F, 0x3A, 0x32, 0x32, 0x39, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x34, 0x36, 0x7C, 0x39, 0x5B, 0x34, 0x35, 0x5D, 0x29, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x35, 0x32, 0x7C, 0x36, 0x5B, 0x34, 0x35, 0x39, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x7C, 0x34, 0x39, 0x36, 0x5B, 0x30, 0x2D, 0x35, 0x5D, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x32, 0x0A, 0x32, 0x38, 0x34, 0x32, 0x32, 0x39, 0x31, 0x32, 0x33, 0x34, 0x1A, 0x55, 0x12, 0x3F, 0x32, 0x38, 0x34, 0x28, 0x3F, 0x3A, 0x28, 0x3F, 0x3A, 0x33, 0x30, 0x5B, 0x30, 0x2D, 0x33, 0x5D, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x34, 0x5B, 0x30, 0x2D, 0x35, 0x5D, 0x7C, 0x36, 0x38, 0x7C, 0x39, 0x39, 0x29, 0x7C, 0x35, 0x34, 0x5B, 0x30, 0x2D, 0x34, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x7C, 0x34, 0x39, 0x36, 0x5B, 0x36, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x32, 0x38, 0x34, 0x33, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x22, 0x33, 0x12, 0x1D, 0x38, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x35, 0x35, 0x7C, 0x36, 0x36, 0x7C, 0x37, 0x37, 0x7C, 0x38, 0x38, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x30, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x2A, 0x23, 0x12, 0x0D, 0x39, 0x30, 0x30, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x39, 0x30, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x2D, 0x12, 0x17, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x33, 0x33, 0x7C, 0x34, 0x34, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x35, 0x30, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x56, 0x47, 0x50, 0x01, 0x5A, 0x03, 0x30, 0x31, 0x31, 0x62, 0x01, 0x31, 0x7A, 0x01, 0x31, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xBA, 0x01, 0x03, 0x32, 0x38, 0x34, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xEE, 0x02, 0x0A, 0x1E, 0x12, 0x0B, 0x5B, 0x33, 0x35, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x12, 0x39, 0x12, 0x1A, 0x33, 0x34, 0x30, 0x28, 0x3F, 0x3A, 0x36, 0x5B, 0x34, 0x39, 0x5D, 0x32, 0x7C, 0x37, 0x5B, 0x31, 0x37, 0x5D, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x32, 0x0A, 0x33, 0x34, 0x30, 0x36, 0x34, 0x32, 0x31, 0x32, 0x33, 0x34, 0x1A, 0x39, 0x12, 0x1A, 0x33, 0x34, 0x30, 0x28, 0x3F, 0x3A, 0x36, 0x5B, 0x34, 0x39, 0x5D, 0x32, 0x7C, 0x37, 0x5B, 0x31, 0x37, 0x5D, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x32, 0x0A, 0x33, 0x34, 0x30, 0x36, 0x34, 0x32, 0x31, 0x32, 0x33, 0x34, 0x22, 0x33, 0x12, 0x1D, 0x38, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x35, 0x35, 0x7C, 0x36, 0x36, 0x7C, 0x37, 0x37, 0x7C, 0x38, 0x38, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x30, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x2A, 0x23, 0x12, 0x0D, 0x39, 0x30, 0x30, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x39, 0x30, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x2D, 0x12, 0x17, 0x35, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x33, 0x33, 0x7C, 0x34, 0x34, 0x29, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x35, 0x30, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x56, 0x49, 0x50, 0x01, 0x5A, 0x03, 0x30, 0x31, 0x31, 0x62, 0x01, 0x31, 0x7A, 0x01, 0x31, 0x90, 0x01, 0x01, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xBA, 0x01, 0x03, 0x33, 0x34, 0x30, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xF2, 0x06, 0x0A, 0x22, 0x12, 0x16, 0x38, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x38, 0x7D, 0x7C, 0x5B, 0x31, 0x2D, 0x37, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x31, 0x30, 0x7D, 0x12, 0xAF, 0x01, 0x12, 0x96, 0x01, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x32, 0x35, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x31, 0x5B, 0x30, 0x31, 0x38, 0x39, 0x5D, 0x7C, 0x5B, 0x33, 0x34, 0x38, 0x5D, 0x5B, 0x30, 0x31, 0x5D, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x31, 0x33, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x32, 0x35, 0x5D, 0x5B, 0x30, 0x31, 0x5D, 0x29, 0x7C, 0x5B, 0x34, 0x38, 0x5D, 0x5C, 0x64, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x31, 0x5D, 0x5B, 0x30, 0x31, 0x5D, 0x7C, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x2D, 0x34, 0x36, 0x2D, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x31, 0x5D, 0x29, 0x7C, 0x37, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x32, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x5B, 0x31, 0x38, 0x5D, 0x5B, 0x30, 0x31, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x7C, 0x36, 0x39, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x36, 0x7D, 0x7C, 0x38, 0x30, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x32, 0x31, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x1A, 0x39, 0x12, 0x22, 0x28, 0x3F, 0x3A, 0x39, 0x5C, 0x64, 0x7C, 0x31, 0x28, 0x3F, 0x3A, 0x32, 0x5C, 0x64, 0x7C, 0x36, 0x5B, 0x33, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x38, 0x7C, 0x39, 0x39, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x39, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x09, 0x39, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x22, 0x23, 0x12, 0x0B, 0x31, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x36, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x38, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x31, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x23, 0x12, 0x0B, 0x31, 0x39, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x36, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x38, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x31, 0x39, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x56, 0x4E, 0x50, 0x54, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x2D, 0x0A, 0x14, 0x28, 0x5B, 0x34, 0x38, 0x5D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x04, 0x5B, 0x34, 0x38, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x5B, 0x0A, 0x19, 0x28, 0x5B, 0x32, 0x33, 0x35, 0x2D, 0x37, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x2D, 0x32, 0x5B, 0x30, 0x32, 0x35, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x31, 0x33, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x2D, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x32, 0x2D, 0x37, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x1F, 0x0A, 0x0B, 0x28, 0x38, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x02, 0x38, 0x30, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x23, 0x0A, 0x0F, 0x28, 0x36, 0x39, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x35, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x02, 0x36, 0x39, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x4D, 0x0A, 0x1C, 0x28, 0x5B, 0x32, 0x33, 0x35, 0x2D, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x1C, 0x32, 0x5B, 0x31, 0x33, 0x34, 0x38, 0x5D, 0x7C, 0x33, 0x5B, 0x32, 0x35, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x31, 0x5D, 0x7C, 0x36, 0x35, 0x7C, 0x37, 0x5B, 0x31, 0x38, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x33, 0x0A, 0x1A, 0x28, 0x39, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x01, 0x39, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x3D, 0x0A, 0x19, 0x28, 0x31, 0x5B, 0x32, 0x36, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x0F, 0x31, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x36, 0x5D, 0x7C, 0x38, 0x38, 0x7C, 0x39, 0x39, 0x29, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x29, 0x0A, 0x12, 0x28, 0x31, 0x5B, 0x38, 0x39, 0x5D, 0x30, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x36, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x06, 0x31, 0x5B, 0x38, 0x39, 0x5D, 0x30, 0x22, 0x02, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x67, 0x0A, 0x00, 0x12, 0x00, 0x1A, 0x00, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x56, 0x55, 0x50, 0xA6, 0x05, 0x5A, 0x02, 0x30, 0x30, 0x90, 0x01, 0x01, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x67, 0x0A, 0x00, 0x12, 0x00, 0x1A, 0x00, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x57, 0x46, 0x50, 0xA9, 0x05, 0x5A, 0x02, 0x31, 0x39, 0x90, 0x01, 0x01, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xC0, 0x02, 0x0A, 0x17, 0x12, 0x0C, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x36, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x37, 0x7D, 0x12, 0x2F, 0x12, 0x1D, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x2D, 0x35, 0x5D, 0x5C, 0x64, 0x7C, 0x36, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x34, 0x30, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x37, 0x7D, 0x32, 0x05, 0x32, 0x32, 0x31, 0x32, 0x33, 0x1A, 0x28, 0x12, 0x15, 0x28, 0x3F, 0x3A, 0x36, 0x30, 0x7C, 0x37, 0x5B, 0x32, 0x35, 0x2D, 0x37, 0x5D, 0x5C, 0x64, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x37, 0x7D, 0x32, 0x06, 0x36, 0x30, 0x31, 0x32, 0x33, 0x34, 0x22, 0x19, 0x12, 0x08, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x32, 0x06, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x57, 0x53, 0x50, 0xAD, 0x05, 0x5A, 0x01, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x29, 0x0A, 0x11, 0x28, 0x38, 0x5B, 0x30, 0x34, 0x5D, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x06, 0x38, 0x5B, 0x30, 0x34, 0x5D, 0x30, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x29, 0x0A, 0x10, 0x28, 0x37, 0x5B, 0x32, 0x35, 0x2D, 0x37, 0x5D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x07, 0x37, 0x5B, 0x32, 0x35, 0x2D, 0x37, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xEF, 0x02, 0x0A, 0x17, 0x12, 0x0C, 0x5B, 0x31, 0x2D, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x38, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x39, 0x7D, 0x12, 0x5C, 0x12, 0x48, 0x28, 0x3F, 0x3A, 0x31, 0x28, 0x3F, 0x3A, 0x37, 0x5C, 0x64, 0x7C, 0x5B, 0x32, 0x2D, 0x36, 0x38, 0x5D, 0x29, 0x7C, 0x32, 0x5B, 0x32, 0x2D, 0x36, 0x38, 0x5D, 0x7C, 0x33, 0x5B, 0x32, 0x33, 0x35, 0x38, 0x5D, 0x7C, 0x34, 0x5B, 0x32, 0x2D, 0x35, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x32, 0x2D, 0x36, 0x5D, 0x7C, 0x36, 0x5B, 0x33, 0x2D, 0x35, 0x38, 0x5D, 0x7C, 0x37, 0x5B, 0x32, 0x34, 0x2D, 0x36, 0x38, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x38, 0x7D, 0x32, 0x07, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x1A, 0x1F, 0x12, 0x0B, 0x37, 0x5B, 0x31, 0x33, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x37, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x59, 0x45, 0x50, 0xC7, 0x07, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x3A, 0x0A, 0x17, 0x28, 0x5B, 0x31, 0x2D, 0x37, 0x5D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x0E, 0x5B, 0x31, 0x2D, 0x36, 0x5D, 0x7C, 0x37, 0x5B, 0x32, 0x34, 0x2D, 0x36, 0x38, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x33, 0x0A, 0x18, 0x28, 0x37, 0x5B, 0x31, 0x33, 0x37, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x06, 0x37, 0x5B, 0x31, 0x33, 0x37, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xD7, 0x01, 0x0A, 0x13, 0x12, 0x0A, 0x5B, 0x32, 0x36, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x12, 0x22, 0x12, 0x0E, 0x32, 0x36, 0x39, 0x36, 0x5B, 0x30, 0x2D, 0x34, 0x5D, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x32, 0x36, 0x39, 0x36, 0x30, 0x31, 0x32, 0x33, 0x34, 0x1A, 0x1C, 0x12, 0x08, 0x36, 0x33, 0x39, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x36, 0x33, 0x39, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x1B, 0x12, 0x07, 0x38, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x59, 0x54, 0x50, 0x86, 0x02, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xBA, 0x01, 0x06, 0x32, 0x36, 0x39, 0x7C, 0x36, 0x33, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xB9, 0x03, 0x0A, 0x10, 0x12, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x38, 0x2C, 0x39, 0x7D, 0x12, 0x44, 0x12, 0x2E, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x30, 0x2D, 0x38, 0x5D, 0x7C, 0x32, 0x5B, 0x31, 0x2D, 0x34, 0x37, 0x38, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x2D, 0x36, 0x39, 0x5D, 0x7C, 0x34, 0x5C, 0x64, 0x7C, 0x35, 0x5B, 0x31, 0x33, 0x34, 0x36, 0x2D, 0x38, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x38, 0x2C, 0x39, 0x7D, 0x32, 0x09, 0x31, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x1A, 0x30, 0x12, 0x1C, 0x28, 0x3F, 0x3A, 0x37, 0x5B, 0x31, 0x2D, 0x34, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x2D, 0x35, 0x37, 0x38, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x37, 0x31, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x22, 0x1B, 0x12, 0x07, 0x38, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x2A, 0x20, 0x12, 0x0C, 0x38, 0x36, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x36, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x32, 0x1C, 0x12, 0x08, 0x38, 0x36, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x36, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x1B, 0x12, 0x07, 0x38, 0x37, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x37, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x4A, 0x02, 0x5A, 0x41, 0x50, 0x1B, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x2B, 0x0A, 0x13, 0x28, 0x38, 0x36, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x03, 0x38, 0x36, 0x30, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x49, 0x0A, 0x19, 0x28, 0x5B, 0x31, 0x2D, 0x35, 0x37, 0x38, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x1B, 0x5B, 0x31, 0x2D, 0x35, 0x37, 0x5D, 0x7C, 0x38, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x2D, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x29, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xB3, 0x02, 0x0A, 0x13, 0x12, 0x0A, 0x5B, 0x32, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x12, 0x20, 0x12, 0x0C, 0x32, 0x31, 0x5B, 0x31, 0x2D, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x32, 0x31, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x1A, 0x2E, 0x12, 0x1A, 0x39, 0x28, 0x3F, 0x3A, 0x35, 0x35, 0x7C, 0x36, 0x5B, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x34, 0x2D, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x39, 0x35, 0x35, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x1C, 0x12, 0x08, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x30, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x5A, 0x4D, 0x50, 0x84, 0x02, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x25, 0x0A, 0x0F, 0x28, 0x5B, 0x32, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x04, 0x5B, 0x32, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x29, 0x0A, 0x13, 0x28, 0x38, 0x30, 0x30, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x38, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xBB, 0x0B, 0x0A, 0x42, 0x12, 0x36, 0x32, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x31, 0x32, 0x34, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x38, 0x7D, 0x7C, 0x36, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x36, 0x7D, 0x29, 0x7C, 0x5B, 0x31, 0x33, 0x2D, 0x37, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x38, 0x7D, 0x7C, 0x38, 0x36, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x31, 0x30, 0x7D, 0x12, 0xAB, 0x02, 0x12, 0x95, 0x02, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x33, 0x2D, 0x39, 0x5D, 0x7C, 0x32, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x34, 0x35, 0x5D, 0x7C, 0x5B, 0x31, 0x36, 0x5D, 0x7C, 0x32, 0x5B, 0x32, 0x38, 0x5D, 0x7C, 0x5B, 0x34, 0x39, 0x5D, 0x38, 0x3F, 0x7C, 0x35, 0x38, 0x5B, 0x32, 0x33, 0x5D, 0x7C, 0x37, 0x5B, 0x32, 0x34, 0x36, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x33, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x30, 0x38, 0x3F, 0x7C, 0x31, 0x37, 0x3F, 0x7C, 0x33, 0x5B, 0x37, 0x38, 0x5D, 0x7C, 0x5B, 0x32, 0x34, 0x35, 0x36, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x35, 0x36, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x33, 0x37, 0x39, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x31, 0x5B, 0x37, 0x38, 0x5D, 0x7C, 0x34, 0x38, 0x33, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x37, 0x3F, 0x7C, 0x38, 0x29, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x30, 0x7C, 0x32, 0x38, 0x7C, 0x33, 0x37, 0x3F, 0x7C, 0x5B, 0x34, 0x35, 0x5D, 0x5B, 0x36, 0x38, 0x5D, 0x5B, 0x37, 0x38, 0x5D, 0x7C, 0x39, 0x38, 0x3F, 0x29, 0x7C, 0x38, 0x34, 0x38, 0x29, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x36, 0x7D, 0x7C, 0x28, 0x3F, 0x3A, 0x32, 0x28, 0x3F, 0x3A, 0x32, 0x37, 0x7C, 0x35, 0x7C, 0x37, 0x5B, 0x31, 0x33, 0x35, 0x37, 0x38, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x32, 0x35, 0x5D, 0x29, 0x7C, 0x33, 0x5B, 0x33, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x34, 0x36, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x32, 0x36, 0x2D, 0x38, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x36, 0x7D, 0x7C, 0x32, 0x28, 0x3F, 0x3A, 0x30, 0x7C, 0x37, 0x30, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x36, 0x7D, 0x7C, 0x28, 0x3F, 0x3A, 0x34, 0x5C, 0x64, 0x7C, 0x39, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x37, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x07, 0x31, 0x33, 0x31, 0x32, 0x33, 0x34, 0x35, 0x1A, 0x1F, 0x12, 0x0B, 0x37, 0x5B, 0x31, 0x33, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x37, 0x31, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x39, 0x12, 0x23, 0x38, 0x36, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x31, 0x32, 0x5D, 0x7C, 0x32, 0x32, 0x7C, 0x33, 0x30, 0x7C, 0x34, 0x34, 0x7C, 0x38, 0x5B, 0x33, 0x36, 0x37, 0x5D, 0x7C, 0x39, 0x39, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x38, 0x36, 0x38, 0x36, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x4A, 0x02, 0x5A, 0x57, 0x50, 0x87, 0x02, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x33, 0x0A, 0x16, 0x28, 0x5B, 0x34, 0x39, 0x5D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x2C, 0x35, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x08, 0x34, 0x7C, 0x39, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x35, 0x0A, 0x19, 0x28, 0x5B, 0x31, 0x37, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x07, 0x5B, 0x31, 0x39, 0x5D, 0x31, 0x7C, 0x37, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0xBA, 0x01, 0x0A, 0x14, 0x28, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x36, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x35, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x93, 0x01, 0x31, 0x5B, 0x33, 0x2D, 0x39, 0x5D, 0x7C, 0x32, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x2D, 0x34, 0x36, 0x39, 0x5D, 0x7C, 0x30, 0x5B, 0x30, 0x2D, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x34, 0x35, 0x5D, 0x5B, 0x30, 0x2D, 0x37, 0x39, 0x5D, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x31, 0x5B, 0x30, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x5B, 0x32, 0x34, 0x2D, 0x36, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x2D, 0x36, 0x39, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x32, 0x2D, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x31, 0x35, 0x5D, 0x5B, 0x30, 0x2D, 0x36, 0x39, 0x5D, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x31, 0x34, 0x35, 0x5D, 0x7C, 0x5B, 0x32, 0x39, 0x5D, 0x5B, 0x30, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x5B, 0x36, 0x38, 0x5D, 0x5B, 0x30, 0x2D, 0x36, 0x39, 0x5D, 0x29, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0xC2, 0x01, 0x0A, 0x19, 0x28, 0x5B, 0x31, 0x2D, 0x33, 0x35, 0x36, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x93, 0x01, 0x31, 0x5B, 0x33, 0x2D, 0x39, 0x5D, 0x7C, 0x32, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x2D, 0x34, 0x36, 0x39, 0x5D, 0x7C, 0x30, 0x5B, 0x30, 0x2D, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x34, 0x35, 0x5D, 0x5B, 0x30, 0x2D, 0x37, 0x39, 0x5D, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x31, 0x5B, 0x30, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x5B, 0x32, 0x34, 0x2D, 0x36, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x2D, 0x36, 0x39, 0x5D, 0x29, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x32, 0x2D, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x31, 0x35, 0x5D, 0x5B, 0x30, 0x2D, 0x36, 0x39, 0x5D, 0x29, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x31, 0x34, 0x35, 0x5D, 0x7C, 0x5B, 0x32, 0x39, 0x5D, 0x5B, 0x30, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x5B, 0x36, 0x38, 0x5D, 0x5B, 0x30, 0x2D, 0x36, 0x39, 0x5D, 0x29, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x72, 0x0A, 0x16, 0x28, 0x5B, 0x32, 0x33, 0x35, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x35, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x4A, 0x32, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x37, 0x38, 0x5D, 0x7C, 0x30, 0x5B, 0x34, 0x35, 0x5D, 0x7C, 0x34, 0x38, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x30, 0x38, 0x7C, 0x31, 0x37, 0x7C, 0x33, 0x5B, 0x37, 0x38, 0x5D, 0x7C, 0x5B, 0x37, 0x38, 0x5D, 0x29, 0x7C, 0x35, 0x5B, 0x31, 0x35, 0x5D, 0x5B, 0x37, 0x38, 0x5D, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x39, 0x5D, 0x38, 0x7C, 0x33, 0x37, 0x7C, 0x5B, 0x36, 0x38, 0x5D, 0x5B, 0x37, 0x38, 0x5D, 0x29, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x7A, 0x0A, 0x1B, 0x28, 0x5B, 0x32, 0x33, 0x35, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x4A, 0x32, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x37, 0x38, 0x5D, 0x7C, 0x30, 0x5B, 0x34, 0x35, 0x5D, 0x7C, 0x34, 0x38, 0x29, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x30, 0x38, 0x7C, 0x31, 0x37, 0x7C, 0x33, 0x5B, 0x37, 0x38, 0x5D, 0x7C, 0x5B, 0x37, 0x38, 0x5D, 0x29, 0x7C, 0x35, 0x5B, 0x31, 0x35, 0x5D, 0x5B, 0x37, 0x38, 0x5D, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x39, 0x5D, 0x38, 0x7C, 0x33, 0x37, 0x7C, 0x5B, 0x36, 0x38, 0x5D, 0x5B, 0x37, 0x38, 0x5D, 0x29, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x3E, 0x0A, 0x14, 0x28, 0x5B, 0x32, 0x35, 0x5D, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x35, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x0A, 0x28, 0x3F, 0x3A, 0x32, 0x35, 0x7C, 0x35, 0x34, 0x29, 0x38, 0x1A, 0x0C, 0x32, 0x35, 0x38, 0x5B, 0x32, 0x33, 0x5D, 0x7C, 0x35, 0x34, 0x38, 0x33, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x46, 0x0A, 0x19, 0x28, 0x5B, 0x32, 0x35, 0x5D, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x0A, 0x28, 0x3F, 0x3A, 0x32, 0x35, 0x7C, 0x35, 0x34, 0x29, 0x38, 0x1A, 0x0C, 0x32, 0x35, 0x38, 0x5B, 0x32, 0x33, 0x5D, 0x7C, 0x35, 0x34, 0x38, 0x33, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x22, 0x0A, 0x0F, 0x28, 0x38, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x01, 0x38, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, };
+
+int metadata_size() {
+ return sizeof(metadata_data) / sizeof(metadata_data[0]);
+}
+
+const void* metadata_get() {
+ return metadata_data;
+}
diff --git a/third_party/libphonenumber/cpp/src/metadata.h b/third_party/libphonenumber/cpp/src/metadata.h
new file mode 100644
index 0000000..59794e6
--- /dev/null
+++ b/third_party/libphonenumber/cpp/src/metadata.h
@@ -0,0 +1,22 @@
+/*
+ * Copyright (C) 2011 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef EMBEDDED_DATA_METADATA_H_
+#define EMBEDDED_DATA_METADATA_H_
+
+int metadata_size();
+const void* metadata_get();
+
+#endif // EMBEDDED_DATA_METADATA_H_
diff --git a/third_party/libphonenumber/cpp/src/phonenumber.cc b/third_party/libphonenumber/cpp/src/phonenumber.cc
new file mode 100644
index 0000000..f622e93
--- /dev/null
+++ b/third_party/libphonenumber/cpp/src/phonenumber.cc
@@ -0,0 +1,87 @@
+// Copyright (C) 2009 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// Author: Philippe Liard
+
+#include "phonemetadata.pb.h"
+#include "phonenumber.pb.h"
+
+namespace i18n {
+namespace phonenumbers {
+
+bool ExactlySameAs(const PhoneNumber& first_number,
+ const PhoneNumber& second_number) {
+ if (first_number.has_country_code() != second_number.has_country_code() ||
+ first_number.country_code() != second_number.country_code()) {
+ return false;
+ }
+ if (first_number.has_national_number() !=
+ second_number.has_national_number() ||
+ first_number.national_number() != second_number.national_number()) {
+ return false;
+ }
+ if (first_number.has_extension() != second_number.has_extension() ||
+ first_number.extension() != second_number.extension()) {
+ return false;
+ }
+ if (first_number.has_italian_leading_zero() !=
+ second_number.has_italian_leading_zero() ||
+ first_number.italian_leading_zero() !=
+ second_number.italian_leading_zero()) {
+ return false;
+ }
+ if (first_number.has_raw_input() != second_number.has_raw_input() ||
+ first_number.raw_input() != second_number.raw_input()) {
+ return false;
+ }
+ if (first_number.has_country_code_source() !=
+ second_number.has_country_code_source() ||
+ first_number.country_code_source() !=
+ second_number.country_code_source()) {
+ return false;
+ }
+ if (first_number.has_preferred_domestic_carrier_code() !=
+ second_number.has_preferred_domestic_carrier_code() ||
+ first_number.preferred_domestic_carrier_code() !=
+ second_number.preferred_domestic_carrier_code()) {
+ return false;
+ }
+ return true;
+}
+
+bool ExactlySameAs(const PhoneNumberDesc& first_number_desc,
+ const PhoneNumberDesc& second_number_desc) {
+ if (first_number_desc.has_national_number_pattern() !=
+ second_number_desc.has_national_number_pattern() ||
+ first_number_desc.national_number_pattern() !=
+ second_number_desc.national_number_pattern()) {
+ return false;
+ }
+ if (first_number_desc.has_possible_number_pattern() !=
+ second_number_desc.has_possible_number_pattern() ||
+ first_number_desc.possible_number_pattern() !=
+ second_number_desc.possible_number_pattern()) {
+ return false;
+ }
+ if (first_number_desc.has_example_number() !=
+ second_number_desc.has_example_number() ||
+ first_number_desc.example_number() !=
+ second_number_desc.example_number()) {
+ return false;
+ }
+ return true;
+}
+
+} // namespace phonenumbers
+} // namespace i18n
diff --git a/third_party/libphonenumber/cpp/src/phonenumber.h b/third_party/libphonenumber/cpp/src/phonenumber.h
new file mode 100644
index 0000000..952ca7c
--- /dev/null
+++ b/third_party/libphonenumber/cpp/src/phonenumber.h
@@ -0,0 +1,40 @@
+// Copyright (C) 2009 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// Author: Philippe Liard
+
+#ifndef I18N_PHONENUMBERS_PHONENUMBER_H_
+#define I18N_PHONENUMBERS_PHONENUMBER_H_
+
+// Helper functions dealing with PhoneNumber and PhoneNumberDesc comparisons.
+
+namespace i18n {
+namespace phonenumbers {
+
+class PhoneNumber;
+class PhoneNumberDesc;
+
+// Compares two phone numbers.
+bool ExactlySameAs(const PhoneNumber& first_number,
+ const PhoneNumber& second_number);
+
+
+// Compares two phone number descriptions.
+bool ExactlySameAs(const PhoneNumberDesc& first_number_desc,
+ const PhoneNumberDesc& second_number_desc);
+
+} // namespace phonenumbers
+} // namespace i18n
+
+#endif // I18N_PHONENUMBERS_PHONENUMBER_H_
diff --git a/third_party/libphonenumber/cpp/src/phonenumberutil.cc b/third_party/libphonenumber/cpp/src/phonenumberutil.cc
new file mode 100644
index 0000000..75ef374
--- /dev/null
+++ b/third_party/libphonenumber/cpp/src/phonenumberutil.cc
@@ -0,0 +1,2266 @@
+// Copyright (C) 2009 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// Author: Shaopeng Jia
+// Open-sourced by: Philippe Liard
+
+#include "phonenumberutil.h"
+
+#include <algorithm>
+#include <fstream>
+#include <iostream>
+#include <map>
+#include <sstream>
+#include <vector>
+
+#include <google/protobuf/message_lite.h>
+#include <unicode/errorcode.h>
+#include <unicode/translit.h>
+
+#include "base/logging.h"
+#include "base/singleton.h"
+#include "default_logger.h"
+#include "logger_adapter.h"
+#include "metadata.h"
+#include "phonemetadata.pb.h"
+#include "phonenumber.h"
+#include "phonenumber.pb.h"
+#include "regexp_adapter.h"
+#include "stringutil.h"
+#include "utf/unicodetext.h"
+#include "utf/utf.h"
+
+namespace i18n {
+namespace phonenumbers {
+
+using std::cerr;
+using std::endl;
+using std::ifstream;
+using std::make_pair;
+using std::sort;
+using std::stringstream;
+
+using google::protobuf::RepeatedPtrField;
+
+namespace {
+
+scoped_ptr<LoggerAdapter> logger;
+
+// These objects are created in the function InitializeStaticMapsAndSets.
+
+// These mappings map a character (key) to a specific digit that should replace
+// it for normalization purposes.
+scoped_ptr<map<char32, char> > alpha_mappings;
+// For performance reasons, amalgamate both into one map.
+scoped_ptr<map<char32, char> > all_normalization_mappings;
+// Separate map of all symbols that we wish to retain when formatting alpha
+// numbers. This includes digits, ascii letters and number grouping symbols such
+// as "-" and " ".
+scoped_ptr<map<char32, char> > all_plus_number_grouping_symbols;
+
+// The kPlusSign signifies the international prefix.
+const char kPlusSign[] = "+";
+
+const char kPlusChars[] = "++";
+scoped_ptr<const reg_exp::RegularExpression> plus_chars_pattern;
+
+const char kRfc3966ExtnPrefix[] = ";ext=";
+
+// Pattern that makes it easy to distinguish whether a region has a unique
+// international dialing prefix or not. If a region has a unique international
+// prefix (e.g. 011 in USA), it will be represented as a string that contains a
+// sequence of ASCII digits. If there are multiple available international
+// prefixes in a region, they will be represented as a regex string that always
+// contains character(s) other than ASCII digits.
+// Note this regex also includes tilde, which signals waiting for the tone.
+scoped_ptr<const reg_exp::RegularExpression> unique_international_prefix;
+
+// Digits accepted in phone numbers.
+// Both Arabic-Indic and Eastern Arabic-Indic are supported.
+const char kValidDigits[] = "0-90-9٠-٩۰-۹";
+// We accept alpha characters in phone numbers, ASCII only. We store lower-case
+// here only since our regular expressions are case-insensitive.
+const char kValidAlpha[] = "a-z";
+scoped_ptr<const reg_exp::RegularExpression> capturing_digit_pattern;
+scoped_ptr<const reg_exp::RegularExpression> capturing_ascii_digits_pattern;
+
+// Regular expression of acceptable characters that may start a phone number
+// for the purposes of parsing. This allows us to strip away meaningless
+// prefixes to phone numbers that may be mistakenly given to us. This
+// consists of digits, the plus symbol and arabic-indic digits. This does
+// not contain alpha characters, although they may be used later in the
+// number. It also does not include other punctuation, as this will be
+// stripped later during parsing and is of no information value when parsing
+// a number. The string starting with this valid character is captured.
+// This corresponds to VALID_START_CHAR in the java version.
+scoped_ptr<const string> valid_start_char;
+scoped_ptr<const reg_exp::RegularExpression> valid_start_char_pattern;
+
+// Regular expression of characters typically used to start a second phone
+// number for the purposes of parsing. This allows us to strip off parts of
+// the number that are actually the start of another number, such as for:
+// (530) 583-6985 x302/x2303 -> the second extension here makes this actually
+// two phone numbers, (530) 583-6985 x302 and (530) 583-6985 x2303. We remove
+// the second extension so that the first number is parsed correctly. The string
+// preceding this is captured.
+// This corresponds to SECOND_NUMBER_START in the java version.
+const char kCaptureUpToSecondNumberStart[] = "(.*)[\\\\/] *x";
+scoped_ptr<const reg_exp::RegularExpression>
+ capture_up_to_second_number_start_pattern;
+
+// Regular expression of trailing characters that we want to remove. We remove
+// all characters that are not alpha or numerical characters. The hash
+// character is retained here, as it may signify the previous block was an
+// extension. Note the capturing block at the start to capture the rest of the
+// number if this was a match.
+// This corresponds to UNWANTED_END_CHARS in the java version.
+const char kUnwantedEndChar[] = "[^\\p{N}\\p{L}#]";
+scoped_ptr<const reg_exp::RegularExpression> unwanted_end_char_pattern;
+
+// Regular expression of acceptable punctuation found in phone numbers. This
+// excludes punctuation found as a leading character only. This consists of
+// dash characters, white space characters, full stops, slashes, square
+// brackets, parentheses and tildes. It also includes the letter 'x' as that is
+// found as a placeholder for carrier information in some phone numbers.
+// Full-width variants are also present.
+// To find out the unicode code-point of the characters below in vim, highlight
+// the character and type 'ga'. Note that the - is used to express ranges of
+// full-width punctuation below, as well as being present in the expression
+// itself. In emacs, you can use M-x unicode-what to query information about the
+// unicode character.
+const char kValidPunctuation[] =
+ "-x‐-―−ー--/  ​⁠ ()()[].\\[\\]/~⁓∼~";
+
+// Regular expression of viable phone numbers. This is location independent.
+// Checks we have at least three leading digits, and only valid punctuation,
+// alpha characters and digits in the phone number. Does not include extension
+// data. The symbol 'x' is allowed here as valid punctuation since it is often
+// used as a placeholder for carrier codes, for example in Brazilian phone
+// numbers. We also allow multiple plus-signs at the start.
+// Corresponds to the following:
+// plus_sign*([punctuation]*[digits]){3,}([punctuation]|[digits]|[alpha])*
+scoped_ptr<const string> valid_phone_number;
+
+// Default extension prefix to use when formatting. This will be put in front of
+// any extension component of the number, after the main national number is
+// formatted. For example, if you wish the default extension formatting to be "
+// extn: 3456", then you should specify " extn: " here as the default extension
+// prefix. This can be overridden by region-specific preferences.
+const char kDefaultExtnPrefix[] = " ext. ";
+
+// Regexp of all possible ways to write extensions, for use when parsing. This
+// will be run as a case-insensitive regexp match. Wide character versions are
+// also provided after each ascii version. There are three regular expressions
+// here. The first covers RFC 3966 format, where the extension is added using
+// ";ext=". The second more generic one starts with optional white space and
+// ends with an optional full stop (.), followed by zero or more spaces/tabs and
+// then the numbers themselves. The third one covers the special case of
+// American numbers where the extension is written with a hash at the end, such
+// as "- 503#".
+// Note that the only capturing groups should be around the digits that you want
+// to capture as part of the extension, or else parsing will fail!
+scoped_ptr<const string> known_extn_patterns;
+// Regexp of all known extension prefixes used by different regions followed
+// by 1 or more valid digits, for use when parsing.
+scoped_ptr<const reg_exp::RegularExpression> extn_pattern;
+
+// We append optionally the extension pattern to the end here, as a valid phone
+// number may have an extension prefix appended, followed by 1 or more digits.
+scoped_ptr<const reg_exp::RegularExpression> valid_phone_number_pattern;
+
+// We use this pattern to check if the phone number has at least three letters
+// in it - if so, then we treat it as a number where some phone-number digits
+// are represented by letters.
+scoped_ptr<const reg_exp::RegularExpression> valid_alpha_phone_pattern;
+
+scoped_ptr<const reg_exp::RegularExpression> first_group_capturing_pattern;
+
+scoped_ptr<const reg_exp::RegularExpression> carrier_code_pattern;
+
+void TransformRegularExpressionToRE2Syntax(string* regex) {
+ DCHECK(regex);
+ StripString(regex, "$", '\\');
+}
+
+// Returns a pointer to the description inside the metadata of the appropriate
+// type.
+const PhoneNumberDesc* GetNumberDescByType(
+ const PhoneMetadata& metadata,
+ PhoneNumberUtil::PhoneNumberType type) {
+ switch (type) {
+ case PhoneNumberUtil::PREMIUM_RATE:
+ return &metadata.premium_rate();
+ case PhoneNumberUtil::TOLL_FREE:
+ return &metadata.toll_free();
+ case PhoneNumberUtil::MOBILE:
+ return &metadata.mobile();
+ case PhoneNumberUtil::FIXED_LINE:
+ case PhoneNumberUtil::FIXED_LINE_OR_MOBILE:
+ return &metadata.fixed_line();
+ case PhoneNumberUtil::SHARED_COST:
+ return &metadata.shared_cost();
+ case PhoneNumberUtil::VOIP:
+ return &metadata.voip();
+ case PhoneNumberUtil::PERSONAL_NUMBER:
+ return &metadata.personal_number();
+ case PhoneNumberUtil::PAGER:
+ return &metadata.pager();
+ case PhoneNumberUtil::UAN:
+ return &metadata.uan();
+ default:
+ return &metadata.general_desc();
+ }
+}
+
+// A helper function that is used by Format and FormatByPattern.
+void FormatNumberByFormat(int country_calling_code,
+ PhoneNumberUtil::PhoneNumberFormat number_format,
+ const string& formatted_national_number,
+ const string& formatted_extension,
+ string* formatted_number) {
+ switch (number_format) {
+ case PhoneNumberUtil::E164:
+ formatted_number->assign(StrCat(kPlusSign,
+ SimpleItoa(country_calling_code),
+ formatted_national_number,
+ formatted_extension));
+ return;
+ case PhoneNumberUtil::INTERNATIONAL:
+ formatted_number->assign(StrCat(kPlusSign,
+ SimpleItoa(country_calling_code),
+ " ",
+ formatted_national_number,
+ formatted_extension));
+ return;
+ case PhoneNumberUtil::RFC3966:
+ formatted_number->assign(StrCat(kPlusSign,
+ SimpleItoa(country_calling_code),
+ "-",
+ formatted_national_number,
+ formatted_extension));
+ return;
+ case PhoneNumberUtil::NATIONAL:
+ default:
+ formatted_number->assign(StrCat(formatted_national_number,
+ formatted_extension));
+ }
+}
+
+// The number_for_leading_digits_match is a separate parameter, because for
+// alpha numbers we want to pass in the numeric version to select the right
+// formatting rule, but then we actually apply the formatting pattern to the
+// national_number (which in this case has alpha characters in it).
+//
+// Note that carrier_code is optional - if an empty string, no carrier code
+// replacement will take place.
+void FormatAccordingToFormatsWithCarrier(
+ const string& number_for_leading_digits_match,
+ const RepeatedPtrField<NumberFormat>& available_formats,
+ PhoneNumberUtil::PhoneNumberFormat number_format,
+ const string& national_number,
+ const string& carrier_code,
+ string* formatted_number) {
+ DCHECK(formatted_number);
+ for (RepeatedPtrField<NumberFormat>::const_iterator
+ it = available_formats.begin(); it != available_formats.end(); ++it) {
+ int size = it->leading_digits_pattern_size();
+ if (size > 0) {
+ scoped_ptr<reg_exp::RegularExpressionInput>
+ number_copy(reg_exp::CreateRegularExpressionInput(
+ number_for_leading_digits_match.c_str()));
+ // We always use the last leading_digits_pattern, as it is the most
+ // detailed.
+ if (!number_copy->ConsumeRegExp(it->leading_digits_pattern(size - 1),
+ true, NULL, NULL)) {
+ continue;
+ }
+ }
+ scoped_ptr<reg_exp::RegularExpression> pattern_to_match(
+ reg_exp::CreateRegularExpression(it->pattern().c_str()));
+ if (pattern_to_match->Match(national_number.c_str(), true, NULL)) {
+ string formatting_pattern(it->format());
+ if (number_format == PhoneNumberUtil::NATIONAL &&
+ carrier_code.length() > 0 &&
+ it->domestic_carrier_code_formatting_rule().length() > 0) {
+ // Replace the $CC in the formatting rule with the desired carrier code.
+ string carrier_code_formatting_rule =
+ it->domestic_carrier_code_formatting_rule();
+ carrier_code_pattern->Replace(&carrier_code_formatting_rule,
+ false, carrier_code.c_str());
+ TransformRegularExpressionToRE2Syntax(&carrier_code_formatting_rule);
+ first_group_capturing_pattern->Replace(&formatting_pattern,
+ false,
+ carrier_code_formatting_rule.c_str());
+ } else {
+ // Use the national prefix formatting rule instead.
+ string national_prefix_formatting_rule =
+ it->national_prefix_formatting_rule();
+ if (number_format == PhoneNumberUtil::NATIONAL &&
+ national_prefix_formatting_rule.length() > 0) {
+ // Apply the national_prefix_formatting_rule as the formatting_pattern
+ // contains only information on how the national significant number
+ // should be formatted at this point.
+ TransformRegularExpressionToRE2Syntax(
+ &national_prefix_formatting_rule);
+ first_group_capturing_pattern->Replace(&formatting_pattern,
+ false,
+ national_prefix_formatting_rule.c_str());
+ }
+ }
+ TransformRegularExpressionToRE2Syntax(&formatting_pattern);
+ formatted_number->assign(national_number);
+ pattern_to_match->Replace(formatted_number, true,
+ formatting_pattern.c_str());
+ return;
+ }
+ }
+ // If no pattern above is matched, we format the number as a whole.
+ formatted_number->assign(national_number);
+}
+
+// Simple wrapper of FormatAccordingToFormatsWithCarrier for the common case of
+// no carrier code.
+void FormatAccordingToFormats(
+ const string& number_for_leading_digits_match,
+ const RepeatedPtrField<NumberFormat>& available_formats,
+ PhoneNumberUtil::PhoneNumberFormat number_format,
+ const string& national_number,
+ string* formatted_number) {
+ DCHECK(formatted_number);
+ FormatAccordingToFormatsWithCarrier(number_for_leading_digits_match,
+ available_formats, number_format,
+ national_number, "", formatted_number);
+}
+
+// Returns true when one national number is the suffix of the other or both are
+// the same.
+bool IsNationalNumberSuffixOfTheOther(const PhoneNumber& first_number,
+ const PhoneNumber& second_number) {
+ const string& first_number_national_number =
+ SimpleItoa(first_number.national_number());
+ const string& second_number_national_number =
+ SimpleItoa(second_number.national_number());
+ // Note that HasSuffixString returns true if the numbers are equal.
+ return HasSuffixString(first_number_national_number,
+ second_number_national_number) ||
+ HasSuffixString(second_number_national_number,
+ first_number_national_number);
+}
+
+bool IsNumberMatchingDesc(const string& national_number,
+ const PhoneNumberDesc& number_desc) {
+ scoped_ptr<const reg_exp::RegularExpression>
+ possible_pattern(reg_exp::CreateRegularExpression(
+ number_desc.possible_number_pattern().c_str()));
+ scoped_ptr<const reg_exp::RegularExpression>
+ national_pattern(reg_exp::CreateRegularExpression(
+ number_desc.national_number_pattern().c_str()));
+ return (possible_pattern->Match(national_number.c_str(), true, NULL) &&
+ national_pattern->Match(national_number.c_str(), true, NULL));
+}
+
+PhoneNumberUtil::PhoneNumberType GetNumberTypeHelper(
+ const string& national_number, const PhoneMetadata& metadata) {
+ const PhoneNumberDesc& general_desc = metadata.general_desc();
+ if (!general_desc.has_national_number_pattern() ||
+ !IsNumberMatchingDesc(national_number, general_desc)) {
+ logger->Debug("Number type unknown - "
+ "doesn't match general national number pattern.");
+ return PhoneNumberUtil::UNKNOWN;
+ }
+ if (IsNumberMatchingDesc(national_number, metadata.premium_rate())) {
+ logger->Debug("Number is a premium number.");
+ return PhoneNumberUtil::PREMIUM_RATE;
+ }
+ if (IsNumberMatchingDesc(national_number, metadata.toll_free())) {
+ logger->Debug("Number is a toll-free number.");
+ return PhoneNumberUtil::TOLL_FREE;
+ }
+ if (IsNumberMatchingDesc(national_number, metadata.shared_cost())) {
+ logger->Debug("Number is a shared cost number.");
+ return PhoneNumberUtil::SHARED_COST;
+ }
+ if (IsNumberMatchingDesc(national_number, metadata.voip())) {
+ logger->Debug("Number is a VOIP (Voice over IP) number.");
+ return PhoneNumberUtil::VOIP;
+ }
+ if (IsNumberMatchingDesc(national_number, metadata.personal_number())) {
+ logger->Debug("Number is a personal number.");
+ return PhoneNumberUtil::PERSONAL_NUMBER;
+ }
+ if (IsNumberMatchingDesc(national_number, metadata.pager())) {
+ logger->Debug("Number is a pager number.");
+ return PhoneNumberUtil::PAGER;
+ }
+ if (IsNumberMatchingDesc(national_number, metadata.uan())) {
+ logger->Debug("Number is a UAN.");
+ return PhoneNumberUtil::UAN;
+ }
+
+ bool is_fixed_line =
+ IsNumberMatchingDesc(national_number, metadata.fixed_line());
+ if (is_fixed_line) {
+ if (metadata.same_mobile_and_fixed_line_pattern()) {
+ logger->Debug("Fixed-line and mobile patterns equal, "
+ "number is fixed-line or mobile");
+ return PhoneNumberUtil::FIXED_LINE_OR_MOBILE;
+ } else if (IsNumberMatchingDesc(national_number, metadata.mobile())) {
+ logger->Debug("Fixed-line and mobile patterns differ, but number is "
+ "still fixed-line or mobile");
+ return PhoneNumberUtil::FIXED_LINE_OR_MOBILE;
+ }
+ logger->Debug("Number is a fixed line number.");
+ return PhoneNumberUtil::FIXED_LINE;
+ }
+ // Otherwise, test to see if the number is mobile. Only do this if certain
+ // that the patterns for mobile and fixed line aren't the same.
+ if (!metadata.same_mobile_and_fixed_line_pattern() &&
+ IsNumberMatchingDesc(national_number, metadata.mobile())) {
+ logger->Debug("Number is a mobile number.");
+ return PhoneNumberUtil::MOBILE;
+ }
+ logger->Debug("Number type unknown - doesn't match any specific number type"
+ " pattern.");
+ return PhoneNumberUtil::UNKNOWN;
+}
+
+int DecodeUTF8Char(const char* in, char32* out) {
+ Rune r;
+ int len = chartorune(&r, in);
+ *out = r;
+
+ return len;
+}
+
+char32 ToUnicodeCodepoint(const char* unicode_char) {
+ char32 codepoint;
+ DecodeUTF8Char(unicode_char, &codepoint);
+
+ return codepoint;
+}
+
+// Initialisation helper function used to populate the regular expressions in a
+// defined order.
+void CreateRegularExpressions() {
+ unique_international_prefix.reset(
+ reg_exp::CreateRegularExpression("[\\d]+(?:[~⁓∼~][\\d]+)?"));
+ first_group_capturing_pattern.reset(
+ reg_exp::CreateRegularExpression("(\\$1)"));
+ carrier_code_pattern.reset(
+ reg_exp::CreateRegularExpression("\\$CC"));
+ capturing_digit_pattern.reset(
+ reg_exp::CreateRegularExpression(
+ StrCat("([", kValidDigits, "])").c_str()));
+ capturing_ascii_digits_pattern.reset(
+ reg_exp::CreateRegularExpression("(\\d+)"));
+ valid_start_char.reset(new string(StrCat(
+ "[", kPlusChars, kValidDigits, "]")));
+ valid_start_char_pattern.reset(
+ reg_exp::CreateRegularExpression(valid_start_char->c_str()));
+ capture_up_to_second_number_start_pattern.reset(
+ reg_exp::CreateRegularExpression(kCaptureUpToSecondNumberStart));
+ unwanted_end_char_pattern.reset(
+ reg_exp::CreateRegularExpression(kUnwantedEndChar));
+ valid_phone_number.reset(new string(
+ StrCat("[", kPlusChars, "]*(?:[", kValidPunctuation, "]*[", kValidDigits,
+ "]){3,}[", kValidAlpha, kValidPunctuation, kValidDigits, "]*")));
+ // Canonical-equivalence doesn't seem to be an option with RE2, so we allow
+ // two options for representing the ó - the character itself, and one in the
+ // unicode decomposed form with the combining acute accent. Note that there
+ // are currently three capturing groups for the extension itself - if this
+ // number is changed, MaybeStripExtension needs to be updated.
+ const string capturing_extn_digits = StrCat("([", kValidDigits, "]{1,7})");
+ known_extn_patterns.reset(new string(
+ StrCat(kRfc3966ExtnPrefix, capturing_extn_digits, "|"
+ "[  \\t,]*(?:ext(?:ensi(?:ó?|ó))?n?|extn?|[,xx##~~]|"
+ "int|int|anexo)"
+ "[:\\..]?[  \\t,-]*", capturing_extn_digits, "#?|"
+ "[- ]+([", kValidDigits, "]{1,5})#")));
+ extn_pattern.reset(reg_exp::CreateRegularExpression(
+ StrCat("(?i)(?:", *known_extn_patterns, ")$").c_str()));
+ valid_phone_number_pattern.reset(reg_exp::CreateRegularExpression(
+ StrCat("(?i)", *valid_phone_number, "(?:", *known_extn_patterns,
+ ")?").c_str()));
+ valid_alpha_phone_pattern.reset(reg_exp::CreateRegularExpression(
+ StrCat("(?i)(?:.*?[", kValidAlpha, "]){3}").c_str()));
+ plus_chars_pattern.reset(reg_exp::CreateRegularExpression(
+ StrCat("[", kPlusChars, "]+").c_str()));
+}
+
+void InitializeStaticMapsAndSets() {
+ // Create global objects.
+ all_plus_number_grouping_symbols.reset(new map<char32, char>);
+ alpha_mappings.reset(new map<char32, char>);
+ all_normalization_mappings.reset(new map<char32, char>);
+
+ // Punctuation that we wish to respect in alpha numbers, as they show number
+ // groupings are mapped here.
+ all_plus_number_grouping_symbols->insert(
+ make_pair(ToUnicodeCodepoint("-"), '-'));
+ all_plus_number_grouping_symbols->insert(
+ make_pair(ToUnicodeCodepoint("-"), '-'));
+ all_plus_number_grouping_symbols->insert(
+ make_pair(ToUnicodeCodepoint("‐"), '-'));
+ all_plus_number_grouping_symbols->insert(
+ make_pair(ToUnicodeCodepoint("‑"), '-'));
+ all_plus_number_grouping_symbols->insert(
+ make_pair(ToUnicodeCodepoint("‒"), '-'));
+ all_plus_number_grouping_symbols->insert(
+ make_pair(ToUnicodeCodepoint("–"), '-'));
+ all_plus_number_grouping_symbols->insert(
+ make_pair(ToUnicodeCodepoint("—"), '-'));
+ all_plus_number_grouping_symbols->insert(
+ make_pair(ToUnicodeCodepoint("―"), '-'));
+ all_plus_number_grouping_symbols->insert(
+ make_pair(ToUnicodeCodepoint("−"), '-'));
+ all_plus_number_grouping_symbols->insert(
+ make_pair(ToUnicodeCodepoint("/"), '/'));
+ all_plus_number_grouping_symbols->insert(
+ make_pair(ToUnicodeCodepoint("/"), '/'));
+ all_plus_number_grouping_symbols->insert(
+ make_pair(ToUnicodeCodepoint(" "), ' '));
+ all_plus_number_grouping_symbols->insert(
+ make_pair(ToUnicodeCodepoint(" "), ' '));
+ all_plus_number_grouping_symbols->insert(
+ make_pair(ToUnicodeCodepoint("⁠"), ' '));
+ all_plus_number_grouping_symbols->insert(
+ make_pair(ToUnicodeCodepoint("."), '.'));
+ all_plus_number_grouping_symbols->insert(
+ make_pair(ToUnicodeCodepoint("."), '.'));
+ // Only the upper-case letters are added here - the lower-case versions are
+ // added programmatically.
+ alpha_mappings->insert(make_pair(ToUnicodeCodepoint("A"), '2'));
+ alpha_mappings->insert(make_pair(ToUnicodeCodepoint("B"), '2'));
+ alpha_mappings->insert(make_pair(ToUnicodeCodepoint("C"), '2'));
+ alpha_mappings->insert(make_pair(ToUnicodeCodepoint("D"), '3'));
+ alpha_mappings->insert(make_pair(ToUnicodeCodepoint("E"), '3'));
+ alpha_mappings->insert(make_pair(ToUnicodeCodepoint("F"), '3'));
+ alpha_mappings->insert(make_pair(ToUnicodeCodepoint("G"), '4'));
+ alpha_mappings->insert(make_pair(ToUnicodeCodepoint("H"), '4'));
+ alpha_mappings->insert(make_pair(ToUnicodeCodepoint("I"), '4'));
+ alpha_mappings->insert(make_pair(ToUnicodeCodepoint("J"), '5'));
+ alpha_mappings->insert(make_pair(ToUnicodeCodepoint("K"), '5'));
+ alpha_mappings->insert(make_pair(ToUnicodeCodepoint("L"), '5'));
+ alpha_mappings->insert(make_pair(ToUnicodeCodepoint("M"), '6'));
+ alpha_mappings->insert(make_pair(ToUnicodeCodepoint("N"), '6'));
+ alpha_mappings->insert(make_pair(ToUnicodeCodepoint("O"), '6'));
+ alpha_mappings->insert(make_pair(ToUnicodeCodepoint("P"), '7'));
+ alpha_mappings->insert(make_pair(ToUnicodeCodepoint("Q"), '7'));
+ alpha_mappings->insert(make_pair(ToUnicodeCodepoint("R"), '7'));
+ alpha_mappings->insert(make_pair(ToUnicodeCodepoint("S"), '7'));
+ alpha_mappings->insert(make_pair(ToUnicodeCodepoint("T"), '8'));
+ alpha_mappings->insert(make_pair(ToUnicodeCodepoint("U"), '8'));
+ alpha_mappings->insert(make_pair(ToUnicodeCodepoint("V"), '8'));
+ alpha_mappings->insert(make_pair(ToUnicodeCodepoint("W"), '9'));
+ alpha_mappings->insert(make_pair(ToUnicodeCodepoint("X"), '9'));
+ alpha_mappings->insert(make_pair(ToUnicodeCodepoint("Y"), '9'));
+ alpha_mappings->insert(make_pair(ToUnicodeCodepoint("Z"), '9'));
+ map<char32, char> lower_case_mappings;
+ map<char32, char> alpha_letters;
+ for (map<char32, char>::const_iterator it = alpha_mappings->begin();
+ it != alpha_mappings->end();
+ ++it) {
+ // Convert all the upper-case ASCII letters to lower-case.
+ if (it->first < 128) {
+ char letter_as_upper = static_cast<char>(it->first);
+ char32 letter_as_lower = static_cast<char32>(tolower(letter_as_upper));
+ lower_case_mappings.insert(make_pair(letter_as_lower, it->second));
+ // Add the letters in both variants to the alpha_letters map. This just
+ // pairs each letter with its upper-case representation so that it can be
+ // retained when normalising alpha numbers.
+ alpha_letters.insert(make_pair(letter_as_lower, letter_as_upper));
+ alpha_letters.insert(make_pair(it->first, letter_as_upper));
+ }
+ }
+ // In the Java version we don't insert the lower-case mappings in the map,
+ // because we convert to upper case on the fly. Doing this here would involve
+ // pulling in all of ICU, which we don't want to do if we don't have to.
+ alpha_mappings->insert(lower_case_mappings.begin(),
+ lower_case_mappings.end());
+ all_normalization_mappings->insert(alpha_mappings->begin(),
+ alpha_mappings->end());
+ all_plus_number_grouping_symbols->insert(alpha_letters.begin(),
+ alpha_letters.end());
+ // Add the ASCII digits so that they don't get deleted by NormalizeHelper().
+ for (char c = '0'; c <= '9'; ++c) {
+ all_normalization_mappings->insert(make_pair(c, c));
+ all_plus_number_grouping_symbols->insert(make_pair(c, c));
+ }
+ CreateRegularExpressions();
+}
+
+// Normalizes a string of characters representing a phone number by replacing
+// all characters found in the accompanying map with the values therein, and
+// stripping all other characters if remove_non_matches is true.
+// Parameters:
+// number - a pointer to a string of characters representing a phone number to
+// be normalized.
+// normalization_replacements - a mapping of characters to what they should be
+// replaced by in the normalized version of the phone number
+// remove_non_matches - indicates whether characters that are not able to be
+// replaced should be stripped from the number. If this is false, they will be
+// left unchanged in the number.
+void NormalizeHelper(const map<char32, char>& normalization_replacements,
+ bool remove_non_matches,
+ string* number) {
+ DCHECK(number);
+ UnicodeText number_as_unicode;
+ number_as_unicode.PointToUTF8(number->data(), number->size());
+ string normalized_number;
+ for (UnicodeText::const_iterator it = number_as_unicode.begin();
+ it != number_as_unicode.end();
+ ++it) {
+ map<char32, char>::const_iterator found_glyph_pair =
+ normalization_replacements.find(*it);
+ if (found_glyph_pair != normalization_replacements.end()) {
+ normalized_number.push_back(found_glyph_pair->second);
+ } else if (!remove_non_matches) {
+ normalized_number.append(it.utf8_data());
+ }
+ // If neither of the above are true, we remove this character.
+ }
+ number->assign(normalized_number);
+}
+
+// Strips the IDD from the start of the number if present. Helper function used
+// by MaybeStripInternationalPrefixAndNormalize.
+bool ParsePrefixAsIdd(const reg_exp::RegularExpression* idd_pattern,
+ string* number) {
+ DCHECK(number);
+ scoped_ptr<reg_exp::RegularExpressionInput> number_copy(
+ reg_exp::CreateRegularExpressionInput(number->c_str()));
+ // First attempt to strip the idd_pattern at the start, if present. We make a
+ // copy so that we can revert to the original string if necessary.
+ if (idd_pattern->Consume(number_copy.get(), true, NULL, NULL)) {
+ // Only strip this if the first digit after the match is not a 0, since
+ // country calling codes cannot begin with 0.
+ string extracted_digit;
+ if (capturing_digit_pattern->Match(number_copy->ToString().c_str(), false,
+ &extracted_digit)) {
+ PhoneNumberUtil::NormalizeDigitsOnly(&extracted_digit);
+ if (extracted_digit == "0") {
+ return false;
+ }
+ }
+ number->assign(number_copy->ToString());
+ return true;
+ }
+ return false;
+}
+
+PhoneNumberUtil::ValidationResult TestNumberLengthAgainstPattern(
+ const reg_exp::RegularExpression* number_pattern, const string& number) {
+ string extracted_number;
+ if (number_pattern->Match(number.c_str(), true, &extracted_number)) {
+ return PhoneNumberUtil::IS_POSSIBLE;
+ }
+ if (number_pattern->Match(number.c_str(), false, &extracted_number)) {
+ return PhoneNumberUtil::TOO_LONG;
+ } else {
+ return PhoneNumberUtil::TOO_SHORT;
+ }
+}
+
+} // namespace
+
+// Fetch the metadata which are actually already available in the address space
+// (embedded).
+class DefaultMetadataProvider : public PhoneNumberUtil::MetadataProvider {
+ public:
+ virtual ~DefaultMetadataProvider() {}
+
+ virtual pair<const void*, unsigned> operator()() {
+ return make_pair(metadata_get(), metadata_size());
+ }
+};
+
+bool PhoneNumberUtil::LoadMetadata(PhoneMetadataCollection* metadata,
+ MetadataProvider& provider) {
+
+ pair<const void*, unsigned> p = provider();
+ const void* metadata_start = p.first;
+ unsigned size = p.second;
+
+ if (!metadata->ParseFromArray(metadata_start, size)) {
+ cerr << "Could not parse binary data." << endl;
+ return false;
+ }
+ return true;
+}
+
+void PhoneNumberUtil::SetLoggerAdapter(LoggerAdapter* logger_adapter) {
+ logger.reset(logger_adapter);
+}
+
+// Private constructor. Also takes care of initialisation.
+PhoneNumberUtil::PhoneNumberUtil(MetadataProvider* provider)
+ : country_calling_code_to_region_code_map_(new vector<IntRegionsPair>()),
+ nanpa_regions_(new set<string>()),
+ region_to_metadata_map_(new map<string, PhoneMetadata>()) {
+
+ if (logger == NULL) {
+ SetLoggerAdapter(new DefaultLogger());
+ }
+ PhoneMetadataCollection metadata_collection;
+ DefaultMetadataProvider default_provider;
+
+ if (!LoadMetadata(&metadata_collection, provider ? *provider
+ : default_provider)) {
+ logger->Fatal("Could not load metadata");
+ return;
+ }
+ // Storing data in a temporary map to make it easier to find other regions
+ // that share a country calling code when inserting data.
+ map<int, list<string>* > country_calling_code_to_region_map;
+ for (RepeatedPtrField<PhoneMetadata>::const_iterator it =
+ metadata_collection.metadata().begin();
+ it != metadata_collection.metadata().end();
+ ++it) {
+ const PhoneMetadata& phone_metadata = *it;
+ const string& region_code = phone_metadata.id();
+ region_to_metadata_map_->insert(make_pair(region_code, *it));
+ int country_calling_code = it->country_code();
+ map<int, list<string>*>::iterator calling_code_in_map =
+ country_calling_code_to_region_map.find(country_calling_code);
+ if (calling_code_in_map != country_calling_code_to_region_map.end()) {
+ if (it->main_country_for_code()) {
+ calling_code_in_map->second->push_front(region_code);
+ } else {
+ calling_code_in_map->second->push_back(region_code);
+ }
+ } else {
+ // For most country calling codes, there will be only one region code.
+ list<string>* list_with_region_code = new list<string>();
+ list_with_region_code->push_back(region_code);
+ country_calling_code_to_region_map.insert(
+ make_pair(country_calling_code, list_with_region_code));
+ }
+ if (country_calling_code == kNanpaCountryCode) {
+ nanpa_regions_->insert(region_code);
+ }
+ }
+
+ country_calling_code_to_region_code_map_->insert(
+ country_calling_code_to_region_code_map_->begin(),
+ country_calling_code_to_region_map.begin(),
+ country_calling_code_to_region_map.end());
+ // Sort all the pairs in ascending order according to country calling code.
+ sort(country_calling_code_to_region_code_map_->begin(),
+ country_calling_code_to_region_code_map_->end(),
+ CompareFirst());
+
+ InitializeStaticMapsAndSets();
+}
+
+PhoneNumberUtil::~PhoneNumberUtil() {
+ for (vector<IntRegionsPair>::const_iterator it =
+ country_calling_code_to_region_code_map_->begin();
+ it != country_calling_code_to_region_code_map_->end();
+ ++it) {
+ delete it->second;
+ }
+}
+
+// Public wrapper function to get a PhoneNumberUtil instance with the default
+// metadata file.
+// static
+PhoneNumberUtil* PhoneNumberUtil::GetInstance() {
+ return Singleton<PhoneNumberUtil>::get();
+}
+
+void PhoneNumberUtil::GetSupportedRegions(set<string>* regions) const {
+ DCHECK(regions);
+ for (map<string, PhoneMetadata>::const_iterator it =
+ region_to_metadata_map_->begin(); it != region_to_metadata_map_->end();
+ ++it) {
+ regions->insert(it->first);
+ }
+}
+
+void PhoneNumberUtil::GetNddPrefixForRegion(const string& region_code,
+ bool strip_non_digits,
+ string* national_prefix) const {
+ DCHECK(national_prefix);
+ if (!IsValidRegionCode(region_code)) {
+ logger->Error("Invalid region code provided.");
+ return;
+ }
+ const PhoneMetadata* metadata = GetMetadataForRegion(region_code);
+ national_prefix->assign(metadata->national_prefix());
+ if (strip_non_digits) {
+ // Note: if any other non-numeric symbols are ever used in national
+ // prefixes, these would have to be removed here as well.
+ strrmm(national_prefix, "~");
+ }
+}
+
+bool PhoneNumberUtil::IsValidRegionCode(const string& region_code) const {
+ return (region_to_metadata_map_->find(region_code) !=
+ region_to_metadata_map_->end());
+}
+
+bool PhoneNumberUtil::HasValidRegionCode(const string& region_code,
+ int country_code,
+ const string& number) const {
+ if (!IsValidRegionCode(region_code)) {
+ logger->Info(string("Number ") + number +
+ " has invalid or missing country code (" + country_code + ")");
+ return false;
+ }
+ return true;
+}
+
+// Returns a pointer to the phone metadata for the appropriate region.
+const PhoneMetadata* PhoneNumberUtil::GetMetadataForRegion(
+ const string& region_code) const {
+ map<string, PhoneMetadata>::const_iterator it =
+ region_to_metadata_map_->find(region_code);
+ if (it != region_to_metadata_map_->end()) {
+ return &it->second;
+ }
+ return NULL;
+}
+
+void PhoneNumberUtil::Format(const PhoneNumber& number,
+ PhoneNumberFormat number_format,
+ string* formatted_number) const {
+ DCHECK(formatted_number);
+ int country_calling_code = number.country_code();
+ string national_significant_number;
+ GetNationalSignificantNumber(number, &national_significant_number);
+ if (number_format == E164) {
+ // Early exit for E164 case since no formatting of the national number needs
+ // to be applied. Extensions are not formatted.
+ FormatNumberByFormat(country_calling_code, E164,
+ national_significant_number, "", formatted_number);
+ return;
+ }
+ // Note here that all NANPA formatting rules are contained by US, so we use
+ // that to format NANPA numbers. The same applies to Russian Fed regions -
+ // rules are contained by Russia. French Indian Ocean country rules are
+ // contained by Réunion.
+ string region_code;
+ GetRegionCodeForCountryCode(country_calling_code, &region_code);
+ if (!HasValidRegionCode(region_code, country_calling_code,
+ national_significant_number)) {
+ formatted_number->assign(national_significant_number);
+ return;
+ }
+ string formatted_extension;
+ MaybeGetFormattedExtension(number, region_code, number_format,
+ &formatted_extension);
+ string formatted_national_number;
+ FormatNationalNumber(national_significant_number, region_code, number_format,
+ &formatted_national_number);
+ FormatNumberByFormat(country_calling_code, number_format,
+ formatted_national_number,
+ formatted_extension, formatted_number);
+}
+
+void PhoneNumberUtil::FormatByPattern(
+ const PhoneNumber& number,
+ PhoneNumberFormat number_format,
+ const RepeatedPtrField<NumberFormat>& user_defined_formats,
+ string* formatted_number) const {
+ static scoped_ptr<const reg_exp::RegularExpression>
+ national_prefix_pattern(reg_exp::CreateRegularExpression("\\$NP"));
+ static scoped_ptr<const reg_exp::RegularExpression>
+ first_group_pattern(reg_exp::CreateRegularExpression("\\$FG"));
+ DCHECK(formatted_number);
+ int country_calling_code = number.country_code();
+ // 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 region_code;
+ GetRegionCodeForCountryCode(country_calling_code, &region_code);
+ string national_significant_number;
+ GetNationalSignificantNumber(number, &national_significant_number);
+ if (!HasValidRegionCode(region_code, country_calling_code,
+ national_significant_number)) {
+ formatted_number->assign(national_significant_number);
+ return;
+ }
+ RepeatedPtrField<NumberFormat> user_defined_formats_copy;
+ for (RepeatedPtrField<NumberFormat>::const_iterator it =
+ user_defined_formats.begin();
+ it != user_defined_formats.end();
+ ++it) {
+ string national_prefix_formatting_rule(
+ it->national_prefix_formatting_rule());
+ if (!national_prefix_formatting_rule.empty()) {
+ const string& national_prefix =
+ GetMetadataForRegion(region_code)->national_prefix();
+ NumberFormat* num_format_copy = user_defined_formats_copy.Add();
+ num_format_copy->MergeFrom(*it);
+ if (!national_prefix.empty()) {
+ // Replace $NP with national prefix and $FG with the first group ($1).
+ national_prefix_pattern->Replace(&national_prefix_formatting_rule,
+ false,
+ national_prefix.c_str());
+ first_group_pattern->Replace(&national_prefix_formatting_rule,
+ false,
+ "$1");
+ num_format_copy->set_national_prefix_formatting_rule(
+ national_prefix_formatting_rule);
+ } else {
+ // We don't want to have a rule for how to format the national prefix if
+ // there isn't one.
+ num_format_copy->clear_national_prefix_formatting_rule();
+ }
+ } else {
+ user_defined_formats_copy.Add()->MergeFrom(*it);
+ }
+ }
+
+ string formatted_number_without_extension;
+ FormatAccordingToFormats(national_significant_number,
+ user_defined_formats_copy,
+ number_format, national_significant_number,
+ &formatted_number_without_extension);
+ string formatted_extension;
+ MaybeGetFormattedExtension(number, region_code, NATIONAL,
+ &formatted_extension);
+ FormatNumberByFormat(country_calling_code, number_format,
+ formatted_number_without_extension, formatted_extension,
+ formatted_number);
+}
+
+void PhoneNumberUtil::FormatNationalNumberWithCarrierCode(
+ const PhoneNumber& number,
+ const string& carrier_code,
+ string* formatted_number) const {
+ int country_calling_code = number.country_code();
+ string national_significant_number;
+ GetNationalSignificantNumber(number, &national_significant_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 region_code;
+ GetRegionCodeForCountryCode(country_calling_code, &region_code);
+ if (!HasValidRegionCode(region_code, country_calling_code,
+ national_significant_number)) {
+ formatted_number->assign(national_significant_number);
+ }
+ string formatted_extension;
+ MaybeGetFormattedExtension(number, region_code, NATIONAL,
+ &formatted_extension);
+ string formatted_national_number;
+ FormatNationalNumberWithCarrier(national_significant_number, region_code,
+ NATIONAL, carrier_code,
+ &formatted_national_number);
+ FormatNumberByFormat(country_calling_code, NATIONAL,
+ formatted_national_number, formatted_extension,
+ formatted_number);
+}
+
+void PhoneNumberUtil::FormatNationalNumberWithPreferredCarrierCode(
+ const PhoneNumber& number,
+ const string& fallback_carrier_code,
+ string* formatted_number) const {
+ FormatNationalNumberWithCarrierCode(
+ number,
+ number.has_preferred_domestic_carrier_code()
+ ? number.preferred_domestic_carrier_code()
+ : fallback_carrier_code,
+ formatted_number);
+}
+
+void PhoneNumberUtil::FormatOutOfCountryCallingNumber(
+ const PhoneNumber& number,
+ const string& calling_from,
+ string* formatted_number) const {
+ DCHECK(formatted_number);
+ if (!IsValidRegionCode(calling_from)) {
+ logger->Info("Trying to format number from invalid region. International"
+ " formatting applied.");
+ Format(number, INTERNATIONAL, formatted_number);
+ return;
+ }
+ int country_code = number.country_code();
+ string region_code;
+ GetRegionCodeForCountryCode(country_code, &region_code);
+ string national_significant_number;
+ GetNationalSignificantNumber(number, &national_significant_number);
+ if (!HasValidRegionCode(region_code, country_code,
+ national_significant_number)) {
+ formatted_number->assign(national_significant_number);
+ return;
+ }
+ if (country_code == kNanpaCountryCode) {
+ if (IsNANPACountry(calling_from)) {
+ // For NANPA regions, return the national format for these regions but
+ // prefix it with the country calling code.
+ string national_number;
+ Format(number, NATIONAL, &national_number);
+ formatted_number->assign(StrCat(country_code, " ", national_number));
+ return;
+ }
+ } else if (country_code == GetCountryCodeForRegion(calling_from)) {
+ // If neither region is a NANPA region, then we check to see if the
+ // country calling code of the number and the country calling code of the
+ // region we are calling from are the same.
+ // For regions that 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 Réunion to other
+ // overseas departments of France (French Guiana, Martinique, Guadeloupe),
+ // but not vice versa - so we don't cover this edge case for now and for
+ // those cases return the version including country calling code.
+ // Details here:
+ // http://www.petitfute.com/voyage/225-info-pratiques-reunion
+ Format(number, NATIONAL, formatted_number);
+ return;
+ }
+ string formatted_national_number;
+ FormatNationalNumber(national_significant_number, region_code, INTERNATIONAL,
+ &formatted_national_number);
+ const PhoneMetadata* metadata = GetMetadataForRegion(calling_from);
+ const string& international_prefix = metadata->international_prefix();
+ string formatted_extension;
+ MaybeGetFormattedExtension(number, region_code, INTERNATIONAL,
+ &formatted_extension);
+ // For regions that have multiple international prefixes, the international
+ // format of the number is returned, unless there is a preferred international
+ // prefix.
+ string international_prefix_for_formatting(
+ unique_international_prefix->Match(international_prefix.c_str(),
+ true, NULL)
+ ? international_prefix
+ : metadata->preferred_international_prefix());
+ if (!international_prefix_for_formatting.empty()) {
+ formatted_number->assign(
+ StrCat(international_prefix_for_formatting, " ", country_code, " ",
+ formatted_national_number, formatted_extension));
+ } else {
+ FormatNumberByFormat(country_code, INTERNATIONAL, formatted_national_number,
+ formatted_extension, formatted_number);
+ }
+}
+
+void PhoneNumberUtil::FormatInOriginalFormat(const PhoneNumber& number,
+ const string& region_calling_from,
+ string* formatted_number) const {
+ DCHECK(formatted_number);
+
+ if (!number.has_country_code_source()) {
+ Format(number, NATIONAL, formatted_number);
+ return;
+ }
+ switch (number.country_code_source()) {
+ case PhoneNumber::FROM_NUMBER_WITH_PLUS_SIGN:
+ Format(number, INTERNATIONAL, formatted_number);
+ return;
+ case PhoneNumber::FROM_NUMBER_WITH_IDD:
+ FormatOutOfCountryCallingNumber(number, region_calling_from,
+ formatted_number);
+ return;
+ case PhoneNumber::FROM_NUMBER_WITHOUT_PLUS_SIGN:
+ Format(number, INTERNATIONAL, formatted_number);
+ formatted_number->erase(formatted_number->begin());
+ return;
+ case PhoneNumber::FROM_DEFAULT_COUNTRY:
+ default:
+ Format(number, NATIONAL, formatted_number);
+ }
+}
+
+void PhoneNumberUtil::FormatOutOfCountryKeepingAlphaChars(
+ const PhoneNumber& number,
+ const string& calling_from,
+ string* formatted_number) const {
+ // If there is no raw input, then we can't keep alpha characters because there
+ // aren't any. In this case, we return FormatOutOfCountryCallingNumber.
+ if (number.raw_input().empty()) {
+ FormatOutOfCountryCallingNumber(number, calling_from, formatted_number);
+ return;
+ }
+ string region_code;
+ GetRegionCodeForCountryCode(number.country_code(), &region_code);
+ if (!HasValidRegionCode(region_code, number.country_code(),
+ number.raw_input())) {
+ formatted_number->assign(number.raw_input());
+ return;
+ }
+ // Strip any prefix such as country calling code, IDD, that was present. We do
+ // this by comparing the number in raw_input with the parsed number.
+ string raw_input_copy(number.raw_input());
+ // Normalize punctuation. We retain number grouping symbols such as " " only.
+ NormalizeHelper(*all_plus_number_grouping_symbols, true, &raw_input_copy);
+ // Now we trim everything before the first three digits in the parsed number.
+ // We choose three because all valid alpha numbers have 3 digits at the start
+ // - if it does not, then we don't trim anything at all. Similarly, if the
+ // national number was less than three digits, we don't trim anything at all.
+ string national_number;
+ GetNationalSignificantNumber(number, &national_number);
+ if (national_number.length() > 3) {
+ size_t first_national_number_digit =
+ raw_input_copy.find(national_number.substr(0, 3));
+ if (first_national_number_digit != string::npos) {
+ raw_input_copy = raw_input_copy.substr(first_national_number_digit);
+ }
+ }
+ const PhoneMetadata* metadata = GetMetadataForRegion(calling_from);
+ if (number.country_code() == kNanpaCountryCode) {
+ if (IsNANPACountry(calling_from)) {
+ formatted_number->assign(StrCat(number.country_code(), " ",
+ raw_input_copy));
+ return;
+ }
+ } else if (number.country_code() == GetCountryCodeForRegion(calling_from)) {
+ // Here we copy the formatting rules so we can modify the pattern we expect
+ // to match against.
+ RepeatedPtrField<NumberFormat> available_formats = metadata->number_format();
+ for (RepeatedPtrField<NumberFormat>::iterator
+ it = available_formats.begin(); it != available_formats.end(); ++it) {
+ // The first group is the first group of digits that the user determined.
+ it->set_pattern("(\\d+)(.*)");
+ // Here we just concatenate them back together after the national prefix
+ // has been fixed.
+ it->set_format("$1$2");
+ }
+ // Now we format using these patterns instead of the default pattern, but
+ // with the national prefix prefixed if necessary, by choosing the format
+ // rule based on the leading digits present in the unformatted national
+ // number.
+ // This will not work in the cases where the pattern (and not the
+ // leading digits) decide whether a national prefix needs to be used, since
+ // we have overridden the pattern to match anything, but that is not the
+ // case in the metadata to date.
+ FormatAccordingToFormats(national_number, available_formats,
+ NATIONAL, raw_input_copy, formatted_number);
+ return;
+ }
+
+ const string& international_prefix = metadata->international_prefix();
+ // For regions that have multiple international prefixes, the international
+ // format of the number is returned, unless there is a preferred international
+ // prefix.
+ string international_prefix_for_formatting(
+ unique_international_prefix->Match(international_prefix.c_str(),
+ true, NULL)
+ ? international_prefix
+ : metadata->preferred_international_prefix());
+ if (!international_prefix_for_formatting.empty()) {
+ formatted_number->assign(
+ StrCat(international_prefix_for_formatting, " ", number.country_code(),
+ " ", raw_input_copy));
+ } else {
+ FormatNumberByFormat(number.country_code(), INTERNATIONAL, raw_input_copy,
+ "", formatted_number);
+ }
+}
+
+void PhoneNumberUtil::FormatNationalNumber(
+ const string& number,
+ const string& region_code,
+ PhoneNumberFormat number_format,
+ string* formatted_number) const {
+ DCHECK(formatted_number);
+ FormatNationalNumberWithCarrier(number, region_code, number_format, "",
+ formatted_number);
+}
+
+// Note in some regions, the national number can be written in two completely
+// different ways depending on whether it forms part of the NATIONAL format or
+// INTERNATIONAL format. The number_format parameter here is used to specify
+// which format to use for those cases. If a carrier_code is specified, this
+// will be inserted into the formatted string to replace $CC.
+void PhoneNumberUtil::FormatNationalNumberWithCarrier(
+ const string& number,
+ const string& region_code,
+ PhoneNumberFormat number_format,
+ const string& carrier_code,
+ string* formatted_number) const {
+ DCHECK(formatted_number);
+ const PhoneMetadata* metadata = GetMetadataForRegion(region_code);
+ // When the intl_number_formats exists, we use that to format national number
+ // for the INTERNATIONAL format instead of using the number_formats.
+ const RepeatedPtrField<NumberFormat> available_formats =
+ (metadata->intl_number_format_size() == 0 || number_format == NATIONAL)
+ ? metadata->number_format()
+ : metadata->intl_number_format();
+ FormatAccordingToFormatsWithCarrier(number, available_formats, number_format,
+ number, carrier_code, formatted_number);
+ if (number_format == RFC3966) {
+ // Replace all separators with a "-".
+ scoped_ptr<const reg_exp::RegularExpression> separator_pattern(
+ reg_exp::CreateRegularExpression(
+ StrCat("[", kValidPunctuation, "]+").c_str()));
+ separator_pattern->Replace(formatted_number, true, "-");
+ }
+}
+
+// Gets the formatted extension of a phone number, if the phone number had an
+// extension specified. If not, it returns an empty string.
+void PhoneNumberUtil::MaybeGetFormattedExtension(
+ const PhoneNumber& number,
+ const string& region_code,
+ PhoneNumberFormat number_format,
+ string* extension) const {
+ DCHECK(extension);
+ if (!number.has_extension() || number.extension().length() == 0) {
+ extension->assign("");
+ } else {
+ if (number_format == RFC3966) {
+ StrAppend(extension, kRfc3966ExtnPrefix, number.extension());
+ return;
+ }
+ FormatExtension(number.extension(), region_code, extension);
+ }
+}
+
+// Formats the extension part of the phone number by prefixing it with the
+// appropriate extension prefix. This will be the default extension prefix,
+// unless overridden by a preferred extension prefix for this region.
+void PhoneNumberUtil::FormatExtension(const string& extension_digits,
+ const string& region_code,
+ string* extension) const {
+ DCHECK(extension);
+ const PhoneMetadata* metadata = GetMetadataForRegion(region_code);
+ if (metadata->has_preferred_extn_prefix()) {
+ extension->assign(StrCat(metadata->preferred_extn_prefix(),
+ extension_digits));
+ } else {
+ extension->assign(StrCat(kDefaultExtnPrefix, extension_digits));
+ }
+}
+
+bool PhoneNumberUtil::IsNANPACountry(const string& region_code) const {
+ return nanpa_regions_->find(region_code) != nanpa_regions_->end();
+}
+
+// Returns the region codes that matches the specific country calling code. In
+// the case of no region code being found, region_codes will be left empty.
+void PhoneNumberUtil::GetRegionCodesForCountryCallingCode(
+ int country_calling_code,
+ list<string>* region_codes) const {
+ DCHECK(region_codes);
+ // Create a IntRegionsPair with the country_code passed in, and use it to
+ // locate the pair with the same country_code in the sorted vector.
+ IntRegionsPair target_pair;
+ target_pair.first = country_calling_code;
+ typedef vector<IntRegionsPair>::const_iterator ConstIterator;
+ pair<ConstIterator, ConstIterator> range = equal_range(
+ country_calling_code_to_region_code_map_->begin(),
+ country_calling_code_to_region_code_map_->end(),
+ target_pair, CompareFirst());
+ if (range.first != range.second) {
+ region_codes->insert(region_codes->begin(),
+ range.first->second->begin(),
+ range.first->second->end());
+ }
+}
+
+// Returns the region code that matches the specific country calling code. In
+// the case of no region code being found, ZZ will be returned.
+void PhoneNumberUtil::GetRegionCodeForCountryCode(
+ int country_calling_code,
+ string* region_code) const {
+ DCHECK(region_code);
+ list<string> region_codes;
+
+ GetRegionCodesForCountryCallingCode(country_calling_code, &region_codes);
+ *region_code = region_codes.size() != 0 ? region_codes.front() : "ZZ";
+}
+
+void PhoneNumberUtil::GetRegionCodeForNumber(const PhoneNumber& number,
+ string* region_code) const {
+ DCHECK(region_code);
+ int country_calling_code = number.country_code();
+ list<string> region_codes;
+ GetRegionCodesForCountryCallingCode(country_calling_code, &region_codes);
+ if (region_codes.size() == 0) {
+ string number_string;
+ GetNationalSignificantNumber(number, &number_string);
+ logger->Warning(string("Missing/invalid country code (") +
+ SimpleItoa(country_calling_code) + ") for number " + number_string);
+ *region_code = "ZZ";
+ return;
+ }
+ if (region_codes.size() == 1) {
+ *region_code = region_codes.front();
+ } else {
+ GetRegionCodeForNumberFromRegionList(number, region_codes, region_code);
+ }
+}
+
+void PhoneNumberUtil::GetRegionCodeForNumberFromRegionList(
+ const PhoneNumber& number, const list<string>& region_codes,
+ string* region_code) const {
+ DCHECK(region_code);
+ string national_number;
+ GetNationalSignificantNumber(number, &national_number);
+ for (list<string>::const_iterator it = region_codes.begin();
+ it != region_codes.end(); ++it) {
+ const PhoneMetadata* metadata = GetMetadataForRegion(*it);
+ if (metadata->has_leading_digits()) {
+ scoped_ptr<reg_exp::RegularExpressionInput> number(
+ reg_exp::CreateRegularExpressionInput(national_number.c_str()));
+ if (number->ConsumeRegExp(metadata->leading_digits(), true, NULL, NULL)) {
+ *region_code = *it;
+ return;
+ }
+ } else if (GetNumberTypeHelper(national_number, *metadata) != UNKNOWN) {
+ *region_code = *it;
+ return;
+ }
+ }
+ *region_code = "ZZ";
+}
+
+int PhoneNumberUtil::GetCountryCodeForRegion(const string& region_code) const {
+ if (!IsValidRegionCode(region_code)) {
+ logger->Info("Invalid or unknown country code provided.");
+ return 0;
+ }
+ const PhoneMetadata* metadata = GetMetadataForRegion(region_code);
+ if (!metadata) {
+ logger->Error("Unsupported country code provided.");
+ return 0;
+ }
+ return metadata->country_code();
+}
+
+// Gets a valid fixed-line number for the specified region_code. Returns false
+// if the country was unknown or if no number exists.
+bool PhoneNumberUtil::GetExampleNumber(const string& region_code,
+ PhoneNumber* number) const {
+ DCHECK(number);
+ return GetExampleNumberForType(region_code,
+ FIXED_LINE,
+ number);
+}
+
+// Gets a valid number for the specified region_code and type. Returns false if
+// the country was unknown or if no number exists.
+bool PhoneNumberUtil::GetExampleNumberForType(
+ const string& region_code,
+ PhoneNumberUtil::PhoneNumberType type,
+ PhoneNumber* number) const {
+ DCHECK(number);
+ const PhoneMetadata* region_metadata = GetMetadataForRegion(region_code);
+ const PhoneNumberDesc* description =
+ GetNumberDescByType(*region_metadata, type);
+ if (description && description->has_example_number()) {
+ return (Parse(description->example_number(),
+ region_code,
+ number) == NO_PARSING_ERROR);
+ }
+ return false;
+}
+
+PhoneNumberUtil::ErrorType PhoneNumberUtil::Parse(const string& number_to_parse,
+ const string& default_region,
+ PhoneNumber* number) const {
+ DCHECK(number);
+ return ParseHelper(number_to_parse, default_region, false, true, number);
+}
+
+PhoneNumberUtil::ErrorType PhoneNumberUtil::ParseAndKeepRawInput(
+ const string& number_to_parse,
+ const string& default_region,
+ PhoneNumber* number) const {
+ DCHECK(number);
+ return ParseHelper(number_to_parse, default_region, true, true, number);
+}
+
+// Checks to see that the region code used is valid, or if it is not valid, that
+// the number to parse starts with a + symbol so that we can attempt to infer
+// the country from the number. Returns false if it cannot use the region
+// provided and the region cannot be inferred.
+bool PhoneNumberUtil::CheckRegionForParsing(
+ const string& number_to_parse,
+ const string& default_region) const {
+ if (!IsValidRegionCode(default_region) && !number_to_parse.empty()) {
+ scoped_ptr<reg_exp::RegularExpressionInput> number_as_string_piece(
+ reg_exp::CreateRegularExpressionInput(number_to_parse.c_str()));
+ if (!plus_chars_pattern->Consume(number_as_string_piece.get(),
+ true, NULL, NULL)) {
+ return false;
+ }
+ }
+ return true;
+}
+
+PhoneNumberUtil::ErrorType PhoneNumberUtil::ParseHelper(
+ const string& number_to_parse,
+ const string& default_region,
+ bool keep_raw_input,
+ bool check_region,
+ PhoneNumber* phone_number) const {
+ DCHECK(phone_number);
+ // Extract a possible number from the string passed in (this strips leading
+ // characters that could not be the start of a phone number.)
+ string national_number;
+ ExtractPossibleNumber(number_to_parse, &national_number);
+ if (!IsViablePhoneNumber(national_number)) {
+ logger->Debug("The string supplied did not seem to be a phone number.");
+ return NOT_A_NUMBER;
+ }
+
+ if (check_region &&
+ !CheckRegionForParsing(national_number, default_region)) {
+ logger->Info("Missing or invalid default country.");
+ return INVALID_COUNTRY_CODE_ERROR;
+ }
+ PhoneNumber temp_number;
+ if (keep_raw_input) {
+ temp_number.set_raw_input(number_to_parse);
+ }
+ // Attempt to parse extension first, since it doesn't require country-specific
+ // data and we want to have the non-normalised number here.
+ string extension;
+ MaybeStripExtension(&national_number, &extension);
+ if (!extension.empty()) {
+ temp_number.set_extension(extension);
+ }
+ const PhoneMetadata* country_metadata = GetMetadataForRegion(default_region);
+ // Check to see if the number is given in international format so we know
+ // whether this number is from the default country or not.
+ string normalized_national_number(national_number);
+ ErrorType country_code_error =
+ MaybeExtractCountryCode(country_metadata, keep_raw_input,
+ &normalized_national_number, &temp_number);
+ int country_code = temp_number.country_code();
+ if (country_code_error != NO_PARSING_ERROR) {
+ return country_code_error;
+ }
+ if (country_code != 0) {
+ string phone_number_region;
+ GetRegionCodeForCountryCode(country_code, &phone_number_region);
+ if (phone_number_region != default_region) {
+ country_metadata = GetMetadataForRegion(phone_number_region);
+ }
+ } else if (country_metadata) {
+ // If no extracted country calling code, use the region supplied instead.
+ // Note that the national number was already normalized by
+ // MaybeExtractCountryCode.
+ country_code = country_metadata->country_code();
+ }
+ if (normalized_national_number.length() < kMinLengthForNsn) {
+ logger->Debug("The string supplied is too short to be a phone number.");
+ return TOO_SHORT_NSN;
+ }
+ if (country_metadata) {
+ string* carrier_code = keep_raw_input ?
+ temp_number.mutable_preferred_domestic_carrier_code() : NULL;
+ MaybeStripNationalPrefixAndCarrierCode(*country_metadata,
+ &normalized_national_number,
+ carrier_code);
+ }
+ size_t normalized_national_number_length =
+ normalized_national_number.length();
+ if (normalized_national_number_length < kMinLengthForNsn) {
+ logger->Debug("The string supplied is too short to be a phone number.");
+ return TOO_SHORT_NSN;
+ }
+ if (normalized_national_number_length > kMaxLengthForNsn) {
+ logger->Debug("The string supplied is too long to be a phone number.");
+ return TOO_LONG_NSN;
+ }
+ temp_number.set_country_code(country_code);
+ if (country_metadata &&
+ country_metadata->leading_zero_possible() &&
+ normalized_national_number[0] == '0') {
+ temp_number.set_italian_leading_zero(true);
+ }
+ uint64 number_as_int;
+ safe_strtou64(normalized_national_number, &number_as_int);
+ temp_number.set_national_number(number_as_int);
+ phone_number->MergeFrom(temp_number);
+ return NO_PARSING_ERROR;
+}
+
+// Attempts to extract a possible number from the string passed in. This
+// currently strips all leading characters that could not be used to start a
+// phone number. Characters that can be used to start a phone number are
+// defined in the valid_start_char_pattern. If none of these characters are
+// found in the number passed in, an empty string is returned. This function
+// also attempts to strip off any alternative extensions or endings if two or
+// more are present, such as in the case of: (530) 583-6985 x302/x2303. The
+// second extension here makes this actually two phone numbers, (530) 583-6985
+// x302 and (530) 583-6985 x2303. We remove the second extension so that the
+// first number is parsed correctly.
+// static
+void PhoneNumberUtil::ExtractPossibleNumber(const string& number,
+ string* extracted_number) {
+ DCHECK(extracted_number);
+
+ UnicodeText number_as_unicode;
+ number_as_unicode.PointToUTF8(number.data(), number.size());
+ char current_char[5];
+ int len;
+ UnicodeText::const_iterator it;
+ for (it = number_as_unicode.begin(); it != number_as_unicode.end(); ++it) {
+ len = it.get_utf8(current_char);
+ current_char[len] = '\0';
+ if (valid_start_char_pattern->Match(current_char, true, NULL)) {
+ break;
+ }
+ }
+
+ if (it == number_as_unicode.end()) {
+ // No valid start character was found. extracted_number should be set to
+ // empty string.
+ extracted_number->assign("");
+ return;
+ }
+
+ UnicodeText::const_reverse_iterator reverse_it(number_as_unicode.end());
+ for (; reverse_it.base() != it; ++reverse_it) {
+ len = reverse_it.get_utf8(current_char);
+ current_char[len] = '\0';
+ if (!unwanted_end_char_pattern->Match(current_char, true, NULL)) {
+ break;
+ }
+ }
+
+ if (reverse_it.base() == it) {
+ extracted_number->assign("");
+ return;
+ }
+
+ extracted_number->assign(UnicodeText::UTF8Substring(it, reverse_it.base()));
+
+ logger->Debug("After stripping starting and trailing characters,"
+ " left with: " + *extracted_number);
+
+ // Now remove any extra numbers at the end.
+ capture_up_to_second_number_start_pattern->Match(extracted_number->c_str(),
+ false,
+ extracted_number);
+}
+
+bool PhoneNumberUtil::IsPossibleNumber(const PhoneNumber& number) const {
+ return IsPossibleNumberWithReason(number) == IS_POSSIBLE;
+}
+
+bool PhoneNumberUtil::IsPossibleNumberForString(
+ const string& number,
+ const string& region_dialing_from) const {
+ PhoneNumber number_proto;
+ if (Parse(number, region_dialing_from, &number_proto) == NO_PARSING_ERROR) {
+ return IsPossibleNumber(number_proto);
+ } else {
+ return false;
+ }
+}
+
+PhoneNumberUtil::ValidationResult PhoneNumberUtil::IsPossibleNumberWithReason(
+ const PhoneNumber& number) const {
+ string national_number;
+ GetNationalSignificantNumber(number, &national_number);
+ int country_code = number.country_code();
+ // Note: For Russian Fed and NANPA numbers, we just use the rules from the
+ // default region (US or Russia) since the GetRegionCodeForNumber will not
+ // work if the number is possible but not valid. This would need to be
+ // revisited if the possible number pattern ever differed between various
+ // regions within those plans.
+ string region_code;
+ GetRegionCodeForCountryCode(country_code, &region_code);
+ if (!HasValidRegionCode(region_code, country_code, national_number)) {
+ return INVALID_COUNTRY_CODE;
+ }
+ const PhoneNumberDesc& general_num_desc =
+ GetMetadataForRegion(region_code)->general_desc();
+ // Handling case of numbers with no metadata.
+ if (!general_num_desc.has_national_number_pattern()) {
+ size_t number_length = national_number.length();
+ if (number_length < kMinLengthForNsn) {
+ return TOO_SHORT;
+ } else if (number_length > kMaxLengthForNsn) {
+ return TOO_LONG;
+ } else {
+ return IS_POSSIBLE;
+ }
+ }
+ scoped_ptr<reg_exp::RegularExpression> possible_number_pattern(
+ reg_exp::CreateRegularExpression(
+ StrCat("(", general_num_desc.possible_number_pattern(), ")").c_str()));
+ return TestNumberLengthAgainstPattern(possible_number_pattern.get(),
+ national_number);
+}
+
+bool PhoneNumberUtil::TruncateTooLongNumber(PhoneNumber* number) const {
+ if (IsValidNumber(*number)) {
+ return true;
+ }
+ PhoneNumber number_copy(*number);
+ uint64 national_number = number->national_number();
+ do {
+ national_number /= 10;
+ number_copy.set_national_number(national_number);
+ if (IsPossibleNumberWithReason(number_copy) == TOO_SHORT ||
+ national_number == 0) {
+ return false;
+ }
+ } while (!IsValidNumber(number_copy));
+ number->set_national_number(national_number);
+ return true;
+}
+
+PhoneNumberUtil::PhoneNumberType PhoneNumberUtil::GetNumberType(
+ const PhoneNumber& number) const {
+ string region_code;
+ GetRegionCodeForNumber(number, &region_code);
+ if (!IsValidRegionCode(region_code)) {
+ return UNKNOWN;
+ }
+ string national_significant_number;
+ GetNationalSignificantNumber(number, &national_significant_number);
+ return GetNumberTypeHelper(national_significant_number,
+ *GetMetadataForRegion(region_code));
+}
+
+bool PhoneNumberUtil::IsValidNumber(const PhoneNumber& number) const {
+ string region_code;
+ GetRegionCodeForNumber(number, &region_code);
+ return IsValidRegionCode(region_code) &&
+ IsValidNumberForRegion(number, region_code);
+}
+
+bool PhoneNumberUtil::IsValidNumberForRegion(const PhoneNumber& number,
+ const string& region_code) const {
+ if (number.country_code() != GetCountryCodeForRegion(region_code)) {
+ return false;
+ }
+ const PhoneMetadata* metadata = GetMetadataForRegion(region_code);
+ const PhoneNumberDesc& general_desc = metadata->general_desc();
+ string national_number;
+ GetNationalSignificantNumber(number, &national_number);
+
+ // For regions where we don't have metadata for PhoneNumberDesc, we treat
+ // any number passed in as a valid number if its national significant number
+ // is between the minimum and maximum lengths defined by ITU for a national
+ // significant number.
+ if (!general_desc.has_national_number_pattern()) {
+ logger->Info("Validating number with incomplete metadata.");
+ size_t number_length = national_number.length();
+ return number_length > kMinLengthForNsn &&
+ number_length <= kMaxLengthForNsn;
+ }
+ return GetNumberTypeHelper(national_number, *metadata) != UNKNOWN;
+}
+
+bool PhoneNumberUtil::IsLeadingZeroPossible(int country_calling_code) const {
+ string region_code;
+ GetRegionCodeForCountryCode(country_calling_code, &region_code);
+ const PhoneMetadata* main_metadata_for_calling_code =
+ GetMetadataForRegion(region_code);
+ if (!main_metadata_for_calling_code) return false;
+ return main_metadata_for_calling_code->leading_zero_possible();
+}
+
+void PhoneNumberUtil::GetNationalSignificantNumber(
+ const PhoneNumber& number,
+ string* national_number) const {
+ // The leading zero in the national (significant) number of an Italian phone
+ // number has a special meaning. Unlike the rest of the world, it indicates
+ // the number is a landline number. There have been plans to migrate landline
+ // numbers to start with the digit two since December 2000, but it has not yet
+ // happened.
+ // See http://en.wikipedia.org/wiki/%2B39 for more details.
+ // Other regions such as Cote d'Ivoire and Gabon use this for their mobile
+ // numbers.
+ DCHECK(national_number);
+ StrAppend(national_number,
+ (IsLeadingZeroPossible(number.country_code()) &&
+ number.has_italian_leading_zero() &&
+ number.italian_leading_zero())
+ ? "0"
+ : "");
+ StrAppend(national_number, number.national_number());
+}
+
+int PhoneNumberUtil::GetLengthOfGeographicalAreaCode(
+ const PhoneNumber& number) const {
+ string region_code;
+ GetRegionCodeForNumber(number, &region_code);
+ if (!IsValidRegionCode(region_code)) {
+ return 0;
+ }
+ const PhoneMetadata* metadata = GetMetadataForRegion(region_code);
+ DCHECK(metadata);
+ if (!metadata->has_national_prefix()) {
+ return 0;
+ }
+
+ string national_significant_number;
+ GetNationalSignificantNumber(number, &national_significant_number);
+ PhoneNumberType type = GetNumberTypeHelper(national_significant_number,
+ *metadata);
+ // Most numbers other than the two types below have to be dialled in full.
+ if (type != FIXED_LINE && type != FIXED_LINE_OR_MOBILE) {
+ return 0;
+ }
+
+ return GetLengthOfNationalDestinationCode(number);
+}
+
+int PhoneNumberUtil::GetLengthOfNationalDestinationCode(
+ const PhoneNumber& number) const {
+ PhoneNumber copied_proto(number);
+ if (number.has_extension()) {
+ // Clear the extension so it's not included when formatting.
+ copied_proto.clear_extension();
+ }
+
+ string formatted_number;
+ Format(copied_proto, INTERNATIONAL, &formatted_number);
+ scoped_ptr<reg_exp::RegularExpressionInput> i18n_number(
+ reg_exp::CreateRegularExpressionInput(formatted_number.c_str()));
+ string digit_group;
+ string ndc;
+ string third_group;
+ for (int i = 0; i < 3; ++i) {
+ if (!capturing_ascii_digits_pattern->Consume(i18n_number.get(),
+ false,
+ &digit_group,
+ NULL)) {
+ // We should find at least three groups.
+ return 0;
+ }
+ if (i == 1) {
+ ndc = digit_group;
+ } else if (i == 2) {
+ third_group = digit_group;
+ }
+ }
+ string region_code;
+ GetRegionCodeForNumber(number, &region_code);
+ if (region_code == "AR" &&
+ GetNumberType(number) == MOBILE) {
+ // Argentinian mobile numbers, when formatted in the international format,
+ // are in the form of +54 9 NDC XXXX.... As a result, we take the length of
+ // the third group (NDC) and add 1 for the digit 9, which also forms part of
+ // the national significant number.
+ return third_group.size() + 1;
+ }
+ return ndc.size();
+}
+
+// static
+void PhoneNumberUtil::NormalizeDigitsOnly(string* number) {
+ DCHECK(number);
+ // Delete everything that isn't valid digits.
+ static scoped_ptr<reg_exp::RegularExpression> invalid_digits_pattern(
+ reg_exp::CreateRegularExpression(StrCat("[^", kValidDigits,
+ "]").c_str()));
+ static const char *empty = "";
+ invalid_digits_pattern->Replace(number, true, empty);
+ // Normalize all decimal digits to ASCII digits.
+ UParseError error;
+ icu::ErrorCode status;
+
+ scoped_ptr<icu::Transliterator> transliterator(
+ icu::Transliterator::createFromRules(
+ "NormalizeDecimalDigits",
+ "[[:nv=0:]-[0]-[:^nt=de:]]>0;"
+ "[[:nv=1:]-[1]-[:^nt=de:]]>1;"
+ "[[:nv=2:]-[2]-[:^nt=de:]]>2;"
+ "[[:nv=3:]-[3]-[:^nt=de:]]>3;"
+ "[[:nv=4:]-[4]-[:^nt=de:]]>4;"
+ "[[:nv=5:]-[5]-[:^nt=de:]]>5;"
+ "[[:nv=6:]-[6]-[:^nt=de:]]>6;"
+ "[[:nv=7:]-[7]-[:^nt=de:]]>7;"
+ "[[:nv=8:]-[8]-[:^nt=de:]]>8;"
+ "[[:nv=9:]-[9]-[:^nt=de:]]>9;",
+ UTRANS_FORWARD,
+ error,
+ status
+ )
+ );
+ if (!status.isSuccess()) {
+ logger->Error("Error creating ICU Transliterator");
+ return;
+ }
+ icu::UnicodeString utf16(icu::UnicodeString::fromUTF8(number->c_str()));
+ transliterator->transliterate(utf16);
+ number->clear();
+ utf16.toUTF8String(*number);
+}
+
+bool PhoneNumberUtil::IsAlphaNumber(const string& number) const {
+ if (!IsViablePhoneNumber(number)) {
+ // Number is too short, or doesn't match the basic phone number pattern.
+ return false;
+ }
+ // Copy the number, since we are going to try and strip the extension from it.
+ string number_copy(number);
+ string extension;
+ MaybeStripExtension(&number_copy, &extension);
+ return valid_alpha_phone_pattern->Match(number_copy.c_str(), true, NULL);
+}
+
+void PhoneNumberUtil::ConvertAlphaCharactersInNumber(string* number) const {
+ DCHECK(number);
+ NormalizeHelper(*all_normalization_mappings, false, number);
+}
+
+// Normalizes a string of characters representing a phone number. This performs
+// the following conversions:
+// - Wide-ascii digits are converted to normal ASCII (European) digits.
+// - Letters are converted to their numeric representation on a telephone
+// keypad. The keypad used here is the one defined in ITU Recommendation
+// E.161. This is only done if there are 3 or more letters in the number, to
+// lessen the risk that such letters are typos - otherwise alpha characters
+// are stripped.
+// - Punctuation is stripped.
+// - Arabic-Indic numerals are converted to European numerals.
+void PhoneNumberUtil::Normalize(string* number) const {
+ DCHECK(number);
+ if (valid_alpha_phone_pattern->Match(number->c_str(), false, NULL)) {
+ NormalizeHelper(*all_normalization_mappings, true, number);
+ }
+ NormalizeDigitsOnly(number);
+}
+
+// Checks to see if the string of characters could possibly be a phone number at
+// all. At the moment, checks to see that the string begins with at least 3
+// digits, ignoring any punctuation commonly found in phone numbers. This
+// method does not require the number to be normalized in advance - but does
+// assume that leading non-number symbols have been removed, such as by the
+// method ExtractPossibleNumber.
+// static
+bool PhoneNumberUtil::IsViablePhoneNumber(const string& number) {
+ if (number.length() < kMinLengthForNsn) {
+ logger->Debug("Number too short to be viable:" + number);
+ return false;
+ }
+ return valid_phone_number_pattern->Match(number.c_str(), true, NULL);
+}
+
+// Strips any international prefix (such as +, 00, 011) present in the number
+// provided, normalizes the resulting number, and indicates if an international
+// prefix was present.
+//
+// possible_idd_prefix represents the international direct dialing prefix from
+// the region we think this number may be dialed in.
+// Returns true if an international dialing prefix could be removed from the
+// number, otherwise false if the number did not seem to be in international
+// format.
+PhoneNumber::CountryCodeSource
+PhoneNumberUtil::MaybeStripInternationalPrefixAndNormalize(
+ const string& possible_idd_prefix,
+ string* number) const {
+ DCHECK(number);
+ if (number->empty()) {
+ return PhoneNumber::FROM_DEFAULT_COUNTRY;
+ }
+ scoped_ptr<reg_exp::RegularExpressionInput> number_string_piece(
+ reg_exp::CreateRegularExpressionInput(number->c_str()));
+ if (plus_chars_pattern->Consume(number_string_piece.get(), true,
+ NULL, NULL)) {
+ number->assign(number_string_piece->ToString());
+ // Can now normalize the rest of the number since we've consumed the "+"
+ // sign at the start.
+ Normalize(number);
+ return PhoneNumber::FROM_NUMBER_WITH_PLUS_SIGN;
+ }
+ // Attempt to parse the first digits as an international prefix.
+ scoped_ptr<reg_exp::RegularExpression> idd_pattern(
+ reg_exp::CreateRegularExpression(possible_idd_prefix.c_str()));
+ if (ParsePrefixAsIdd(idd_pattern.get(), number)) {
+ Normalize(number);
+ return PhoneNumber::FROM_NUMBER_WITH_IDD;
+ }
+ // If still not found, then try and normalize the number and then try again.
+ // This shouldn't be done before, since non-numeric characters (+ and ~) may
+ // legally be in the international prefix.
+ Normalize(number);
+ return ParsePrefixAsIdd(idd_pattern.get(), number)
+ ? PhoneNumber::FROM_NUMBER_WITH_IDD
+ : PhoneNumber::FROM_DEFAULT_COUNTRY;
+}
+
+// Strips any national prefix (such as 0, 1) present in the number provided.
+// The number passed in should be the normalized telephone number that we wish
+// to strip any national dialing prefix from. The metadata should be for the
+// region that we think this number is from.
+// static
+void PhoneNumberUtil::MaybeStripNationalPrefixAndCarrierCode(
+ const PhoneMetadata& metadata,
+ string* number,
+ string* carrier_code) {
+ DCHECK(number);
+ string carrier_code_temp;
+ const string& possible_national_prefix =
+ metadata.national_prefix_for_parsing();
+ if (number->empty() || possible_national_prefix.empty()) {
+ // Early return for numbers of zero length or with no national prefix
+ // possible.
+ return;
+ }
+ // We use two copies here since Consume modifies the phone number, and if the
+ // first if-clause fails the number will already be changed.
+ scoped_ptr<reg_exp::RegularExpressionInput> number_copy(
+ reg_exp::CreateRegularExpressionInput(number->c_str()));
+ scoped_ptr<reg_exp::RegularExpressionInput> number_copy_without_transform(
+ reg_exp::CreateRegularExpressionInput(number->c_str()));
+
+ string number_string_copy(*number);
+ string captured_part_of_prefix;
+ scoped_ptr<reg_exp::RegularExpression> national_number_rule(
+ reg_exp::CreateRegularExpression(
+ metadata.general_desc().national_number_pattern().c_str()));
+ // Attempt to parse the first digits as a national prefix. We make a
+ // copy so that we can revert to the original string if necessary.
+ const string& transform_rule = metadata.national_prefix_transform_rule();
+ if (!transform_rule.empty() &&
+ (number_copy->ConsumeRegExp(possible_national_prefix, true,
+ &carrier_code_temp,
+ &captured_part_of_prefix) ||
+ number_copy->ConsumeRegExp(possible_national_prefix, true,
+ &captured_part_of_prefix, NULL)) &&
+ !captured_part_of_prefix.empty()) {
+ string re2_transform_rule(transform_rule);
+ TransformRegularExpressionToRE2Syntax(&re2_transform_rule);
+ // If this succeeded, then we must have had a transform rule and there must
+ // have been some part of the prefix that we captured.
+ // We make the transformation and check that the resultant number is viable.
+ // If so, replace the number and return.
+ scoped_ptr<reg_exp::RegularExpression> possible_national_prefix_rule(
+ reg_exp::CreateRegularExpression(possible_national_prefix.c_str()));
+ possible_national_prefix_rule->Replace(&number_string_copy, false,
+ re2_transform_rule.c_str());
+ if (national_number_rule->Match(number_string_copy.c_str(), true, NULL)) {
+ number->assign(number_string_copy);
+ if (carrier_code) {
+ carrier_code->assign(carrier_code_temp);
+ }
+ }
+ } else if (number_copy_without_transform->ConsumeRegExp(
+ possible_national_prefix, true, &carrier_code_temp, NULL) ||
+ number_copy_without_transform->ConsumeRegExp(
+ possible_national_prefix, true, NULL, NULL)) {
+ logger->Debug("Parsed the first digits as a national prefix.");
+ string unconsumed_part(number_copy_without_transform->ToString());
+ // If captured_part_of_prefix is empty, this implies nothing was captured by
+ // the capturing groups in possible_national_prefix; therefore, no
+ // transformation is necessary, and we just remove the national prefix.
+ if (national_number_rule->Match(unconsumed_part.c_str(), true, NULL)) {
+ number->assign(unconsumed_part);
+ if (carrier_code) {
+ carrier_code->assign(carrier_code_temp);
+ }
+ }
+ } else {
+ logger->Debug("The first digits did not match the national prefix.");
+ }
+}
+
+// Strips any extension (as in, the part of the number dialled after the call is
+// connected, usually indicated with extn, ext, x or similar) from the end of
+// the number, and returns it. The number passed in should be non-normalized.
+// static
+bool PhoneNumberUtil::MaybeStripExtension(string* number, string* extension) {
+ DCHECK(number);
+ DCHECK(extension);
+ // There are three extension capturing groups in the regular expression.
+ string possible_extension_one;
+ string possible_extension_two;
+ string possible_extension_three;
+ string number_copy(*number);
+ scoped_ptr<reg_exp::RegularExpressionInput> number_copy_regex_input(
+ reg_exp::CreateRegularExpressionInput(number_copy.c_str()));
+ if (extn_pattern->Consume(number_copy_regex_input.get(), false,
+ &possible_extension_one, &possible_extension_two,
+ &possible_extension_three)) {
+ // Replace the extensions in the original string here.
+ extn_pattern->Replace(&number_copy, false, "");
+ logger->Debug("Found an extension. Possible extension one: "
+ + possible_extension_one
+ + ". Possible extension two: " + possible_extension_two
+ + ". Remaining number: " + number_copy);
+ // If we find a potential extension, and the number preceding this is a
+ // viable number, we assume it is an extension.
+ if ((!possible_extension_one.empty() || !possible_extension_two.empty() ||
+ !possible_extension_three.empty()) &&
+ IsViablePhoneNumber(number_copy)) {
+ number->assign(number_copy);
+ if (!possible_extension_one.empty()) {
+ extension->assign(possible_extension_one);
+ } else if (!possible_extension_two.empty()) {
+ extension->assign(possible_extension_two);
+ } else if (!possible_extension_three.empty()) {
+ extension->assign(possible_extension_three);
+ }
+ return true;
+ }
+ }
+ return false;
+}
+
+// Extracts country calling code from national_number, and returns it. It
+// assumes that the leading plus sign or IDD has already been removed. Returns 0
+// if national_number doesn't start with a valid country calling code, and
+// leaves national_number unmodified. Assumes the national_number is at least 3
+// characters long.
+int PhoneNumberUtil::ExtractCountryCode(string* national_number) const {
+ int potential_country_code;
+ for (int i = 1; i <= 3; ++i) {
+ safe_strto32(national_number->substr(0, i), &potential_country_code);
+ string region_code;
+ GetRegionCodeForCountryCode(potential_country_code, &region_code);
+ if (region_code != "ZZ") {
+ national_number->erase(0, i);
+ return potential_country_code;
+ }
+ }
+ return 0;
+}
+
+// Tries to extract a country calling code from a number. Country calling codes
+// are extracted in the following ways:
+// - by stripping the international dialing prefix of the region the person
+// is dialing from, if this is present in the number, and looking at the next
+// digits
+// - by stripping the '+' sign if present and then looking at the next digits
+// - by comparing the start of the number and the country calling code of the
+// default region. If the number is not considered possible for the numbering
+// plan of the default region initially, but starts with the country calling
+// code of this region, validation will be reattempted after stripping this
+// country calling code. If this number is considered a possible number, then
+// the first digits will be considered the country calling code and removed as
+// such.
+//
+// Returns NO_PARSING_ERROR if a country calling code was successfully
+// extracted or none was present, or the appropriate error otherwise, such as
+// if a + was present but it was not followed by a valid country calling code.
+// If NO_PARSING_ERROR is returned, the national_number without the country
+// calling code is populated, and the country_code passed in is set to the
+// country calling code if found, otherwise to 0.
+PhoneNumberUtil::ErrorType PhoneNumberUtil::MaybeExtractCountryCode(
+ const PhoneMetadata* default_region_metadata,
+ bool keep_raw_input,
+ string* national_number,
+ PhoneNumber* phone_number) const {
+ DCHECK(national_number);
+ DCHECK(phone_number);
+ // Set the default prefix to be something that will never match if there is no
+ // default region.
+ string possible_country_idd_prefix = default_region_metadata
+ ? default_region_metadata->international_prefix()
+ : "NonMatch";
+ PhoneNumber::CountryCodeSource country_code_source =
+ MaybeStripInternationalPrefixAndNormalize(possible_country_idd_prefix,
+ national_number);
+ if (keep_raw_input) {
+ phone_number->set_country_code_source(country_code_source);
+ }
+ if (country_code_source != PhoneNumber::FROM_DEFAULT_COUNTRY) {
+ if (national_number->length() < kMinLengthForNsn) {
+ logger->Debug("Phone number had an IDD, but after this was not "
+ "long enough to be a viable phone number.");
+ return TOO_SHORT_AFTER_IDD;
+ }
+ int potential_country_code = ExtractCountryCode(national_number);
+ if (potential_country_code != 0) {
+ phone_number->set_country_code(potential_country_code);
+ return NO_PARSING_ERROR;
+ }
+ // If this fails, they must be using a strange country calling code that we
+ // don't recognize, or that doesn't exist.
+ return INVALID_COUNTRY_CODE_ERROR;
+ } else if (default_region_metadata) {
+ // Check to see if the number starts with the country calling code for the
+ // default region. If so, we remove the country calling code, and do some
+ // checks on the validity of the number before and after.
+ int default_country_code = default_region_metadata->country_code();
+ string default_country_code_string(SimpleItoa(default_country_code));
+ logger->Debug("Possible country code: " + default_country_code_string);
+ string potential_national_number;
+ if (TryStripPrefixString(*national_number,
+ default_country_code_string,
+ &potential_national_number)) {
+ const PhoneNumberDesc& general_num_desc =
+ default_region_metadata->general_desc();
+ scoped_ptr<reg_exp::RegularExpression> valid_number_pattern(
+ reg_exp::CreateRegularExpression(
+ general_num_desc.national_number_pattern().c_str()));
+
+ MaybeStripNationalPrefixAndCarrierCode(*default_region_metadata,
+ &potential_national_number,
+ NULL);
+ logger->Debug("Number without country code prefix: "
+ + potential_national_number);
+ string extracted_number;
+ scoped_ptr<reg_exp::RegularExpression> possible_number_pattern(
+ reg_exp::CreateRegularExpression(
+ StrCat("(", general_num_desc.possible_number_pattern(),
+ ")").c_str()));
+ // If the number was not valid before but is valid now, or if it was too
+ // long before, we consider the number with the country code stripped to
+ // be a better result and keep that instead.
+ if ((!valid_number_pattern->Match(national_number->c_str(),
+ true, NULL) &&
+ valid_number_pattern->Match(potential_national_number.c_str(),
+ true, NULL)) ||
+ TestNumberLengthAgainstPattern(possible_number_pattern.get(),
+ *national_number)
+ == TOO_LONG) {
+ national_number->assign(potential_national_number);
+ if (keep_raw_input) {
+ phone_number->set_country_code_source(
+ PhoneNumber::FROM_NUMBER_WITHOUT_PLUS_SIGN);
+ }
+ phone_number->set_country_code(default_country_code);
+ return NO_PARSING_ERROR;
+ }
+ }
+ }
+ // No country calling code present. Set the country_code to 0.
+ phone_number->set_country_code(0);
+ return NO_PARSING_ERROR;
+}
+
+PhoneNumberUtil::MatchType PhoneNumberUtil::IsNumberMatch(
+ const PhoneNumber& first_number_in,
+ const PhoneNumber& second_number_in) const {
+ // Make copies of the phone number so that the numbers passed in are not
+ // edited.
+ PhoneNumber first_number(first_number_in);
+ PhoneNumber second_number(second_number_in);
+ // First clear raw_input and country_code_source and
+ // preferred_domestic_carrier_code fields and any empty-string extensions so
+ // that we can use the proto-buffer equality method.
+ first_number.clear_raw_input();
+ first_number.clear_country_code_source();
+ first_number.clear_preferred_domestic_carrier_code();
+ second_number.clear_raw_input();
+ second_number.clear_country_code_source();
+ second_number.clear_preferred_domestic_carrier_code();
+ if (first_number.extension().empty()) {
+ first_number.clear_extension();
+ }
+ if (second_number.extension().empty()) {
+ second_number.clear_extension();
+ }
+ // Early exit if both had extensions and these are different.
+ if (first_number.has_extension() && second_number.has_extension() &&
+ first_number.extension() != second_number.extension()) {
+ return NO_MATCH;
+ }
+ int first_number_country_code = first_number.country_code();
+ int second_number_country_code = second_number.country_code();
+ // Both had country calling code specified.
+ if (first_number_country_code != 0 && second_number_country_code != 0) {
+ if (ExactlySameAs(first_number, second_number)) {
+ return EXACT_MATCH;
+ } else if (first_number_country_code == second_number_country_code &&
+ IsNationalNumberSuffixOfTheOther(first_number, second_number)) {
+ // A SHORT_NSN_MATCH occurs if there is a difference because of the
+ // presence or absence of an 'Italian leading zero', the presence or
+ // absence of an extension, or one NSN being a shorter variant of the
+ // other.
+ return SHORT_NSN_MATCH;
+ }
+ // This is not a match.
+ return NO_MATCH;
+ }
+ // Checks cases where one or both country calling codes were not specified. To
+ // make equality checks easier, we first set the country_code fields to be
+ // equal.
+ first_number.set_country_code(second_number_country_code);
+ // If all else was the same, then this is an NSN_MATCH.
+ if (ExactlySameAs(first_number, second_number)) {
+ return NSN_MATCH;
+ }
+ if (IsNationalNumberSuffixOfTheOther(first_number, second_number)) {
+ return SHORT_NSN_MATCH;
+ }
+ return NO_MATCH;
+}
+
+PhoneNumberUtil::MatchType PhoneNumberUtil::IsNumberMatchWithTwoStrings(
+ const string& first_number,
+ const string& second_number) const {
+ PhoneNumber first_number_as_proto;
+ ErrorType error_type =
+ Parse(first_number, "ZZ", &first_number_as_proto);
+ if (error_type == NO_PARSING_ERROR) {
+ return IsNumberMatchWithOneString(first_number_as_proto, second_number);
+ }
+ if (error_type == INVALID_COUNTRY_CODE_ERROR) {
+ PhoneNumber second_number_as_proto;
+ ErrorType error_type = Parse(second_number, "ZZ",
+ &second_number_as_proto);
+ if (error_type == NO_PARSING_ERROR) {
+ return IsNumberMatchWithOneString(second_number_as_proto, first_number);
+ }
+ if (error_type == INVALID_COUNTRY_CODE_ERROR) {
+ error_type = ParseHelper(first_number, "ZZ", false, false,
+ &first_number_as_proto);
+ if (error_type == NO_PARSING_ERROR) {
+ error_type = ParseHelper(second_number, "ZZ", false, false,
+ &second_number_as_proto);
+ if (error_type == NO_PARSING_ERROR) {
+ return IsNumberMatch(first_number_as_proto, second_number_as_proto);
+ }
+ }
+ }
+ }
+ // One or more of the phone numbers we are trying to match is not a viable
+ // phone number.
+ return INVALID_NUMBER;
+}
+
+PhoneNumberUtil::MatchType PhoneNumberUtil::IsNumberMatchWithOneString(
+ const PhoneNumber& first_number,
+ const string& second_number) const {
+ // First see if the second number has an implicit country calling code, by
+ // attempting to parse it.
+ PhoneNumber second_number_as_proto;
+ ErrorType error_type =
+ Parse(second_number, "ZZ", &second_number_as_proto);
+ if (error_type == NO_PARSING_ERROR) {
+ return IsNumberMatch(first_number, second_number_as_proto);
+ }
+ if (error_type == INVALID_COUNTRY_CODE_ERROR) {
+ // The second number has no country calling code. EXACT_MATCH is no longer
+ // possible. We parse it as if the region was the same as that for the
+ // first number, and if EXACT_MATCH is returned, we replace this with
+ // NSN_MATCH.
+ string first_number_region;
+ GetRegionCodeForCountryCode(first_number.country_code(),
+ &first_number_region);
+ if (first_number_region != "ZZ") {
+ PhoneNumber second_number_with_first_number_region;
+ Parse(second_number, first_number_region,
+ &second_number_with_first_number_region);
+ MatchType match = IsNumberMatch(first_number,
+ second_number_with_first_number_region);
+ if (match == EXACT_MATCH) {
+ return NSN_MATCH;
+ }
+ return match;
+ } else {
+ // If the first number didn't have a valid country calling code, then we
+ // parse the second number without one as well.
+ error_type = ParseHelper(second_number, "ZZ", false, false,
+ &second_number_as_proto);
+ if (error_type == NO_PARSING_ERROR) {
+ return IsNumberMatch(first_number, second_number_as_proto);
+ }
+ }
+ }
+ // One or more of the phone numbers we are trying to match is not a viable
+ // phone number.
+ return INVALID_NUMBER;
+}
+
+} // namespace phonenumbers
+} // namespace i18n
diff --git a/third_party/libphonenumber/cpp/src/phonenumberutil.h b/third_party/libphonenumber/cpp/src/phonenumberutil.h
new file mode 100644
index 0000000..6a766df
--- /dev/null
+++ b/third_party/libphonenumber/cpp/src/phonenumberutil.h
@@ -0,0 +1,678 @@
+// Copyright (C) 2009 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// Utility for international phone numbers.
+//
+// Author: Shaopeng Jia
+// Open-sourced by: Philippe Liard
+
+#ifndef I18N_PHONENUMBERS_PHONENUMBERUTIL_H_
+#define I18N_PHONENUMBERS_PHONENUMBERUTIL_H_
+
+#include <list>
+#include <map>
+#include <set>
+#include <string>
+#include <utility>
+#include <vector>
+
+#include "base/scoped_ptr.h"
+#include "base/singleton.h"
+#include "phonenumber.pb.h"
+
+class TelephoneNumber;
+
+namespace i18n {
+namespace phonenumbers {
+
+using std::list;
+using std::map;
+using std::pair;
+using std::set;
+using std::string;
+using std::vector;
+
+using google::protobuf::RepeatedPtrField;
+
+class LoggerAdapter;
+class NumberFormat;
+class PhoneMetadata;
+class PhoneMetadataCollection;
+class PhoneNumber;
+
+class PhoneNumberUtil {
+ friend struct DefaultSingletonTraits<PhoneNumberUtil>;
+ friend class PhoneNumberUtilTest;
+ public:
+ // INTERNATIONAL and NATIONAL formats are consistent with the definition
+ // in ITU-T Recommendation E. 123. For example, the number of the Google
+ // Zürich office will be written as "+41 44 668 1800" in INTERNATIONAL
+ // format, and as "044 668 1800" in NATIONAL format. E164 format is as per
+ // INTERNATIONAL format but with no formatting applied e.g. +41446681800.
+ // RFC3966 is as per INTERNATIONAL format, but with all spaces and other
+ // separating symbols replaced with a hyphen, and with any phone number
+ // extension appended with ";ext=".
+ enum PhoneNumberFormat {
+ E164,
+ INTERNATIONAL,
+ NATIONAL,
+ RFC3966
+ };
+
+ // Type of phone numbers.
+ enum PhoneNumberType {
+ FIXED_LINE,
+ MOBILE,
+ // In some regions (e.g. the USA), it is impossible to distinguish between
+ // fixed-line and mobile numbers by looking at the phone number itself.
+ FIXED_LINE_OR_MOBILE,
+ // Freephone lines
+ TOLL_FREE,
+ PREMIUM_RATE,
+ // The cost of this call is shared between the caller and the recipient, and
+ // is hence typically less than PREMIUM_RATE calls. See
+ // http://en.wikipedia.org/wiki/Shared_Cost_Service for more information.
+ SHARED_COST,
+ // Voice over IP numbers. This includes TSoIP (Telephony Service over IP).
+ VOIP,
+ // A personal number is associated with a particular person, and may be
+ // routed to either a MOBILE or FIXED_LINE number. Some more information can
+ // be found here: http://en.wikipedia.org/wiki/Personal_Numbers
+ PERSONAL_NUMBER,
+ PAGER,
+ // Used for "Universal Access Numbers" or "Company Numbers". They may be
+ // further routed to specific offices, but allow one number to be used for a
+ // company.
+ UAN,
+ // A phone number is of type UNKNOWN when it does not fit any of the known
+ // patterns for a specific region.
+ UNKNOWN
+ };
+
+ // Types of phone number matches. See detailed description beside the
+ // IsNumberMatch() method.
+ enum MatchType {
+ INVALID_NUMBER, // NOT_A_NUMBER in the java version.
+ NO_MATCH,
+ SHORT_NSN_MATCH,
+ NSN_MATCH,
+ EXACT_MATCH,
+ };
+
+ enum ErrorType {
+ NO_PARSING_ERROR,
+ INVALID_COUNTRY_CODE_ERROR, // INVALID_COUNTRY_CODE in the java version.
+ NOT_A_NUMBER,
+ TOO_SHORT_AFTER_IDD,
+ TOO_SHORT_NSN,
+ TOO_LONG_NSN, // TOO_LONG in the java version.
+ };
+
+ // Possible outcomes when testing if a PhoneNumber is possible.
+ enum ValidationResult {
+ IS_POSSIBLE,
+ INVALID_COUNTRY_CODE,
+ TOO_SHORT,
+ TOO_LONG,
+ };
+
+ // Gets a PhoneNumberUtil instance to carry out international phone number
+ // formatting, parsing, or validation. The instance is loaded with phone
+ // number metadata for a number of most commonly used regions, as specified by
+ // DEFAULT_REGIONS_.
+ //
+ // The PhoneNumberUtil is implemented as a singleton. Therefore, calling
+ // getInstance multiple times will only result in one instance being created.
+ static PhoneNumberUtil* GetInstance();
+
+ // Returns true if the number is a valid vanity (alpha) number such as 800
+ // MICROSOFT. A valid vanity number will start with at least 3 digits and will
+ // have three or more alpha characters. This does not do region-specific
+ // checks - to work out if this number is actually valid for a region, it
+ // should be parsed and methods such as IsPossibleNumberWithReason or
+ // IsValidNumber should be used.
+ bool IsAlphaNumber(const string& number) const;
+
+ // Converts all alpha characters in a number to their respective digits on
+ // a keypad, but retains existing formatting.
+ void ConvertAlphaCharactersInNumber(string* number) const;
+
+ // Normalizes a string of characters representing a phone number. This
+ // converts wide-ascii and arabic-indic numerals to European numerals, and
+ // strips punctuation and alpha characters.
+ static void NormalizeDigitsOnly(string* number);
+
+ // Gets the national significant number of a phone number. Note a national
+ // significant number doesn't contain a national prefix or any formatting.
+ void GetNationalSignificantNumber(const PhoneNumber& number,
+ string* national_significant_num) const;
+
+ // 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:
+ //
+ // const PhoneNumberUtil& phone_util(PhoneNumberUtil::GetInstance());
+ // PhoneNumber number;
+ // phone_util.Parse("16502530000", "US", &number);
+ // string national_significant_number;
+ // phone_util.GetNationalSignificantNumber(number,
+ // &national_significant_number);
+ // string area_code;
+ // string subscriber_number;
+ //
+ // int area_code_length = phone_util.GetLengthOfGeographicalAreaCode(number);
+ // if (area_code_length > 0) {
+ // area_code = national_significant_number.substring(0, area_code_length);
+ // subscriber_number = national_significant_number.substring(
+ // area_code_length, string::npos);
+ // else {
+ // area_code = "";
+ // subscriber_number = national_significant_number;
+ // }
+ //
+ // N.B.: area code is a very ambiguous concept, so the I18N team generally
+ // recommends against using it for most purposes, but recommends using the
+ // more general national_number instead. Read the following carefully before
+ // deciding to use this method:
+ //
+ // - geographical area codes change over time, and this method honors those
+ // changes; therefore, it doesn't guarantee the stability of the result it
+ // produces.
+ // - subscriber numbers may not be diallable from all devices (notably mobile
+ // devices, which typically requires the full national_number to be dialled
+ // in most regions).
+ // - most non-geographical numbers have no area codes.
+ // - some geographical numbers have no area codes.
+ int GetLengthOfGeographicalAreaCode(const PhoneNumber& number) const;
+
+ // 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:
+ //
+ // const PhoneNumberUtil& phone_util(PhoneNumberUtil::GetInstance());
+ // PhoneNumber number;
+ // phone_util.Parse("16502530000", "US", &number);
+ // string national_significant_number;
+ // phone_util.GetNationalSignificantNumber(number,
+ // &national_significant_number);
+ // string national_destination_code;
+ // string subscriber_number;
+ //
+ // int national_destination_code_length =
+ // phone_util.GetLengthOfGeographicalAreaCode(number);
+ // if (national_destination_code_length > 0) {
+ // national_destination_code = national_significant_number.substring(
+ // 0, national_destination_code_length);
+ // subscriber_number = national_significant_number.substring(
+ // national_destination_code_length, string::npos);
+ // else {
+ // national_destination_code = "";
+ // subscriber_number = national_significant_number;
+ // }
+ //
+ // Refer to the unittests to see the difference between this function and
+ // GetLengthOfGeographicalAreaCode().
+ int GetLengthOfNationalDestinationCode(const PhoneNumber& number) const;
+
+ // Formats a phone number in the specified format using default rules. Note
+ // that this does not promise to produce a phone number that the user can
+ // dial from where they are - although we do format in either NATIONAL or
+ // INTERNATIONAL format depending on what the client asks for, we do not
+ // currently support a more abbreviated format, such as for users in the
+ // same area who could potentially dial the number without area code.
+ void Format(const PhoneNumber& number,
+ PhoneNumberFormat number_format,
+ string* formatted_number) const;
+
+ // Formats a phone number in the specified format using client-defined
+ // formatting rules.
+ void FormatByPattern(
+ const PhoneNumber& number,
+ PhoneNumberFormat number_format,
+ const RepeatedPtrField<NumberFormat>& user_defined_formats,
+ string* formatted_number) const;
+
+ // Formats a phone number in national format for dialing using the carrier as
+ // specified in the carrier_code. The carrier_code will always be used
+ // regardless of whether the phone number already has a preferred domestic
+ // carrier code stored. If carrier_code contains an empty string, return the
+ // number in national format without any carrier code.
+ void FormatNationalNumberWithCarrierCode(const PhoneNumber& number,
+ const string& carrier_code,
+ string* formatted_number) const;
+
+ // Formats a phone number in national format for dialing using the carrier as
+ // specified in the preferred_domestic_carrier_code field of the PhoneNumber
+ // object passed in. If that is missing, use the fallback_carrier_code passed
+ // in instead. If there is no preferred_domestic_carrier_code, and the
+ // fallback_carrier_code contains an empty string, return the number in
+ // national format without any carrier code.
+ //
+ // Use FormatNationalNumberWithCarrierCode instead if the carrier code passed
+ // in should take precedence over the number's preferred_domestic_carrier_code
+ // when formatting.
+ void FormatNationalNumberWithPreferredCarrierCode(
+ const PhoneNumber& number,
+ const string& fallback_carrier_code,
+ string* formatted_number) const;
+
+ // Formats a phone number for out-of-country dialing purposes.
+ //
+ // Note this function takes care of the case for calling inside of NANPA
+ // and between Russia and Kazakhstan (who share the same country calling
+ // code). In those cases, no international prefix is used. For regions which
+ // have multiple international prefixes, the number in its INTERNATIONAL
+ // format will be returned instead.
+ void FormatOutOfCountryCallingNumber(
+ const PhoneNumber& number,
+ const string& calling_from,
+ string* formatted_number) const;
+
+ // Formats a phone number using the original phone number format that the
+ // number is parsed from. The original format is embedded in the
+ // country_code_source field of the PhoneNumber object passed in. If such
+ // information is missing, the number will be formatted into the NATIONAL
+ // format by default.
+ void FormatInOriginalFormat(const PhoneNumber& number,
+ const string& region_calling_from,
+ string* formatted_number) const;
+
+ // Formats a phone number for out-of-country dialing purposes.
+ //
+ // Note that in this version, if the number was entered originally using alpha
+ // characters and this version of the number is stored in raw_input, this
+ // representation of the number will be used rather than the digit
+ // representation. Grouping information, as specified by characters such as
+ // "-" and " ", will be retained.
+ //
+ // Caveats:
+ // 1) This will not produce good results if the country calling code is both
+ // present in the raw input _and_ is the start of the national number. This
+ // is not a problem in the regions which typically use alpha numbers.
+ // 2) This will also not produce good results if the raw input has any
+ // grouping information within the first three digits of the national number,
+ // and if the function needs to strip preceding digits/words in the raw input
+ // before these digits. Normally people group the first three digits together
+ // so this is not a huge problem - and will be fixed if it proves to be so.
+ void FormatOutOfCountryKeepingAlphaChars(
+ const PhoneNumber& number,
+ const string& calling_from,
+ string* formatted_number) const;
+
+ // Attempts to extract a valid number from a phone number that is too long to
+ // be valid, and resets the PhoneNumber object passed in to that valid
+ // version. If no valid number could be extracted, the PhoneNumber object
+ // passed in will not be modified. It returns true if a valid phone number can
+ // be successfully extracted.
+ bool TruncateTooLongNumber(PhoneNumber* number) const;
+
+ // Gets the type of a phone number.
+ PhoneNumberType GetNumberType(const PhoneNumber& number) const;
+
+ // Tests whether a phone number matches a valid pattern. Note this doesn't
+ // verify the number is actually in use, which is impossible to tell by just
+ // looking at a number itself.
+ bool IsValidNumber(const PhoneNumber& number) const;
+
+ // Tests whether a phone number is valid for a certain region. Note this
+ // doesn't verify the number is actually in use, which is impossible to tell
+ // by just looking at a number itself. If the country calling code is not the
+ // same as the country calling code for the region, this 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.
+ //
+ // The region_code parameter is an ISO 3166-1 two-letter country code string.
+ bool IsValidNumberForRegion(
+ const PhoneNumber& number,
+ const string& region_code) const;
+
+ // Returns the region where a phone number is from. This could be used for
+ // geo-coding at the region level.
+ // The country/region is returned as an ISO 3166-1 two-letter country code
+ // string.
+ void GetRegionCodeForNumber(const PhoneNumber& number,
+ string* region_code) const;
+
+ // Returns the country calling code for a specific region. For example,
+ // this would be 1 for the United States, and 64 for New Zealand.
+ //
+ // The region_code parameter is an ISO 3166-1 two-letter country code string.
+ int GetCountryCodeForRegion(const string& region_code) const;
+
+ // Returns the region code that matches the specific country code. Note that
+ // it is possible that several regions share the same country code (e.g. US
+ // and Canada), and in that case, only one of the regions (normally the one
+ // with the largest population) is returned.
+ //
+ // The region code is returned as an ISO 3166-1 two-letter country code
+ // string.
+ void GetRegionCodeForCountryCode(int country_code, string* region_code) const;
+
+ // Checks if this is a region under the North American Numbering Plan
+ // Administration (NANPA).
+ //
+ // The region_code parameter is an ISO 3166-1 two-letter country code string.
+ bool IsNANPACountry(const string& region_code) const;
+
+ // Checks whether a phone number is a possible number. It provides a more
+ // lenient check than IsValidNumber() in the following sense:
+ // 1. It only checks the length of phone numbers. In particular, it doesn't
+ // check starting digits of the number.
+ // 2. It doesn't attempt to figure out the type of the number, but uses
+ // general rules which applies to all types of phone numbers in a
+ // region. Therefore, it is much faster than IsValidNumber().
+ // 3. For fixed line numbers, many regions have the concept of area code,
+ // which together with subscriber number constitute the national
+ // significant number. It is sometimes okay to dial the subscriber
+ // number only when dialing in the same area. This function will return
+ // true if the subscriber-number-only version is passed in. On the other
+ // hand, because IsValidNumber() validates using information on both
+ // starting digits (for fixed line 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.
+ ValidationResult IsPossibleNumberWithReason(const PhoneNumber& number) const;
+
+ // Convenience wrapper around IsPossibleNumberWithReason. Instead of returning
+ // the reason for failure, this method returns a boolean value.
+ bool IsPossibleNumber(const PhoneNumber& number) const;
+
+ // Checks whether a phone number is a possible number given a number in the
+ // form of a string, and the country where the number could be dialed from.
+ // It provides a more lenient check than IsValidNumber(). See
+ // IsPossibleNumber(const PhoneNumber& number) for details.
+ //
+ // This method first parses the number, then invokes
+ // IsPossibleNumber(const PhoneNumber& number) with the resultant PhoneNumber
+ // object.
+ //
+ // region_dialing_from represents the region that we are expecting the number
+ // to be dialed from. Note this is different from the region where the number
+ // belongs. For example, the number +1 650 253 0000 is a number that belongs
+ // to US. When written in this form, it could be dialed from any region. When
+ // it is written as 00 1 650 253 0000, it could be dialed from any region
+ // which uses an international dialling prefix of 00. When it is written as
+ // 650 253 0000, it could only be dialed from within the US, and when written
+ // as 253 0000, it could only be dialed from within a smaller area in the US
+ // (Mountain View, CA, to be more specific).
+ //
+ // The country_dialing_from parameter is an ISO 3166-1 two-letter country code
+ // string.
+ bool IsPossibleNumberForString(
+ const string& number,
+ const string& country_dialing_from) const;
+
+ // Gets a valid fixed-line number for the specified region. Returns false if
+ // the region was unknown.
+ bool GetExampleNumber(const string& region_code,
+ PhoneNumber* number) const;
+
+ // Gets a valid number of the specified type for the specified region.
+ // Returns false if the region was unknown or if no example number of that
+ // type could be found.
+ //
+ // The region_code parameter is an ISO 3166-1 two-letter country code string.
+ bool GetExampleNumberForType(const string& region_code,
+ PhoneNumberType type,
+ PhoneNumber* number) const;
+
+ // Parses a string and returns it in proto buffer format. This method will
+ // return an error like INVALID_COUNTRY_CODE if the number is not considered
+ // to be a possible number, and NO_PARSING_ERROR if it parsed correctly. Note
+ // that validation of whether the number is actually a valid number for a
+ // particular region is not performed. This can be done separately with
+ // IsValidNumber().
+ //
+ // default_region represents the country that we are expecting the number to
+ // be from. This is only used if the number being parsed is not written in
+ // international format. The country_code for the number in this case would be
+ // stored as that of the default country supplied. If the number is guaranteed
+ // to start with a '+' followed by the country calling code, then
+ // "ZZ" can be supplied.
+ //
+ // The default_country parameter is an ISO 3166-1 two-letter country code
+ // string.
+ ErrorType Parse(const string& number_to_parse,
+ const string& default_country,
+ PhoneNumber* number) const;
+ // Parses a string and returns it in proto buffer format. This method differs
+ // from Parse() in that it always populates the raw_input field of the
+ // protocol buffer with number_to_parse as well as the country_code_source
+ // field.
+ //
+ // The default_country parameter is an ISO 3166-1 two-letter country code
+ // string.
+ ErrorType ParseAndKeepRawInput(const string& number_to_parse,
+ const string& default_country,
+ PhoneNumber* number) const;
+
+ // Takes two phone numbers and compares them for equality.
+ //
+ // Returns EXACT_MATCH if the country calling code, NSN, presence of a leading
+ // zero for Italian numbers and any extension present are the same.
+ // Returns NSN_MATCH if either or both has no country calling code specified,
+ // and the NSNs and extensions are the same.
+ // Returns SHORT_NSN_MATCH if either or both has no country calling code
+ // specified, or the country calling code specified is the same, and one NSN
+ // could be a shorter version of the other number. This includes the case
+ // where one has an extension specified, and the other does not.
+ // Returns NO_MATCH otherwise.
+ // For example, the numbers +1 345 657 1234 and 657 1234 are a
+ // SHORT_NSN_MATCH. The numbers +1 345 657 1234 and 345 657 are a NO_MATCH.
+ MatchType IsNumberMatch(const PhoneNumber& first_number,
+ const PhoneNumber& second_number) const;
+
+ // Takes two phone numbers as strings and compares them for equality. This
+ // is a convenience wrapper for IsNumberMatch(PhoneNumber firstNumber,
+ // PhoneNumber secondNumber). No default region is known.
+ // Returns INVALID_NUMBER if either number cannot be parsed into a phone
+ // number.
+ MatchType IsNumberMatchWithTwoStrings(const string& first_number,
+ const string& second_number) const;
+
+ // Takes two phone numbers and compares them for equality. This is a
+ // convenience wrapper for IsNumberMatch(PhoneNumber firstNumber,
+ // PhoneNumber secondNumber). No default region is known.
+ // Returns INVALID_NUMBER if second_number cannot be parsed into a phone
+ // number.
+ MatchType IsNumberMatchWithOneString(const PhoneNumber& first_number,
+ const string& second_number) const;
+
+ // Implement this 'interface' to override the way metadatas are fetched.
+ // Useful for testing injecting stable metadatas.
+ class MetadataProvider {
+ public:
+ virtual ~MetadataProvider() {}
+
+ // Returns a pair containing a pointer to the data and its size
+ virtual pair<const void*, unsigned> operator()() = 0;
+ };
+
+ // Override the default logging system. The provided adapter destruction is
+ // handled by this class (don't delete it).
+ static void SetLoggerAdapter(LoggerAdapter* logger_adapter);
+
+ friend bool ConvertFromTelephoneNumberProto(
+ const TelephoneNumber& proto_to_convert,
+ PhoneNumber* new_proto);
+ friend bool ConvertToTelephoneNumberProto(const PhoneNumber& proto_to_convert,
+ TelephoneNumber* resulting_proto);
+
+ protected:
+ // Check whether the country_calling_code is from a country whose national
+ // significant number could contain a leading zero. An example of such a
+ // country is Italy.
+ bool IsLeadingZeroPossible(int country_calling_code) const;
+
+ private:
+ typedef pair<int, list<string>*> IntRegionsPair;
+
+ // The minimum and maximum length of the national significant number.
+ static const size_t kMinLengthForNsn = 3;
+ static const size_t kMaxLengthForNsn = 15;
+
+ // A mapping from a country calling code to a region code which denotes the
+ // region represented by that country calling code. Note countries under
+ // NANPA share the country calling code 1 and Russia and Kazakhstan share the
+ // country calling code 7. Under this map, 1 is mapped to region code "US" and
+ // 7 is mapped to region code "RU". This is implemented as a sorted vector to
+ // achieve better performance.
+ //
+ // Region codes are ISO 3166-1 two-letter country code strings.
+ scoped_ptr<vector<IntRegionsPair> > country_calling_code_to_region_code_map_;
+
+ struct CompareFirst {
+ bool operator()(const IntRegionsPair& p1,
+ const IntRegionsPair& p2) const {
+ return p1.first < p2.first;
+ }
+ };
+
+ // The set of regions that share country calling code 1.
+ scoped_ptr<set<string> > nanpa_regions_;
+ static const int kNanpaCountryCode = 1;
+
+ // A mapping from a region code to a PhoneMetadata for that region.
+ // Region codes are ISO 3166-1 two-letter country code strings.
+ scoped_ptr<map<string, PhoneMetadata> > region_to_metadata_map_;
+
+ bool LoadMetadata(PhoneMetadataCollection* metadata,
+ MetadataProvider& provider);
+
+ explicit PhoneNumberUtil(MetadataProvider* provider = 0);
+ ~PhoneNumberUtil();
+
+ // Gets all the supported regions.
+ void GetSupportedRegions(set<string>* regions) const;
+
+ // Returns the national dialling prefix for a specific region. For example,
+ // this would be 1 for the United States, and 0 for New Zealand. Set
+ // stripNonDigits to true to strip symbols like "~" (which indicates a wait
+ // for a dialling tone) from the prefix returned. If no national prefix is
+ // present, we return an empty string.
+ //
+ // Set strip_non_digits to true to strip non-digits from the national
+ // dialling prefix.
+ void GetNddPrefixForRegion(const string& region_code,
+ bool strip_non_digits,
+ string* national_prefix) const;
+
+ // Helper function to check region code is not unknown or null.
+ //
+ // The region_code parameter is an ISO 3166-1 two-letter country code string.
+ bool IsValidRegionCode(const string& region_code) const;
+
+ // Helper function to check region code is not unknown. The
+ // country_calling_code and number supplied is used only for the resultant log
+ // message.
+ //
+ // The region_code parameter is an ISO 3166-1 two-letter country code string.
+ bool HasValidRegionCode(const string& region_code,
+ int country_code,
+ const string& number) const;
+
+ // The region_code parameter is an ISO 3166-1 two-letter country code string.
+ const i18n::phonenumbers::PhoneMetadata* GetMetadataForRegion(
+ const string& region_code) const;
+
+ void GetRegionCodesForCountryCallingCode(
+ int country_calling_code,
+ list<string>* region_codes) const;
+
+ // Simple wrapper of FormatNationalNumberWithCarrier for the common case of
+ // no carrier code.
+ //
+ // The region_code parameter is an ISO 3166-1 two-letter country code string.
+ void FormatNationalNumber(const string& number,
+ const string& region_code,
+ PhoneNumberFormat number_format,
+ string* formatted_number) const;
+
+ // The region_code parameter is an ISO 3166-1 two-letter country code string.
+ void FormatNationalNumberWithCarrier(const string& number,
+ const string& region_code,
+ PhoneNumberFormat number_format,
+ const string& carrier_code,
+ string* formatted_number) const;
+
+ // The region_code parameter is an ISO 3166-1 two-letter country code string.
+ void MaybeGetFormattedExtension(
+ const PhoneNumber& number,
+ const string& region_code,
+ PhoneNumberFormat number_format,
+ string* extension) const;
+
+ // The region_code parameter is an ISO 3166-1 two-letter country code string.
+ void FormatExtension(const string& extension_digits,
+ const string& region_code,
+ string* extension) const;
+
+ void GetRegionCodeForNumberFromRegionList(
+ const PhoneNumber& number,
+ const list<string>& region_codes,
+ string* region_code) const;
+
+ void Normalize(string* number) const;
+ PhoneNumber::CountryCodeSource MaybeStripInternationalPrefixAndNormalize(
+ const string& possible_idd_prefix,
+ string* number) const;
+
+ static void MaybeStripNationalPrefixAndCarrierCode(
+ const PhoneMetadata& metadata,
+ string* number,
+ string* carrier_code);
+
+ static void ExtractPossibleNumber(const string& number,
+ string* extracted_number);
+
+ static bool IsViablePhoneNumber(const string& number);
+
+ static bool MaybeStripExtension(string* number, string* extension);
+
+ int ExtractCountryCode(string* national_number) const;
+ ErrorType MaybeExtractCountryCode(
+ const PhoneMetadata* default_region_metadata,
+ bool keepRawInput,
+ string* national_number,
+ PhoneNumber* phone_number) const;
+
+ // The default_region parameter is an ISO 3166-1 two-letter country code
+ // string.
+ bool CheckRegionForParsing(
+ const string& number_to_parse,
+ const string& default_region) const;
+
+ // The default_region parameter is an ISO 3166-1 two-letter country code
+ // string.
+ ErrorType ParseHelper(const string& number_to_parse,
+ const string& default_region,
+ bool keep_raw_input,
+ bool check_region,
+ PhoneNumber* phone_number) const;
+
+ DISALLOW_COPY_AND_ASSIGN(PhoneNumberUtil);
+};
+
+} // namespace phonenumbers
+} // namespace i18n
+
+#endif // I18N_PHONENUMBERS_PHONENUMBERUTIL_H_
diff --git a/third_party/libphonenumber/cpp/src/phonenumberutil_test.cc b/third_party/libphonenumber/cpp/src/phonenumberutil_test.cc
new file mode 100644
index 0000000..3ef3fa7
--- /dev/null
+++ b/third_party/libphonenumber/cpp/src/phonenumberutil_test.cc
@@ -0,0 +1,2866 @@
+// Copyright (C) 2009 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// Author: Shaopeng Jia
+// Author: Lara Rennie
+// Open-sourced by: Philippe Liard
+
+#include <iostream>
+#include <set>
+#include <string>
+
+#include <gtest/gtest.h>
+
+#include "phonemetadata.pb.h"
+#include "phonenumber.h"
+#include "phonenumber.pb.h"
+#include "phonenumberutil.h"
+#include "regexp_adapter.h"
+#include "test_metadata.h"
+
+namespace i18n {
+namespace phonenumbers {
+
+using std::endl;
+using std::make_pair;
+using std::ostream;
+
+using google::protobuf::RepeatedPtrField;
+
+namespace {
+
+// Class containing string constants of region codes for easier testing.
+class RegionCode {
+ public:
+ static const string& AD() {
+ static const string s = "AD";
+ return s;
+ }
+
+ static const string& AO() {
+ static const string s = "AO";
+ return s;
+ }
+
+ static const string& AR() {
+ static const string s = "AR";
+ return s;
+ }
+
+ static const string& AU() {
+ static const string s = "AU";
+ return s;
+ }
+
+ static const string& BS() {
+ static const string s = "BS";
+ return s;
+ }
+
+ static const string& CN() {
+ static const string s = "CN";
+ return s;
+ }
+
+ static const string& CS() {
+ static const string s = "CS";
+ return s;
+ }
+
+ static const string& DE() {
+ static const string s = "DE";
+ return s;
+ }
+
+ static const string& GB() {
+ static const string s = "GB";
+ return s;
+ }
+
+ static const string& IT() {
+ static const string s = "IT";
+ return s;
+ }
+
+ static const string& KR() {
+ static const string s = "KR";
+ return s;
+ }
+
+ static const string& MX() {
+ static const string s = "MX";
+ return s;
+ }
+
+ static const string& NZ() {
+ static const string s = "NZ";
+ return s;
+ }
+
+ static const string& PL() {
+ static const string s = "PL";
+ return s;
+ }
+
+ static const string& RE() {
+ static const string s = "RE";
+ return s;
+ }
+
+ static const string& SG() {
+ static const string s = "SG";
+ return s;
+ }
+
+ static const string& US() {
+ static const string s = "US";
+ return s;
+ }
+
+ static const string& YT() {
+ static const string s = "YT";
+ return s;
+ }
+
+ // Official code for the unknown region.
+ static const string& ZZ() {
+ static const string s = "ZZ";
+ return s;
+ }
+};
+
+} // namespace
+
+class TestMetadataProvider : public PhoneNumberUtil::MetadataProvider {
+ public:
+ virtual ~TestMetadataProvider() {}
+
+ pair<const void*, unsigned> operator()() {
+ return make_pair(test_metadata_get(), test_metadata_size());
+ }
+};
+
+class PhoneNumberUtilTest : public testing::Test {
+ protected:
+ PhoneNumberUtilTest() : phone_util_(&provider_) {}
+
+ // Wrapper functions for private functions that we want to test.
+ const PhoneMetadata* GetPhoneMetadata(const string& region_code) const {
+ return phone_util_.GetMetadataForRegion(region_code);
+ }
+
+ void GetSupportedRegions(set<string>* regions) {
+ phone_util_.GetSupportedRegions(regions);
+ }
+
+ void ExtractPossibleNumber(const string& number,
+ string* extracted_number) const {
+ PhoneNumberUtil::ExtractPossibleNumber(number, extracted_number);
+ }
+
+ bool IsViablePhoneNumber(const string& number) const {
+ return PhoneNumberUtil::IsViablePhoneNumber(number);
+ }
+
+ void Normalize(string* number) const {
+ phone_util_.Normalize(number);
+ }
+
+ bool IsLeadingZeroPossible(int country_calling_code) const {
+ return phone_util_.IsLeadingZeroPossible(country_calling_code);
+ }
+
+ PhoneNumber::CountryCodeSource MaybeStripInternationalPrefixAndNormalize(
+ const string& possible_idd_prefix,
+ string* number) const {
+ return phone_util_.MaybeStripInternationalPrefixAndNormalize(
+ possible_idd_prefix,
+ number);
+ }
+
+ void MaybeStripNationalPrefixAndCarrierCode(const PhoneMetadata& metadata,
+ string* number,
+ string* carrier_code) const {
+ PhoneNumberUtil::MaybeStripNationalPrefixAndCarrierCode(metadata, number,
+ carrier_code);
+ }
+
+ bool MaybeStripExtension(string* number, string* extension) const {
+ return PhoneNumberUtil::MaybeStripExtension(number, extension);
+ }
+
+ PhoneNumberUtil::ErrorType MaybeExtractCountryCode(
+ const PhoneMetadata* default_region_metadata,
+ bool keep_raw_input,
+ string* national_number,
+ PhoneNumber* phone_number) const {
+ return phone_util_.MaybeExtractCountryCode(default_region_metadata,
+ keep_raw_input,
+ national_number,
+ phone_number);
+ }
+
+ void GetNddPrefixForRegion(const string& region,
+ bool strip_non_digits,
+ string* ndd_prefix) const {
+ // For testing purposes, we check this is empty first.
+ ndd_prefix->clear();
+ phone_util_.GetNddPrefixForRegion(region, strip_non_digits, ndd_prefix);
+ }
+
+ static bool Equals(const PhoneNumberDesc& expected_number,
+ const PhoneNumberDesc& actual_number) {
+ return ExactlySameAs(expected_number, actual_number);
+ }
+
+ TestMetadataProvider provider_;
+ PhoneNumberUtil phone_util_;
+};
+
+// Provides PhoneNumber comparison operators to support the use of EXPECT_EQ and
+// EXPECT_NE in the unittests.
+bool operator==(const PhoneNumber& number1, const PhoneNumber& number2) {
+ return ExactlySameAs(number1, number2);
+}
+
+bool operator!=(const PhoneNumber& number1, const PhoneNumber& number2) {
+ return !(number1 == number2);
+}
+
+// Needed by Google Test to display errors.
+ostream& operator<<(ostream& os, const PhoneNumber& number) {
+ os << endl
+ << "country_code: " << number.country_code() << endl
+ << "national_number: " << number.national_number() << endl;
+ if (number.has_extension()) {
+ os << "extension: " << number.extension() << endl;
+ }
+ if (number.has_italian_leading_zero()) {
+ os << "italian_leading_zero: " << number.italian_leading_zero() << endl;
+ }
+ if (number.has_raw_input()) {
+ os << "raw_input: " << number.raw_input() << endl;
+ }
+ if (number.has_country_code_source()) {
+ os << "country_code_source: " << number.country_code_source() << endl;
+ }
+ if (number.has_preferred_domestic_carrier_code()) {
+ os << "preferred_domestic_carrier_code: "
+ << number.preferred_domestic_carrier_code() << endl;
+ }
+ return os;
+}
+
+TEST_F(PhoneNumberUtilTest, GetSupportedRegions) {
+ set<string> regions;
+
+ GetSupportedRegions(&regions);
+ EXPECT_GT(regions.size(), 0U);
+}
+
+TEST_F(PhoneNumberUtilTest, GetInstanceLoadUSMetadata) {
+ const PhoneMetadata* metadata = GetPhoneMetadata(RegionCode::US());
+ EXPECT_EQ("US", metadata->id());
+ EXPECT_EQ(1, metadata->country_code());
+ EXPECT_EQ("011", metadata->international_prefix());
+ EXPECT_TRUE(metadata->has_national_prefix());
+ ASSERT_EQ(2, metadata->number_format_size());
+ EXPECT_EQ("(\\d{3})(\\d{3})(\\d{4})",
+ metadata->number_format(0).pattern());
+ EXPECT_EQ("$1 $2 $3", metadata->number_format(0).format());
+ EXPECT_EQ("[13-9]\\d{9}|2[0-35-9]\\d{8}",
+ metadata->general_desc().national_number_pattern());
+ EXPECT_EQ("\\d{7}(?:\\d{3})?",
+ metadata->general_desc().possible_number_pattern());
+ EXPECT_TRUE(Equals(metadata->general_desc(), metadata->fixed_line()));
+ EXPECT_EQ("\\d{10}", metadata->toll_free().possible_number_pattern());
+ EXPECT_EQ("900\\d{7}", metadata->premium_rate().national_number_pattern());
+ // No shared-cost data is available, so it should be initialised to "NA".
+ EXPECT_EQ("NA", metadata->shared_cost().national_number_pattern());
+ EXPECT_EQ("NA", metadata->shared_cost().possible_number_pattern());
+}
+
+TEST_F(PhoneNumberUtilTest, GetInstanceLoadDEMetadata) {
+ const PhoneMetadata* metadata = GetPhoneMetadata(RegionCode::DE());
+ EXPECT_EQ("DE", metadata->id());
+ EXPECT_EQ(49, metadata->country_code());
+ EXPECT_EQ("00", metadata->international_prefix());
+ EXPECT_EQ("0", metadata->national_prefix());
+ ASSERT_EQ(6, metadata->number_format_size());
+ EXPECT_EQ(1, metadata->number_format(5).leading_digits_pattern_size());
+ EXPECT_EQ("900", metadata->number_format(5).leading_digits_pattern(0));
+ EXPECT_EQ("(\\d{3})(\\d{3,4})(\\d{4})",
+ metadata->number_format(5).pattern());
+ EXPECT_EQ("$1 $2 $3", metadata->number_format(5).format());
+ EXPECT_EQ("(?:[24-6]\\d{2}|3[03-9]\\d|[789](?:[1-9]\\d|0[2-9]))\\d{3,8}",
+ metadata->fixed_line().national_number_pattern());
+ EXPECT_EQ("\\d{2,14}", metadata->fixed_line().possible_number_pattern());
+ EXPECT_EQ("30123456", metadata->fixed_line().example_number());
+ EXPECT_EQ("\\d{10}", metadata->toll_free().possible_number_pattern());
+ EXPECT_EQ("900([135]\\d{6}|9\\d{7})",
+ metadata->premium_rate().national_number_pattern());
+}
+
+TEST_F(PhoneNumberUtilTest, GetInstanceLoadARMetadata) {
+ const PhoneMetadata* metadata = GetPhoneMetadata(RegionCode::AR());
+ EXPECT_EQ("AR", metadata->id());
+ EXPECT_EQ(54, metadata->country_code());
+ EXPECT_EQ("00", metadata->international_prefix());
+ EXPECT_EQ("0", metadata->national_prefix());
+ EXPECT_EQ("0(?:(11|343|3715)15)?", metadata->national_prefix_for_parsing());
+ EXPECT_EQ("9$1", metadata->national_prefix_transform_rule());
+ ASSERT_EQ(5, metadata->number_format_size());
+ EXPECT_EQ("$1 15 $2-$3", metadata->number_format(2).format());
+ EXPECT_EQ("9(\\d{4})(\\d{2})(\\d{4})", metadata->number_format(3).pattern());
+ EXPECT_EQ("(9)(\\d{4})(\\d{2})(\\d{4})",
+ metadata->intl_number_format(3).pattern());
+ EXPECT_EQ("$1 $2 $3 $4", metadata->intl_number_format(3).format());
+}
+
+TEST_F(PhoneNumberUtilTest, GetNationalSignificantNumber) {
+ PhoneNumber number;
+ number.set_country_code(1);
+ number.set_national_number(6502530000ULL);
+ string national_significant_number;
+ phone_util_.GetNationalSignificantNumber(number,
+ &national_significant_number);
+ EXPECT_EQ("6502530000", national_significant_number);
+
+ // An Italian mobile number.
+ national_significant_number.clear();
+ number.set_country_code(39);
+ number.set_national_number(312345678ULL);
+ phone_util_.GetNationalSignificantNumber(number,
+ &national_significant_number);
+ EXPECT_EQ("312345678", national_significant_number);
+
+ // An Italian fixed line number.
+ national_significant_number.clear();
+ number.set_country_code(39);
+ number.set_national_number(236618300ULL);
+ number.set_italian_leading_zero(true);
+ phone_util_.GetNationalSignificantNumber(number,
+ &national_significant_number);
+ EXPECT_EQ("0236618300", national_significant_number);
+}
+
+TEST_F(PhoneNumberUtilTest, GetExampleNumber) {
+ PhoneNumber de_number;
+ de_number.set_country_code(49);
+ de_number.set_national_number(30123456ULL);
+ PhoneNumber test_number;
+ bool success = phone_util_.GetExampleNumber(RegionCode::DE(), &test_number);
+ EXPECT_TRUE(success);
+ EXPECT_EQ(de_number, test_number);
+ success = phone_util_.GetExampleNumberForType(RegionCode::DE(),
+ PhoneNumberUtil::FIXED_LINE,
+ &test_number);
+ EXPECT_TRUE(success);
+ EXPECT_EQ(de_number, test_number);
+ test_number.Clear();
+ success = phone_util_.GetExampleNumberForType(RegionCode::DE(),
+ PhoneNumberUtil::MOBILE,
+ &test_number);
+ // Here we test that an example number was not returned, and that the number
+ // passed in was not modified.
+ EXPECT_FALSE(success);
+ EXPECT_EQ(PhoneNumber::default_instance(), test_number);
+ // For the US, the example number is placed under general description, and
+ // hence should be used for both fixed line and mobile, so neither of these
+ // should return null.
+ test_number.Clear();
+ success = phone_util_.GetExampleNumberForType(RegionCode::US(),
+ PhoneNumberUtil::FIXED_LINE,
+ &test_number);
+ // Here we test that the call to get an example number succeeded, and that the
+ // number passed in was modified.
+ EXPECT_TRUE(success);
+ EXPECT_NE(PhoneNumber::default_instance(), test_number);
+ test_number.Clear();
+ success = phone_util_.GetExampleNumberForType(RegionCode::US(),
+ PhoneNumberUtil::MOBILE,
+ &test_number);
+ EXPECT_TRUE(success);
+ EXPECT_NE(PhoneNumber::default_instance(), test_number);
+}
+
+TEST_F(PhoneNumberUtilTest, FormatUSNumber) {
+ PhoneNumber test_number;
+ string formatted_number;
+ test_number.set_country_code(1);
+ test_number.set_national_number(6502530000ULL);
+ phone_util_.Format(test_number, PhoneNumberUtil::NATIONAL, &formatted_number);
+ EXPECT_EQ("650 253 0000", formatted_number);
+ phone_util_.Format(test_number, PhoneNumberUtil::INTERNATIONAL,
+ &formatted_number);
+ EXPECT_EQ("+1 650 253 0000", formatted_number);
+
+ test_number.set_national_number(8002530000ULL);
+ phone_util_.Format(test_number, PhoneNumberUtil::NATIONAL, &formatted_number);
+ EXPECT_EQ("800 253 0000", formatted_number);
+ phone_util_.Format(test_number, PhoneNumberUtil::INTERNATIONAL,
+ &formatted_number);
+ EXPECT_EQ("+1 800 253 0000", formatted_number);
+
+ test_number.set_national_number(9002530000ULL);
+ phone_util_.Format(test_number, PhoneNumberUtil::NATIONAL, &formatted_number);
+ EXPECT_EQ("900 253 0000", formatted_number);
+ phone_util_.Format(test_number, PhoneNumberUtil::INTERNATIONAL,
+ &formatted_number);
+ EXPECT_EQ("+1 900 253 0000", formatted_number);
+ phone_util_.Format(test_number, PhoneNumberUtil::RFC3966, &formatted_number);
+ EXPECT_EQ("+1-900-253-0000", formatted_number);
+}
+
+TEST_F(PhoneNumberUtilTest, FormatBSNumber) {
+ PhoneNumber test_number;
+ string formatted_number;
+ test_number.set_country_code(1);
+ test_number.set_national_number(2421234567ULL);
+ phone_util_.Format(test_number, PhoneNumberUtil::NATIONAL, &formatted_number);
+ EXPECT_EQ("242 123 4567", formatted_number);
+ phone_util_.Format(test_number, PhoneNumberUtil::INTERNATIONAL,
+ &formatted_number);
+ EXPECT_EQ("+1 242 123 4567", formatted_number);
+
+ test_number.set_national_number(8002530000ULL);
+ phone_util_.Format(test_number, PhoneNumberUtil::NATIONAL, &formatted_number);
+ EXPECT_EQ("800 253 0000", formatted_number);
+ phone_util_.Format(test_number, PhoneNumberUtil::INTERNATIONAL,
+ &formatted_number);
+ EXPECT_EQ("+1 800 253 0000", formatted_number);
+
+ test_number.set_national_number(9002530000ULL);
+ phone_util_.Format(test_number, PhoneNumberUtil::NATIONAL, &formatted_number);
+ EXPECT_EQ("900 253 0000", formatted_number);
+ phone_util_.Format(test_number, PhoneNumberUtil::INTERNATIONAL,
+ &formatted_number);
+ EXPECT_EQ("+1 900 253 0000", formatted_number);
+}
+
+TEST_F(PhoneNumberUtilTest, FormatGBNumber) {
+ PhoneNumber test_number;
+ string formatted_number;
+ test_number.set_country_code(44);
+ test_number.set_national_number(2087389353ULL);
+ phone_util_.Format(test_number, PhoneNumberUtil::NATIONAL, &formatted_number);
+ EXPECT_EQ("(020) 8738 9353", formatted_number);
+ phone_util_.Format(test_number, PhoneNumberUtil::INTERNATIONAL,
+ &formatted_number);
+ EXPECT_EQ("+44 20 8738 9353", formatted_number);
+
+ test_number.set_national_number(7912345678ULL);
+ phone_util_.Format(test_number, PhoneNumberUtil::NATIONAL, &formatted_number);
+ EXPECT_EQ("(07912) 345 678", formatted_number);
+ phone_util_.Format(test_number, PhoneNumberUtil::INTERNATIONAL,
+ &formatted_number);
+ EXPECT_EQ("+44 7912 345 678", formatted_number);
+}
+
+TEST_F(PhoneNumberUtilTest, FormatDENumber) {
+ PhoneNumber test_number;
+ string formatted_number;
+ test_number.set_country_code(49);
+ test_number.set_national_number(301234ULL);
+ phone_util_.Format(test_number, PhoneNumberUtil::NATIONAL, &formatted_number);
+ EXPECT_EQ("030/1234", formatted_number);
+ phone_util_.Format(test_number, PhoneNumberUtil::INTERNATIONAL,
+ &formatted_number);
+ EXPECT_EQ("+49 30/1234", formatted_number);
+ phone_util_.Format(test_number, PhoneNumberUtil::RFC3966, &formatted_number);
+ EXPECT_EQ("+49-30-1234", formatted_number);
+
+ test_number.set_national_number(291123ULL);
+ phone_util_.Format(test_number, PhoneNumberUtil::NATIONAL, &formatted_number);
+ EXPECT_EQ("0291 123", formatted_number);
+ phone_util_.Format(test_number, PhoneNumberUtil::INTERNATIONAL,
+ &formatted_number);
+ EXPECT_EQ("+49 291 123", formatted_number);
+
+ test_number.set_national_number(29112345678ULL);
+ phone_util_.Format(test_number, PhoneNumberUtil::NATIONAL, &formatted_number);
+ EXPECT_EQ("0291 12345678", formatted_number);
+ phone_util_.Format(test_number, PhoneNumberUtil::INTERNATIONAL,
+ &formatted_number);
+ EXPECT_EQ("+49 291 12345678", formatted_number);
+
+ test_number.set_national_number(9123123ULL);
+ phone_util_.Format(test_number, PhoneNumberUtil::NATIONAL, &formatted_number);
+ EXPECT_EQ("09123 123", formatted_number);
+ phone_util_.Format(test_number, PhoneNumberUtil::INTERNATIONAL,
+ &formatted_number);
+ EXPECT_EQ("+49 9123 123", formatted_number);
+
+ test_number.set_national_number(80212345ULL);
+ phone_util_.Format(test_number, PhoneNumberUtil::NATIONAL, &formatted_number);
+ EXPECT_EQ("08021 2345", formatted_number);
+ phone_util_.Format(test_number, PhoneNumberUtil::INTERNATIONAL,
+ &formatted_number);
+ EXPECT_EQ("+49 8021 2345", formatted_number);
+
+ test_number.set_national_number(1234ULL);
+ // Note this number is correctly formatted without national prefix. Most of
+ // the numbers that are treated as invalid numbers by the library are short
+ // numbers, and they are usually not dialed with national prefix.
+ phone_util_.Format(test_number, PhoneNumberUtil::NATIONAL, &formatted_number);
+ EXPECT_EQ("1234", formatted_number);
+ phone_util_.Format(test_number, PhoneNumberUtil::INTERNATIONAL,
+ &formatted_number);
+ EXPECT_EQ("+49 1234", formatted_number);
+}
+
+TEST_F(PhoneNumberUtilTest, FormatITNumber) {
+ PhoneNumber test_number;
+ string formatted_number;
+ test_number.set_country_code(39);
+ test_number.set_national_number(236618300ULL);
+ test_number.set_italian_leading_zero(true);
+ phone_util_.Format(test_number, PhoneNumberUtil::NATIONAL, &formatted_number);
+ EXPECT_EQ("02 3661 8300", formatted_number);
+ phone_util_.Format(test_number, PhoneNumberUtil::INTERNATIONAL,
+ &formatted_number);
+ EXPECT_EQ("+39 02 3661 8300", formatted_number);
+ phone_util_.Format(test_number, PhoneNumberUtil::E164,
+ &formatted_number);
+ EXPECT_EQ("+390236618300", formatted_number);
+
+ test_number.set_national_number(345678901ULL);
+ test_number.set_italian_leading_zero(false);
+ phone_util_.Format(test_number, PhoneNumberUtil::NATIONAL, &formatted_number);
+ EXPECT_EQ("345 678 901", formatted_number);
+ phone_util_.Format(test_number, PhoneNumberUtil::INTERNATIONAL,
+ &formatted_number);
+ EXPECT_EQ("+39 345 678 901", formatted_number);
+ phone_util_.Format(test_number, PhoneNumberUtil::E164,
+ &formatted_number);
+ EXPECT_EQ("+39345678901", formatted_number);
+}
+
+TEST_F(PhoneNumberUtilTest, FormatAUNumber) {
+ PhoneNumber test_number;
+ string formatted_number;
+ test_number.set_country_code(61);
+ test_number.set_national_number(236618300ULL);
+ phone_util_.Format(test_number, PhoneNumberUtil::NATIONAL, &formatted_number);
+ EXPECT_EQ("02 3661 8300", formatted_number);
+ phone_util_.Format(test_number, PhoneNumberUtil::INTERNATIONAL,
+ &formatted_number);
+ EXPECT_EQ("+61 2 3661 8300", formatted_number);
+ phone_util_.Format(test_number, PhoneNumberUtil::E164,
+ &formatted_number);
+ EXPECT_EQ("+61236618300", formatted_number);
+
+ test_number.set_national_number(1800123456ULL);
+ phone_util_.Format(test_number, PhoneNumberUtil::NATIONAL, &formatted_number);
+ EXPECT_EQ("1800 123 456", formatted_number);
+ phone_util_.Format(test_number, PhoneNumberUtil::INTERNATIONAL,
+ &formatted_number);
+ EXPECT_EQ("+61 1800 123 456", formatted_number);
+ phone_util_.Format(test_number, PhoneNumberUtil::E164,
+ &formatted_number);
+ EXPECT_EQ("+611800123456", formatted_number);
+}
+
+TEST_F(PhoneNumberUtilTest, FormatARNumber) {
+ PhoneNumber test_number;
+ string formatted_number;
+ test_number.set_country_code(54);
+ test_number.set_national_number(1187654321ULL);
+ phone_util_.Format(test_number, PhoneNumberUtil::NATIONAL, &formatted_number);
+ EXPECT_EQ("011 8765-4321", formatted_number);
+ phone_util_.Format(test_number, PhoneNumberUtil::INTERNATIONAL,
+ &formatted_number);
+ EXPECT_EQ("+54 11 8765-4321", formatted_number);
+ phone_util_.Format(test_number, PhoneNumberUtil::E164,
+ &formatted_number);
+ EXPECT_EQ("+541187654321", formatted_number);
+
+ test_number.set_national_number(91187654321ULL);
+ phone_util_.Format(test_number, PhoneNumberUtil::NATIONAL, &formatted_number);
+ EXPECT_EQ("011 15 8765-4321", formatted_number);
+ phone_util_.Format(test_number, PhoneNumberUtil::INTERNATIONAL,
+ &formatted_number);
+ EXPECT_EQ("+54 9 11 8765 4321", formatted_number);
+ phone_util_.Format(test_number, PhoneNumberUtil::E164,
+ &formatted_number);
+ EXPECT_EQ("+5491187654321", formatted_number);
+}
+
+TEST_F(PhoneNumberUtilTest, FormatOutOfCountryCallingNumber) {
+ PhoneNumber test_number;
+ string formatted_number;
+ test_number.set_country_code(1);
+ test_number.set_national_number(9002530000ULL);
+ phone_util_.FormatOutOfCountryCallingNumber(test_number, RegionCode::DE(),
+ &formatted_number);
+ EXPECT_EQ("00 1 900 253 0000", formatted_number);
+
+ test_number.set_national_number(6502530000ULL);
+ phone_util_.FormatOutOfCountryCallingNumber(test_number, RegionCode::BS(),
+ &formatted_number);
+ EXPECT_EQ("1 650 253 0000", formatted_number);
+ phone_util_.FormatOutOfCountryCallingNumber(test_number, RegionCode::PL(),
+ &formatted_number);
+ EXPECT_EQ("0~0 1 650 253 0000", formatted_number);
+
+ test_number.set_country_code(44);
+ test_number.set_national_number(7912345678ULL);
+ phone_util_.FormatOutOfCountryCallingNumber(test_number, RegionCode::US(),
+ &formatted_number);
+ EXPECT_EQ("011 44 7912 345 678", formatted_number);
+
+ test_number.set_country_code(49);
+ test_number.set_national_number(1234ULL);
+ phone_util_.FormatOutOfCountryCallingNumber(test_number, RegionCode::GB(),
+ &formatted_number);
+ EXPECT_EQ("00 49 1234", formatted_number);
+ // Note this number is correctly formatted without national prefix. Most of
+ // the numbers that are treated as invalid numbers by the library are short
+ // numbers, and they are usually not dialed with national prefix.
+ phone_util_.FormatOutOfCountryCallingNumber(test_number, RegionCode::DE(),
+ &formatted_number);
+ EXPECT_EQ("1234", formatted_number);
+
+ test_number.set_country_code(39);
+ test_number.set_national_number(236618300ULL);
+ test_number.set_italian_leading_zero(true);
+ phone_util_.FormatOutOfCountryCallingNumber(test_number, RegionCode::US(),
+ &formatted_number);
+ EXPECT_EQ("011 39 02 3661 8300", formatted_number);
+ phone_util_.FormatOutOfCountryCallingNumber(test_number, RegionCode::IT(),
+ &formatted_number);
+ EXPECT_EQ("02 3661 8300", formatted_number);
+ phone_util_.FormatOutOfCountryCallingNumber(test_number, RegionCode::SG(),
+ &formatted_number);
+ EXPECT_EQ("+39 02 3661 8300", formatted_number);
+
+ test_number.set_country_code(65);
+ test_number.set_national_number(94777892ULL);
+ test_number.set_italian_leading_zero(false);
+ phone_util_.FormatOutOfCountryCallingNumber(test_number, RegionCode::SG(),
+ &formatted_number);
+ EXPECT_EQ("9477 7892", formatted_number);
+
+ test_number.set_country_code(54);
+ test_number.set_national_number(91187654321ULL);
+ phone_util_.FormatOutOfCountryCallingNumber(test_number, RegionCode::US(),
+ &formatted_number);
+ EXPECT_EQ("011 54 9 11 8765 4321", formatted_number);
+
+ test_number.set_extension("1234");
+ phone_util_.FormatOutOfCountryCallingNumber(test_number, RegionCode::US(),
+ &formatted_number);
+ EXPECT_EQ("011 54 9 11 8765 4321 ext. 1234", formatted_number);
+ phone_util_.FormatOutOfCountryCallingNumber(test_number, RegionCode::AU(),
+ &formatted_number);
+ EXPECT_EQ("0011 54 9 11 8765 4321 ext. 1234", formatted_number);
+ phone_util_.FormatOutOfCountryCallingNumber(test_number, RegionCode::AR(),
+ &formatted_number);
+ EXPECT_EQ("011 15 8765-4321 ext. 1234", formatted_number);
+}
+
+TEST_F(PhoneNumberUtilTest, FormatOutOfCountryWithPreferredIntlPrefix) {
+ PhoneNumber test_number;
+ string formatted_number;
+ test_number.set_country_code(39);
+ test_number.set_national_number(236618300ULL);
+ test_number.set_italian_leading_zero(true);
+ // This should use 0011, since that is the preferred international prefix
+ // (both 0011 and 0012 are accepted as possible international prefixes in our
+ // test metadta.)
+ phone_util_.FormatOutOfCountryCallingNumber(test_number, RegionCode::AU(),
+ &formatted_number);
+ EXPECT_EQ("0011 39 02 3661 8300", formatted_number);
+}
+
+TEST_F(PhoneNumberUtilTest, FormatOutOfCountryKeepingAlphaChars) {
+ PhoneNumber alpha_numeric_number;
+ string formatted_number;
+ alpha_numeric_number.set_country_code(1);
+ alpha_numeric_number.set_national_number(8007493524ULL);
+ alpha_numeric_number.set_raw_input("1800 six-flag");
+ phone_util_.FormatOutOfCountryKeepingAlphaChars(alpha_numeric_number,
+ RegionCode::AU(),
+ &formatted_number);
+ EXPECT_EQ("0011 1 800 SIX-FLAG", formatted_number);
+
+ formatted_number.clear();
+ alpha_numeric_number.set_raw_input("1-800-SIX-flag");
+ phone_util_.FormatOutOfCountryKeepingAlphaChars(alpha_numeric_number,
+ RegionCode::AU(),
+ &formatted_number);
+ EXPECT_EQ("0011 1 800-SIX-FLAG", formatted_number);
+
+ formatted_number.clear();
+ alpha_numeric_number.set_raw_input("Call us from UK: 00 1 800 SIX-flag");
+ phone_util_.FormatOutOfCountryKeepingAlphaChars(alpha_numeric_number,
+ RegionCode::AU(),
+ &formatted_number);
+ EXPECT_EQ("0011 1 800 SIX-FLAG", formatted_number);
+
+ formatted_number.clear();
+ alpha_numeric_number.set_raw_input("800 SIX-flag");
+ phone_util_.FormatOutOfCountryKeepingAlphaChars(alpha_numeric_number,
+ RegionCode::AU(),
+ &formatted_number);
+ EXPECT_EQ("0011 1 800 SIX-FLAG", formatted_number);
+
+ // Formatting from within the NANPA region.
+ formatted_number.clear();
+ phone_util_.FormatOutOfCountryKeepingAlphaChars(alpha_numeric_number,
+ RegionCode::US(),
+ &formatted_number);
+ EXPECT_EQ("1 800 SIX-FLAG", formatted_number);
+ formatted_number.clear();
+ phone_util_.FormatOutOfCountryKeepingAlphaChars(alpha_numeric_number,
+ RegionCode::BS(),
+ &formatted_number);
+ EXPECT_EQ("1 800 SIX-FLAG", formatted_number);
+
+ // Testing that if the raw input doesn't exist, it is formatted using
+ // FormatOutOfCountryCallingNumber.
+ alpha_numeric_number.clear_raw_input();
+ formatted_number.clear();
+ phone_util_.FormatOutOfCountryKeepingAlphaChars(alpha_numeric_number,
+ RegionCode::DE(),
+ &formatted_number);
+ EXPECT_EQ("00 1 800 749 3524", formatted_number);
+
+ // Testing AU alpha number formatted from Australia.
+ alpha_numeric_number.set_country_code(61);
+ alpha_numeric_number.set_national_number(827493524ULL);
+ alpha_numeric_number.set_raw_input("+61 82749-FLAG");
+ formatted_number.clear();
+ phone_util_.FormatOutOfCountryKeepingAlphaChars(alpha_numeric_number,
+ RegionCode::AU(),
+ &formatted_number);
+ // This number should have the national prefix prefixed.
+ EXPECT_EQ("082749-FLAG", formatted_number);
+
+ alpha_numeric_number.set_raw_input("082749-FLAG");
+ formatted_number.clear();
+ phone_util_.FormatOutOfCountryKeepingAlphaChars(alpha_numeric_number,
+ RegionCode::AU(),
+ &formatted_number);
+ EXPECT_EQ("082749-FLAG", formatted_number);
+
+ alpha_numeric_number.set_national_number(18007493524ULL);
+ alpha_numeric_number.set_raw_input("1-800-SIX-flag");
+ formatted_number.clear();
+ phone_util_.FormatOutOfCountryKeepingAlphaChars(alpha_numeric_number,
+ RegionCode::AU(),
+ &formatted_number);
+ // This number should not have the national prefix prefixed, in accordance
+ // with the override for this specific formatting rule.
+ EXPECT_EQ("1-800-SIX-FLAG", formatted_number);
+ // The metadata should not be permanently changed, since we copied it before
+ // modifying patterns. Here we check this.
+ formatted_number.clear();
+ alpha_numeric_number.set_national_number(1800749352ULL);
+ phone_util_.FormatOutOfCountryCallingNumber(alpha_numeric_number,
+ RegionCode::AU(),
+ &formatted_number);
+ EXPECT_EQ("1800 749 352", formatted_number);
+
+ // Testing a country with multiple international prefixes.
+ formatted_number.clear();
+ phone_util_.FormatOutOfCountryKeepingAlphaChars(alpha_numeric_number,
+ RegionCode::SG(),
+ &formatted_number);
+ EXPECT_EQ("+61 1-800-SIX-FLAG", formatted_number);
+
+ // Testing the case with an invalid country code.
+ formatted_number.clear();
+ alpha_numeric_number.set_country_code(0);
+ alpha_numeric_number.set_national_number(18007493524ULL);
+ alpha_numeric_number.set_raw_input("1-800-SIX-flag");
+ phone_util_.FormatOutOfCountryKeepingAlphaChars(alpha_numeric_number,
+ RegionCode::DE(),
+ &formatted_number);
+ // Uses the raw input only.
+ EXPECT_EQ("1-800-SIX-flag", formatted_number);
+
+ // Testing the case of an invalid alpha number.
+ formatted_number.clear();
+ alpha_numeric_number.set_country_code(1);
+ alpha_numeric_number.set_national_number(80749ULL);
+ alpha_numeric_number.set_raw_input("180-SIX");
+ phone_util_.FormatOutOfCountryKeepingAlphaChars(alpha_numeric_number,
+ RegionCode::DE(),
+ &formatted_number);
+ // No country-code stripping can be done.
+ EXPECT_EQ("00 1 180-SIX", formatted_number);
+}
+
+TEST_F(PhoneNumberUtilTest, FormatWithCarrierCode) {
+ // We only support this for AR in our test metadata.
+ PhoneNumber ar_number;
+ string formatted_number;
+ ar_number.set_country_code(54);
+ ar_number.set_national_number(91234125678ULL);
+ phone_util_.Format(ar_number, PhoneNumberUtil::NATIONAL, &formatted_number);
+ EXPECT_EQ("01234 12-5678", formatted_number);
+ // Test formatting with a carrier code.
+ phone_util_.FormatNationalNumberWithCarrierCode(ar_number, "15",
+ &formatted_number);
+ EXPECT_EQ("01234 15 12-5678", formatted_number);
+ phone_util_.FormatNationalNumberWithCarrierCode(ar_number, "",
+ &formatted_number);
+ EXPECT_EQ("01234 12-5678", formatted_number);
+ // Here the international rule is used, so no carrier code should be present.
+ phone_util_.Format(ar_number, PhoneNumberUtil::E164, &formatted_number);
+ EXPECT_EQ("+5491234125678", formatted_number);
+ // We don't support this for the US so there should be no change.
+ PhoneNumber us_number;
+ us_number.set_country_code(1);
+ us_number.set_national_number(4241231234ULL);
+ phone_util_.Format(us_number, PhoneNumberUtil::NATIONAL, &formatted_number);
+ EXPECT_EQ("424 123 1234", formatted_number);
+ phone_util_.FormatNationalNumberWithCarrierCode(us_number, "15",
+ &formatted_number);
+ EXPECT_EQ("424 123 1234", formatted_number);
+}
+
+TEST_F(PhoneNumberUtilTest, FormatWithPreferredCarrierCode) {
+ // We only support this for AR in our test metadata.
+ PhoneNumber ar_number;
+ string formatted_number;
+ ar_number.set_country_code(54);
+ ar_number.set_national_number(91234125678ULL);
+ // Test formatting with no preferred carrier code stored in the number itself.
+ phone_util_.FormatNationalNumberWithPreferredCarrierCode(ar_number, "15",
+ &formatted_number);
+ EXPECT_EQ("01234 15 12-5678", formatted_number);
+ phone_util_.FormatNationalNumberWithPreferredCarrierCode(ar_number, "",
+ &formatted_number);
+ EXPECT_EQ("01234 12-5678", formatted_number);
+ // Test formatting with preferred carrier code present.
+ ar_number.set_preferred_domestic_carrier_code("19");
+ phone_util_.Format(ar_number, PhoneNumberUtil::NATIONAL, &formatted_number);
+ EXPECT_EQ("01234 12-5678", formatted_number);
+ phone_util_.FormatNationalNumberWithPreferredCarrierCode(ar_number, "15",
+ &formatted_number);
+ EXPECT_EQ("01234 19 12-5678", formatted_number);
+ phone_util_.FormatNationalNumberWithPreferredCarrierCode(ar_number, "",
+ &formatted_number);
+ EXPECT_EQ("01234 19 12-5678", formatted_number);
+ // When the preferred_domestic_carrier_code is present (even when it contains
+ // an empty string), use it instead of the default carrier code passed in.
+ ar_number.set_preferred_domestic_carrier_code("");
+ phone_util_.FormatNationalNumberWithPreferredCarrierCode(ar_number, "15",
+ &formatted_number);
+ EXPECT_EQ("01234 12-5678", formatted_number);
+ // We don't support this for the US so there should be no change.
+ PhoneNumber us_number;
+ us_number.set_country_code(1);
+ us_number.set_national_number(4241231234ULL);
+ us_number.set_preferred_domestic_carrier_code("99");
+ phone_util_.Format(us_number, PhoneNumberUtil::NATIONAL, &formatted_number);
+ EXPECT_EQ("424 123 1234", formatted_number);
+ phone_util_.FormatNationalNumberWithPreferredCarrierCode(us_number, "15",
+ &formatted_number);
+ EXPECT_EQ("424 123 1234", formatted_number);
+}
+
+TEST_F(PhoneNumberUtilTest, FormatByPattern) {
+ PhoneNumber test_number;
+ string formatted_number;
+ test_number.set_country_code(1);
+ test_number.set_national_number(6502530000ULL);
+
+ RepeatedPtrField<NumberFormat> number_formats;
+ NumberFormat* number_format = number_formats.Add();
+ number_format->set_pattern("(\\d{3})(\\d{3})(\\d{4})");
+ number_format->set_format("($1) $2-$3");
+ phone_util_.FormatByPattern(test_number, PhoneNumberUtil::NATIONAL,
+ number_formats,
+ &formatted_number);
+ EXPECT_EQ("(650) 253-0000", formatted_number);
+ phone_util_.FormatByPattern(test_number, PhoneNumberUtil::INTERNATIONAL,
+ number_formats,
+ &formatted_number);
+ EXPECT_EQ("+1 (650) 253-0000", formatted_number);
+
+ // $NP is set to '1' for the US. Here we check that for other NANPA countries
+ // the US rules are followed.
+ number_format->set_national_prefix_formatting_rule("$NP ($FG)");
+ number_format->set_format("$1 $2-$3");
+ test_number.set_country_code(1);
+ test_number.set_national_number(4168819999ULL);
+ phone_util_.FormatByPattern(test_number, PhoneNumberUtil::NATIONAL,
+ number_formats,
+ &formatted_number);
+ EXPECT_EQ("1 (416) 881-9999", formatted_number);
+ phone_util_.FormatByPattern(test_number, PhoneNumberUtil::INTERNATIONAL,
+ number_formats,
+ &formatted_number);
+ EXPECT_EQ("+1 416 881-9999", formatted_number);
+
+ test_number.set_country_code(39);
+ test_number.set_national_number(236618300ULL);
+ test_number.set_italian_leading_zero(true);
+ number_format->set_pattern("(\\d{2})(\\d{5})(\\d{3})");
+ number_format->set_format("$1-$2 $3");
+ phone_util_.FormatByPattern(test_number, PhoneNumberUtil::NATIONAL,
+ number_formats,
+ &formatted_number);
+ EXPECT_EQ("02-36618 300", formatted_number);
+ phone_util_.FormatByPattern(test_number, PhoneNumberUtil::INTERNATIONAL,
+ number_formats,
+ &formatted_number);
+ EXPECT_EQ("+39 02-36618 300", formatted_number);
+
+ test_number.set_country_code(44);
+ test_number.set_national_number(2012345678ULL);
+ test_number.set_italian_leading_zero(false);
+ number_format->set_national_prefix_formatting_rule("$NP$FG");
+ number_format->set_pattern("(\\d{2})(\\d{4})(\\d{4})");
+ number_format->set_format("$1 $2 $3");
+ phone_util_.FormatByPattern(test_number, PhoneNumberUtil::NATIONAL,
+ number_formats,
+ &formatted_number);
+ EXPECT_EQ("020 1234 5678", formatted_number);
+
+ number_format->set_national_prefix_formatting_rule("($NP$FG)");
+ phone_util_.FormatByPattern(test_number, PhoneNumberUtil::NATIONAL,
+ number_formats,
+ &formatted_number);
+ EXPECT_EQ("(020) 1234 5678", formatted_number);
+ number_format->set_national_prefix_formatting_rule("");
+ phone_util_.FormatByPattern(test_number, PhoneNumberUtil::NATIONAL,
+ number_formats,
+ &formatted_number);
+ EXPECT_EQ("20 1234 5678", formatted_number);
+ number_format->set_national_prefix_formatting_rule("");
+ phone_util_.FormatByPattern(test_number, PhoneNumberUtil::INTERNATIONAL,
+ number_formats,
+ &formatted_number);
+ EXPECT_EQ("+44 20 1234 5678", formatted_number);
+}
+
+TEST_F(PhoneNumberUtilTest, FormatE164Number) {
+ PhoneNumber test_number;
+ string formatted_number;
+ test_number.set_country_code(1);
+ test_number.set_national_number(6502530000ULL);
+ phone_util_.Format(test_number, PhoneNumberUtil::E164, &formatted_number);
+ EXPECT_EQ("+16502530000", formatted_number);
+
+ test_number.set_country_code(49);
+ test_number.set_national_number(301234ULL);
+ phone_util_.Format(test_number, PhoneNumberUtil::E164, &formatted_number);
+ EXPECT_EQ("+49301234", formatted_number);
+}
+
+TEST_F(PhoneNumberUtilTest, FormatNumberWithExtension) {
+ PhoneNumber nz_number;
+ nz_number.set_country_code(64);
+ nz_number.set_national_number(33316005ULL);
+ nz_number.set_extension("1234");
+ string formatted_number;
+ // Uses default extension prefix:
+ phone_util_.Format(nz_number, PhoneNumberUtil::NATIONAL, &formatted_number);
+ EXPECT_EQ("03-331 6005 ext. 1234", formatted_number);
+ // Uses RFC 3966 syntax.
+ phone_util_.Format(nz_number, PhoneNumberUtil::RFC3966, &formatted_number);
+ EXPECT_EQ("+64-3-331-6005;ext=1234", formatted_number);
+ // Extension prefix overridden in the territory information for the US:
+ PhoneNumber us_number_with_extension;
+ us_number_with_extension.set_country_code(1);
+ us_number_with_extension.set_national_number(6502530000ULL);
+ us_number_with_extension.set_extension("4567");
+ phone_util_.Format(us_number_with_extension,
+ PhoneNumberUtil::NATIONAL, &formatted_number);
+ EXPECT_EQ("650 253 0000 extn. 4567", formatted_number);
+}
+
+TEST_F(PhoneNumberUtilTest, GetLengthOfGeographicalAreaCode) {
+ PhoneNumber number;
+ // Google MTV, which has area code "650".
+ number.set_country_code(1);
+ number.set_national_number(6502530000ULL);
+ EXPECT_EQ(3, phone_util_.GetLengthOfGeographicalAreaCode(number));
+
+ // A North America toll-free number, which has no area code.
+ number.set_country_code(1);
+ number.set_national_number(8002530000ULL);
+ EXPECT_EQ(0, phone_util_.GetLengthOfGeographicalAreaCode(number));
+
+ // An invalid US number (1 digit shorter), which has no area code.
+ number.set_country_code(1);
+ number.set_national_number(650253000ULL);
+ EXPECT_EQ(0, phone_util_.GetLengthOfGeographicalAreaCode(number));
+
+ // Google London, which has area code "20".
+ number.set_country_code(44);
+ number.set_national_number(2070313000ULL);
+ EXPECT_EQ(2, phone_util_.GetLengthOfGeographicalAreaCode(number));
+
+ // A UK mobile phone, which has no area code.
+ number.set_country_code(44);
+ number.set_national_number(7123456789ULL);
+ EXPECT_EQ(0, phone_util_.GetLengthOfGeographicalAreaCode(number));
+
+ // Google Buenos Aires, which has area code "11".
+ number.set_country_code(54);
+ number.set_national_number(1155303000ULL);
+ EXPECT_EQ(2, phone_util_.GetLengthOfGeographicalAreaCode(number));
+
+ // Google Sydney, which has area code "2".
+ number.set_country_code(61);
+ number.set_national_number(293744000ULL);
+ EXPECT_EQ(1, phone_util_.GetLengthOfGeographicalAreaCode(number));
+
+ // Google Singapore. Singapore has no area code and no national prefix.
+ number.set_country_code(65);
+ number.set_national_number(65218000ULL);
+ EXPECT_EQ(0, phone_util_.GetLengthOfGeographicalAreaCode(number));
+}
+
+TEST_F(PhoneNumberUtilTest, GetLengthOfNationalDestinationCode) {
+ PhoneNumber number;
+ // Google MTV, which has national destination code (NDC) "650".
+ number.set_country_code(1);
+ number.set_national_number(6502530000ULL);
+ EXPECT_EQ(3, phone_util_.GetLengthOfNationalDestinationCode(number));
+
+ // A North America toll-free number, which has NDC "800".
+ number.set_country_code(1);
+ number.set_national_number(8002530000ULL);
+ EXPECT_EQ(3, phone_util_.GetLengthOfNationalDestinationCode(number));
+
+ // Google London, which has NDC "20".
+ number.set_country_code(44);
+ number.set_national_number(2070313000ULL);
+ EXPECT_EQ(2, phone_util_.GetLengthOfNationalDestinationCode(number));
+
+ // A UK mobile phone, which has NDC "7123"
+ number.set_country_code(44);
+ number.set_national_number(7123456789ULL);
+ EXPECT_EQ(4, phone_util_.GetLengthOfNationalDestinationCode(number));
+
+ // Google Buenos Aires, which has NDC "11".
+ number.set_country_code(54);
+ number.set_national_number(1155303000ULL);
+ EXPECT_EQ(2, phone_util_.GetLengthOfNationalDestinationCode(number));
+
+ // Google Sydney, which has NDC "2".
+ number.set_country_code(61);
+ number.set_national_number(293744000ULL);
+ EXPECT_EQ(1, phone_util_.GetLengthOfNationalDestinationCode(number));
+
+ // Google Singapore. Singapore has NDC "6521".
+ number.set_country_code(65);
+ number.set_national_number(65218000ULL);
+ EXPECT_EQ(4, phone_util_.GetLengthOfNationalDestinationCode(number));
+
+ // An invalid US number (1 digit shorter), which has no NDC.
+ number.set_country_code(1);
+ number.set_national_number(650253000ULL);
+ EXPECT_EQ(0, phone_util_.GetLengthOfNationalDestinationCode(number));
+
+ // A number containing an invalid country code, which shouldn't have any NDC.
+ number.set_country_code(123);
+ number.set_national_number(650253000ULL);
+ EXPECT_EQ(0, phone_util_.GetLengthOfNationalDestinationCode(number));
+
+ // A number that has only one group of digits after country code when
+ // formatted in the international format.
+ number.set_country_code(376);
+ number.set_national_number(12345ULL);
+ EXPECT_EQ(0, phone_util_.GetLengthOfNationalDestinationCode(number));
+
+ // The same number above, but with an extension.
+ number.set_country_code(376);
+ number.set_national_number(12345ULL);
+ number.set_extension("321");
+ EXPECT_EQ(0, phone_util_.GetLengthOfNationalDestinationCode(number));
+}
+
+TEST_F(PhoneNumberUtilTest, ExtractPossibleNumber) {
+ // Removes preceding funky punctuation and letters but leaves the rest
+ // untouched.
+ string extracted_number;
+ ExtractPossibleNumber("Tel:0800-345-600", &extracted_number);
+ EXPECT_EQ("0800-345-600", extracted_number);
+ ExtractPossibleNumber("Tel:0800 FOR PIZZA", &extracted_number);
+ EXPECT_EQ("0800 FOR PIZZA", extracted_number);
+
+ // Should not remove plus sign.
+ ExtractPossibleNumber("Tel:+800-345-600", &extracted_number);
+ EXPECT_EQ("+800-345-600", extracted_number);
+ // Should recognise wide digits as possible start values.
+ ExtractPossibleNumber("023", &extracted_number);
+ EXPECT_EQ("023", extracted_number);
+ // Dashes are not possible start values and should be removed.
+ ExtractPossibleNumber("Num-123", &extracted_number);
+ EXPECT_EQ("123", extracted_number);
+ // If not possible number present, return empty string.
+ ExtractPossibleNumber("Num-....", &extracted_number);
+ EXPECT_EQ("", extracted_number);
+ // Leading brackets are stripped - these are not used when parsing.
+ ExtractPossibleNumber("(650) 253-0000", &extracted_number);
+ EXPECT_EQ("650) 253-0000", extracted_number);
+
+ // Trailing non-alpha-numeric characters should be removed.
+ ExtractPossibleNumber("(650) 253-0000..- ..", &extracted_number);
+ EXPECT_EQ("650) 253-0000", extracted_number);
+ ExtractPossibleNumber("(650) 253-0000.", &extracted_number);
+ EXPECT_EQ("650) 253-0000", extracted_number);
+ // This case has a trailing RTL char.
+ ExtractPossibleNumber("(650) 253-0000‏", &extracted_number);
+ EXPECT_EQ("650) 253-0000", extracted_number);
+}
+
+TEST_F(PhoneNumberUtilTest, IsNANPACountry) {
+ EXPECT_TRUE(phone_util_.IsNANPACountry(RegionCode::US()));
+ EXPECT_TRUE(phone_util_.IsNANPACountry(RegionCode::BS()));
+}
+
+TEST_F(PhoneNumberUtilTest, IsValidNumber) {
+ PhoneNumber us_number;
+ us_number.set_country_code(1);
+ us_number.set_national_number(6502530000ULL);
+ EXPECT_TRUE(phone_util_.IsValidNumber(us_number));
+
+ PhoneNumber it_number;
+ it_number.set_country_code(39);
+ it_number.set_national_number(236618300ULL);
+ it_number.set_italian_leading_zero(true);
+ EXPECT_TRUE(phone_util_.IsValidNumber(it_number));
+
+ PhoneNumber gb_number;
+ gb_number.set_country_code(44);
+ gb_number.set_national_number(7912345678ULL);
+ EXPECT_TRUE(phone_util_.IsValidNumber(gb_number));
+
+ PhoneNumber nz_number;
+ nz_number.set_country_code(64);
+ nz_number.set_national_number(21387835ULL);
+ EXPECT_TRUE(phone_util_.IsValidNumber(nz_number));
+}
+
+TEST_F(PhoneNumberUtilTest, IsValidForRegion) {
+ // This number is valid for the Bahamas, but is not a valid US number.
+ PhoneNumber bs_number;
+ bs_number.set_country_code(1);
+ bs_number.set_national_number(2423232345ULL);
+ EXPECT_TRUE(phone_util_.IsValidNumber(bs_number));
+ EXPECT_TRUE(phone_util_.IsValidNumberForRegion(bs_number, RegionCode::BS()));
+ EXPECT_FALSE(phone_util_.IsValidNumberForRegion(bs_number, RegionCode::US()));
+ bs_number.set_national_number(2421232345ULL);
+ // This number is no longer valid.
+ EXPECT_FALSE(phone_util_.IsValidNumber(bs_number));
+
+ // La Mayotte and Réunion use 'leadingDigits' to differentiate them.
+ PhoneNumber re_number;
+ re_number.set_country_code(262);
+ re_number.set_national_number(262123456ULL);
+ EXPECT_TRUE(phone_util_.IsValidNumber(re_number));
+ EXPECT_TRUE(phone_util_.IsValidNumberForRegion(re_number, RegionCode::RE()));
+ EXPECT_FALSE(phone_util_.IsValidNumberForRegion(re_number, RegionCode::YT()));
+ // Now change the number to be a number for La Mayotte.
+ re_number.set_national_number(269601234ULL);
+ EXPECT_TRUE(phone_util_.IsValidNumberForRegion(re_number, RegionCode::YT()));
+ EXPECT_FALSE(phone_util_.IsValidNumberForRegion(re_number, RegionCode::RE()));
+ // This number is no longer valid.
+ re_number.set_national_number(269123456ULL);
+ EXPECT_FALSE(phone_util_.IsValidNumberForRegion(re_number, RegionCode::YT()));
+ EXPECT_FALSE(phone_util_.IsValidNumberForRegion(re_number, RegionCode::RE()));
+ EXPECT_FALSE(phone_util_.IsValidNumber(re_number));
+ // However, it should be recognised as from La Mayotte.
+ string region_code;
+ phone_util_.GetRegionCodeForNumber(re_number, &region_code);
+ EXPECT_EQ("YT", region_code);
+ // This number is valid in both places.
+ re_number.set_national_number(800123456ULL);
+ EXPECT_TRUE(phone_util_.IsValidNumberForRegion(re_number, RegionCode::YT()));
+ EXPECT_TRUE(phone_util_.IsValidNumberForRegion(re_number, RegionCode::RE()));
+}
+
+TEST_F(PhoneNumberUtilTest, IsNotValidNumber) {
+ PhoneNumber us_number;
+ us_number.set_country_code(1);
+ us_number.set_national_number(2530000ULL);
+ EXPECT_FALSE(phone_util_.IsValidNumber(us_number));
+
+ PhoneNumber it_number;
+ it_number.set_country_code(39);
+ it_number.set_national_number(23661830000ULL);
+ it_number.set_italian_leading_zero(true);
+ EXPECT_FALSE(phone_util_.IsValidNumber(it_number));
+
+ PhoneNumber gb_number;
+ gb_number.set_country_code(44);
+ gb_number.set_national_number(791234567ULL);
+ EXPECT_FALSE(phone_util_.IsValidNumber(gb_number));
+
+ PhoneNumber de_number;
+ de_number.set_country_code(49);
+ de_number.set_national_number(1234ULL);
+ EXPECT_FALSE(phone_util_.IsValidNumber(de_number));
+
+ PhoneNumber nz_number;
+ nz_number.set_country_code(64);
+ nz_number.set_national_number(3316005ULL);
+ EXPECT_FALSE(phone_util_.IsValidNumber(nz_number));
+}
+
+TEST_F(PhoneNumberUtilTest, IsPossibleNumber) {
+ PhoneNumber number;
+ number.set_country_code(1);
+ number.set_national_number(6502530000ULL);
+ EXPECT_TRUE(phone_util_.IsPossibleNumber(number));
+
+ number.set_country_code(1);
+ number.set_national_number(2530000ULL);
+ EXPECT_TRUE(phone_util_.IsPossibleNumber(number));
+
+ number.set_country_code(44);
+ number.set_national_number(2070313000ULL);
+ EXPECT_TRUE(phone_util_.IsPossibleNumber(number));
+
+ EXPECT_TRUE(phone_util_.IsPossibleNumberForString("+1 650 253 0000",
+ RegionCode::US()));
+ EXPECT_TRUE(phone_util_.IsPossibleNumberForString("+1 650 GOO OGLE",
+ RegionCode::US()));
+ EXPECT_TRUE(phone_util_.IsPossibleNumberForString("(650) 253-0000",
+ RegionCode::US()));
+ EXPECT_TRUE(phone_util_.IsPossibleNumberForString("253-0000",
+ RegionCode::US()));
+ EXPECT_TRUE(phone_util_.IsPossibleNumberForString("+1 650 253 0000",
+ RegionCode::GB()));
+ EXPECT_TRUE(phone_util_.IsPossibleNumberForString("+44 20 7031 3000",
+ RegionCode::GB()));
+ EXPECT_TRUE(phone_util_.IsPossibleNumberForString("(020) 7031 3000",
+ RegionCode::GB()));
+ EXPECT_TRUE(phone_util_.IsPossibleNumberForString("7031 3000",
+ RegionCode::GB()));
+ EXPECT_TRUE(phone_util_.IsPossibleNumberForString("3331 6005",
+ RegionCode::NZ()));
+}
+
+TEST_F(PhoneNumberUtilTest, IsPossibleNumberWithReason) {
+ // FYI, national numbers for country code +1 that are within 7 to 10 digits
+ // are possible.
+ PhoneNumber number;
+ number.set_country_code(1);
+ number.set_national_number(6502530000ULL);
+ EXPECT_EQ(PhoneNumberUtil::IS_POSSIBLE,
+ phone_util_.IsPossibleNumberWithReason(number));
+
+ number.set_country_code(1);
+ number.set_national_number(2530000ULL);
+ EXPECT_EQ(PhoneNumberUtil::IS_POSSIBLE,
+ phone_util_.IsPossibleNumberWithReason(number));
+
+ number.set_country_code(0);
+ number.set_national_number(2530000ULL);
+ EXPECT_EQ(PhoneNumberUtil::INVALID_COUNTRY_CODE,
+ phone_util_.IsPossibleNumberWithReason(number));
+
+ number.set_country_code(1);
+ number.set_national_number(253000ULL);
+ EXPECT_EQ(PhoneNumberUtil::TOO_SHORT,
+ phone_util_.IsPossibleNumberWithReason(number));
+
+ number.set_country_code(1);
+ number.set_national_number(65025300000ULL);
+ EXPECT_EQ(PhoneNumberUtil::TOO_LONG,
+ phone_util_.IsPossibleNumberWithReason(number));
+
+ number.set_country_code(44);
+ number.set_national_number(2070310000ULL);
+ EXPECT_EQ(PhoneNumberUtil::IS_POSSIBLE,
+ phone_util_.IsPossibleNumberWithReason(number));
+
+ number.set_country_code(49);
+ number.set_national_number(30123456ULL);
+ EXPECT_EQ(PhoneNumberUtil::IS_POSSIBLE,
+ phone_util_.IsPossibleNumberWithReason(number));
+
+ number.set_country_code(65);
+ number.set_national_number(1234567890ULL);
+ EXPECT_EQ(PhoneNumberUtil::IS_POSSIBLE,
+ phone_util_.IsPossibleNumberWithReason(number));
+
+ // Try with number that we don't have metadata for.
+ PhoneNumber ad_number;
+ ad_number.set_country_code(376);
+ ad_number.set_national_number(12345ULL);
+ EXPECT_EQ(PhoneNumberUtil::IS_POSSIBLE,
+ phone_util_.IsPossibleNumberWithReason(ad_number));
+ ad_number.set_country_code(376);
+ ad_number.set_national_number(13ULL);
+ EXPECT_EQ(PhoneNumberUtil::TOO_SHORT,
+ phone_util_.IsPossibleNumberWithReason(ad_number));
+ ad_number.set_country_code(376);
+ ad_number.set_national_number(1234567890123456ULL);
+ EXPECT_EQ(PhoneNumberUtil::TOO_LONG,
+ phone_util_.IsPossibleNumberWithReason(ad_number));
+}
+
+TEST_F(PhoneNumberUtilTest, IsNotPossibleNumber) {
+ PhoneNumber number;
+ number.set_country_code(1);
+ number.set_national_number(65025300000ULL);
+ EXPECT_FALSE(phone_util_.IsPossibleNumber(number));
+
+ number.set_country_code(1);
+ number.set_national_number(253000ULL);
+ EXPECT_FALSE(phone_util_.IsPossibleNumber(number));
+
+ number.set_country_code(44);
+ number.set_national_number(300ULL);
+ EXPECT_FALSE(phone_util_.IsPossibleNumber(number));
+
+ EXPECT_FALSE(phone_util_.IsPossibleNumberForString("+1 650 253 00000",
+ RegionCode::US()));
+ EXPECT_FALSE(phone_util_.IsPossibleNumberForString("(650) 253-00000",
+ RegionCode::US()));
+ EXPECT_FALSE(phone_util_.IsPossibleNumberForString("I want a Pizza",
+ RegionCode::US()));
+ EXPECT_FALSE(phone_util_.IsPossibleNumberForString("253-000",
+ RegionCode::US()));
+ EXPECT_FALSE(phone_util_.IsPossibleNumberForString("1 3000",
+ RegionCode::GB()));
+ EXPECT_FALSE(phone_util_.IsPossibleNumberForString("+44 300",
+ RegionCode::GB()));
+}
+
+TEST_F(PhoneNumberUtilTest, TruncateTooLongNumber) {
+ // US number 650-253-0000, but entered with one additional digit at the end.
+ PhoneNumber too_long_number;
+ too_long_number.set_country_code(1);
+ too_long_number.set_national_number(65025300001ULL);
+ PhoneNumber valid_number;
+ valid_number.set_country_code(1);
+ valid_number.set_national_number(6502530000ULL);
+ EXPECT_TRUE(phone_util_.TruncateTooLongNumber(&too_long_number));
+ EXPECT_EQ(valid_number, too_long_number);
+
+ // GB number 080 1234 5678, but entered with 4 extra digits at the end.
+ too_long_number.set_country_code(44);
+ too_long_number.set_national_number(80123456780123ULL);
+ valid_number.set_country_code(44);
+ valid_number.set_national_number(8012345678ULL);
+ EXPECT_TRUE(phone_util_.TruncateTooLongNumber(&too_long_number));
+ EXPECT_EQ(valid_number, too_long_number);
+
+ // IT number 022 3456 7890, but entered with 3 extra digits at the end.
+ too_long_number.set_country_code(39);
+ too_long_number.set_national_number(2234567890123ULL);
+ too_long_number.set_italian_leading_zero(true);
+ valid_number.set_country_code(39);
+ valid_number.set_national_number(2234567890ULL);
+ valid_number.set_italian_leading_zero(true);
+ EXPECT_TRUE(phone_util_.TruncateTooLongNumber(&too_long_number));
+ EXPECT_EQ(valid_number, too_long_number);
+
+ // Tests what happens when a valid number is passed in.
+ PhoneNumber valid_number_copy(valid_number);
+ EXPECT_TRUE(phone_util_.TruncateTooLongNumber(&valid_number));
+ // Tests the number is not modified.
+ EXPECT_EQ(valid_number_copy, valid_number);
+
+ // Tests what happens when a number with invalid prefix is passed in.
+ PhoneNumber number_with_invalid_prefix;
+ number_with_invalid_prefix.set_country_code(1);
+ // The test metadata says US numbers cannot have prefix 240.
+ number_with_invalid_prefix.set_national_number(2401234567ULL);
+ PhoneNumber invalid_number_copy(number_with_invalid_prefix);
+ EXPECT_FALSE(phone_util_.TruncateTooLongNumber(&number_with_invalid_prefix));
+ // Tests the number is not modified.
+ EXPECT_EQ(invalid_number_copy, number_with_invalid_prefix);
+
+ // Tests what happens when a too short number is passed in.
+ PhoneNumber too_short_number;
+ too_short_number.set_country_code(1);
+ too_short_number.set_national_number(1234ULL);
+ PhoneNumber too_short_number_copy(too_short_number);
+ EXPECT_FALSE(phone_util_.TruncateTooLongNumber(&too_short_number));
+ // Tests the number is not modified.
+ EXPECT_EQ(too_short_number_copy, too_short_number);
+}
+
+TEST_F(PhoneNumberUtilTest, IsLeadingZeroPossible) {
+ EXPECT_TRUE(IsLeadingZeroPossible(39)); // Italy
+ EXPECT_FALSE(IsLeadingZeroPossible(1)); // USA
+ EXPECT_FALSE(IsLeadingZeroPossible(800)); // Not in metadata file, should
+ // return default value of false.
+}
+
+TEST_F(PhoneNumberUtilTest, FormatUsingOriginalNumberFormat) {
+ PhoneNumber phone_number;
+ string formatted_number;
+
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.ParseAndKeepRawInput("+442087654321", RegionCode::GB(),
+ &phone_number));
+ phone_util_.FormatInOriginalFormat(phone_number, RegionCode::GB(),
+ &formatted_number);
+ EXPECT_EQ("+44 20 8765 4321", formatted_number);
+
+ phone_number.Clear();
+ formatted_number.clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.ParseAndKeepRawInput("02087654321", RegionCode::GB(),
+ &phone_number));
+ phone_util_.FormatInOriginalFormat(phone_number, RegionCode::GB(),
+ &formatted_number);
+ EXPECT_EQ("(020) 8765 4321", formatted_number);
+
+ phone_number.Clear();
+ formatted_number.clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.ParseAndKeepRawInput("011442087654321",
+ RegionCode::US(), &phone_number));
+ phone_util_.FormatInOriginalFormat(phone_number, RegionCode::US(),
+ &formatted_number);
+ EXPECT_EQ("011 44 20 8765 4321", formatted_number);
+
+ phone_number.Clear();
+ formatted_number.clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.ParseAndKeepRawInput("442087654321", RegionCode::GB(),
+ &phone_number));
+ phone_util_.FormatInOriginalFormat(phone_number, RegionCode::GB(),
+ &formatted_number);
+ EXPECT_EQ("44 20 8765 4321", formatted_number);
+
+ phone_number.Clear();
+ formatted_number.clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("+442087654321", RegionCode::GB(),
+ &phone_number));
+ phone_util_.FormatInOriginalFormat(phone_number, RegionCode::GB(),
+ &formatted_number);
+ EXPECT_EQ("(020) 8765 4321", formatted_number);
+}
+
+TEST_F(PhoneNumberUtilTest, IsPremiumRate) {
+ PhoneNumber number;
+ number.set_country_code(1);
+ number.set_national_number(9004433030ULL);
+ EXPECT_EQ(PhoneNumberUtil::PREMIUM_RATE, phone_util_.GetNumberType(number));
+
+ number.set_country_code(39);
+ number.set_national_number(892123ULL);
+ EXPECT_EQ(PhoneNumberUtil::PREMIUM_RATE, phone_util_.GetNumberType(number));
+
+ number.set_country_code(44);
+ number.set_national_number(9187654321ULL);
+ EXPECT_EQ(PhoneNumberUtil::PREMIUM_RATE, phone_util_.GetNumberType(number));
+
+ number.set_country_code(49);
+ number.set_national_number(9001654321ULL);
+ EXPECT_EQ(PhoneNumberUtil::PREMIUM_RATE, phone_util_.GetNumberType(number));
+
+ number.set_country_code(49);
+ number.set_national_number(90091234567ULL);
+ EXPECT_EQ(PhoneNumberUtil::PREMIUM_RATE, phone_util_.GetNumberType(number));
+}
+
+TEST_F(PhoneNumberUtilTest, IsTollFree) {
+ PhoneNumber number;
+ number.set_country_code(1);
+ number.set_national_number(8881234567ULL);
+ EXPECT_EQ(PhoneNumberUtil::TOLL_FREE, phone_util_.GetNumberType(number));
+
+ number.set_country_code(39);
+ number.set_national_number(803123ULL);
+ EXPECT_EQ(PhoneNumberUtil::TOLL_FREE, phone_util_.GetNumberType(number));
+
+ number.set_country_code(44);
+ number.set_national_number(8012345678ULL);
+ EXPECT_EQ(PhoneNumberUtil::TOLL_FREE, phone_util_.GetNumberType(number));
+
+ number.set_country_code(49);
+ number.set_national_number(8001234567ULL);
+ EXPECT_EQ(PhoneNumberUtil::TOLL_FREE, phone_util_.GetNumberType(number));
+}
+
+TEST_F(PhoneNumberUtilTest, IsMobile) {
+ PhoneNumber number;
+ // A Bahama mobile number
+ number.set_country_code(1);
+ number.set_national_number(2423570000ULL);
+ EXPECT_EQ(PhoneNumberUtil::MOBILE, phone_util_.GetNumberType(number));
+
+ number.set_country_code(39);
+ number.set_national_number(312345678ULL);
+ EXPECT_EQ(PhoneNumberUtil::MOBILE, phone_util_.GetNumberType(number));
+
+ number.set_country_code(44);
+ number.set_national_number(7912345678ULL);
+ EXPECT_EQ(PhoneNumberUtil::MOBILE, phone_util_.GetNumberType(number));
+
+ number.set_country_code(49);
+ number.set_national_number(15123456789ULL);
+ EXPECT_EQ(PhoneNumberUtil::MOBILE, phone_util_.GetNumberType(number));
+
+ number.set_country_code(54);
+ number.set_national_number(91187654321ULL);
+ EXPECT_EQ(PhoneNumberUtil::MOBILE, phone_util_.GetNumberType(number));
+}
+
+TEST_F(PhoneNumberUtilTest, IsFixedLine) {
+ PhoneNumber number;
+ // A Bahama fixed-line number
+ number.set_country_code(1);
+ number.set_national_number(2423651234ULL);
+ EXPECT_EQ(PhoneNumberUtil::FIXED_LINE, phone_util_.GetNumberType(number));
+
+ // An Italian fixed-line number
+ number.Clear();
+ number.set_country_code(39);
+ number.set_national_number(236618300ULL);
+ number.set_italian_leading_zero(true);
+ EXPECT_EQ(PhoneNumberUtil::FIXED_LINE, phone_util_.GetNumberType(number));
+
+ number.Clear();
+ number.set_country_code(44);
+ number.set_national_number(2012345678ULL);
+ EXPECT_EQ(PhoneNumberUtil::FIXED_LINE, phone_util_.GetNumberType(number));
+
+ number.set_country_code(49);
+ number.set_national_number(301234ULL);
+ EXPECT_EQ(PhoneNumberUtil::FIXED_LINE, phone_util_.GetNumberType(number));
+}
+
+TEST_F(PhoneNumberUtilTest, IsFixedLineAndMobile) {
+ PhoneNumber number;
+ number.set_country_code(1);
+ number.set_national_number(6502531111ULL);
+ EXPECT_EQ(PhoneNumberUtil::FIXED_LINE_OR_MOBILE,
+ phone_util_.GetNumberType(number));
+
+ number.set_country_code(54);
+ number.set_national_number(1987654321ULL);
+ EXPECT_EQ(PhoneNumberUtil::FIXED_LINE_OR_MOBILE,
+ phone_util_.GetNumberType(number));
+}
+
+TEST_F(PhoneNumberUtilTest, IsSharedCost) {
+ PhoneNumber number;
+ number.set_country_code(44);
+ number.set_national_number(8431231234ULL);
+ EXPECT_EQ(PhoneNumberUtil::SHARED_COST, phone_util_.GetNumberType(number));
+}
+
+TEST_F(PhoneNumberUtilTest, IsVoip) {
+ PhoneNumber number;
+ number.set_country_code(44);
+ number.set_national_number(5631231234ULL);
+ EXPECT_EQ(PhoneNumberUtil::VOIP, phone_util_.GetNumberType(number));
+}
+
+TEST_F(PhoneNumberUtilTest, IsPersonalNumber) {
+ PhoneNumber number;
+ number.set_country_code(44);
+ number.set_national_number(7031231234ULL);
+ EXPECT_EQ(PhoneNumberUtil::PERSONAL_NUMBER,
+ phone_util_.GetNumberType(number));
+}
+
+TEST_F(PhoneNumberUtilTest, IsUnknown) {
+ PhoneNumber number;
+ number.set_country_code(1);
+ number.set_national_number(65025311111ULL);
+ EXPECT_EQ(PhoneNumberUtil::UNKNOWN, phone_util_.GetNumberType(number));
+}
+
+TEST_F(PhoneNumberUtilTest, GetCountryCodeForRegion) {
+ EXPECT_EQ(1, phone_util_.GetCountryCodeForRegion(RegionCode::US()));
+ EXPECT_EQ(64, phone_util_.GetCountryCodeForRegion(RegionCode::NZ()));
+ EXPECT_EQ(0, phone_util_.GetCountryCodeForRegion(RegionCode::ZZ()));
+ // CS is already deprecated so the library doesn't support it.
+ EXPECT_EQ(0, phone_util_.GetCountryCodeForRegion(RegionCode::CS()));
+}
+
+TEST_F(PhoneNumberUtilTest, GetNationalDiallingPrefixForRegion) {
+ string ndd_prefix;
+ GetNddPrefixForRegion(RegionCode::US(), false, &ndd_prefix);
+ EXPECT_EQ("1", ndd_prefix);
+
+ // Test non-main country to see it gets the national dialling prefix for the
+ // main country with that country calling code.
+ GetNddPrefixForRegion(RegionCode::BS(), false, &ndd_prefix);
+ EXPECT_EQ("1", ndd_prefix);
+
+ GetNddPrefixForRegion(RegionCode::NZ(), false, &ndd_prefix);
+ EXPECT_EQ("0", ndd_prefix);
+
+ // Test case with non digit in the national prefix.
+ GetNddPrefixForRegion(RegionCode::AO(), false, &ndd_prefix);
+ EXPECT_EQ("0~0", ndd_prefix);
+
+ GetNddPrefixForRegion(RegionCode::AO(), true, &ndd_prefix);
+ EXPECT_EQ("00", ndd_prefix);
+
+ // Test cases with invalid regions.
+ GetNddPrefixForRegion(RegionCode::ZZ(), false, &ndd_prefix);
+ EXPECT_EQ("", ndd_prefix);
+
+ // CS is already deprecated so the library doesn't support it.
+ GetNddPrefixForRegion(RegionCode::CS(), false, &ndd_prefix);
+ EXPECT_EQ("", ndd_prefix);
+}
+
+TEST_F(PhoneNumberUtilTest, IsViablePhoneNumber) {
+ // Only one or two digits before strange non-possible punctuation.
+ EXPECT_FALSE(IsViablePhoneNumber("12. March"));
+ EXPECT_FALSE(IsViablePhoneNumber("1+1+1"));
+ EXPECT_FALSE(IsViablePhoneNumber("80+0"));
+ EXPECT_FALSE(IsViablePhoneNumber("00"));
+ // Three digits is viable.
+ EXPECT_TRUE(IsViablePhoneNumber("111"));
+ // Alpha numbers.
+ EXPECT_TRUE(IsViablePhoneNumber("0800-4-pizza"));
+ EXPECT_TRUE(IsViablePhoneNumber("0800-4-PIZZA"));
+ // Only one or two digits before possible punctuation followed by more digits.
+ // The punctuation used here is the unicode character u+3000.
+ EXPECT_TRUE(IsViablePhoneNumber("1 34"));
+ EXPECT_FALSE(IsViablePhoneNumber("1 3+4"));
+ // Unicode variants of possible starting character and other allowed
+ // punctuation/digits.
+ EXPECT_TRUE(IsViablePhoneNumber("(1) 3456789"));
+ // Testing a leading + is okay.
+ EXPECT_TRUE(IsViablePhoneNumber("+1) 3456789"));
+}
+
+TEST_F(PhoneNumberUtilTest, NormaliseRemovePunctuation) {
+ string input_number("034-56&+#234");
+ Normalize(&input_number);
+ static const string kExpectedOutput("03456234");
+ EXPECT_EQ(kExpectedOutput, input_number)
+ << "Conversion did not correctly remove punctuation";
+}
+
+TEST_F(PhoneNumberUtilTest, NormaliseReplaceAlphaCharacters) {
+ string input_number("034-I-am-HUNGRY");
+ Normalize(&input_number);
+ static const string kExpectedOutput("034426486479");
+ EXPECT_EQ(kExpectedOutput, input_number)
+ << "Conversion did not correctly replace alpha characters";
+}
+
+TEST_F(PhoneNumberUtilTest, NormaliseOtherDigits) {
+ // The first digit is a full-width 2, the last digit is an Arabic-indic digit
+ // 5.
+ string input_number("25٥");
+ Normalize(&input_number);
+ static const string kExpectedOutput("255");
+ EXPECT_EQ(kExpectedOutput, input_number)
+ << "Conversion did not correctly replace non-latin digits";
+ // The first digit is an Eastern-Arabic 5, the latter an Eastern-Arabic 0.
+ string eastern_arabic_input_number("۵2۰");
+ Normalize(&eastern_arabic_input_number);
+ static const string kExpectedOutput2("520");
+ EXPECT_EQ(kExpectedOutput2, eastern_arabic_input_number)
+ << "Conversion did not correctly replace non-latin digits";
+}
+
+TEST_F(PhoneNumberUtilTest, NormaliseStripAlphaCharacters) {
+ string input_number("034-56&+a#234");
+ phone_util_.NormalizeDigitsOnly(&input_number);
+ static const string kExpectedOutput("03456234");
+ EXPECT_EQ(kExpectedOutput, input_number)
+ << "Conversion did not correctly remove alpha characters";
+}
+
+TEST_F(PhoneNumberUtilTest, MaybeStripInternationalPrefix) {
+ string international_prefix("00[39]");
+ string number_to_strip("0034567700-3898003");
+ // Note the dash is removed as part of the normalization.
+ string stripped_number("45677003898003");
+ EXPECT_EQ(PhoneNumber::FROM_NUMBER_WITH_IDD,
+ MaybeStripInternationalPrefixAndNormalize(international_prefix,
+ &number_to_strip));
+ EXPECT_EQ(stripped_number, number_to_strip)
+ << "The number was not stripped of its international prefix.";
+
+ // Now the number no longer starts with an IDD prefix, so it should now report
+ // FROM_DEFAULT_COUNTRY.
+ EXPECT_EQ(PhoneNumber::FROM_DEFAULT_COUNTRY,
+ MaybeStripInternationalPrefixAndNormalize(international_prefix,
+ &number_to_strip));
+
+ number_to_strip.assign("00945677003898003");
+ EXPECT_EQ(PhoneNumber::FROM_NUMBER_WITH_IDD,
+ MaybeStripInternationalPrefixAndNormalize(international_prefix,
+ &number_to_strip));
+ EXPECT_EQ(stripped_number, number_to_strip)
+ << "The number was not stripped of its international prefix.";
+
+ // Test it works when the international prefix is broken up by spaces.
+ number_to_strip.assign("00 9 45677003898003");
+ EXPECT_EQ(PhoneNumber::FROM_NUMBER_WITH_IDD,
+ MaybeStripInternationalPrefixAndNormalize(international_prefix,
+ &number_to_strip));
+ EXPECT_EQ(stripped_number, number_to_strip)
+ << "The number was not stripped of its international prefix.";
+ // Now the number no longer starts with an IDD prefix, so it should now report
+ // FROM_DEFAULT_COUNTRY.
+ EXPECT_EQ(PhoneNumber::FROM_DEFAULT_COUNTRY,
+ MaybeStripInternationalPrefixAndNormalize(international_prefix,
+ &number_to_strip));
+
+ // Test the + symbol is also recognised and stripped.
+ number_to_strip.assign("+45677003898003");
+ stripped_number.assign("45677003898003");
+ EXPECT_EQ(PhoneNumber::FROM_NUMBER_WITH_PLUS_SIGN,
+ MaybeStripInternationalPrefixAndNormalize(international_prefix,
+ &number_to_strip));
+ EXPECT_EQ(stripped_number, number_to_strip)
+ << "The number supplied was not stripped of the plus symbol.";
+
+ // If the number afterwards is a zero, we should not strip this - no country
+ // code begins with 0.
+ number_to_strip.assign("0090112-3123");
+ stripped_number.assign("00901123123");
+ EXPECT_EQ(PhoneNumber::FROM_DEFAULT_COUNTRY,
+ MaybeStripInternationalPrefixAndNormalize(international_prefix,
+ &number_to_strip));
+ EXPECT_EQ(stripped_number, number_to_strip)
+ << "The number had a 0 after the match so shouldn't be stripped.";
+ // Here the 0 is separated by a space from the IDD.
+ number_to_strip.assign("009 0-112-3123");
+ EXPECT_EQ(PhoneNumber::FROM_DEFAULT_COUNTRY,
+ MaybeStripInternationalPrefixAndNormalize(international_prefix,
+ &number_to_strip));
+}
+
+TEST_F(PhoneNumberUtilTest, MaybeStripNationalPrefixAndCarrierCode) {
+ PhoneMetadata metadata;
+ metadata.set_national_prefix_for_parsing("34");
+ metadata.mutable_general_desc()->set_national_number_pattern("\\d{4,8}");
+ string number_to_strip("34356778");
+ string stripped_number("356778");
+ string carrier_code;
+ MaybeStripNationalPrefixAndCarrierCode(metadata, &number_to_strip,
+ &carrier_code);
+ EXPECT_EQ(stripped_number, number_to_strip)
+ << "Should have had national prefix stripped.";
+ EXPECT_EQ("", carrier_code) << "Should have had no carrier code stripped.";
+ // Retry stripping - now the number should not start with the national prefix,
+ // so no more stripping should occur.
+ MaybeStripNationalPrefixAndCarrierCode(metadata, &number_to_strip,
+ &carrier_code);
+ EXPECT_EQ(stripped_number, number_to_strip)
+ << "Should have had no change - no national prefix present.";
+ // Some countries have no national prefix. Repeat test with none specified.
+ metadata.clear_national_prefix_for_parsing();
+ MaybeStripNationalPrefixAndCarrierCode(metadata, &number_to_strip,
+ &carrier_code);
+ EXPECT_EQ(stripped_number, number_to_strip)
+ << "Should have had no change - empty national prefix.";
+ // If the resultant number doesn't match the national rule, it shouldn't be
+ // stripped.
+ metadata.set_national_prefix_for_parsing("3");
+ number_to_strip.assign("3123");
+ stripped_number.assign("3123");
+ MaybeStripNationalPrefixAndCarrierCode(metadata, &number_to_strip,
+ &carrier_code);
+ EXPECT_EQ(stripped_number, number_to_strip)
+ << "Should have had no change - after stripping, it wouldn't have "
+ << "matched the national rule.";
+ // Test extracting carrier selection code.
+ metadata.set_national_prefix_for_parsing("0(81)?");
+ number_to_strip.assign("08122123456");
+ stripped_number.assign("22123456");
+ MaybeStripNationalPrefixAndCarrierCode(metadata, &number_to_strip,
+ &carrier_code);
+ EXPECT_EQ("81", carrier_code) << "Should have had carrier code stripped.";
+ EXPECT_EQ(stripped_number, number_to_strip)
+ << "Should have had national prefix and carrier code stripped.";
+ // If there was a transform rule, check it was applied.
+ metadata.set_national_prefix_transform_rule("5$15");
+ // Note that a capturing group is present here.
+ metadata.set_national_prefix_for_parsing("0(\\d{2})");
+ number_to_strip.assign("031123");
+ string transformed_number("5315123");
+ MaybeStripNationalPrefixAndCarrierCode(metadata, &number_to_strip,
+ &carrier_code);
+ EXPECT_EQ(transformed_number, number_to_strip)
+ << "Was not successfully transformed.";
+}
+
+TEST_F(PhoneNumberUtilTest, MaybeStripExtension) {
+ // One with extension.
+ string number("1234576 ext. 1234");
+ string extension;
+ string expected_extension("1234");
+ string stripped_number("1234576");
+ EXPECT_TRUE(MaybeStripExtension(&number, &extension));
+ EXPECT_EQ(stripped_number, number);
+ EXPECT_EQ(expected_extension, extension);
+
+ // One without extension.
+ number.assign("1234-576");
+ extension.clear();
+ stripped_number.assign("1234-576");
+ EXPECT_FALSE(MaybeStripExtension(&number, &extension));
+ EXPECT_EQ(stripped_number, number);
+ EXPECT_TRUE(extension.empty());
+
+ // One with an extension caught by the second capturing group in
+ // kKnownExtnPatterns.
+ number.assign("1234576-123#");
+ extension.clear();
+ expected_extension.assign("123");
+ stripped_number.assign("1234576");
+ EXPECT_TRUE(MaybeStripExtension(&number, &extension));
+ EXPECT_EQ(stripped_number, number);
+ EXPECT_EQ(expected_extension, extension);
+
+ number.assign("1234576 ext.123#");
+ extension.clear();
+ EXPECT_TRUE(MaybeStripExtension(&number, &extension));
+ EXPECT_EQ(stripped_number, number);
+ EXPECT_EQ(expected_extension, extension);
+}
+
+TEST_F(PhoneNumberUtilTest, MaybeExtractCountryCode) {
+ PhoneNumber number;
+ const PhoneMetadata* metadata = GetPhoneMetadata(RegionCode::US());
+ // Note that for the US, the IDD is 011.
+ string phone_number("011112-3456789");
+ string stripped_number("123456789");
+ int expected_country_code = 1;
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ MaybeExtractCountryCode(metadata, true, &phone_number, &number));
+ EXPECT_EQ(expected_country_code, number.country_code());
+ EXPECT_EQ(PhoneNumber::FROM_NUMBER_WITH_IDD, number.country_code_source());
+ EXPECT_EQ(stripped_number, phone_number);
+
+ number.Clear();
+ phone_number.assign("+6423456789");
+ stripped_number.assign("23456789");
+ expected_country_code = 64;
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ MaybeExtractCountryCode(metadata, true, &phone_number, &number));
+ EXPECT_EQ(expected_country_code, number.country_code());
+ EXPECT_EQ(PhoneNumber::FROM_NUMBER_WITH_PLUS_SIGN,
+ number.country_code_source());
+ EXPECT_EQ(stripped_number, phone_number);
+
+ // Should not have extracted a country code - no international prefix present.
+ number.Clear();
+ expected_country_code = 0;
+ phone_number.assign("2345-6789");
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ MaybeExtractCountryCode(metadata, true, &phone_number, &number));
+ EXPECT_EQ(expected_country_code, number.country_code());
+ EXPECT_EQ(PhoneNumber::FROM_DEFAULT_COUNTRY, number.country_code_source());
+ EXPECT_EQ(stripped_number, phone_number);
+
+ expected_country_code = 0;
+ phone_number.assign("0119991123456789");
+ stripped_number.assign(phone_number);
+ EXPECT_EQ(PhoneNumberUtil::INVALID_COUNTRY_CODE_ERROR,
+ MaybeExtractCountryCode(metadata, true, &phone_number, &number));
+
+ number.Clear();
+ phone_number.assign("(1 610) 619 4466");
+ stripped_number.assign("6106194466");
+ expected_country_code = 1;
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ MaybeExtractCountryCode(metadata, true, &phone_number, &number));
+ EXPECT_EQ(expected_country_code, number.country_code());
+ EXPECT_EQ(PhoneNumber::FROM_NUMBER_WITHOUT_PLUS_SIGN,
+ number.country_code_source());
+ EXPECT_EQ(stripped_number, phone_number);
+
+ number.Clear();
+ phone_number.assign("(1 610) 619 4466");
+ stripped_number.assign("6106194466");
+ expected_country_code = 1;
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ MaybeExtractCountryCode(metadata, false, &phone_number, &number));
+ EXPECT_EQ(expected_country_code, number.country_code());
+ EXPECT_FALSE(number.has_country_code_source());
+ EXPECT_EQ(stripped_number, phone_number);
+
+ // Should not have extracted a country code - invalid number after extraction
+ // of uncertain country code.
+ number.Clear();
+ phone_number.assign("(1 610) 619 446");
+ stripped_number.assign("1610619446");
+ expected_country_code = 0;
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ MaybeExtractCountryCode(metadata, false, &phone_number, &number));
+ EXPECT_EQ(expected_country_code, number.country_code());
+ EXPECT_FALSE(number.has_country_code_source());
+ EXPECT_EQ(stripped_number, phone_number);
+
+ number.Clear();
+ phone_number.assign("(1 610) 619");
+ stripped_number.assign("1610619");
+ expected_country_code = 0;
+ // Should not have extracted a country code - invalid number both before and
+ // after extraction of uncertain country code.
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ MaybeExtractCountryCode(metadata, true, &phone_number, &number));
+ EXPECT_EQ(expected_country_code, number.country_code());
+ EXPECT_EQ(PhoneNumber::FROM_DEFAULT_COUNTRY, number.country_code_source());
+ EXPECT_EQ(stripped_number, phone_number);
+}
+
+TEST_F(PhoneNumberUtilTest, CountryWithNoNumberDesc) {
+ string formatted_number;
+ // Andorra is a country where we don't have PhoneNumberDesc info in the
+ // metadata.
+ PhoneNumber ad_number;
+ ad_number.set_country_code(376);
+ ad_number.set_national_number(12345ULL);
+ phone_util_.Format(ad_number, PhoneNumberUtil::INTERNATIONAL,
+ &formatted_number);
+ EXPECT_EQ("+376 12345", formatted_number);
+ phone_util_.Format(ad_number, PhoneNumberUtil::E164, &formatted_number);
+ EXPECT_EQ("+37612345", formatted_number);
+ phone_util_.Format(ad_number, PhoneNumberUtil::NATIONAL, &formatted_number);
+ EXPECT_EQ("12345", formatted_number);
+ EXPECT_EQ(PhoneNumberUtil::UNKNOWN, phone_util_.GetNumberType(ad_number));
+ EXPECT_TRUE(phone_util_.IsValidNumber(ad_number));
+
+ // Test dialing a US number from within Andorra.
+ PhoneNumber us_number;
+ us_number.set_country_code(1);
+ us_number.set_national_number(6502530000ULL);
+ phone_util_.FormatOutOfCountryCallingNumber(us_number, RegionCode::AD(),
+ &formatted_number);
+ EXPECT_EQ("00 1 650 253 0000", formatted_number);
+}
+
+TEST_F(PhoneNumberUtilTest, UnknownCountryCallingCodeForValidation) {
+ PhoneNumber invalid_number;
+ invalid_number.set_country_code(0);
+ invalid_number.set_national_number(1234ULL);
+ EXPECT_FALSE(phone_util_.IsValidNumber(invalid_number));
+}
+
+TEST_F(PhoneNumberUtilTest, IsNumberMatchMatches) {
+ // Test simple matches where formatting is different, or leading zeroes, or
+ // country code has been specified.
+ EXPECT_EQ(PhoneNumberUtil::EXACT_MATCH,
+ phone_util_.IsNumberMatchWithTwoStrings("+64 3 331 6005",
+ "+64 03 331 6005"));
+ EXPECT_EQ(PhoneNumberUtil::EXACT_MATCH,
+ phone_util_.IsNumberMatchWithTwoStrings("+64 03 331-6005",
+ "+64 03331 6005"));
+ EXPECT_EQ(PhoneNumberUtil::EXACT_MATCH,
+ phone_util_.IsNumberMatchWithTwoStrings("+643 331-6005",
+ "+64033316005"));
+ EXPECT_EQ(PhoneNumberUtil::EXACT_MATCH,
+ phone_util_.IsNumberMatchWithTwoStrings("+643 331-6005",
+ "+6433316005"));
+ EXPECT_EQ(PhoneNumberUtil::EXACT_MATCH,
+ phone_util_.IsNumberMatchWithTwoStrings("+64 3 331-6005",
+ "+6433316005"));
+ // Test alpha numbers.
+ EXPECT_EQ(PhoneNumberUtil::EXACT_MATCH,
+ phone_util_.IsNumberMatchWithTwoStrings("+1800 siX-Flags",
+ "+1 800 7493 5247"));
+ // Test numbers with extensions.
+ EXPECT_EQ(PhoneNumberUtil::EXACT_MATCH,
+ phone_util_.IsNumberMatchWithTwoStrings("+64 3 331-6005 extn 1234",
+ "+6433316005#1234"));
+ // Test proto buffers.
+ PhoneNumber nz_number;
+ nz_number.set_country_code(64);
+ nz_number.set_national_number(33316005ULL);
+ nz_number.set_extension("3456");
+ EXPECT_EQ(PhoneNumberUtil::EXACT_MATCH,
+ phone_util_.IsNumberMatchWithOneString(nz_number,
+ "+643 331 6005 ext 3456"));
+ nz_number.clear_extension();
+ EXPECT_EQ(PhoneNumberUtil::EXACT_MATCH,
+ phone_util_.IsNumberMatchWithOneString(nz_number,
+ "+643 331 6005"));
+ // Check empty extensions are ignored.
+ nz_number.set_extension("");
+ EXPECT_EQ(PhoneNumberUtil::EXACT_MATCH,
+ phone_util_.IsNumberMatchWithOneString(nz_number,
+ "+643 331 6005"));
+ // Check variant with two proto buffers.
+ PhoneNumber nz_number_2;
+ nz_number_2.set_country_code(64);
+ nz_number_2.set_national_number(33316005ULL);
+ EXPECT_EQ(PhoneNumberUtil::EXACT_MATCH,
+ phone_util_.IsNumberMatch(nz_number, nz_number_2));
+
+ // Check raw_input, country_code_source and preferred_domestic_carrier_code
+ // are ignored.
+ PhoneNumber br_number_1;
+ PhoneNumber br_number_2;
+ br_number_1.set_country_code(55);
+ br_number_1.set_national_number(3121286979ULL);
+ br_number_1.set_country_code_source(PhoneNumber::FROM_NUMBER_WITH_PLUS_SIGN);
+ br_number_1.set_preferred_domestic_carrier_code("12");
+ br_number_1.set_raw_input("012 3121286979");
+ br_number_2.set_country_code(55);
+ br_number_2.set_national_number(3121286979ULL);
+ br_number_2.set_country_code_source(PhoneNumber::FROM_DEFAULT_COUNTRY);
+ br_number_2.set_preferred_domestic_carrier_code("14");
+ br_number_2.set_raw_input("143121286979");
+ EXPECT_EQ(PhoneNumberUtil::EXACT_MATCH,
+ phone_util_.IsNumberMatch(br_number_1, br_number_2));
+}
+
+TEST_F(PhoneNumberUtilTest, IsNumberMatchNonMetches) {
+ // NSN matches.
+ EXPECT_EQ(PhoneNumberUtil::NO_MATCH,
+ phone_util_.IsNumberMatchWithTwoStrings("03 331 6005",
+ "03 331 6006"));
+ // Different country code, partial number match.
+ EXPECT_EQ(PhoneNumberUtil::NO_MATCH,
+ phone_util_.IsNumberMatchWithTwoStrings("+64 3 331-6005",
+ "+16433316005"));
+ // Different country code, same number.
+ EXPECT_EQ(PhoneNumberUtil::NO_MATCH,
+ phone_util_.IsNumberMatchWithTwoStrings("+64 3 331-6005",
+ "+6133316005"));
+ // Extension different, all else the same.
+ EXPECT_EQ(PhoneNumberUtil::NO_MATCH,
+ phone_util_.IsNumberMatchWithTwoStrings("+64 3 331-6005 extn 1234",
+ "+0116433316005#1235"));
+ // NSN matches, but extension is different - not the same number.
+ EXPECT_EQ(PhoneNumberUtil::NO_MATCH,
+ phone_util_.IsNumberMatchWithTwoStrings("+64 3 331-6005 ext.1235",
+ "3 331 6005#1234"));
+ // Invalid numbers that can't be parsed.
+ EXPECT_EQ(PhoneNumberUtil::INVALID_NUMBER,
+ phone_util_.IsNumberMatchWithTwoStrings("43", "3 331 6043"));
+ // Invalid numbers that can't be parsed.
+ EXPECT_EQ(PhoneNumberUtil::INVALID_NUMBER,
+ phone_util_.IsNumberMatchWithTwoStrings("+43", "+64 3 331 6005"));
+ EXPECT_EQ(PhoneNumberUtil::INVALID_NUMBER,
+ phone_util_.IsNumberMatchWithTwoStrings("+43", "64 3 331 6005"));
+ EXPECT_EQ(PhoneNumberUtil::INVALID_NUMBER,
+ phone_util_.IsNumberMatchWithTwoStrings("Dog", "64 3 331 6005"));
+}
+
+TEST_F(PhoneNumberUtilTest, IsNumberMatchNsnMatches) {
+ // NSN matches.
+ EXPECT_EQ(PhoneNumberUtil::NSN_MATCH,
+ phone_util_.IsNumberMatchWithTwoStrings("+64 3 331-6005",
+ "03 331 6005"));
+
+ EXPECT_EQ(PhoneNumberUtil::NSN_MATCH,
+ phone_util_.IsNumberMatchWithTwoStrings("3 331-6005",
+ "03 331 6005"));
+
+ PhoneNumber nz_number;
+ nz_number.set_country_code(64);
+ nz_number.set_national_number(33316005ULL);
+ nz_number.set_extension("");
+ EXPECT_EQ(PhoneNumberUtil::NSN_MATCH,
+ phone_util_.IsNumberMatchWithOneString(nz_number, "03 331 6005"));
+ // Here the second number possibly starts with the country code for New
+ // Zealand, although we are unsure.
+ EXPECT_EQ(PhoneNumberUtil::NSN_MATCH,
+ phone_util_.IsNumberMatchWithOneString(nz_number,
+ "(64-3) 331 6005"));
+
+ // Here, the 1 might be a national prefix, if we compare it to the US number,
+ // so the resultant match is an NSN match.
+ PhoneNumber us_number;
+ us_number.set_country_code(1);
+ us_number.set_national_number(2345678901ULL);
+ EXPECT_EQ(PhoneNumberUtil::NSN_MATCH,
+ phone_util_.IsNumberMatchWithOneString(us_number,
+ "1-234-567-8901"));
+ EXPECT_EQ(PhoneNumberUtil::NSN_MATCH,
+ phone_util_.IsNumberMatchWithOneString(us_number, "2345678901"));
+ EXPECT_EQ(PhoneNumberUtil::NSN_MATCH,
+ phone_util_.IsNumberMatchWithTwoStrings("+1 234-567 8901",
+ "1 234 567 8901"));
+ EXPECT_EQ(PhoneNumberUtil::NSN_MATCH,
+ phone_util_.IsNumberMatchWithTwoStrings("1 234-567 8901",
+ "1 234 567 8901"));
+ EXPECT_EQ(PhoneNumberUtil::NSN_MATCH,
+ phone_util_.IsNumberMatchWithTwoStrings("1 234-567 8901",
+ "+1 234 567 8901"));
+ // For this case, the match will be a short NSN match, because we cannot
+ // assume that the 1 might be a national prefix, so don't remove it when
+ // parsing.
+ PhoneNumber random_number;
+ random_number.set_country_code(41);
+ random_number.set_national_number(2345678901ULL);
+ EXPECT_EQ(PhoneNumberUtil::SHORT_NSN_MATCH,
+ phone_util_.IsNumberMatchWithOneString(random_number,
+ "1-234-567-8901"));
+}
+
+TEST_F(PhoneNumberUtilTest, IsNumberMatchShortNsnMatches) {
+ // Short NSN matches with the country not specified for either one or both
+ // numbers.
+ EXPECT_EQ(PhoneNumberUtil::SHORT_NSN_MATCH,
+ phone_util_.IsNumberMatchWithTwoStrings("+64 3 331-6005",
+ "331 6005"));
+
+ EXPECT_EQ(PhoneNumberUtil::SHORT_NSN_MATCH,
+ phone_util_.IsNumberMatchWithTwoStrings("3 331-6005",
+ "331 6005"));
+
+ EXPECT_EQ(PhoneNumberUtil::SHORT_NSN_MATCH,
+ phone_util_.IsNumberMatchWithTwoStrings("3 331-6005",
+ "+64 331 6005"));
+
+ // Short NSN match with the country specified.
+ EXPECT_EQ(PhoneNumberUtil::SHORT_NSN_MATCH,
+ phone_util_.IsNumberMatchWithTwoStrings("03 331-6005",
+ "331 6005"));
+
+ EXPECT_EQ(PhoneNumberUtil::SHORT_NSN_MATCH,
+ phone_util_.IsNumberMatchWithTwoStrings("1 234 345 6789",
+ "345 6789"));
+
+ EXPECT_EQ(PhoneNumberUtil::SHORT_NSN_MATCH,
+ phone_util_.IsNumberMatchWithTwoStrings("+1 (234) 345 6789",
+ "345 6789"));
+
+ // NSN matches, country code omitted for one number, extension missing for
+ // one.
+ EXPECT_EQ(PhoneNumberUtil::SHORT_NSN_MATCH,
+ phone_util_.IsNumberMatchWithTwoStrings("+64 3 331-6005",
+ "3 331 6005#1234"));
+
+ // One has Italian leading zero, one does not.
+ PhoneNumber it_number_1, it_number_2;
+ it_number_1.set_country_code(39);
+ it_number_1.set_national_number(1234ULL);
+ it_number_1.set_italian_leading_zero(true);
+ it_number_2.set_country_code(39);
+ it_number_2.set_national_number(1234ULL);
+ EXPECT_EQ(PhoneNumberUtil::SHORT_NSN_MATCH,
+ phone_util_.IsNumberMatch(it_number_1, it_number_2));
+
+ // One has an extension, the other has an extension of "".
+ it_number_1.set_extension("1234");
+ it_number_1.clear_italian_leading_zero();
+ it_number_2.set_extension("");
+ EXPECT_EQ(PhoneNumberUtil::SHORT_NSN_MATCH,
+ phone_util_.IsNumberMatch(it_number_1, it_number_2));
+}
+
+TEST_F(PhoneNumberUtilTest, ParseNationalNumber) {
+ PhoneNumber nz_number;
+ nz_number.set_country_code(64);
+ nz_number.set_national_number(33316005ULL);
+ PhoneNumber test_number;
+ // National prefix attached.
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("033316005", RegionCode::NZ(), &test_number));
+ EXPECT_EQ(nz_number, test_number);
+ // National prefix missing.
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("33316005", RegionCode::NZ(), &test_number));
+ EXPECT_EQ(nz_number, test_number);
+ // National prefix attached and some formatting present.
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("03-331 6005", RegionCode::NZ(), &test_number));
+ EXPECT_EQ(nz_number, test_number);
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("03 331 6005", RegionCode::NZ(), &test_number));
+ EXPECT_EQ(nz_number, test_number);
+
+ // Testing international prefixes.
+ // Should strip country code.
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("0064 3 331 6005",
+ RegionCode::NZ(), &test_number));
+ EXPECT_EQ(nz_number, test_number);
+ // Try again, but this time we have an international number with Region Code
+ // US. It should recognise the country code and parse accordingly.
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("01164 3 331 6005",
+ RegionCode::US(), &test_number));
+ EXPECT_EQ(nz_number, test_number);
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("+64 3 331 6005",
+ RegionCode::US(), &test_number));
+ EXPECT_EQ(nz_number, test_number);
+
+ // Test for http://b/issue?id=2247493
+ nz_number.Clear();
+ nz_number.set_country_code(64);
+ nz_number.set_national_number(64123456ULL);
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("+64(0)64123456",
+ RegionCode::US(), &test_number));
+ EXPECT_EQ(nz_number, test_number);
+
+ // Check that using a "/" is fine in a phone number.
+ PhoneNumber de_number;
+ de_number.set_country_code(49);
+ de_number.set_national_number(12345678ULL);
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("123/45678", RegionCode::DE(), &test_number));
+ EXPECT_EQ(de_number, test_number);
+
+ PhoneNumber us_number;
+ us_number.set_country_code(1);
+ // Check it doesn't use the '1' as a country code when parsing if the phone
+ // number was already possible.
+ us_number.set_national_number(1234567890ULL);
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("123-456-7890", RegionCode::US(), &test_number));
+ EXPECT_EQ(us_number, test_number);
+}
+
+TEST_F(PhoneNumberUtilTest, ParseNumberWithAlphaCharacters) {
+ // Test case with alpha characters.
+ PhoneNumber test_number;
+ PhoneNumber tollfree_number;
+ tollfree_number.set_country_code(64);
+ tollfree_number.set_national_number(800332005ULL);
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("0800 DDA 005", RegionCode::NZ(), &test_number));
+ EXPECT_EQ(tollfree_number, test_number);
+
+ test_number.Clear();
+ PhoneNumber premium_number;
+ premium_number.set_country_code(64);
+ premium_number.set_national_number(9003326005ULL);
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("0900 DDA 6005", RegionCode::NZ(), &test_number));
+ EXPECT_EQ(premium_number, test_number);
+
+ // Not enough alpha characters for them to be considered intentional, so they
+ // are stripped.
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("0900 332 6005a",
+ RegionCode::NZ(), &test_number));
+ EXPECT_EQ(premium_number, test_number);
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("0900 332 600a5",
+ RegionCode::NZ(), &test_number));
+ EXPECT_EQ(premium_number, test_number);
+
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("0900 332 600A5",
+ RegionCode::NZ(), &test_number));
+ EXPECT_EQ(premium_number, test_number);
+
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("0900 a332 600A5",
+ RegionCode::NZ(), &test_number));
+ EXPECT_EQ(premium_number, test_number);
+}
+
+TEST_F(PhoneNumberUtilTest, ParseWithInternationalPrefixes) {
+ PhoneNumber us_number;
+ us_number.set_country_code(1);
+ us_number.set_national_number(6503336000ULL);
+ PhoneNumber test_number;
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("+1 (650) 333-6000",
+ RegionCode::US(), &test_number));
+ EXPECT_EQ(us_number, test_number);
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("+1-650-333-6000",
+ RegionCode::US(), &test_number));
+ EXPECT_EQ(us_number, test_number);
+
+ // Calling the US number from Singapore by using different service providers
+ // 1st test: calling using SingTel IDD service (IDD is 001)
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("0011-650-333-6000",
+ RegionCode::SG(), &test_number));
+ EXPECT_EQ(us_number, test_number);
+ // 2nd test: calling using StarHub IDD service (IDD is 008)
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("0081-650-333-6000",
+ RegionCode::SG(), &test_number));
+ EXPECT_EQ(us_number, test_number);
+ // 3rd test: calling using SingTel V019 service (IDD is 019)
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("0191-650-333-6000",
+ RegionCode::SG(), &test_number));
+ EXPECT_EQ(us_number, test_number);
+ // Calling the US number from Poland
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("0~01-650-333-6000",
+ RegionCode::PL(), &test_number));
+ EXPECT_EQ(us_number, test_number);
+
+ // Using "++" at the start.
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("++1 (650) 333-6000",
+ RegionCode::PL(), &test_number));
+ EXPECT_EQ(us_number, test_number);
+ // Using a full-width plus sign.
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("+1 (650) 333-6000",
+ RegionCode::SG(), &test_number));
+ EXPECT_EQ(us_number, test_number);
+ // The whole number, including punctuation, is here represented in full-width
+ // form.
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("+1 (650) 333-6000",
+ RegionCode::SG(), &test_number));
+ EXPECT_EQ(us_number, test_number);
+
+ // Using the U+30FC dash.
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("+1 (650) 333ー6000",
+ RegionCode::SG(), &test_number));
+ EXPECT_EQ(us_number, test_number);
+}
+
+TEST_F(PhoneNumberUtilTest, ParseWithLeadingZero) {
+ PhoneNumber it_number;
+ it_number.set_country_code(39);
+ it_number.set_national_number(236618300ULL);
+ it_number.set_italian_leading_zero(true);
+ PhoneNumber test_number;
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("+39 02-36618 300",
+ RegionCode::NZ(), &test_number));
+ EXPECT_EQ(it_number, test_number);
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("02-36618 300", RegionCode::IT(), &test_number));
+ EXPECT_EQ(it_number, test_number);
+
+ it_number.Clear();
+ it_number.set_country_code(39);
+ it_number.set_national_number(312345678ULL);
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("312 345 678", RegionCode::IT(), &test_number));
+ EXPECT_EQ(it_number, test_number);
+}
+
+TEST_F(PhoneNumberUtilTest, ParseNationalNumberArgentina) {
+ // Test parsing mobile numbers of Argentina.
+ PhoneNumber ar_number;
+ ar_number.set_country_code(54);
+ ar_number.set_national_number(93435551212ULL);
+ PhoneNumber test_number;
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("+54 9 343 555 1212", RegionCode::AR(),
+ &test_number));
+ EXPECT_EQ(ar_number, test_number);
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("0343 15 555 1212", RegionCode::AR(),
+ &test_number));
+ EXPECT_EQ(ar_number, test_number);
+
+ ar_number.set_national_number(93715654320ULL);
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("+54 9 3715 65 4320", RegionCode::AR(),
+ &test_number));
+ EXPECT_EQ(ar_number, test_number);
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("03715 15 65 4320", RegionCode::AR(),
+ &test_number));
+ EXPECT_EQ(ar_number, test_number);
+
+ // Test parsing fixed-line numbers of Argentina.
+ ar_number.set_national_number(1137970000ULL);
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("+54 11 3797 0000", RegionCode::AR(),
+ &test_number));
+ EXPECT_EQ(ar_number, test_number);
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("011 3797 0000", RegionCode::AR(), &test_number));
+ EXPECT_EQ(ar_number, test_number);
+
+ ar_number.set_national_number(3715654321ULL);
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("+54 3715 65 4321", RegionCode::AR(),
+ &test_number));
+ EXPECT_EQ(ar_number, test_number);
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("03715 65 4321", RegionCode::AR(), &test_number));
+ EXPECT_EQ(ar_number, test_number);
+
+ ar_number.set_national_number(2312340000ULL);
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("+54 23 1234 0000", RegionCode::AR(),
+ &test_number));
+ EXPECT_EQ(ar_number, test_number);
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("023 1234 0000", RegionCode::AR(), &test_number));
+ EXPECT_EQ(ar_number, test_number);
+}
+
+TEST_F(PhoneNumberUtilTest, ParseWithXInNumber) {
+ // Test that having an 'x' in the phone number at the start is ok and that it
+ // just gets removed.
+ PhoneNumber ar_number;
+ ar_number.set_country_code(54);
+ ar_number.set_national_number(123456789ULL);
+ PhoneNumber test_number;
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("0123456789", RegionCode::AR(), &test_number));
+ EXPECT_EQ(ar_number, test_number);
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("(0) 123456789", RegionCode::AR(), &test_number));
+ EXPECT_EQ(ar_number, test_number);
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("0 123456789", RegionCode::AR(), &test_number));
+ EXPECT_EQ(ar_number, test_number);
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("(0xx) 123456789", RegionCode::AR(),
+ &test_number));
+ EXPECT_EQ(ar_number, test_number);
+
+ PhoneNumber ar_from_us;
+ ar_from_us.set_country_code(54);
+ ar_from_us.set_national_number(81429712ULL);
+ // This test is intentionally constructed such that the number of digit after
+ // xx is larger than 7, so that the number won't be mistakenly treated as an
+ // extension, as we allow extensions up to 7 digits. This assumption is okay
+ // for now as all the countries where a carrier selection code is written in
+ // the form of xx have a national significant number of length larger than 7.
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("011xx5481429712", RegionCode::US(),
+ &test_number));
+ EXPECT_EQ(ar_from_us, test_number);
+}
+
+TEST_F(PhoneNumberUtilTest, ParseNumbersMexico) {
+ // Test parsing fixed-line numbers of Mexico.
+ PhoneNumber mx_number;
+
+ mx_number.set_country_code(52);
+ mx_number.set_national_number(4499780001ULL);
+ PhoneNumber test_number;
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("+52 (449)978-0001", RegionCode::MX(),
+ &test_number));
+ EXPECT_EQ(mx_number, test_number);
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("01 (449)978-0001", RegionCode::MX(),
+ &test_number));
+ EXPECT_EQ(mx_number, test_number);
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("(449)978-0001", RegionCode::MX(),
+ &test_number));
+ EXPECT_EQ(mx_number, test_number);
+
+ // Test parsing mobile numbers of Mexico.
+ mx_number.Clear();
+ mx_number.set_country_code(52);
+ mx_number.set_national_number(13312345678ULL);
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("+52 1 33 1234-5678", RegionCode::MX(),
+ &test_number));
+ EXPECT_EQ(mx_number, test_number);
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("044 (33) 1234-5678", RegionCode::MX(),
+ &test_number));
+ EXPECT_EQ(mx_number, test_number);
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("045 33 1234-5678", RegionCode::MX(),
+ &test_number));
+ EXPECT_EQ(mx_number, test_number);
+}
+
+TEST_F(PhoneNumberUtilTest, FailedParseOnInvalidNumbers) {
+ PhoneNumber test_number;
+ EXPECT_EQ(PhoneNumberUtil::NOT_A_NUMBER,
+ phone_util_.Parse("This is not a phone number", RegionCode::NZ(),
+ &test_number));
+ EXPECT_EQ(PhoneNumber::default_instance(), test_number);
+
+ EXPECT_EQ(PhoneNumberUtil::TOO_LONG_NSN,
+ phone_util_.Parse("01495 72553301873 810104", RegionCode::GB(),
+ &test_number));
+ EXPECT_EQ(PhoneNumber::default_instance(), test_number);
+
+ EXPECT_EQ(PhoneNumberUtil::TOO_SHORT_NSN,
+ phone_util_.Parse("+49 0", RegionCode::DE(),
+ &test_number));
+ EXPECT_EQ(PhoneNumber::default_instance(), test_number);
+
+ EXPECT_EQ(PhoneNumberUtil::INVALID_COUNTRY_CODE_ERROR,
+ phone_util_.Parse("+210 3456 56789", RegionCode::NZ(),
+ &test_number));
+ EXPECT_EQ(PhoneNumber::default_instance(), test_number);
+
+ EXPECT_EQ(PhoneNumberUtil::INVALID_COUNTRY_CODE_ERROR,
+ phone_util_.Parse("123 456 7890", RegionCode::ZZ(),
+ &test_number));
+ EXPECT_EQ(PhoneNumber::default_instance(), test_number);
+
+ EXPECT_EQ(PhoneNumberUtil::INVALID_COUNTRY_CODE_ERROR,
+ phone_util_.Parse("123 456 7890", RegionCode::CS(),
+ &test_number));
+ EXPECT_EQ(PhoneNumber::default_instance(), test_number);
+
+ EXPECT_EQ(PhoneNumberUtil::TOO_SHORT_AFTER_IDD,
+ phone_util_.Parse("0044-----", RegionCode::GB(),
+ &test_number));
+ EXPECT_EQ(PhoneNumber::default_instance(), test_number);
+ EXPECT_EQ(PhoneNumberUtil::TOO_SHORT_AFTER_IDD,
+ phone_util_.Parse("0044", RegionCode::GB(),
+ &test_number));
+ EXPECT_EQ(PhoneNumber::default_instance(), test_number);
+
+ EXPECT_EQ(PhoneNumberUtil::TOO_SHORT_AFTER_IDD,
+ phone_util_.Parse("011", RegionCode::US(),
+ &test_number));
+ EXPECT_EQ(PhoneNumber::default_instance(), test_number);
+ EXPECT_EQ(PhoneNumberUtil::TOO_SHORT_AFTER_IDD,
+ phone_util_.Parse("0119", RegionCode::US(),
+ &test_number));
+ EXPECT_EQ(PhoneNumber::default_instance(), test_number);
+}
+
+TEST_F(PhoneNumberUtilTest, ParseNumbersWithPlusWithNoRegion) {
+ PhoneNumber nz_number;
+ nz_number.set_country_code(64);
+ nz_number.set_national_number(33316005ULL);
+ // "ZZ" is allowed only if the number starts with a '+' - then
+ // the country code can be calculated.
+ PhoneNumber result_proto;
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("+64 3 331 6005", RegionCode::ZZ(),
+ &result_proto));
+ EXPECT_EQ(nz_number, result_proto);
+
+ // Test with full-width plus.
+ result_proto.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("+64 3 331 6005", RegionCode::ZZ(),
+ &result_proto));
+ EXPECT_EQ(nz_number, result_proto);
+ // Test with normal plus but leading characters that need to be stripped.
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse(" +64 3 331 6005", RegionCode::ZZ(),
+ &result_proto));
+ EXPECT_EQ(nz_number, result_proto);
+
+ nz_number.set_raw_input("+64 3 331 6005");
+ nz_number.set_country_code_source(PhoneNumber::FROM_NUMBER_WITH_PLUS_SIGN);
+ // It is important that we set this to an empty string, since we used
+ // ParseAndKeepRawInput and no carrrier code was found.
+ nz_number.set_preferred_domestic_carrier_code("");
+ result_proto.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.ParseAndKeepRawInput("+64 3 331 6005", RegionCode::ZZ(),
+ &result_proto));
+ EXPECT_EQ(nz_number, result_proto);
+}
+
+TEST_F(PhoneNumberUtilTest, ParseExtensions) {
+ PhoneNumber nz_number;
+ nz_number.set_country_code(64);
+ nz_number.set_national_number(33316005ULL);
+ nz_number.set_extension("3456");
+ PhoneNumber test_number;
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("03 331 6005 ext 3456", RegionCode::NZ(),
+ &test_number));
+ EXPECT_EQ(nz_number, test_number);
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("03 331 6005x3456", RegionCode::NZ(),
+ &test_number));
+ EXPECT_EQ(nz_number, test_number);
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("03-331 6005 int.3456", RegionCode::NZ(),
+ &test_number));
+ EXPECT_EQ(nz_number, test_number);
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("03 331 6005 #3456", RegionCode::NZ(),
+ &test_number));
+ EXPECT_EQ(nz_number, test_number);
+
+ // Test the following do not extract extensions:
+ PhoneNumber non_extn_number;
+ non_extn_number.set_country_code(1);
+ non_extn_number.set_national_number(80074935247ULL);
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("1800 six-flags", RegionCode::US(),
+ &test_number));
+ EXPECT_EQ(non_extn_number, test_number);
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("1800 SIX-FLAGS", RegionCode::US(),
+ &test_number));
+ EXPECT_EQ(non_extn_number, test_number);
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("0~0 1800 7493 5247", RegionCode::PL(),
+ &test_number));
+ EXPECT_EQ(non_extn_number, test_number);
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("(1800) 7493.5247", RegionCode::US(),
+ &test_number));
+ EXPECT_EQ(non_extn_number, test_number);
+
+ // Check that the last instance of an extension token is matched.
+ PhoneNumber extn_number;
+ extn_number.set_country_code(1);
+ extn_number.set_national_number(80074935247ULL);
+ extn_number.set_extension("1234");
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("0~0 1800 7493 5247 ~1234", RegionCode::PL(),
+ &test_number));
+ EXPECT_EQ(extn_number, test_number);
+
+ // Verifying bug-fix where the last digit of a number was previously omitted
+ // if it was a 0 when extracting the extension. Also verifying a few different
+ // cases of extensions.
+ PhoneNumber uk_number;
+ uk_number.set_country_code(44);
+ uk_number.set_national_number(2034567890ULL);
+ uk_number.set_extension("456");
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("+44 2034567890x456", RegionCode::NZ(),
+ &test_number));
+ EXPECT_EQ(uk_number, test_number);
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("+44 2034567890x456", RegionCode::GB(),
+ &test_number));
+ EXPECT_EQ(uk_number, test_number);
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("+44 2034567890 x456", RegionCode::GB(),
+ &test_number));
+ EXPECT_EQ(uk_number, test_number);
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("+44 2034567890 X456", RegionCode::GB(),
+ &test_number));
+ EXPECT_EQ(uk_number, test_number);
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("+44 2034567890 X 456", RegionCode::GB(),
+ &test_number));
+ EXPECT_EQ(uk_number, test_number);
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("+44 2034567890 X 456", RegionCode::GB(),
+ &test_number));
+ EXPECT_EQ(uk_number, test_number);
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("+44 2034567890 x 456 ", RegionCode::GB(),
+ &test_number));
+ EXPECT_EQ(uk_number, test_number);
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("+44 2034567890 X 456", RegionCode::GB(),
+ &test_number));
+ EXPECT_EQ(uk_number, test_number);
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("+44-2034567890;ext=456", RegionCode::GB(),
+ &test_number));
+ EXPECT_EQ(uk_number, test_number);
+
+ PhoneNumber us_with_extension;
+ us_with_extension.set_country_code(1);
+ us_with_extension.set_national_number(8009013355ULL);
+ us_with_extension.set_extension("7246433");
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("(800) 901-3355 x 7246433", RegionCode::US(),
+ &test_number));
+ EXPECT_EQ(us_with_extension, test_number);
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("(800) 901-3355 , ext 7246433", RegionCode::US(),
+ &test_number));
+ EXPECT_EQ(us_with_extension, test_number);
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("(800) 901-3355 ,extension 7246433",
+ RegionCode::US(),
+ &test_number));
+ EXPECT_EQ(us_with_extension, test_number);
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("(800) 901-3355 ,extensión 7246433",
+ RegionCode::US(),
+ &test_number));
+ EXPECT_EQ(us_with_extension, test_number);
+ test_number.Clear();
+ // Repeat with the small letter o with acute accent created by combining
+ // characters.
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("(800) 901-3355 ,extensión 7246433",
+ RegionCode::US(),
+ &test_number));
+ EXPECT_EQ(us_with_extension, test_number);
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("(800) 901-3355 , 7246433", RegionCode::US(),
+ &test_number));
+ EXPECT_EQ(us_with_extension, test_number);
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("(800) 901-3355 ext: 7246433", RegionCode::US(),
+ &test_number));
+ EXPECT_EQ(us_with_extension, test_number);
+
+ // Test that if a number has two extensions specified, we ignore the second.
+ PhoneNumber us_with_two_extensions_number;
+ us_with_two_extensions_number.set_country_code(1);
+ us_with_two_extensions_number.set_national_number(2121231234ULL);
+ us_with_two_extensions_number.set_extension("508");
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("(212)123-1234 x508/x1234", RegionCode::US(),
+ &test_number));
+ EXPECT_EQ(us_with_two_extensions_number, test_number);
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("(212)123-1234 x508/ x1234", RegionCode::US(),
+ &test_number));
+ EXPECT_EQ(us_with_two_extensions_number, test_number);
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("(212)123-1234 x508\\x1234", RegionCode::US(),
+ &test_number));
+ EXPECT_EQ(us_with_two_extensions_number, test_number);
+
+ // Test parsing numbers in the form (645) 123-1234-910# works, where the last
+ // 3 digits before the # are an extension.
+ us_with_extension.Clear();
+ us_with_extension.set_country_code(1);
+ us_with_extension.set_national_number(6451231234ULL);
+ us_with_extension.set_extension("910");
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.Parse("+1 (645) 123 1234-910#", RegionCode::US(),
+ &test_number));
+ EXPECT_EQ(us_with_extension, test_number);
+}
+
+TEST_F(PhoneNumberUtilTest, ParseAndKeepRaw) {
+ PhoneNumber alpha_numeric_number;
+ alpha_numeric_number.set_country_code(1);
+ alpha_numeric_number.set_national_number(80074935247ULL);
+ alpha_numeric_number.set_raw_input("800 six-flags");
+ alpha_numeric_number.set_country_code_source(
+ PhoneNumber::FROM_DEFAULT_COUNTRY);
+ alpha_numeric_number.set_preferred_domestic_carrier_code("");
+
+ PhoneNumber test_number;
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.ParseAndKeepRawInput("800 six-flags", RegionCode::US(),
+ &test_number));
+ EXPECT_EQ(alpha_numeric_number, test_number);
+
+ alpha_numeric_number.set_national_number(8007493524ULL);
+ alpha_numeric_number.set_raw_input("1800 six-flag");
+ alpha_numeric_number.set_country_code_source(
+ PhoneNumber::FROM_NUMBER_WITHOUT_PLUS_SIGN);
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.ParseAndKeepRawInput("1800 six-flag", RegionCode::US(),
+ &test_number));
+ EXPECT_EQ(alpha_numeric_number, test_number);
+
+ alpha_numeric_number.set_raw_input("+1800 six-flag");
+ alpha_numeric_number.set_country_code_source(
+ PhoneNumber::FROM_NUMBER_WITH_PLUS_SIGN);
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.ParseAndKeepRawInput("+1800 six-flag", RegionCode::CN(),
+ &test_number));
+ EXPECT_EQ(alpha_numeric_number, test_number);
+
+ alpha_numeric_number.set_raw_input("001800 six-flag");
+ alpha_numeric_number.set_country_code_source(
+ PhoneNumber::FROM_NUMBER_WITH_IDD);
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.ParseAndKeepRawInput("001800 six-flag",
+ RegionCode::NZ(),
+ &test_number));
+ EXPECT_EQ(alpha_numeric_number, test_number);
+
+ // Try with invalid region - expect failure.
+ test_number.Clear();
+ EXPECT_EQ(PhoneNumberUtil::INVALID_COUNTRY_CODE_ERROR,
+ phone_util_.Parse("123 456 7890", RegionCode::CS(), &test_number));
+ EXPECT_EQ(PhoneNumber::default_instance(), test_number);
+
+ PhoneNumber korean_number;
+ korean_number.set_country_code(82);
+ korean_number.set_national_number(22123456);
+ korean_number.set_raw_input("08122123456");
+ korean_number.set_country_code_source(PhoneNumber::FROM_DEFAULT_COUNTRY);
+ korean_number.set_preferred_domestic_carrier_code("81");
+ EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR,
+ phone_util_.ParseAndKeepRawInput("08122123456",
+ RegionCode::KR(),
+ &test_number));
+ EXPECT_EQ(korean_number, test_number);
+}
+
+TEST_F(PhoneNumberUtilTest, IsAlphaNumber) {
+ static const string kAlphaNumber("1800 six-flags");
+ EXPECT_TRUE(phone_util_.IsAlphaNumber(kAlphaNumber));
+ static const string kAlphaNumberWithExtension = "1800 six-flags ext. 1234";
+ EXPECT_TRUE(phone_util_.IsAlphaNumber(kAlphaNumberWithExtension));
+ static const string kNonAlphaNumber("1800 123-1234");
+ EXPECT_FALSE(phone_util_.IsAlphaNumber(kNonAlphaNumber));
+ static const string kNonAlphaNumberWithExtension(
+ "1800 123-1234 extension: 1234");
+ EXPECT_FALSE(phone_util_.IsAlphaNumber(kNonAlphaNumberWithExtension));
+}
+
+} // namespace phonenumbers
+} // namespace i18n
diff --git a/third_party/libphonenumber/cpp/src/re2_cache.cc b/third_party/libphonenumber/cpp/src/re2_cache.cc
new file mode 100644
index 0000000..1abf95e
--- /dev/null
+++ b/third_party/libphonenumber/cpp/src/re2_cache.cc
@@ -0,0 +1,75 @@
+// Copyright (C) 2011 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// Author: Fredrik Roubert <roubert@google.com>
+
+#include "re2_cache.h"
+
+#include <cstddef>
+#include <string>
+#include <utility>
+
+#include <re2/re2.h>
+
+#include "base/logging.h"
+#include "base/synchronization/lock.h"
+
+using std::string;
+
+// A basic text book string hash function implementation, this one taken from
+// The Practice of Programming (Kernighan and Pike 1999). It could be a good
+// idea in the future to evaluate how well it actually performs and possibly
+// switch to another hash function better suited to this particular use case.
+namespace __gnu_cxx {
+template<> struct hash<string> {
+ enum { MULTIPLIER = 31 };
+ size_t operator()(const string& key) const {
+ size_t h = 0;
+ for (const char* p = key.c_str(); *p != '\0'; ++p) {
+ h *= MULTIPLIER;
+ h += *p;
+ }
+ return h;
+ }
+};
+} // namespace __gnu_cxx
+
+namespace i18n {
+namespace phonenumbers {
+
+RE2Cache::RE2Cache(size_t min_items) : cache_impl_(new CacheImpl(min_items)) {}
+RE2Cache::~RE2Cache() {
+ base::AutoLock l(lock_);
+ LOG(2) << "Cache entries upon destruction: " << cache_impl_->size();
+ for (CacheImpl::const_iterator
+ it = cache_impl_->begin(); it != cache_impl_->end(); ++it) {
+ delete it->second;
+ }
+}
+
+RE2Cache::ScopedAccess::ScopedAccess(RE2Cache* cache, const string& pattern) {
+ DCHECK(cache);
+ base::AutoLock l(cache->lock_);
+ CacheImpl* const cache_impl = cache->cache_impl_.get();
+ CacheImpl::const_iterator it = cache_impl->find(pattern);
+ if (it != cache_impl->end()) {
+ regexp_ = it->second;
+ } else {
+ regexp_ = new RE2(pattern);
+ cache_impl->insert(make_pair(pattern, regexp_));
+ }
+}
+
+} // namespace phonenumbers
+} // namespace i18n
diff --git a/third_party/libphonenumber/cpp/src/re2_cache.h b/third_party/libphonenumber/cpp/src/re2_cache.h
new file mode 100644
index 0000000..ab2e9bb
--- /dev/null
+++ b/third_party/libphonenumber/cpp/src/re2_cache.h
@@ -0,0 +1,83 @@
+// Copyright (C) 2011 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// Author: Fredrik Roubert <roubert@google.com>
+
+// RE2Cache is a simple wrapper around hash_map<> to store RE2 objects.
+//
+// To get a cached RE2 object for a regexp pattern string, create a ScopedAccess
+// object with a pointer to the cache object and the pattern string itself as
+// constructor parameters. If an RE2 object corresponding to the pattern string
+// doesn't already exist, it will be created by the access object constructor.
+// The access object implements operator const RE& and can therefore be passed
+// as an argument to any function that expects an RE2 object.
+//
+// RE2Cache cache;
+// RE2Cache::ScopedAccess foo(&cache, "foo");
+// bool match = RE2::FullMatch("foobar", foo);
+
+#ifndef I18N_PHONENUMBERS_RE2_CACHE_H_
+#define I18N_PHONENUMBERS_RE2_CACHE_H_
+
+#ifdef __DEPRECATED
+#undef __DEPRECATED // Don't warn for using <hash_map>.
+#endif
+
+#include <cstddef>
+#include <hash_map>
+#include <string>
+
+#include "base/scoped_ptr.h"
+#include "base/synchronization/lock.h"
+
+namespace re2 {
+class RE2;
+} // namespace re2
+
+namespace i18n {
+namespace phonenumbers {
+
+using re2::RE2;
+using std::string;
+using __gnu_cxx::hash_map;
+
+class RE2Cache {
+ private:
+ typedef hash_map<string, const RE2*> CacheImpl;
+
+ public:
+ explicit RE2Cache(size_t min_items);
+ ~RE2Cache();
+
+ class ScopedAccess {
+ public:
+ ScopedAccess(RE2Cache* cache, const string& pattern);
+ operator const RE2&() const { return *regexp_; }
+
+ private:
+ const RE2* regexp_;
+ friend class RE2CacheTest_AccessConstructor_Test;
+ };
+
+ private:
+ base::Lock lock_; // protects cache_impl_
+ scoped_ptr<CacheImpl> cache_impl_; // protected by lock_
+ friend class RE2CacheTest_CacheConstructor_Test;
+ friend class RE2CacheTest_AccessConstructor_Test;
+};
+
+} // namespace phonenumbers
+} // namespace i18n
+
+#endif // I18N_PHONENUMBERS_RE2_CACHE_H_
diff --git a/third_party/libphonenumber/cpp/src/re2_cache_test.cc b/third_party/libphonenumber/cpp/src/re2_cache_test.cc
new file mode 100644
index 0000000..70f6c44
--- /dev/null
+++ b/third_party/libphonenumber/cpp/src/re2_cache_test.cc
@@ -0,0 +1,63 @@
+// Copyright (C) 2011 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// Author: Fredrik Roubert <roubert@google.com>
+
+#include <cstddef>
+#include <string>
+
+#include <gtest/gtest.h>
+#include <re2/re2.h>
+
+#include "re2_cache.h"
+
+namespace i18n {
+namespace phonenumbers {
+
+using std::string;
+
+class RE2CacheTest : public testing::Test {
+ protected:
+ static const size_t min_items_ = 2;
+
+ RE2CacheTest() : cache_(min_items_) {}
+ virtual ~RE2CacheTest() {}
+
+ RE2Cache cache_;
+};
+
+TEST_F(RE2CacheTest, CacheConstructor) {
+ ASSERT_TRUE(cache_.cache_impl_ != NULL);
+ EXPECT_TRUE(cache_.cache_impl_->empty());
+}
+
+TEST_F(RE2CacheTest, AccessConstructor) {
+ static const string foo("foo");
+ RE2Cache::ScopedAccess access(&cache_, foo);
+
+ EXPECT_TRUE(access.regexp_ != NULL);
+ ASSERT_TRUE(cache_.cache_impl_ != NULL);
+ EXPECT_EQ(1, cache_.cache_impl_->size());
+}
+
+TEST_F(RE2CacheTest, OperatorRE2) {
+ static const string foo("foo");
+ RE2Cache::ScopedAccess access(&cache_, foo);
+
+ const RE2& regexp = access;
+ EXPECT_EQ(foo, regexp.pattern());
+}
+
+} // namespace phonenumbers
+} // namespace i18n
diff --git a/third_party/libphonenumber/cpp/src/regexp_adapter.h b/third_party/libphonenumber/cpp/src/regexp_adapter.h
new file mode 100644
index 0000000..233adbe
--- /dev/null
+++ b/third_party/libphonenumber/cpp/src/regexp_adapter.h
@@ -0,0 +1,96 @@
+// Copyright (C) 2011 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// Author: George Yakovlev
+
+#ifndef I18N_PHONENUMBERS_REGEXP_ADAPTER_H_
+#define I18N_PHONENUMBERS_REGEXP_ADAPTER_H_
+
+#include <string>
+
+// Regexp adapter to allow pluggable regexp engine, as it is external to
+// libphonenumber.
+
+namespace reg_exp {
+
+// The reg exp input class.
+// It supports only functions used in phonelibrary.
+class RegularExpressionInput {
+ public:
+ virtual ~RegularExpressionInput() {};
+
+ // Matches string to regular expression, returns true if expression was
+ // matched, false otherwise, advances position in the match.
+ // |reg_exp| - expression to be matched.
+ // |beginning_only| - if true match would be successfull only if appears at
+ // the beginning of the tested region of the string.
+ // |matched_string1| - successfully matched first string. Can be NULL.
+ // |matched_string2| - successfully matched second string. Can be NULL.
+ virtual bool ConsumeRegExp(std::string const& reg_exp,
+ bool beginning_only,
+ std::string* matched_string1,
+ std::string* matched_string2) = 0;
+ // Convert unmatched input to a string.
+ virtual std::string ToString() const = 0;
+};
+
+// The regular expression class.
+// It supports only functions used in phonelibrary.
+class RegularExpression {
+ public:
+ RegularExpression() {}
+ virtual ~RegularExpression() {}
+
+ // Matches string to regular expression, returns true if expression was
+ // matched, false otherwise, advances position in the match.
+ // |input_string| - string to be searched.
+ // |beginning_only| - if true match would be successfull only if appears at
+ // the beginning of the tested region of the string.
+ // |matched_string1| - successfully matched first string. Can be NULL.
+ // |matched_string2| - successfully matched second string. Can be NULL.
+ // |matched_string3| - successfully matched third string. Can be NULL.
+ virtual bool Consume(RegularExpressionInput* input_string,
+ bool beginning_only,
+ std::string* matched_string1 = NULL,
+ std::string* matched_string2 = NULL,
+ std::string* matched_string3 = NULL) const = 0;
+
+
+ // Matches string to regular expression, returns true if expression was
+ // matched, false otherwise.
+ // |input_string| - string to be searched.
+ // |full_match| - if true match would be successfull only if it matches the
+ // complete string.
+ // |matched_string| - successfully matched string. Can be NULL.
+ virtual bool Match(const char* input_string,
+ bool full_match,
+ std::string* matched_string) const = 0;
+
+ // Replaces match(es) in the |string_to_process|. if |global| is true,
+ // replaces all the matches, only the first match otherwise.
+ // |replacement_string| - text the matches are replaced with.
+ // Returns true if expression successfully processed through the string,
+ // even if no actual replacements were made. Returns false in case of an
+ // error.
+ virtual bool Replace(std::string* string_to_process,
+ bool global,
+ const char* replacement_string) const = 0;
+};
+
+RegularExpressionInput* CreateRegularExpressionInput(const char* utf8_input);
+RegularExpression* CreateRegularExpression(const char* utf8_regexp);
+
+} // namespace reg_exp
+
+#endif // I18N_PHONENUMBERS_REGEXP_ADAPTER_H_
diff --git a/third_party/libphonenumber/cpp/src/regexp_adapter_re2.cc b/third_party/libphonenumber/cpp/src/regexp_adapter_re2.cc
new file mode 100644
index 0000000..f7a230c
--- /dev/null
+++ b/third_party/libphonenumber/cpp/src/regexp_adapter_re2.cc
@@ -0,0 +1,192 @@
+// Copyright (C) 2011 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// Author: George Yakovlev
+#include "regexp_adapter.h"
+
+#include <re2/re2.h>
+#include <re2/stringpiece.h>
+#include <re2/re2.h>
+
+namespace {
+scoped_ptr<RE2Cache> re2_cache;
+} // namespace
+
+class RE2RegularExpressionInput : public RegularExpressionInput {
+ public:
+ RE2RegularExpressionInput(const char* utf8_input);
+
+ virtual bool ConsumeRegExp(std::string const& reg_exp,
+ bool beginning_only,
+ std::string* matched_string1,
+ std::string* matched_string2);
+ virtual std::string ToString() const;
+ private:
+ StringPiece utf8_input_;
+};
+
+
+class RE2RegularExpression : public reg_exp::RegularExpression {
+ public:
+ RE2RegularExpression(const char* utf8_regexp);
+
+ virtual bool Consume(reg_exp::RegularExpressionInput* input_string,
+ bool beginning_only,
+ std::string* matched_string1,
+ std::string* matched_string2,
+ std::string* matched_string3) const;
+
+ virtual bool Match(const char* input_string,
+ bool full_match,
+ std::string* matched_string) const;
+
+ virtual bool Replace(std::string* string_to_process,
+ bool global,
+ const char* replacement_string) const;
+ private:
+ RE2 utf8_regexp_;
+};
+
+RE2RegularExpressionInput::RE2RegularExpressionInput(const char* utf8_input)
+ : utf8_input_(utf8_input) {
+ DCHECK(utf8_input);
+}
+
+bool RE2RegularExpressionInput::ConsumeRegExp(std::string const& reg_exp,
+ bool beginning_only,
+ std::string* matched_string1,
+ std::string* matched_string2) {
+ if (beginning_only) {
+ if (matched_string2)
+ return RE2::Consume(&utf8_input_,
+ RE2Cache::ScopedAccess(re2_cache.get(), reg_exp),
+ matched_string1, matched_string2);
+ else if (matched_string1)
+ return RE2::Consume(&utf8_input_,
+ RE2Cache::ScopedAccess(re2_cache.get(), reg_exp),
+ matched_string1);
+ else
+ return RE2::Consume(&utf8_input_,
+ RE2Cache::ScopedAccess(re2_cache.get(), reg_exp));
+ } else {
+ if (matched_string2)
+ return RE2::FindAndConsume(&utf8_input_,
+ RE2Cache::ScopedAccess(re2_cache.get(),
+ reg_exp),
+ matched_string1, matched_string2);
+ else if (matched_string1)
+ return RE2::FindAndConsume(&utf8_input_,
+ RE2Cache::ScopedAccess(re2_cache.get(),
+ reg_exp),
+ matched_string1);
+ else
+ return RE2::FindAndConsume(&utf8_input_,
+ RE2Cache::ScopedAccess(re2_cache.get(),
+ reg_exp));
+ }
+}
+
+std::string RE2RegularExpressionInput::ToString() const {
+ utf8_input_.ToString();
+}
+
+RE2RegularExpression::RE2RegularExpression(const char* utf8_regexp)
+ : utf8_regexp_(utf8_regexp) {
+ DCHECK(utf8_regexp);
+}
+
+bool RE2RegularExpression::Consume(RegularExpressionInput* input_string,
+ bool beginning_only,
+ std::string* matched_string1,
+ std::string* matched_string2,
+ std::string* matched_string3) const {
+ DCHECK(input_string);
+ // matched_string1 may be NULL
+ // matched_string2 may be NULL
+ if (beginning_only) {
+ if (matched_string3) {
+ return RE2::Consume(input_string, utf8_regexp_,
+ matched_string1, matched_string2, matched_string3);
+ } else if (matched_string2) {
+ return RE2::Consume(input_string, utf8_regexp_,
+ matched_string1, matched_string2);
+ } else if (matched_string1) {
+ return RE2::Consume(input_string, utf8_regexp_, matched_string1);
+ } else {
+ return RE2::Consume(input_string, utf8_regexp_);
+ }
+ } else {
+ if (matched_string3) {
+ return RE2::FindAndConsume(input_string, utf8_regexp_,
+ matched_string1, matched_string2,
+ matched_string3);
+ } else if (matched_string2) {
+ return RE2::FindAndConsume(input_string, utf8_regexp_,
+ matched_string1, matched_string2);
+ } else if (matched_string1) {
+ return RE2::FindAndConsume(input_string, utf8_regexp_, matched_string1);
+ } else {
+ return RE2::FindAndConsume(input_string, utf8_regexp_);
+ }
+ }
+}
+
+bool RE2RegularExpression::Match(const char* input_string,
+ bool full_match,
+ std::string* matched_string) const {
+ DCHECK(input_string);
+ // matched_string may be NULL
+ if (full_match) {
+ if (matched_string)
+ return RE2::FullMatch(input_string, matched_string);
+ else
+ return RE2::FullMatch(input_string);
+ } else {
+ if (matched_string)
+ return RE2::PartialMatch(input_string, matched_string);
+ else
+ return RE2::PartialMatch(input_string);
+ }
+}
+
+bool RE2RegularExpression::Replace(std::string* string_to_process,
+ bool global,
+ const char* replacement_string) const {
+ DCHECK(string_to_process);
+ DCHECK(replacement_string);
+ if (global) {
+ StringPiece str(replacement_string);
+ return RE2::GlobalReplace(string_to_process, str);
+ } else {
+ return RE2::Replace(string_to_process, replacement_string);
+ }
+}
+
+
+namespace reg_exp {
+
+RegularExpressionInput* CreateRegularExpressionInput(const char* utf8_input) {
+ if (!re2_cache.get())
+ re2_cache.reset(new RE2Cache(64));
+ return new RE2RegularExpressionInput(utf8_input);
+}
+
+RegularExpression* CreateRegularExpression(const char* utf8_regexp) {
+ if (!re2_cache.get())
+ re2_cache.reset(new RE2Cache(64));
+ return new RE2RegularExpression(utf8_regexp);
+}
+
+} // namespace reg_exp
+
diff --git a/third_party/libphonenumber/cpp/src/regexp_adapter_unittest.cc b/third_party/libphonenumber/cpp/src/regexp_adapter_unittest.cc
new file mode 100644
index 0000000..446f83c
--- /dev/null
+++ b/third_party/libphonenumber/cpp/src/regexp_adapter_unittest.cc
@@ -0,0 +1,142 @@
+// Copyright (C) 2011 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// Author: George Yakovlev
+#include <gtest/gtest.h>
+
+#include "base/scoped_ptr.h"
+#include "regexp_adapter.h"
+
+namespace reg_exp {
+
+TEST(RegExpAdapter, TestConsumeRegExp) {
+ scoped_ptr<const reg_exp::RegularExpression> reg_exp1(
+ reg_exp::CreateRegularExpression("[0-9a-z]+"));
+ scoped_ptr<const reg_exp::RegularExpression> reg_exp2(
+ reg_exp::CreateRegularExpression(" \\(([0-9a-z]+)\\)"));
+ scoped_ptr<const reg_exp::RegularExpression> reg_exp3(
+ reg_exp::CreateRegularExpression("([0-9a-z]+)-([0-9a-z]+)"));
+
+ scoped_ptr<reg_exp::RegularExpressionInput> reg_input1(
+ reg_exp::CreateRegularExpressionInput("+1-123-456-789"));
+ scoped_ptr<reg_exp::RegularExpressionInput> reg_input2(
+ reg_exp::CreateRegularExpressionInput("1 (123)456-789"));
+
+ EXPECT_FALSE(reg_exp1->Consume(reg_input1.get(), true, NULL, NULL));
+ EXPECT_EQ(reg_input1->ToString(), "+1-123-456-789");
+ EXPECT_TRUE(reg_exp1->Consume(reg_input1.get(), false, NULL, NULL));
+ EXPECT_EQ(reg_input1->ToString(), "-123-456-789");
+ std::string res1, res2;
+ EXPECT_FALSE(reg_exp2->Consume(reg_input1.get(), true, &res1, NULL));
+ EXPECT_FALSE(reg_exp3->Consume(reg_input1.get(), true, &res1, &res2));
+ EXPECT_TRUE(reg_exp3->Consume(reg_input1.get(), false, &res1, &res2));
+ EXPECT_EQ(reg_input1->ToString(), "-789");
+ EXPECT_EQ(res1, "123");
+ EXPECT_EQ(res2, "456");
+
+ EXPECT_EQ(reg_input2->ToString(), "1 (123)456-789");
+ EXPECT_TRUE(reg_exp1->Consume(reg_input2.get(), true, NULL, NULL));
+ EXPECT_EQ(reg_input2->ToString(), " (123)456-789");
+ EXPECT_TRUE(reg_exp2->Consume(reg_input2.get(), true, &res1, NULL));
+ EXPECT_EQ(reg_input2->ToString(), "456-789");
+ EXPECT_EQ(res1, "123");
+ EXPECT_TRUE(reg_exp3->Consume(reg_input2.get(), true, &res1, &res2));
+ EXPECT_EQ(reg_input2->ToString(), "");
+ EXPECT_EQ(res1, "456");
+ EXPECT_EQ(res2, "789");
+}
+
+TEST(RegExpAdapter, TestConsumeInput) {
+ scoped_ptr<reg_exp::RegularExpressionInput> reg_input(
+ reg_exp::CreateRegularExpressionInput("1 (123)456-789"));
+ std::string res1, res2;
+ EXPECT_EQ(reg_input->ToString(), "1 (123)456-789");
+ EXPECT_FALSE(reg_input->ConsumeRegExp(std::string("\\[1\\]"),
+ true,
+ &res1,
+ &res2));
+ EXPECT_EQ(reg_input->ToString(), "1 (123)456-789");
+ EXPECT_FALSE(reg_input->ConsumeRegExp(std::string("([0-9]+) \\([0-9]+\\)"),
+ true,
+ &res1,
+ &res2));
+ EXPECT_EQ(reg_input->ToString(), "1 (123)456-789");
+ EXPECT_TRUE(reg_input->ConsumeRegExp(std::string("([0-9]+) \\(([0-9]+)\\)"),
+ true,
+ &res1,
+ &res2));
+ EXPECT_EQ(reg_input->ToString(), "456-789");
+ EXPECT_EQ(res1, "1");
+ EXPECT_EQ(res2, "123");
+}
+
+TEST(RegExpAdapter, TestMatch) {
+ scoped_ptr<const reg_exp::RegularExpression> reg_exp(
+ reg_exp::CreateRegularExpression("([0-9a-z]+)"));
+ std::string matched;
+ EXPECT_TRUE(reg_exp->Match("12345af", true, &matched));
+ EXPECT_EQ(matched, "12345af");
+ EXPECT_TRUE(reg_exp->Match("12345af", false, &matched));
+ EXPECT_EQ(matched, "12345af");
+ EXPECT_TRUE(reg_exp->Match("12345af", false, NULL));
+ EXPECT_TRUE(reg_exp->Match("12345af", true, NULL));
+
+ EXPECT_FALSE(reg_exp->Match("[12]", true, &matched));
+ EXPECT_TRUE(reg_exp->Match("[12]", false, &matched));
+ EXPECT_EQ(matched, "12");
+
+ EXPECT_FALSE(reg_exp->Match("[]", true, &matched));
+ EXPECT_FALSE(reg_exp->Match("[]", false, &matched));
+}
+
+TEST(RegExpAdapter, TestReplace) {
+ scoped_ptr<const reg_exp::RegularExpression> reg_exp(
+ reg_exp::CreateRegularExpression("[0-9]"));
+
+ std::string s("123-4567 ");
+ EXPECT_TRUE(reg_exp->Replace(&s, false, "+"));
+ EXPECT_EQ(s, "+23-4567 ");
+ EXPECT_TRUE(reg_exp->Replace(&s, false, "+"));
+ EXPECT_EQ(s, "++3-4567 ");
+ EXPECT_TRUE(reg_exp->Replace(&s, true, "*"));
+ EXPECT_EQ(s, "++*-**** ");
+ EXPECT_TRUE(reg_exp->Replace(&s, true, "*"));
+ EXPECT_EQ(s, "++*-**** ");
+
+ scoped_ptr<const reg_exp::RegularExpression> full_number_expr(
+ reg_exp::CreateRegularExpression("(\\d{3})(\\d{3})(\\d{4})"));
+ s = "1234567890:0987654321";
+ EXPECT_TRUE(full_number_expr->Replace(&s, true, "(\\1) \\2-\\3$1"));
+ EXPECT_EQ(s, "(123) 456-7890$1:(098) 765-4321$1");
+}
+
+TEST(RegExpAdapter, TestUtf8) {
+ // Expression: <tel symbol><opening square bracket>[<alpha>-<omega>]*
+ // <closing square bracket>
+ scoped_ptr<const reg_exp::RegularExpression> reg_exp(
+ reg_exp::CreateRegularExpression(
+ "\xe2\x84\xa1\xe2\x8a\x8f([\xce\xb1-\xcf\x89]*)\xe2\x8a\x90"));
+ std::string matched;
+ // The string is split to avoid problem with MSVC compiler when it thinks
+ // 123 is a part of character code.
+ EXPECT_FALSE(reg_exp->Match("\xe2\x84\xa1\xe2\x8a\x8f" "123\xe2\x8a\x90",
+ true, &matched));
+ EXPECT_TRUE(reg_exp->Match(
+ "\xe2\x84\xa1\xe2\x8a\x8f\xce\xb1\xce\xb2\xe2\x8a\x90", true, &matched));
+ // <alpha><betha>
+ EXPECT_EQ(matched, "\xce\xb1\xce\xb2");
+}
+
+} // namespace reg_exp
+
diff --git a/third_party/libphonenumber/cpp/src/run_tests.cc b/third_party/libphonenumber/cpp/src/run_tests.cc
new file mode 100644
index 0000000..b38e7bc
--- /dev/null
+++ b/third_party/libphonenumber/cpp/src/run_tests.cc
@@ -0,0 +1,7 @@
+#include <gtest/gtest.h>
+
+int main(int argc, char** argv) {
+ ::testing::InitGoogleTest(&argc, argv);
+
+ return RUN_ALL_TESTS();
+}
diff --git a/third_party/libphonenumber/cpp/src/stringutil.cc b/third_party/libphonenumber/cpp/src/stringutil.cc
new file mode 100644
index 0000000..70ec010
--- /dev/null
+++ b/third_party/libphonenumber/cpp/src/stringutil.cc
@@ -0,0 +1,273 @@
+// Copyright (C) 2011 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// Author: Philippe Liard
+
+#include <cassert>
+#include <cstring>
+#include <sstream>
+
+#include "stringutil.h"
+
+namespace i18n {
+namespace phonenumbers {
+
+using std::stringstream;
+
+string operator+(const string& s, int n) {
+ stringstream stream;
+
+ stream << s << n;
+ string result;
+ stream >> result;
+
+ return result;
+}
+
+template <typename T>
+string GenericSimpleItoa(const T& n) {
+ stringstream stream;
+
+ stream << n;
+ string result;
+ stream >> result;
+
+ return result;
+}
+
+string SimpleItoa(int n) {
+ return GenericSimpleItoa(n);
+}
+
+string SimpleItoa(uint64 n) {
+ return GenericSimpleItoa(n);
+}
+
+void StripString(string* s, const char* remove, char replacewith) {
+ const char* str_start = s->c_str();
+ const char* str = str_start;
+ for (str = strpbrk(str, remove);
+ str != NULL;
+ str = strpbrk(str + 1, remove)) {
+ (*s)[str - str_start] = replacewith;
+ }
+}
+
+bool TryStripPrefixString(const string& in, const string& prefix, string* out) {
+ assert(out);
+ const bool has_prefix = in.compare(0, prefix.length(), prefix) == 0;
+ out->assign(has_prefix ? in.substr(prefix.length()) : in);
+
+ return has_prefix;
+}
+
+bool HasSuffixString(const string& s, const string& suffix) {
+ if (s.length() < suffix.length()) {
+ return false;
+ }
+ return s.compare(s.length() - suffix.length(), suffix.length(), suffix) == 0;
+}
+
+template <typename T>
+void GenericAtoi(const string& s, T* out) {
+ stringstream stream;
+ stream << s;
+ stream >> *out;
+}
+
+void safe_strto32(const string& s, int32 *n) {
+ GenericAtoi(s, n);
+}
+
+void safe_strtou64(const string& s, uint64 *n) {
+ GenericAtoi(s, n);
+}
+
+void strrmm(string* s, const string& chars) {
+ for (string::iterator it = s->begin(); it != s->end(); ) {
+ const char current_char = *it;
+ if (chars.find(current_char) != string::npos) {
+ it = s->erase(it);
+ } else {
+ ++it;
+ }
+ }
+}
+
+// StringHolder class
+
+StringHolder::StringHolder(const string& s) :
+ string_(&s),
+ cstring_(NULL),
+ len_(s.size())
+{}
+
+StringHolder::StringHolder(const char* s) :
+ string_(NULL),
+ cstring_(s),
+ len_(std::strlen(s))
+{}
+
+StringHolder::StringHolder(uint64 n) :
+ converted_string_(SimpleItoa(n)),
+ string_(&converted_string_),
+ cstring_(NULL),
+ len_(converted_string_.length())
+{}
+
+StringHolder::~StringHolder() {}
+
+// StrCat
+
+// Implements s += sh; (s: string, sh: StringHolder)
+string& operator+=(string& lhs, const StringHolder& rhs) {
+ const string* const s = rhs.GetString();
+ if (s) {
+ lhs += *s;
+ } else {
+ const char* const cs = rhs.GetCString();
+ if (cs)
+ lhs.append(cs, rhs.Length());
+ }
+ return lhs;
+}
+
+string StrCat(const StringHolder& s1, const StringHolder& s2) {
+ string result;
+ result.reserve(s1.Length() + s2.Length() + 1);
+
+ result += s1;
+ result += s2;
+
+ return result;
+}
+
+string StrCat(const StringHolder& s1, const StringHolder& s2,
+ const StringHolder& s3) {
+ string result;
+ result.reserve(s1.Length() + s2.Length() + s3.Length() + 1);
+
+ result += s1;
+ result += s2;
+ result += s3;
+
+ return result;
+}
+
+string StrCat(const StringHolder& s1, const StringHolder& s2,
+ const StringHolder& s3, const StringHolder& s4) {
+ string result;
+ result.reserve(s1.Length() + s2.Length() + s3.Length() + s4.Length() + 1);
+
+ result += s1;
+ result += s2;
+ result += s3;
+ result += s4;
+
+ return result;
+}
+
+string StrCat(const StringHolder& s1, const StringHolder& s2,
+ const StringHolder& s3, const StringHolder& s4,
+ const StringHolder& s5) {
+ string result;
+ result.reserve(s1.Length() + s2.Length() + s3.Length() + s4.Length() +
+ s5.Length() + 1);
+ result += s1;
+ result += s2;
+ result += s3;
+ result += s4;
+ result += s5;
+
+ return result;
+}
+
+string StrCat(const StringHolder& s1, const StringHolder& s2,
+ const StringHolder& s3, const StringHolder& s4,
+ const StringHolder& s5, const StringHolder& s6) {
+ string result;
+ result.reserve(s1.Length() + s2.Length() + s3.Length() + s4.Length() +
+ s5.Length() + s6.Length() + 1);
+ result += s1;
+ result += s2;
+ result += s3;
+ result += s4;
+ result += s5;
+ result += s6;
+
+ return result;
+}
+
+string StrCat(const StringHolder& s1, const StringHolder& s2,
+ const StringHolder& s3, const StringHolder& s4,
+ const StringHolder& s5, const StringHolder& s6,
+ const StringHolder& s7) {
+ string result;
+ result.reserve(s1.Length() + s2.Length() + s3.Length() + s4.Length() +
+ s5.Length() + s6.Length() + s7.Length() + 1);
+ result += s1;
+ result += s2;
+ result += s3;
+ result += s4;
+ result += s5;
+ result += s6;
+ result += s7;
+
+ return result;
+}
+
+string StrCat(const StringHolder& s1, const StringHolder& s2,
+ const StringHolder& s3, const StringHolder& s4,
+ const StringHolder& s5, const StringHolder& s6,
+ const StringHolder& s7, const StringHolder& s8,
+ const StringHolder& s9, const StringHolder& s10,
+ const StringHolder& s11) {
+ string result;
+ result.reserve(s1.Length() + s2.Length() + s3.Length() + s4.Length() +
+ s5.Length() + s6.Length() + s7.Length() + s8.Length() +
+ s9.Length() + s10.Length() + s11.Length());
+ result += s1;
+ result += s2;
+ result += s3;
+ result += s4;
+ result += s5;
+ result += s6;
+ result += s7;
+ result += s8;
+ result += s9;
+ result += s10;
+ result += s11;
+
+ return result;
+}
+
+// StrAppend
+
+void StrAppend(string* dest, const StringHolder& s1) {
+ assert(dest);
+
+ dest->reserve(dest->length() + s1.Length() + 1);
+ *dest += s1;
+}
+
+void StrAppend(string* dest, const StringHolder& s1, const StringHolder& s2) {
+ assert(dest);
+
+ dest->reserve(dest->length() + s1.Length() + s2.Length() + 1);
+ *dest += s1;
+ *dest += s2;
+}
+
+} // namespace phonenumbers
+} // namespace i18n
diff --git a/third_party/libphonenumber/cpp/src/stringutil.h b/third_party/libphonenumber/cpp/src/stringutil.h
new file mode 100644
index 0000000..a9ba6fc
--- /dev/null
+++ b/third_party/libphonenumber/cpp/src/stringutil.h
@@ -0,0 +1,125 @@
+// Copyright (C) 2011 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// Author: Philippe Liard
+
+#ifndef I18N_PHONENUMBERS_STRINGUTIL_H_
+#define I18N_PHONENUMBERS_STRINGUTIL_H_
+
+#include <cstddef>
+#include <string>
+
+#include "base/basictypes.h"
+
+namespace i18n {
+namespace phonenumbers {
+
+using std::string;
+
+// Supports string("hello") + 10.
+string operator+(const string& s, int n);
+
+// Converts integer to string.
+string SimpleItoa(uint64 n);
+string SimpleItoa(int n);
+
+// Replaces any occurrence of the character 'remove' (or the characters
+// in 'remove') with the character 'replacewith'.
+void StripString(string* s, const char* remove, char replacewith);
+
+// Returns true if 'in' starts with 'prefix' and writes 'in' minus 'prefix' into
+// 'out'.
+bool TryStripPrefixString(const string& in, const string& prefix, string* out);
+
+// Returns true if 's' ends with 'suffix'.
+bool HasSuffixString(const string& s, const string& suffix);
+
+// Converts string to int32.
+void safe_strto32(const string& s, int32 *n);
+
+// Converts string to uint64.
+void safe_strtou64(const string& s, uint64 *n);
+
+// Remove all occurrences of a given set of characters from a string.
+void strrmm(string* s, const string& chars);
+
+// Holds a reference to a std::string or C string. It can also be constructed
+// from an integer which is converted to a string.
+class StringHolder {
+public:
+ // Don't make the constructors explicit to make the StrCat usage convenient.
+ StringHolder(const string& s);
+ StringHolder(const char* s);
+ StringHolder(uint64 n);
+ ~StringHolder();
+
+ const string* GetString() const {
+ return string_;
+ }
+
+ const char* GetCString() const {
+ return cstring_;
+ }
+
+ size_t Length() const {
+ return len_;
+ }
+
+private:
+ const string converted_string_; // Stores the string converted from integer.
+ const string* const string_;
+ const char* const cstring_;
+ const size_t len_;
+};
+
+string& operator+=(string& lhs, const StringHolder& rhs);
+
+// Efficient string concatenation.
+
+string StrCat(const StringHolder& s1, const StringHolder& s2);
+
+string StrCat(const StringHolder& s1, const StringHolder& s2,
+ const StringHolder& s3);
+
+string StrCat(const StringHolder& s1, const StringHolder& s2,
+ const StringHolder& s3, const StringHolder& s4);
+
+string StrCat(const StringHolder& s1, const StringHolder& s2,
+ const StringHolder& s3, const StringHolder& s4,
+ const StringHolder& s5);
+
+string StrCat(const StringHolder& s1, const StringHolder& s2,
+ const StringHolder& s3, const StringHolder& s4,
+ const StringHolder& s5, const StringHolder& s6);
+
+string StrCat(const StringHolder& s1, const StringHolder& s2,
+ const StringHolder& s3, const StringHolder& s4,
+ const StringHolder& s5, const StringHolder& s6,
+ const StringHolder& s7);
+
+string StrCat(const StringHolder& s1, const StringHolder& s2,
+ const StringHolder& s3, const StringHolder& s4,
+ const StringHolder& s5, const StringHolder& s6,
+ const StringHolder& s7, const StringHolder& s8,
+ const StringHolder& s9, const StringHolder& s10,
+ const StringHolder& s11);
+
+void StrAppend(string* dest, const StringHolder& s1);
+
+void StrAppend(string* dest, const StringHolder& s1, const StringHolder& s2);
+
+} // namespace phonenumbers
+} // namespace i18n
+
+#endif // I18N_PHONENUMBERS_STRINGUTIL_H_
diff --git a/third_party/libphonenumber/cpp/src/stringutil_test.cc b/third_party/libphonenumber/cpp/src/stringutil_test.cc
new file mode 100644
index 0000000..3d665e2
--- /dev/null
+++ b/third_party/libphonenumber/cpp/src/stringutil_test.cc
@@ -0,0 +1,208 @@
+// Copyright (C) 2011 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// Author: Philippe Liard
+
+#include <gtest/gtest.h>
+
+#include "stringutil.h"
+
+namespace i18n {
+namespace phonenumbers {
+
+// Test operator+(const string&, int).
+TEST(StringUtilTest, OperatorPlus) {
+ EXPECT_EQ("hello10", string("hello") + 10);
+}
+
+// Test SimpleItoa implementation.
+TEST(StringUtilTest, SimpleItoa) {
+ EXPECT_EQ("10", SimpleItoa(10));
+}
+
+// Test TryStripPrefixString.
+TEST(StringUtilTest, TryStripPrefixString) {
+ string s;
+
+ EXPECT_TRUE(TryStripPrefixString("hello world", "hello", &s));
+ EXPECT_EQ(" world", s);
+ s.clear();
+
+ EXPECT_FALSE(TryStripPrefixString("hello world", "helloa", &s));
+ s.clear();
+
+ EXPECT_TRUE(TryStripPrefixString("hello world", "", &s));
+ EXPECT_EQ("hello world", s);
+ s.clear();
+
+ EXPECT_FALSE(TryStripPrefixString("", "hello", &s));
+ s.clear();
+}
+
+// Test HasSuffixString.
+TEST(StringUtilTest, HasSuffixString) {
+ EXPECT_TRUE(HasSuffixString("hello world", "hello world"));
+ EXPECT_TRUE(HasSuffixString("hello world", "world"));
+ EXPECT_FALSE(HasSuffixString("hello world", "world!"));
+ EXPECT_TRUE(HasSuffixString("hello world", ""));
+ EXPECT_FALSE(HasSuffixString("", "hello"));
+}
+
+// Test safe_strto32.
+TEST(StringUtilTest, safe_strto32) {
+ int32 n;
+
+ safe_strto32("0", &n);
+ EXPECT_EQ(0, n);
+
+ safe_strto32("16", &n);
+ EXPECT_EQ(16, n);
+
+ safe_strto32("2147483647", &n);
+ EXPECT_EQ(2147483647, n);
+
+ safe_strto32("-2147483648", &n);
+ EXPECT_EQ(-2147483648, n);
+}
+
+// Test safe_strtou64.
+TEST(StringUtilTest, safe_strtou64) {
+ uint64 n;
+
+ safe_strtou64("0", &n);
+ EXPECT_EQ(0, n);
+
+ safe_strtou64("16", &n);
+ EXPECT_EQ(16, n);
+
+ safe_strtou64("18446744073709551615UL", &n);
+ EXPECT_EQ(18446744073709551615ULL, n);
+}
+
+// Test strrmm.
+TEST(StringUtilTest, strrmm) {
+ string input("hello");
+
+ strrmm(&input, "");
+ EXPECT_EQ(input, input);
+
+ string empty;
+ strrmm(&empty, "");
+ EXPECT_EQ("", empty);
+
+ strrmm(&empty, "aa");
+ EXPECT_EQ("", empty);
+
+ strrmm(&input, "h");
+ EXPECT_EQ("ello", input);
+
+ strrmm(&input, "el");
+ EXPECT_EQ("o", input);
+}
+
+// Test the StringHolder class.
+TEST(StringUtilTest, StringHolder) {
+ // Test with C string.
+ static const char cstring[] = "aaa";
+ StringHolder sh1(cstring);
+ EXPECT_EQ(cstring, sh1.GetCString());
+ EXPECT_EQ(NULL, sh1.GetString());
+
+ // Test with std::string.
+ string s = "bbb";
+ StringHolder sh2(s);
+ EXPECT_EQ(NULL, sh2.GetCString());
+ EXPECT_EQ(&s, sh2.GetString());
+
+ // Test GetLength().
+ string s2 = "hello";
+ StringHolder sh3(s2);
+ EXPECT_EQ(5, sh3.Length());
+
+ // Test with uint64.
+ StringHolder sh4(42);
+ EXPECT_TRUE(sh4.GetCString() == NULL);
+ EXPECT_EQ(2, sh4.Length());
+ EXPECT_EQ("42", *sh4.GetString());
+}
+
+// Test the operator+=(string& lhs, const StringHolder& rhs) implementation.
+TEST(StringUtilTest, OperatorPlusEquals) {
+ // Test with a const char* string to append.
+ string s = "h";
+ static const char append1[] = "ello";
+ s += StringHolder(append1); // force StringHolder usage
+
+ EXPECT_EQ("hello", s);
+
+ // Test with a std::string to append.
+ s = "h";
+ string append2 = "ello";
+ s += StringHolder(append2); // force StringHolder usage
+
+ EXPECT_EQ("hello", s);
+}
+
+// Test the StrCat implementations
+TEST(StringUtilTest, StrCat) {
+ string s;
+
+ // Test with 2 arguments.
+ s = StrCat("a", "b");
+ EXPECT_EQ("ab", s);
+
+ // Test with 3 arguments.
+ s = StrCat("a", "b", "c");
+ EXPECT_EQ("abc", s);
+
+ // Test with 4 arguments.
+ s = StrCat("a", "b", "c", "d");
+ EXPECT_EQ("abcd", s);
+
+ // Test with 5 arguments.
+ s = StrCat("a", "b", "c", "d", "e");
+ EXPECT_EQ("abcde", s);
+
+ // Test with 6 arguments.
+ s = StrCat("a", "b", "c", "d", "e", "f");
+ EXPECT_EQ("abcdef", s);
+
+ // Test with 7 arguments.
+ s = StrCat("a", "b", "c", "d", "e", "f", "g");
+ EXPECT_EQ("abcdefg", s);
+
+ // Test with 11 arguments.
+ s = StrCat("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k");
+ EXPECT_EQ("abcdefghijk", s);
+}
+
+// Test the StrAppend implementations.
+TEST(StringUtilTest, StrAppend) {
+ string s;
+
+ // Test with 1 argument.
+ StrAppend(&s, "a");
+ EXPECT_EQ("a", s);
+
+ // Test with 2 arguments.
+ StrAppend(&s, "b", "c");
+ EXPECT_EQ("abc", s);
+
+ // Test with int argument.
+ StrAppend(&s, 42);
+ EXPECT_EQ("abc42", s);
+}
+
+} // namespace phonenumbers
+} // namespace i18n
diff --git a/third_party/libphonenumber/cpp/src/test_metadata.cc b/third_party/libphonenumber/cpp/src/test_metadata.cc
new file mode 100644
index 0000000..6c1d409
--- /dev/null
+++ b/third_party/libphonenumber/cpp/src/test_metadata.cc
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2011 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "test_metadata.h"
+
+static const unsigned char test_metadata_data[] = { 0x0A, 0x67, 0x0A, 0x00, 0x12, 0x00, 0x1A, 0x00, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x41, 0x44, 0x50, 0xF8, 0x02, 0x5A, 0x02, 0x30, 0x30, 0x90, 0x01, 0x01, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xF8, 0x01, 0x0A, 0x12, 0x12, 0x09, 0x5B, 0x32, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x12, 0x31, 0x12, 0x1D, 0x32, 0x5C, 0x64, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x36, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7C, 0x5C, 0x64, 0x5B, 0x32, 0x36, 0x2D, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x32, 0x32, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x1A, 0x1F, 0x12, 0x0B, 0x39, 0x5B, 0x31, 0x2D, 0x33, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x39, 0x32, 0x33, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x41, 0x4F, 0x50, 0xF4, 0x01, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x03, 0x30, 0x7E, 0x30, 0x7A, 0x03, 0x30, 0x7E, 0x30, 0x9A, 0x01, 0x25, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xF4, 0x05, 0x0A, 0x1C, 0x12, 0x10, 0x5B, 0x31, 0x2D, 0x33, 0x36, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x39, 0x2C, 0x31, 0x30, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x31, 0x31, 0x7D, 0x12, 0x16, 0x12, 0x0A, 0x5B, 0x31, 0x2D, 0x33, 0x5D, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x31, 0x30, 0x7D, 0x1A, 0x1F, 0x12, 0x12, 0x39, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x7C, 0x5B, 0x31, 0x2D, 0x33, 0x5D, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x1A, 0x09, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x2C, 0x31, 0x31, 0x7D, 0x22, 0x11, 0x12, 0x07, 0x38, 0x30, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x2A, 0x18, 0x12, 0x0E, 0x36, 0x28, 0x30, 0x5C, 0x64, 0x7C, 0x31, 0x30, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x41, 0x52, 0x50, 0x36, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x15, 0x30, 0x28, 0x3F, 0x3A, 0x28, 0x31, 0x31, 0x7C, 0x33, 0x34, 0x33, 0x7C, 0x33, 0x37, 0x31, 0x35, 0x29, 0x31, 0x35, 0x29, 0x3F, 0x82, 0x01, 0x03, 0x39, 0x24, 0x31, 0x9A, 0x01, 0x2C, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x02, 0x31, 0x31, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x36, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x0C, 0x31, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x32, 0x33, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2E, 0x0A, 0x13, 0x39, 0x28, 0x31, 0x31, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x31, 0x35, 0x20, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x03, 0x39, 0x31, 0x31, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x43, 0x0A, 0x16, 0x39, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x11, 0x39, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x32, 0x33, 0x5D, 0x29, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x07, 0x30, 0x24, 0x31, 0x20, 0x24, 0x43, 0x43, 0x9A, 0x01, 0x2E, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x04, 0x5B, 0x36, 0x38, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xA2, 0x01, 0x27, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x02, 0x31, 0x31, 0x2A, 0x00, 0xA2, 0x01, 0x31, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x0C, 0x31, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x32, 0x33, 0x5D, 0x2A, 0x00, 0xA2, 0x01, 0x2B, 0x0A, 0x15, 0x28, 0x39, 0x29, 0x28, 0x31, 0x31, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x03, 0x39, 0x31, 0x31, 0x2A, 0x00, 0xA2, 0x01, 0x3C, 0x0A, 0x18, 0x28, 0x39, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x11, 0x39, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x32, 0x33, 0x5D, 0x29, 0x2A, 0x00, 0xA2, 0x01, 0x29, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x04, 0x5B, 0x36, 0x38, 0x5D, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xAF, 0x02, 0x0A, 0x1B, 0x12, 0x0F, 0x5B, 0x31, 0x2D, 0x35, 0x37, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x31, 0x34, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x31, 0x35, 0x7D, 0x12, 0x14, 0x12, 0x0B, 0x5B, 0x32, 0x33, 0x37, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x1A, 0x0F, 0x12, 0x06, 0x34, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x22, 0x13, 0x12, 0x09, 0x31, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x2A, 0x18, 0x12, 0x0E, 0x31, 0x39, 0x30, 0x5B, 0x30, 0x31, 0x32, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x41, 0x55, 0x50, 0x3D, 0x5A, 0x07, 0x30, 0x30, 0x31, 0x5B, 0x31, 0x32, 0x5D, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x8A, 0x01, 0x04, 0x30, 0x30, 0x31, 0x31, 0x9A, 0x01, 0x2A, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x31, 0x22, 0x02, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x31, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x31, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x07, 0x5B, 0x32, 0x2D, 0x34, 0x37, 0x38, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xC1, 0x02, 0x0A, 0x29, 0x12, 0x1D, 0x28, 0x32, 0x34, 0x32, 0x7C, 0x38, 0x28, 0x30, 0x30, 0x7C, 0x36, 0x36, 0x7C, 0x37, 0x37, 0x7C, 0x38, 0x38, 0x29, 0x7C, 0x39, 0x30, 0x30, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x31, 0x30, 0x7D, 0x12, 0x6C, 0x12, 0x60, 0x32, 0x34, 0x32, 0x28, 0x3F, 0x3A, 0x33, 0x28, 0x3F, 0x3A, 0x30, 0x32, 0x7C, 0x5B, 0x32, 0x33, 0x36, 0x5D, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x34, 0x5B, 0x30, 0x2D, 0x32, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x2D, 0x36, 0x38, 0x5D, 0x7C, 0x37, 0x5B, 0x33, 0x2D, 0x35, 0x37, 0x5D, 0x7C, 0x39, 0x5B, 0x32, 0x2D, 0x35, 0x5D, 0x29, 0x7C, 0x34, 0x28, 0x3F, 0x3A, 0x32, 0x5B, 0x32, 0x33, 0x37, 0x5D, 0x7C, 0x35, 0x31, 0x7C, 0x36, 0x34, 0x7C, 0x37, 0x37, 0x29, 0x7C, 0x35, 0x30, 0x32, 0x7C, 0x36, 0x33, 0x36, 0x7C, 0x37, 0x30, 0x32, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x31, 0x30, 0x7D, 0x1A, 0x23, 0x12, 0x19, 0x32, 0x34, 0x32, 0x28, 0x33, 0x35, 0x37, 0x7C, 0x33, 0x35, 0x39, 0x7C, 0x34, 0x35, 0x37, 0x7C, 0x35, 0x35, 0x37, 0x29, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x22, 0x1D, 0x12, 0x13, 0x38, 0x28, 0x30, 0x30, 0x7C, 0x36, 0x36, 0x7C, 0x37, 0x37, 0x7C, 0x38, 0x38, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x2A, 0x12, 0x12, 0x08, 0x39, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x42, 0x53, 0x50, 0x01, 0x5A, 0x03, 0x30, 0x31, 0x31, 0x62, 0x01, 0x31, 0x7A, 0x01, 0x31, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x88, 0x05, 0x0A, 0x14, 0x12, 0x08, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x31, 0x34, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x32, 0x2C, 0x31, 0x34, 0x7D, 0x12, 0x4E, 0x12, 0x38, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x34, 0x2D, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x7C, 0x33, 0x5B, 0x30, 0x33, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7C, 0x5B, 0x37, 0x38, 0x39, 0x5D, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7C, 0x30, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x29, 0x29, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x38, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x32, 0x2C, 0x31, 0x34, 0x7D, 0x32, 0x08, 0x33, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x1A, 0x30, 0x12, 0x23, 0x31, 0x28, 0x35, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x7C, 0x37, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x7C, 0x36, 0x5B, 0x30, 0x32, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x7C, 0x36, 0x33, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x29, 0x1A, 0x09, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x2C, 0x31, 0x31, 0x7D, 0x22, 0x12, 0x12, 0x08, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x2A, 0x23, 0x12, 0x16, 0x39, 0x30, 0x30, 0x28, 0x5B, 0x31, 0x33, 0x35, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x7C, 0x39, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x29, 0x1A, 0x09, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x2C, 0x31, 0x31, 0x7D, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x44, 0x45, 0x50, 0x31, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x3A, 0x0A, 0x10, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x38, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x18, 0x32, 0x7C, 0x33, 0x5B, 0x33, 0x2D, 0x39, 0x5D, 0x7C, 0x39, 0x30, 0x36, 0x7C, 0x5B, 0x34, 0x2D, 0x39, 0x5D, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x31, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2D, 0x0A, 0x10, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x39, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x2F, 0x24, 0x32, 0x1A, 0x0B, 0x5B, 0x33, 0x34, 0x5D, 0x30, 0x7C, 0x5B, 0x36, 0x38, 0x5D, 0x39, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x47, 0x0A, 0x10, 0x28, 0x5B, 0x34, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x05, 0x5B, 0x34, 0x2D, 0x39, 0x5D, 0x1A, 0x1E, 0x5B, 0x34, 0x2D, 0x36, 0x5D, 0x7C, 0x5B, 0x37, 0x2D, 0x39, 0x5D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x4C, 0x0A, 0x15, 0x28, 0x5B, 0x34, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x2C, 0x37, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x05, 0x5B, 0x34, 0x2D, 0x39, 0x5D, 0x1A, 0x1E, 0x5B, 0x34, 0x2D, 0x36, 0x5D, 0x7C, 0x5B, 0x37, 0x2D, 0x39, 0x5D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x29, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2D, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x31, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x03, 0x38, 0x30, 0x30, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2F, 0x0A, 0x17, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x03, 0x39, 0x30, 0x30, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xC8, 0x03, 0x0A, 0x12, 0x12, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x31, 0x30, 0x7D, 0x12, 0x16, 0x12, 0x0A, 0x5B, 0x31, 0x2D, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x31, 0x30, 0x7D, 0x1A, 0x18, 0x12, 0x0E, 0x37, 0x5B, 0x31, 0x2D, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x22, 0x11, 0x12, 0x07, 0x38, 0x30, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x2A, 0x15, 0x12, 0x0B, 0x39, 0x5B, 0x30, 0x31, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x21, 0x12, 0x17, 0x38, 0x28, 0x3F, 0x3A, 0x34, 0x5B, 0x33, 0x2D, 0x35, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x2D, 0x32, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x3A, 0x11, 0x12, 0x07, 0x37, 0x30, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x42, 0x11, 0x12, 0x07, 0x35, 0x36, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x4A, 0x02, 0x47, 0x42, 0x50, 0x2C, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x38, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x0C, 0x5B, 0x31, 0x2D, 0x35, 0x39, 0x5D, 0x7C, 0x5B, 0x37, 0x38, 0x5D, 0x30, 0x22, 0x05, 0x28, 0x30, 0x24, 0x31, 0x29, 0x2A, 0x00, 0x9A, 0x01, 0x34, 0x0A, 0x19, 0x28, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x01, 0x36, 0x22, 0x05, 0x28, 0x30, 0x24, 0x31, 0x29, 0x2A, 0x00, 0x9A, 0x01, 0x35, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x09, 0x37, 0x5B, 0x31, 0x2D, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x22, 0x05, 0x28, 0x30, 0x24, 0x31, 0x29, 0x2A, 0x00, 0x9A, 0x01, 0x31, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x05, 0x38, 0x5B, 0x34, 0x37, 0x5D, 0x22, 0x05, 0x28, 0x30, 0x24, 0x31, 0x29, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0x8B, 0x03, 0x0A, 0x1A, 0x12, 0x0E, 0x5B, 0x30, 0x33, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x31, 0x30, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x31, 0x31, 0x7D, 0x12, 0x16, 0x12, 0x09, 0x30, 0x5C, 0x64, 0x7B, 0x39, 0x2C, 0x31, 0x30, 0x7D, 0x1A, 0x09, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x2C, 0x31, 0x31, 0x7D, 0x1A, 0x14, 0x12, 0x08, 0x33, 0x5C, 0x64, 0x7B, 0x38, 0x2C, 0x39, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x39, 0x2C, 0x31, 0x30, 0x7D, 0x22, 0x1E, 0x12, 0x13, 0x38, 0x30, 0x28, 0x3F, 0x3A, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x7C, 0x33, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x39, 0x7D, 0x2A, 0x1E, 0x12, 0x13, 0x38, 0x39, 0x28, 0x3F, 0x3A, 0x32, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x7C, 0x39, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x29, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x39, 0x7D, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x49, 0x54, 0x50, 0x27, 0x5A, 0x02, 0x30, 0x30, 0x9A, 0x01, 0x2C, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x05, 0x30, 0x5B, 0x32, 0x36, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x33, 0x0A, 0x17, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x0A, 0x30, 0x5B, 0x31, 0x33, 0x2D, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x2A, 0x0A, 0x17, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x01, 0x33, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x20, 0x0A, 0x10, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x36, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x01, 0x38, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xD0, 0x01, 0x01, 0x0A, 0x96, 0x03, 0x0A, 0x00, 0x12, 0x00, 0x1A, 0x00, 0x22, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4A, 0x50, 0x50, 0x51, 0x5A, 0x03, 0x30, 0x31, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x90, 0x01, 0x01, 0x9A, 0x01, 0x31, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x07, 0x5B, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x30, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x4E, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x07, 0x32, 0x32, 0x32, 0x7C, 0x33, 0x33, 0x33, 0x1A, 0x0C, 0x28, 0x3F, 0x3A, 0x32, 0x32, 0x32, 0x7C, 0x33, 0x33, 0x33, 0x29, 0x31, 0x1A, 0x0D, 0x28, 0x3F, 0x3A, 0x32, 0x32, 0x32, 0x7C, 0x33, 0x33, 0x33, 0x29, 0x31, 0x31, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x52, 0x0A, 0x12, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x07, 0x32, 0x32, 0x32, 0x7C, 0x33, 0x33, 0x33, 0x1A, 0x09, 0x32, 0x32, 0x32, 0x31, 0x7C, 0x33, 0x33, 0x33, 0x32, 0x1A, 0x0A, 0x32, 0x32, 0x32, 0x31, 0x32, 0x7C, 0x33, 0x33, 0x33, 0x32, 0x1A, 0x0B, 0x32, 0x32, 0x32, 0x31, 0x32, 0x30, 0x7C, 0x33, 0x33, 0x33, 0x32, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2E, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x04, 0x5B, 0x32, 0x33, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x1B, 0x0A, 0x07, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x03, 0x2A, 0x24, 0x31, 0x1A, 0x04, 0x5B, 0x32, 0x33, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xBD, 0x0B, 0x0A, 0x20, 0x12, 0x14, 0x5B, 0x31, 0x2D, 0x37, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x39, 0x7D, 0x7C, 0x38, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x31, 0x30, 0x7D, 0x12, 0x4C, 0x12, 0x36, 0x28, 0x3F, 0x3A, 0x32, 0x7C, 0x5B, 0x33, 0x34, 0x5D, 0x5B, 0x31, 0x2D, 0x33, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x35, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x2D, 0x34, 0x5D, 0x29, 0x28, 0x3F, 0x3A, 0x31, 0x5C, 0x64, 0x7B, 0x32, 0x2C, 0x33, 0x7D, 0x7C, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x37, 0x7D, 0x29, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x34, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x08, 0x32, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x1A, 0x28, 0x12, 0x10, 0x31, 0x5B, 0x30, 0x2D, 0x32, 0x35, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x39, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x31, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x22, 0x1B, 0x12, 0x07, 0x38, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x2A, 0x20, 0x12, 0x0C, 0x36, 0x30, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x36, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x1D, 0x12, 0x07, 0x35, 0x30, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x35, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x42, 0x1D, 0x12, 0x07, 0x37, 0x30, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x37, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x4A, 0x02, 0x4B, 0x52, 0x50, 0x52, 0x5A, 0x18, 0x30, 0x30, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x32, 0x34, 0x2D, 0x36, 0x38, 0x5D, 0x7C, 0x5B, 0x33, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x62, 0x01, 0x30, 0x7A, 0x15, 0x30, 0x28, 0x38, 0x5B, 0x31, 0x2D, 0x34, 0x36, 0x2D, 0x38, 0x5D, 0x7C, 0x38, 0x35, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x3F, 0x9A, 0x01, 0x70, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x1F, 0x31, 0x28, 0x3F, 0x3A, 0x30, 0x7C, 0x31, 0x5B, 0x31, 0x39, 0x5D, 0x7C, 0x5B, 0x36, 0x39, 0x5D, 0x39, 0x7C, 0x35, 0x5B, 0x34, 0x35, 0x38, 0x5D, 0x29, 0x7C, 0x5B, 0x35, 0x37, 0x5D, 0x30, 0x1A, 0x25, 0x31, 0x28, 0x3F, 0x3A, 0x30, 0x7C, 0x31, 0x5B, 0x31, 0x39, 0x5D, 0x7C, 0x5B, 0x36, 0x39, 0x5D, 0x39, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x34, 0x34, 0x7C, 0x35, 0x39, 0x7C, 0x38, 0x29, 0x29, 0x7C, 0x5B, 0x35, 0x37, 0x5D, 0x30, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x98, 0x01, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x31, 0x31, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x36, 0x39, 0x5D, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x7C, 0x5B, 0x37, 0x38, 0x5D, 0x7C, 0x35, 0x5B, 0x31, 0x2D, 0x34, 0x5D, 0x29, 0x7C, 0x5B, 0x36, 0x38, 0x5D, 0x30, 0x7C, 0x5B, 0x33, 0x2D, 0x39, 0x5D, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x1A, 0x3B, 0x31, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x36, 0x39, 0x5D, 0x5B, 0x32, 0x2D, 0x38, 0x5D, 0x7C, 0x5B, 0x37, 0x38, 0x5D, 0x7C, 0x35, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x2D, 0x33, 0x5D, 0x7C, 0x34, 0x5B, 0x35, 0x36, 0x5D, 0x29, 0x29, 0x7C, 0x5B, 0x36, 0x38, 0x5D, 0x30, 0x7C, 0x5B, 0x33, 0x2D, 0x39, 0x5D, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x30, 0x0A, 0x12, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x03, 0x31, 0x33, 0x31, 0x1A, 0x04, 0x31, 0x33, 0x31, 0x32, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x38, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x03, 0x31, 0x33, 0x31, 0x1A, 0x09, 0x31, 0x33, 0x31, 0x5B, 0x31, 0x33, 0x2D, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x31, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x07, 0x31, 0x33, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x36, 0x0A, 0x1C, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x2D, 0x24, 0x34, 0x1A, 0x02, 0x33, 0x30, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x6C, 0x0A, 0x12, 0x28, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x12, 0x32, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x36, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x2D, 0x34, 0x36, 0x37, 0x5D, 0x29, 0x1A, 0x31, 0x32, 0x28, 0x3F, 0x3A, 0x5B, 0x32, 0x36, 0x5D, 0x7C, 0x33, 0x28, 0x3F, 0x3A, 0x30, 0x31, 0x7C, 0x31, 0x5B, 0x34, 0x35, 0x5D, 0x7C, 0x32, 0x5B, 0x31, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x33, 0x39, 0x7C, 0x34, 0x7C, 0x36, 0x5B, 0x36, 0x37, 0x5D, 0x7C, 0x37, 0x5B, 0x30, 0x37, 0x38, 0x5D, 0x29, 0x29, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x88, 0x01, 0x0A, 0x12, 0x28, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x2D, 0x24, 0x33, 0x1A, 0x16, 0x32, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x30, 0x2D, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x5B, 0x34, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x29, 0x1A, 0x49, 0x32, 0x28, 0x3F, 0x3A, 0x33, 0x28, 0x3F, 0x3A, 0x30, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x31, 0x5B, 0x30, 0x2D, 0x33, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x32, 0x2D, 0x36, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x2D, 0x38, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x2D, 0x35, 0x38, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x31, 0x2D, 0x36, 0x39, 0x5D, 0x7C, 0x5B, 0x35, 0x38, 0x39, 0x5D, 0x29, 0x7C, 0x5B, 0x34, 0x35, 0x37, 0x2D, 0x39, 0x5D, 0x29, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x47, 0x0A, 0x0B, 0x28, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x1A, 0x0A, 0x32, 0x31, 0x5B, 0x30, 0x2D, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x1A, 0x1E, 0x32, 0x31, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x2D, 0x32, 0x34, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x32, 0x34, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x32, 0x36, 0x39, 0x5D, 0x29, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x3D, 0x0A, 0x0B, 0x28, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x1A, 0x06, 0x32, 0x31, 0x5B, 0x33, 0x36, 0x5D, 0x1A, 0x18, 0x32, 0x31, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x30, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x33, 0x2D, 0x35, 0x37, 0x38, 0x5D, 0x29, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x6D, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x1A, 0x0B, 0x5B, 0x33, 0x2D, 0x39, 0x5D, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x31, 0x1A, 0x17, 0x5B, 0x33, 0x2D, 0x39, 0x5D, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x31, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x2D, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x29, 0x1A, 0x27, 0x5B, 0x33, 0x2D, 0x39, 0x5D, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x31, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x2D, 0x32, 0x34, 0x37, 0x2D, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x31, 0x32, 0x34, 0x5D, 0x7C, 0x36, 0x5B, 0x31, 0x32, 0x36, 0x39, 0x5D, 0x29, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x5F, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x1A, 0x0B, 0x5B, 0x33, 0x2D, 0x39, 0x5D, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x31, 0x1A, 0x0F, 0x5B, 0x33, 0x2D, 0x39, 0x5D, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x31, 0x5B, 0x33, 0x36, 0x5D, 0x1A, 0x21, 0x5B, 0x33, 0x2D, 0x39, 0x5D, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x31, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x30, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x33, 0x2D, 0x35, 0x37, 0x38, 0x5D, 0x29, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xDC, 0x06, 0x0A, 0x19, 0x12, 0x0D, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x39, 0x2C, 0x31, 0x30, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x31, 0x31, 0x7D, 0x12, 0x16, 0x12, 0x0A, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x31, 0x30, 0x7D, 0x1A, 0x11, 0x12, 0x07, 0x31, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x31, 0x7D, 0x22, 0x12, 0x12, 0x08, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x2A, 0x12, 0x12, 0x08, 0x39, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4D, 0x58, 0x50, 0x34, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x02, 0x30, 0x31, 0x7A, 0x11, 0x30, 0x31, 0x7C, 0x30, 0x34, 0x5B, 0x34, 0x35, 0x5D, 0x28, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x29, 0x82, 0x01, 0x03, 0x31, 0x24, 0x31, 0x9A, 0x01, 0x2D, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x06, 0x5B, 0x38, 0x39, 0x5D, 0x30, 0x30, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x2F, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x08, 0x33, 0x33, 0x7C, 0x35, 0x35, 0x7C, 0x38, 0x31, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x4F, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x28, 0x5B, 0x32, 0x34, 0x36, 0x37, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x2D, 0x32, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x2D, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x39, 0x0A, 0x16, 0x31, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x0C, 0x30, 0x34, 0x35, 0x20, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x0D, 0x31, 0x28, 0x3F, 0x3A, 0x33, 0x33, 0x7C, 0x35, 0x35, 0x7C, 0x38, 0x31, 0x29, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x55, 0x0A, 0x16, 0x31, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x0C, 0x30, 0x34, 0x35, 0x20, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x29, 0x31, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x32, 0x34, 0x35, 0x37, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x2D, 0x32, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x2D, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x29, 0x22, 0x00, 0x2A, 0x00, 0xA2, 0x01, 0x2B, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x06, 0x5B, 0x38, 0x39, 0x5D, 0x30, 0x30, 0x2A, 0x00, 0xA2, 0x01, 0x2D, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x08, 0x33, 0x33, 0x7C, 0x35, 0x35, 0x7C, 0x38, 0x31, 0x2A, 0x00, 0xA2, 0x01, 0x4D, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x28, 0x5B, 0x32, 0x34, 0x36, 0x37, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x2D, 0x32, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x2D, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x32, 0x2D, 0x39, 0x5D, 0x7C, 0x39, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x2A, 0x00, 0xA2, 0x01, 0x38, 0x0A, 0x18, 0x28, 0x31, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x0D, 0x31, 0x28, 0x3F, 0x3A, 0x33, 0x33, 0x7C, 0x35, 0x35, 0x7C, 0x38, 0x31, 0x29, 0x2A, 0x00, 0xA2, 0x01, 0x54, 0x0A, 0x18, 0x28, 0x31, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x1A, 0x29, 0x31, 0x28, 0x3F, 0x3A, 0x5B, 0x31, 0x32, 0x34, 0x35, 0x37, 0x39, 0x5D, 0x7C, 0x33, 0x5B, 0x30, 0x2D, 0x32, 0x34, 0x2D, 0x39, 0x5D, 0x7C, 0x35, 0x5B, 0x30, 0x2D, 0x34, 0x36, 0x2D, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x30, 0x32, 0x2D, 0x39, 0x5D, 0x29, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xDB, 0x03, 0x0A, 0x23, 0x12, 0x17, 0x5B, 0x32, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x39, 0x7D, 0x7C, 0x5B, 0x33, 0x2D, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x31, 0x30, 0x7D, 0x12, 0x3C, 0x12, 0x31, 0x32, 0x34, 0x30, 0x39, 0x39, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x7C, 0x28, 0x3F, 0x3A, 0x33, 0x5B, 0x32, 0x2D, 0x37, 0x39, 0x5D, 0x7C, 0x5B, 0x34, 0x37, 0x39, 0x5D, 0x5B, 0x32, 0x2D, 0x36, 0x38, 0x39, 0x5D, 0x7C, 0x36, 0x5B, 0x32, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x07, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x1A, 0x5E, 0x12, 0x52, 0x32, 0x28, 0x3F, 0x3A, 0x5B, 0x30, 0x32, 0x37, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x7C, 0x39, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x37, 0x7D, 0x7C, 0x31, 0x28, 0x3F, 0x3A, 0x30, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x37, 0x7D, 0x7C, 0x5B, 0x31, 0x32, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x2C, 0x36, 0x7D, 0x7C, 0x5B, 0x33, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x35, 0x7D, 0x29, 0x7C, 0x34, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x7C, 0x38, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x38, 0x7D, 0x29, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x38, 0x2C, 0x31, 0x30, 0x7D, 0x22, 0x16, 0x12, 0x0A, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x37, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x39, 0x2C, 0x31, 0x30, 0x7D, 0x2A, 0x16, 0x12, 0x0A, 0x39, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x2C, 0x37, 0x7D, 0x1A, 0x08, 0x5C, 0x64, 0x7B, 0x39, 0x2C, 0x31, 0x30, 0x7D, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x4E, 0x5A, 0x50, 0x40, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x31, 0x0A, 0x12, 0x28, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x0A, 0x32, 0x34, 0x7C, 0x5B, 0x33, 0x34, 0x36, 0x37, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x2F, 0x0A, 0x14, 0x28, 0x5C, 0x64, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x35, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x2D, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x06, 0x32, 0x5B, 0x31, 0x37, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0x9A, 0x01, 0x30, 0x0A, 0x17, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x2C, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x04, 0x5B, 0x38, 0x39, 0x5D, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xFE, 0x01, 0x0A, 0x13, 0x12, 0x0A, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x12, 0x13, 0x12, 0x0A, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x1A, 0x28, 0x12, 0x1F, 0x28, 0x3F, 0x3A, 0x35, 0x5B, 0x30, 0x31, 0x5D, 0x7C, 0x36, 0x5B, 0x30, 0x36, 0x39, 0x5D, 0x7C, 0x37, 0x5B, 0x32, 0x38, 0x39, 0x5D, 0x7C, 0x38, 0x38, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x22, 0x11, 0x12, 0x08, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x2A, 0x10, 0x12, 0x07, 0x37, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x50, 0x4C, 0x50, 0x30, 0x5A, 0x03, 0x30, 0x7E, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x32, 0x0A, 0x1C, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xD2, 0x02, 0x0A, 0x13, 0x12, 0x0A, 0x5B, 0x32, 0x36, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x12, 0x1C, 0x12, 0x08, 0x32, 0x36, 0x32, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x32, 0x36, 0x32, 0x31, 0x36, 0x31, 0x32, 0x33, 0x34, 0x1A, 0x26, 0x12, 0x12, 0x36, 0x28, 0x3F, 0x3A, 0x39, 0x5B, 0x32, 0x33, 0x5D, 0x7C, 0x34, 0x37, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x36, 0x39, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x1B, 0x12, 0x07, 0x38, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x2A, 0x38, 0x12, 0x24, 0x38, 0x28, 0x3F, 0x3A, 0x31, 0x5B, 0x30, 0x31, 0x5D, 0x7C, 0x32, 0x5B, 0x30, 0x31, 0x35, 0x36, 0x5D, 0x7C, 0x38, 0x34, 0x7C, 0x39, 0x5B, 0x30, 0x2D, 0x33, 0x37, 0x2D, 0x39, 0x5D, 0x29, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x31, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x52, 0x45, 0x50, 0x86, 0x02, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0x9A, 0x01, 0x37, 0x0A, 0x21, 0x28, 0x5B, 0x32, 0x36, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x32, 0x7D, 0x29, 0x12, 0x0B, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x20, 0x24, 0x34, 0x22, 0x03, 0x30, 0x24, 0x31, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xBA, 0x01, 0x13, 0x32, 0x36, 0x32, 0x7C, 0x36, 0x28, 0x3F, 0x3A, 0x39, 0x5B, 0x32, 0x33, 0x5D, 0x7C, 0x34, 0x37, 0x29, 0x7C, 0x38, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xD4, 0x02, 0x0A, 0x22, 0x12, 0x0F, 0x5B, 0x31, 0x33, 0x36, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x2C, 0x31, 0x30, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x7C, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x2C, 0x31, 0x31, 0x7D, 0x12, 0x12, 0x12, 0x09, 0x5B, 0x33, 0x36, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x12, 0x12, 0x09, 0x5B, 0x38, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x22, 0x17, 0x12, 0x0A, 0x31, 0x3F, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x09, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x2C, 0x31, 0x31, 0x7D, 0x2A, 0x13, 0x12, 0x09, 0x31, 0x39, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x31, 0x7D, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x53, 0x47, 0x50, 0x41, 0x5A, 0x0B, 0x30, 0x5B, 0x30, 0x2D, 0x33, 0x5D, 0x5B, 0x30, 0x2D, 0x39, 0x5D, 0x9A, 0x01, 0x29, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x1A, 0x0C, 0x5B, 0x33, 0x36, 0x39, 0x5D, 0x7C, 0x38, 0x5B, 0x31, 0x2D, 0x39, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x2C, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x05, 0x31, 0x5B, 0x38, 0x39, 0x5D, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x2A, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x1A, 0x03, 0x38, 0x30, 0x30, 0x22, 0x00, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xDF, 0x03, 0x0A, 0x39, 0x12, 0x1A, 0x5B, 0x31, 0x33, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x7C, 0x32, 0x5B, 0x30, 0x2D, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x32, 0x0A, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x30, 0x12, 0x39, 0x12, 0x1A, 0x5B, 0x31, 0x33, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x7C, 0x32, 0x5B, 0x30, 0x2D, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x32, 0x0A, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x30, 0x1A, 0x39, 0x12, 0x1A, 0x5B, 0x31, 0x33, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x7C, 0x32, 0x5B, 0x30, 0x2D, 0x33, 0x35, 0x2D, 0x39, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x0F, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x28, 0x3F, 0x3A, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x3F, 0x32, 0x0A, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x30, 0x22, 0x2B, 0x12, 0x15, 0x38, 0x28, 0x3F, 0x3A, 0x30, 0x30, 0x7C, 0x36, 0x36, 0x7C, 0x37, 0x37, 0x7C, 0x38, 0x38, 0x29, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x30, 0x2A, 0x1E, 0x12, 0x08, 0x39, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x30, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x55, 0x53, 0x50, 0x01, 0x5A, 0x03, 0x30, 0x31, 0x31, 0x62, 0x01, 0x31, 0x6A, 0x07, 0x20, 0x65, 0x78, 0x74, 0x6E, 0x2E, 0x20, 0x7A, 0x01, 0x31, 0x90, 0x01, 0x01, 0x9A, 0x01, 0x25, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x22, 0x00, 0x2A, 0x00, 0x9A, 0x01, 0x1B, 0x0A, 0x0E, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x05, 0x24, 0x31, 0x20, 0x24, 0x32, 0x22, 0x00, 0x2A, 0x00, 0xA2, 0x01, 0x23, 0x0A, 0x15, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x33, 0x7D, 0x29, 0x28, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x29, 0x12, 0x08, 0x24, 0x31, 0x20, 0x24, 0x32, 0x20, 0x24, 0x33, 0x2A, 0x00, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xB0, 0x01, 0x01, 0xC2, 0x01, 0x1E, 0x12, 0x08, 0x38, 0x30, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x06, 0x5C, 0x64, 0x7B, 0x31, 0x30, 0x7D, 0x32, 0x0A, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x30, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x0A, 0xD8, 0x01, 0x0A, 0x13, 0x12, 0x0A, 0x5B, 0x32, 0x36, 0x38, 0x5D, 0x5C, 0x64, 0x7B, 0x38, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x12, 0x22, 0x12, 0x0E, 0x32, 0x36, 0x39, 0x36, 0x5B, 0x30, 0x2D, 0x34, 0x5D, 0x5C, 0x64, 0x7B, 0x34, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x32, 0x36, 0x39, 0x36, 0x30, 0x31, 0x32, 0x33, 0x34, 0x1A, 0x1C, 0x12, 0x08, 0x36, 0x33, 0x39, 0x5C, 0x64, 0x7B, 0x36, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x36, 0x33, 0x39, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x22, 0x1B, 0x12, 0x07, 0x38, 0x30, 0x5C, 0x64, 0x7B, 0x37, 0x7D, 0x1A, 0x05, 0x5C, 0x64, 0x7B, 0x39, 0x7D, 0x32, 0x09, 0x38, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x2A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x32, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x3A, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x42, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0x4A, 0x02, 0x59, 0x54, 0x50, 0x86, 0x02, 0x5A, 0x02, 0x30, 0x30, 0x62, 0x01, 0x30, 0x7A, 0x01, 0x30, 0xAA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xBA, 0x01, 0x07, 0x32, 0x36, 0x39, 0x7C, 0x36, 0x33, 0x39, 0xC2, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, 0xCA, 0x01, 0x08, 0x12, 0x02, 0x4E, 0x41, 0x1A, 0x02, 0x4E, 0x41, };
+
+int test_metadata_size() {
+ return sizeof(test_metadata_data) / sizeof(test_metadata_data[0]);
+}
+
+const void* test_metadata_get() {
+ return test_metadata_data;
+}
diff --git a/third_party/libphonenumber/cpp/src/test_metadata.h b/third_party/libphonenumber/cpp/src/test_metadata.h
new file mode 100644
index 0000000..4eaa5c7
--- /dev/null
+++ b/third_party/libphonenumber/cpp/src/test_metadata.h
@@ -0,0 +1,22 @@
+/*
+ * Copyright (C) 2011 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef EMBEDDED_DATA_TEST_METADATA_H_
+#define EMBEDDED_DATA_TEST_METADATA_H_
+
+int test_metadata_size();
+const void* test_metadata_get();
+
+#endif // EMBEDDED_DATA_TEST_METADATA_H_
diff --git a/third_party/libphonenumber/cpp/src/utf/README b/third_party/libphonenumber/cpp/src/utf/README
new file mode 100644
index 0000000..986e9e3
--- /dev/null
+++ b/third_party/libphonenumber/cpp/src/utf/README
@@ -0,0 +1 @@
+These files come from lib9 (http://code.google.com/p/go/source/browse).
diff --git a/third_party/libphonenumber/cpp/src/utf/rune.c b/third_party/libphonenumber/cpp/src/utf/rune.c
new file mode 100644
index 0000000..5a37368
--- /dev/null
+++ b/third_party/libphonenumber/cpp/src/utf/rune.c
@@ -0,0 +1,350 @@
+/*
+ * The authors of this software are Rob Pike and Ken Thompson.
+ * Copyright (c) 2002 by Lucent Technologies.
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose without fee is hereby granted, provided that this entire notice
+ * is included in all copies of any software which is or includes a copy
+ * or modification of this software and in all copies of the supporting
+ * documentation for such software.
+ * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES MAKE ANY
+ * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
+ * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
+ */
+#include <stdarg.h>
+#include <string.h>
+#include "utf.h"
+#include "utfdef.h"
+
+enum
+{
+ Bit1 = 7,
+ Bitx = 6,
+ Bit2 = 5,
+ Bit3 = 4,
+ Bit4 = 3,
+ Bit5 = 2,
+
+ T1 = ((1<<(Bit1+1))-1) ^ 0xFF, /* 0000 0000 */
+ Tx = ((1<<(Bitx+1))-1) ^ 0xFF, /* 1000 0000 */
+ T2 = ((1<<(Bit2+1))-1) ^ 0xFF, /* 1100 0000 */
+ T3 = ((1<<(Bit3+1))-1) ^ 0xFF, /* 1110 0000 */
+ T4 = ((1<<(Bit4+1))-1) ^ 0xFF, /* 1111 0000 */
+ T5 = ((1<<(Bit5+1))-1) ^ 0xFF, /* 1111 1000 */
+
+ Rune1 = (1<<(Bit1+0*Bitx))-1, /* 0000 0000 0111 1111 */
+ Rune2 = (1<<(Bit2+1*Bitx))-1, /* 0000 0111 1111 1111 */
+ Rune3 = (1<<(Bit3+2*Bitx))-1, /* 1111 1111 1111 1111 */
+ Rune4 = (1<<(Bit4+3*Bitx))-1,
+ /* 0001 1111 1111 1111 1111 1111 */
+
+ Maskx = (1<<Bitx)-1, /* 0011 1111 */
+ Testx = Maskx ^ 0xFF, /* 1100 0000 */
+
+ Bad = Runeerror,
+};
+
+/*
+ * Modified by Wei-Hwa Huang, Google Inc., on 2004-09-24
+ * This is a slower but "safe" version of the old chartorune
+ * that works on strings that are not necessarily null-terminated.
+ *
+ * If you know for sure that your string is null-terminated,
+ * chartorune will be a bit faster.
+ *
+ * It is guaranteed not to attempt to access "length"
+ * past the incoming pointer. This is to avoid
+ * possible access violations. If the string appears to be
+ * well-formed but incomplete (i.e., to get the whole Rune
+ * we'd need to read past str+length) then we'll set the Rune
+ * to Bad and return 0.
+ *
+ * Note that if we have decoding problems for other
+ * reasons, we return 1 instead of 0.
+ */
+int
+charntorune(Rune *rune, const char *str, int length)
+{
+ int c, c1, c2, c3;
+ long l;
+
+ /* When we're not allowed to read anything */
+ if(length <= 0) {
+ goto badlen;
+ }
+
+ /*
+ * one character sequence (7-bit value)
+ * 00000-0007F => T1
+ */
+ c = *(uchar*)str;
+ if(c < Tx) {
+ *rune = c;
+ return 1;
+ }
+
+ // If we can't read more than one character we must stop
+ if(length <= 1) {
+ goto badlen;
+ }
+
+ /*
+ * two character sequence (11-bit value)
+ * 0080-07FF => T2 Tx
+ */
+ c1 = *(uchar*)(str+1) ^ Tx;
+ if(c1 & Testx)
+ goto bad;
+ if(c < T3) {
+ if(c < T2)
+ goto bad;
+ l = ((c << Bitx) | c1) & Rune2;
+ if(l <= Rune1)
+ goto bad;
+ *rune = l;
+ return 2;
+ }
+
+ // If we can't read more than two characters we must stop
+ if(length <= 2) {
+ goto badlen;
+ }
+
+ /*
+ * three character sequence (16-bit value)
+ * 0800-FFFF => T3 Tx Tx
+ */
+ c2 = *(uchar*)(str+2) ^ Tx;
+ if(c2 & Testx)
+ goto bad;
+ if(c < T4) {
+ l = ((((c << Bitx) | c1) << Bitx) | c2) & Rune3;
+ if(l <= Rune2)
+ goto bad;
+ *rune = l;
+ return 3;
+ }
+
+ if (length <= 3)
+ goto badlen;
+
+ /*
+ * four character sequence (21-bit value)
+ * 10000-1FFFFF => T4 Tx Tx Tx
+ */
+ c3 = *(uchar*)(str+3) ^ Tx;
+ if (c3 & Testx)
+ goto bad;
+ if (c < T5) {
+ l = ((((((c << Bitx) | c1) << Bitx) | c2) << Bitx) | c3) & Rune4;
+ if (l <= Rune3)
+ goto bad;
+ *rune = l;
+ return 4;
+ }
+
+ // Support for 5-byte or longer UTF-8 would go here, but
+ // since we don't have that, we'll just fall through to bad.
+
+ /*
+ * bad decoding
+ */
+bad:
+ *rune = Bad;
+ return 1;
+badlen:
+ *rune = Bad;
+ return 0;
+
+}
+
+
+/*
+ * This is the older "unsafe" version, which works fine on
+ * null-terminated strings.
+ */
+int
+chartorune(Rune *rune, const char *str)
+{
+ int c, c1, c2, c3;
+ long l;
+
+ /*
+ * one character sequence
+ * 00000-0007F => T1
+ */
+ c = *(uchar*)str;
+ if(c < Tx) {
+ *rune = c;
+ return 1;
+ }
+
+ /*
+ * two character sequence
+ * 0080-07FF => T2 Tx
+ */
+ c1 = *(uchar*)(str+1) ^ Tx;
+ if(c1 & Testx)
+ goto bad;
+ if(c < T3) {
+ if(c < T2)
+ goto bad;
+ l = ((c << Bitx) | c1) & Rune2;
+ if(l <= Rune1)
+ goto bad;
+ *rune = l;
+ return 2;
+ }
+
+ /*
+ * three character sequence
+ * 0800-FFFF => T3 Tx Tx
+ */
+ c2 = *(uchar*)(str+2) ^ Tx;
+ if(c2 & Testx)
+ goto bad;
+ if(c < T4) {
+ l = ((((c << Bitx) | c1) << Bitx) | c2) & Rune3;
+ if(l <= Rune2)
+ goto bad;
+ *rune = l;
+ return 3;
+ }
+
+ /*
+ * four character sequence (21-bit value)
+ * 10000-1FFFFF => T4 Tx Tx Tx
+ */
+ c3 = *(uchar*)(str+3) ^ Tx;
+ if (c3 & Testx)
+ goto bad;
+ if (c < T5) {
+ l = ((((((c << Bitx) | c1) << Bitx) | c2) << Bitx) | c3) & Rune4;
+ if (l <= Rune3)
+ goto bad;
+ *rune = l;
+ return 4;
+ }
+
+ /*
+ * Support for 5-byte or longer UTF-8 would go here, but
+ * since we don't have that, we'll just fall through to bad.
+ */
+
+ /*
+ * bad decoding
+ */
+bad:
+ *rune = Bad;
+ return 1;
+}
+
+int
+isvalidcharntorune(const char* str, int length, Rune* rune, int* consumed) {
+ *consumed = charntorune(rune, str, length);
+ return *rune != Runeerror || *consumed == 3;
+}
+
+int
+runetochar(char *str, const Rune *rune)
+{
+ /* Runes are signed, so convert to unsigned for range check. */
+ unsigned long c;
+
+ /*
+ * one character sequence
+ * 00000-0007F => 00-7F
+ */
+ c = *rune;
+ if(c <= Rune1) {
+ str[0] = c;
+ return 1;
+ }
+
+ /*
+ * two character sequence
+ * 0080-07FF => T2 Tx
+ */
+ if(c <= Rune2) {
+ str[0] = T2 | (c >> 1*Bitx);
+ str[1] = Tx | (c & Maskx);
+ return 2;
+ }
+
+ /*
+ * If the Rune is out of range, convert it to the error rune.
+ * Do this test here because the error rune encodes to three bytes.
+ * Doing it earlier would duplicate work, since an out of range
+ * Rune wouldn't have fit in one or two bytes.
+ */
+ if (c > Runemax)
+ c = Runeerror;
+
+ /*
+ * three character sequence
+ * 0800-FFFF => T3 Tx Tx
+ */
+ if (c <= Rune3) {
+ str[0] = T3 | (c >> 2*Bitx);
+ str[1] = Tx | ((c >> 1*Bitx) & Maskx);
+ str[2] = Tx | (c & Maskx);
+ return 3;
+ }
+
+ /*
+ * four character sequence (21-bit value)
+ * 10000-1FFFFF => T4 Tx Tx Tx
+ */
+ str[0] = T4 | (c >> 3*Bitx);
+ str[1] = Tx | ((c >> 2*Bitx) & Maskx);
+ str[2] = Tx | ((c >> 1*Bitx) & Maskx);
+ str[3] = Tx | (c & Maskx);
+ return 4;
+}
+
+int
+runelen(Rune rune)
+{
+ char str[10];
+
+ return runetochar(str, &rune);
+}
+
+int
+runenlen(const Rune *r, int nrune)
+{
+ int nb, c;
+
+ nb = 0;
+ while(nrune--) {
+ c = *r++;
+ if (c <= Rune1)
+ nb++;
+ else if (c <= Rune2)
+ nb += 2;
+ else if (c <= Rune3)
+ nb += 3;
+ else /* assert(c <= Rune4) */
+ nb += 4;
+ }
+ return nb;
+}
+
+int
+fullrune(const char *str, int n)
+{
+ if (n > 0) {
+ int c = *(uchar*)str;
+ if (c < Tx)
+ return 1;
+ if (n > 1) {
+ if (c < T3)
+ return 1;
+ if (n > 2) {
+ if (c < T4 || n > 3)
+ return 1;
+ }
+ }
+ }
+ return 0;
+}
diff --git a/third_party/libphonenumber/cpp/src/utf/stringpiece.h b/third_party/libphonenumber/cpp/src/utf/stringpiece.h
new file mode 100644
index 0000000..7b56772
--- /dev/null
+++ b/third_party/libphonenumber/cpp/src/utf/stringpiece.h
@@ -0,0 +1,24 @@
+/**
+ * Copyright 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef STRINGS_STRINGPIECE_H_
+#define STRINGS_STRINGPIECE_H_
+
+//#include "third_party/chromium/src/base/string_piece.h"
+#include "base/string_piece.h"
+
+using base::StringPiece;
+
+#endif // STRINGS_STRINGPIECE_H_
diff --git a/third_party/libphonenumber/cpp/src/utf/stringprintf.h b/third_party/libphonenumber/cpp/src/utf/stringprintf.h
new file mode 100644
index 0000000..208d338f
--- /dev/null
+++ b/third_party/libphonenumber/cpp/src/utf/stringprintf.h
@@ -0,0 +1,22 @@
+/**
+ * Copyright 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef STRINGS_STRINGPRINTF_H_
+#define STRINGS_STRINGPRINTF_H_
+
+//#include "third_party/chromium/src/base/string_util.h"
+#include "base/string_util.h"
+
+#endif // STRINGS_STRINGPRINTF_H_
diff --git a/third_party/libphonenumber/cpp/src/utf/unicodetext.cc b/third_party/libphonenumber/cpp/src/utf/unicodetext.cc
new file mode 100644
index 0000000..82c1b42
--- /dev/null
+++ b/third_party/libphonenumber/cpp/src/utf/unicodetext.cc
@@ -0,0 +1,515 @@
+// Copyright (C) 2006 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// Author: Jim Meehan
+
+#include <iostream>
+#include <sstream>
+#include <cassert>
+
+#include "utf/unicodetext.h"
+//#include "base/logging.h"
+#include "utf/stringpiece.h"
+//#include "utf/stringprintf.h"
+#include "utf/utf.h"
+#include "utf/unilib.h"
+
+using std::stringstream;
+using std::max;
+using std::hex;
+using std::dec;
+using std::cerr;
+using std::endl;
+
+static int CodepointDistance(const char* start, const char* end) {
+ int n = 0;
+ // Increment n on every non-trail-byte.
+ for (const char* p = start; p < end; ++p) {
+ n += (*reinterpret_cast<const signed char*>(p) >= -0x40);
+ }
+ return n;
+}
+
+static int CodepointCount(const char* utf8, int len) {
+ return CodepointDistance(utf8, utf8 + len);
+}
+
+UnicodeText::const_iterator::difference_type
+distance(const UnicodeText::const_iterator& first,
+ const UnicodeText::const_iterator& last) {
+ return CodepointDistance(first.it_, last.it_);
+}
+
+// ---------- Utility ----------
+
+static int ConvertToInterchangeValid(char* start, int len) {
+ // This routine is called only when we've discovered that a UTF-8 buffer
+ // that was passed to CopyUTF8, TakeOwnershipOfUTF8, or PointToUTF8
+ // was not interchange valid. This indicates a bug in the caller, and
+ // a LOG(WARNING) is done in that case.
+ // This is similar to CoerceToInterchangeValid, but it replaces each
+ // structurally valid byte with a space, and each non-interchange
+ // character with a space, even when that character requires more
+ // than one byte in UTF8. E.g., "\xEF\xB7\x90" (U+FDD0) is
+ // structurally valid UTF8, but U+FDD0 is not an interchange-valid
+ // code point. The result should contain one space, not three.
+ //
+ // Since the conversion never needs to write more data than it
+ // reads, it is safe to change the buffer in place. It returns the
+ // number of bytes written.
+ char* const in = start;
+ char* out = start;
+ char* const end = start + len;
+ while (start < end) {
+ int good = UniLib::SpanInterchangeValid(start, end - start);
+ if (good > 0) {
+ if (out != start) {
+ memmove(out, start, good);
+ }
+ out += good;
+ start += good;
+ if (start == end) {
+ break;
+ }
+ }
+ // Is the current string invalid UTF8 or just non-interchange UTF8?
+ char32 rune;
+ int n;
+ if (isvalidcharntorune(start, end - start, &rune, &n)) {
+ // structurally valid UTF8, but not interchange valid
+ start += n; // Skip over the whole character.
+ } else { // bad UTF8
+ start += 1; // Skip over just one byte
+ }
+ *out++ = ' ';
+ }
+ return out - in;
+}
+
+
+// *************** Data representation **********
+
+// Note: the copy constructor is undefined.
+
+// After reserve(), resize(), or clear(), we're an owner, not an alias.
+
+void UnicodeText::Repr::reserve(int new_capacity) {
+ // If there's already enough capacity, and we're an owner, do nothing.
+ if (capacity_ >= new_capacity && ours_) return;
+
+ // Otherwise, allocate a new buffer.
+ capacity_ = max(new_capacity, (3 * capacity_) / 2 + 20);
+ char* new_data = new char[capacity_];
+
+ // If there is an old buffer, copy it into the new buffer.
+ if (data_) {
+ memcpy(new_data, data_, size_);
+ if (ours_) delete[] data_; // If we owned the old buffer, free it.
+ }
+ data_ = new_data;
+ ours_ = true; // We own the new buffer.
+ // size_ is unchanged.
+}
+
+void UnicodeText::Repr::resize(int new_size) {
+ if (new_size == 0) {
+ clear();
+ } else {
+ if (!ours_ || new_size > capacity_) reserve(new_size);
+ // Clear the memory in the expanded part.
+ if (size_ < new_size) memset(data_ + size_, 0, new_size - size_);
+ size_ = new_size;
+ ours_ = true;
+ }
+}
+
+// This implementation of clear() deallocates the buffer if we're an owner.
+// That's not strictly necessary; we could just set size_ to 0.
+void UnicodeText::Repr::clear() {
+ if (ours_) delete[] data_;
+ data_ = NULL;
+ size_ = capacity_ = 0;
+ ours_ = true;
+}
+
+void UnicodeText::Repr::Copy(const char* data, int size) {
+ resize(size);
+ memcpy(data_, data, size);
+}
+
+void UnicodeText::Repr::TakeOwnershipOf(char* data, int size, int capacity) {
+ if (data == data_) return; // We already own this memory. (Weird case.)
+ if (ours_ && data_) delete[] data_; // If we owned the old buffer, free it.
+ data_ = data;
+ size_ = size;
+ capacity_ = capacity;
+ ours_ = true;
+}
+
+void UnicodeText::Repr::PointTo(const char* data, int size) {
+ if (ours_ && data_) delete[] data_; // If we owned the old buffer, free it.
+ data_ = const_cast<char*>(data);
+ size_ = size;
+ capacity_ = size;
+ ours_ = false;
+}
+
+void UnicodeText::Repr::append(const char* bytes, int byte_length) {
+ reserve(size_ + byte_length);
+ memcpy(data_ + size_, bytes, byte_length);
+ size_ += byte_length;
+}
+
+string UnicodeText::Repr::DebugString() const {
+ stringstream ss;
+
+ ss << "{Repr " << hex << this << " data=" << data_ << " size=" << dec
+ << size_ << " capacity=" << capacity_ << " "
+ << (ours_ ? "Owned" : "Alias") << "}";
+
+ string result;
+ ss >> result;
+
+ return result;
+}
+
+
+
+// *************** UnicodeText ******************
+
+// ----- Constructors -----
+
+// Default constructor
+UnicodeText::UnicodeText() {
+}
+
+// Copy constructor
+UnicodeText::UnicodeText(const UnicodeText& src) {
+ Copy(src);
+}
+
+// Substring constructor
+UnicodeText::UnicodeText(const UnicodeText::const_iterator& first,
+ const UnicodeText::const_iterator& last) {
+ assert(first <= last && "Incompatible iterators");
+ repr_.append(first.it_, last.it_ - first.it_);
+}
+
+string UnicodeText::UTF8Substring(const const_iterator& first,
+ const const_iterator& last) {
+ assert(first <= last && "Incompatible iterators");
+ return string(first.it_, last.it_ - first.it_);
+}
+
+
+// ----- Copy -----
+
+UnicodeText& UnicodeText::operator=(const UnicodeText& src) {
+ if (this != &src) {
+ Copy(src);
+ }
+ return *this;
+}
+
+UnicodeText& UnicodeText::Copy(const UnicodeText& src) {
+ repr_.Copy(src.repr_.data_, src.repr_.size_);
+ return *this;
+}
+
+UnicodeText& UnicodeText::CopyUTF8(const char* buffer, int byte_length) {
+ repr_.Copy(buffer, byte_length);
+ if (!UniLib:: IsInterchangeValid(buffer, byte_length)) {
+ cerr << "UTF-8 buffer is not interchange-valid." << endl;
+ repr_.size_ = ConvertToInterchangeValid(repr_.data_, byte_length);
+ }
+ return *this;
+}
+
+UnicodeText& UnicodeText::UnsafeCopyUTF8(const char* buffer,
+ int byte_length) {
+ repr_.Copy(buffer, byte_length);
+ return *this;
+}
+
+// ----- TakeOwnershipOf -----
+
+UnicodeText& UnicodeText::TakeOwnershipOfUTF8(char* buffer,
+ int byte_length,
+ int byte_capacity) {
+ repr_.TakeOwnershipOf(buffer, byte_length, byte_capacity);
+ if (!UniLib:: IsInterchangeValid(buffer, byte_length)) {
+ cerr << "UTF-8 buffer is not interchange-valid." << endl;
+ repr_.size_ = ConvertToInterchangeValid(repr_.data_, byte_length);
+ }
+ return *this;
+}
+
+UnicodeText& UnicodeText::UnsafeTakeOwnershipOfUTF8(char* buffer,
+ int byte_length,
+ int byte_capacity) {
+ repr_.TakeOwnershipOf(buffer, byte_length, byte_capacity);
+ return *this;
+}
+
+// ----- PointTo -----
+
+UnicodeText& UnicodeText::PointToUTF8(const char* buffer, int byte_length) {
+ if (UniLib:: IsInterchangeValid(buffer, byte_length)) {
+ repr_.PointTo(buffer, byte_length);
+ } else {
+ cerr << "UTF-8 buffer is not interchange-valid." << endl;
+ repr_.Copy(buffer, byte_length);
+ repr_.size_ = ConvertToInterchangeValid(repr_.data_, byte_length);
+ }
+ return *this;
+}
+
+UnicodeText& UnicodeText::UnsafePointToUTF8(const char* buffer,
+ int byte_length) {
+ repr_.PointTo(buffer, byte_length);
+ return *this;
+}
+
+UnicodeText& UnicodeText::PointTo(const UnicodeText& src) {
+ repr_.PointTo(src.repr_.data_, src.repr_.size_);
+ return *this;
+}
+
+UnicodeText& UnicodeText::PointTo(const const_iterator &first,
+ const const_iterator &last) {
+ assert(first <= last && " Incompatible iterators");
+ repr_.PointTo(first.utf8_data(), last.utf8_data() - first.utf8_data());
+ return *this;
+}
+
+// ----- Append -----
+
+UnicodeText& UnicodeText::append(const UnicodeText& u) {
+ repr_.append(u.repr_.data_, u.repr_.size_);
+ return *this;
+}
+
+UnicodeText& UnicodeText::append(const const_iterator& first,
+ const const_iterator& last) {
+ assert(first <= last && "Incompatible iterators");
+ repr_.append(first.it_, last.it_ - first.it_);
+ return *this;
+}
+
+UnicodeText& UnicodeText::UnsafeAppendUTF8(const char* utf8, int len) {
+ repr_.append(utf8, len);
+ return *this;
+}
+
+// ----- substring searching -----
+
+UnicodeText::const_iterator UnicodeText::find(const UnicodeText& look,
+ const_iterator start_pos) const {
+ assert(start_pos.utf8_data() >= utf8_data());
+ assert(start_pos.utf8_data() <= utf8_data() + utf8_length());
+ return UnsafeFind(look, start_pos);
+}
+
+UnicodeText::const_iterator UnicodeText::find(const UnicodeText& look) const {
+ return UnsafeFind(look, begin());
+}
+
+UnicodeText::const_iterator UnicodeText::UnsafeFind(
+ const UnicodeText& look, const_iterator start_pos) const {
+ // Due to the magic of the UTF8 encoding, searching for a sequence of
+ // letters is equivalent to substring search.
+ StringPiece searching(utf8_data(), utf8_length());
+ StringPiece look_piece(look.utf8_data(), look.utf8_length());
+ StringPiece::size_type found =
+ searching.find(look_piece, start_pos.utf8_data() - utf8_data());
+ if (found == StringPiece::npos) return end();
+ return const_iterator(utf8_data() + found);
+}
+
+bool UnicodeText::HasReplacementChar() const {
+ // Equivalent to:
+ // UnicodeText replacement_char;
+ // replacement_char.push_back(0xFFFD);
+ // return find(replacement_char) != end();
+ StringPiece searching(utf8_data(), utf8_length());
+ StringPiece looking_for("\xEF\xBF\xBD", 3);
+ return searching.find(looking_for) != StringPiece::npos;
+}
+
+// ----- other methods -----
+
+// Clear operator
+void UnicodeText::clear() {
+ repr_.clear();
+}
+
+// Destructor
+UnicodeText::~UnicodeText() {}
+
+
+void UnicodeText::push_back(char32 c) {
+ if (UniLib::IsValidCodepoint(c)) {
+ char buf[UTFmax];
+ int len = runetochar(buf, &c);
+ if (UniLib::IsInterchangeValid(buf, len)) {
+ repr_.append(buf, len);
+ } else {
+ cerr << "Unicode value 0x" << hex << c
+ << " is not valid for interchange" << endl;
+ repr_.append(" ", 1);
+ }
+ } else {
+ cerr << "Illegal Unicode value: 0x" << hex << c << endl;
+ repr_.append(" ", 1);
+ }
+}
+
+int UnicodeText::size() const {
+ return CodepointCount(repr_.data_, repr_.size_);
+}
+
+bool operator==(const UnicodeText& lhs, const UnicodeText& rhs) {
+ if (&lhs == &rhs) return true;
+ if (lhs.repr_.size_ != rhs.repr_.size_) return false;
+ return memcmp(lhs.repr_.data_, rhs.repr_.data_, lhs.repr_.size_) == 0;
+}
+
+string UnicodeText::DebugString() const {
+ stringstream ss;
+
+ ss << "{UnicodeText " << hex << this << dec << " chars="
+ << size() << " repr=" << repr_.DebugString() << "}";
+#if 0
+ return StringPrintf("{UnicodeText %p chars=%d repr=%s}",
+ this,
+ size(),
+ repr_.DebugString().c_str());
+#endif
+ string result;
+ ss >> result;
+
+ return result;
+}
+
+
+// ******************* UnicodeText::const_iterator *********************
+
+// The implementation of const_iterator would be nicer if it
+// inherited from boost::iterator_facade
+// (http://boost.org/libs/iterator/doc/iterator_facade.html).
+
+UnicodeText::const_iterator::const_iterator() : it_(0) {}
+
+UnicodeText::const_iterator::const_iterator(const const_iterator& other)
+ : it_(other.it_) {
+}
+
+UnicodeText::const_iterator&
+UnicodeText::const_iterator::operator=(const const_iterator& other) {
+ if (&other != this)
+ it_ = other.it_;
+ return *this;
+}
+
+UnicodeText::const_iterator UnicodeText::begin() const {
+ return const_iterator(repr_.data_);
+}
+
+UnicodeText::const_iterator UnicodeText::end() const {
+ return const_iterator(repr_.data_ + repr_.size_);
+}
+
+bool operator<(const UnicodeText::const_iterator& lhs,
+ const UnicodeText::const_iterator& rhs) {
+ return lhs.it_ < rhs.it_;
+}
+
+char32 UnicodeText::const_iterator::operator*() const {
+ // (We could call chartorune here, but that does some
+ // error-checking, and we're guaranteed that our data is valid
+ // UTF-8. Also, we expect this routine to be called very often. So
+ // for speed, we do the calculation ourselves.)
+
+ // Convert from UTF-8
+ int byte1 = it_[0];
+ if (byte1 < 0x80)
+ return byte1;
+
+ int byte2 = it_[1];
+ if (byte1 < 0xE0)
+ return ((byte1 & 0x1F) << 6)
+ | (byte2 & 0x3F);
+
+ int byte3 = it_[2];
+ if (byte1 < 0xF0)
+ return ((byte1 & 0x0F) << 12)
+ | ((byte2 & 0x3F) << 6)
+ | (byte3 & 0x3F);
+
+ int byte4 = it_[3];
+ return ((byte1 & 0x07) << 18)
+ | ((byte2 & 0x3F) << 12)
+ | ((byte3 & 0x3F) << 6)
+ | (byte4 & 0x3F);
+}
+
+UnicodeText::const_iterator& UnicodeText::const_iterator::operator++() {
+ it_ += UniLib::OneCharLen(it_);
+ return *this;
+}
+
+UnicodeText::const_iterator& UnicodeText::const_iterator::operator--() {
+ while (UniLib::IsTrailByte(*--it_));
+ return *this;
+}
+
+int UnicodeText::const_iterator::get_utf8(char* utf8_output) const {
+ utf8_output[0] = it_[0];
+ if (static_cast<unsigned char>(it_[0]) < 0x80)
+ return 1;
+
+ utf8_output[1] = it_[1];
+ if (static_cast<unsigned char>(it_[0]) < 0xE0)
+ return 2;
+
+ utf8_output[2] = it_[2];
+ if (static_cast<unsigned char>(it_[0]) < 0xF0)
+ return 3;
+
+ utf8_output[3] = it_[3];
+ return 4;
+}
+
+
+UnicodeText::const_iterator UnicodeText::MakeIterator(const char* p) const {
+ assert(p != NULL);
+ const char* start = utf8_data();
+ int len = utf8_length();
+ const char* end = start + len;
+ assert(p >= start);
+ assert(p <= end);
+ assert(p == end || !UniLib::IsTrailByte(*p));
+ return const_iterator(p);
+}
+
+string UnicodeText::const_iterator::DebugString() const {
+ stringstream ss;
+
+ ss << "{iter " << hex << it_ << "}";
+ string result;
+ ss >> result;
+
+ return result;
+}
+
diff --git a/third_party/libphonenumber/cpp/src/utf/unicodetext.h b/third_party/libphonenumber/cpp/src/utf/unicodetext.h
new file mode 100644
index 0000000..fb37a33
--- /dev/null
+++ b/third_party/libphonenumber/cpp/src/utf/unicodetext.h
@@ -0,0 +1,456 @@
+// Copyright (C) 2006 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// Author: Jim Meehan
+
+#ifndef UTIL_UTF8_UNICODETEXT_H__
+#define UTIL_UTF8_UNICODETEXT_H__
+
+#include <iterator>
+#include <string>
+#include <utility>
+#include "base/basictypes.h"
+//#include "util/utf8/public/config.h"
+
+using std::string;
+using std::bidirectional_iterator_tag;
+using std::pair;
+
+// ***************************** UnicodeText **************************
+//
+// A UnicodeText object is a container for a sequence of Unicode
+// codepoint values. It has default, copy, and assignment constructors.
+// Data can be appended to it from another UnicodeText, from
+// iterators, or from a single codepoint.
+//
+// The internal representation of the text is UTF-8. Since UTF-8 is a
+// variable-width format, UnicodeText does not provide random access
+// to the text, and changes to the text are permitted only at the end.
+//
+// The UnicodeText class defines a const_iterator. The dereferencing
+// operator (*) returns a codepoint (char32). The iterator is a
+// bidirectional, read-only iterator. It becomes invalid if the text
+// is changed.
+//
+// There are methods for appending and retrieving UTF-8 data directly.
+// The 'utf8_data' method returns a const char* that contains the
+// UTF-8-encoded version of the text; 'utf8_length' returns the number
+// of bytes in the UTF-8 data. An iterator's 'get' method stores up to
+// 4 bytes of UTF-8 data in a char array and returns the number of
+// bytes that it stored.
+//
+// Codepoints are integers in the range [0, 0xD7FF] or [0xE000,
+// 0x10FFFF], but UnicodeText has the additional restriction that it
+// can contain only those characters that are valid for interchange on
+// the Web. This excludes all of the control codes except for carriage
+// return, line feed, and horizontal tab. It also excludes
+// non-characters, but codepoints that are in the Private Use regions
+// are allowed, as are codepoints that are unassigned. (See the
+// Unicode reference for details.) The function UniLib::IsInterchangeValid
+// can be used as a test for this property.
+//
+// UnicodeTexts are safe. Every method that constructs or modifies a
+// UnicodeText tests for interchange-validity, and will substitute a
+// space for the invalid data. Such cases are reported via
+// LOG(WARNING).
+//
+// MEMORY MANAGEMENT: copy, take ownership, or point to
+//
+// A UnicodeText is either an "owner", meaning that it owns the memory
+// for the data buffer and will free it when the UnicodeText is
+// destroyed, or it is an "alias", meaning that it does not.
+//
+// There are three methods for storing UTF-8 data in a UnicodeText:
+//
+// CopyUTF8(buffer, len) copies buffer.
+//
+// TakeOwnershipOfUTF8(buffer, size, capacity) takes ownership of buffer.
+//
+// PointToUTF8(buffer, size) creates an alias pointing to buffer.
+//
+// All three methods perform a validity check on the buffer. There are
+// private, "unsafe" versions of these functions that bypass the
+// validity check. They are used internally and by friend-functions
+// that are handling UTF-8 data that has already been validated.
+//
+// The purpose of an alias is to avoid making an unnecessary copy of a
+// UTF-8 buffer while still providing access to the Unicode values
+// within that text through iterators or the fast scanners that are
+// based on UTF-8 state tables. The lifetime of an alias must not
+// exceed the lifetime of the buffer from which it was constructed.
+//
+// The semantics of an alias might be described as "copy on write or
+// repair." The source data is never modified. If push_back() or
+// append() is called on an alias, a copy of the data will be created,
+// and the UnicodeText will become an owner. If clear() is called on
+// an alias, it becomes an (empty) owner.
+//
+// The copy constructor and the assignment operator produce an owner.
+// That is, after direct initialization ("UnicodeText x(y);") or copy
+// initialization ("UnicodeText x = y;") x will be an owner, even if y
+// was an alias. The assignment operator ("x = y;") also produces an
+// owner unless x and y are the same object and y is an alias.
+//
+// Aliases should be used with care. If the source from which an alias
+// was created is freed, or if the contents are changed, while the
+// alias is still in use, fatal errors could result. But it can be
+// quite useful to have a UnicodeText "window" through which to see a
+// UTF-8 buffer without having to pay the price of making a copy.
+//
+// UTILITIES
+//
+// The interfaces in util/utf8/public/textutils.h provide higher-level
+// utilities for dealing with UnicodeTexts, including routines for
+// creating UnicodeTexts (both owners and aliases) from UTF-8 buffers or
+// strings, creating strings from UnicodeTexts, normalizing text for
+// efficient matching or display, and others.
+
+class UnicodeText {
+ public:
+ class const_iterator;
+
+ typedef char32 value_type;
+
+ // Constructors. These always produce owners.
+ UnicodeText(); // Create an empty text.
+ UnicodeText(const UnicodeText& src); // copy constructor
+ // Construct a substring (copies the data).
+ UnicodeText(const const_iterator& first, const const_iterator& last);
+
+ // Assignment operator. This copies the data and produces an owner
+ // unless this == &src, e.g., "x = x;", which is a no-op.
+ UnicodeText& operator=(const UnicodeText& src);
+
+ // x.Copy(y) copies the data from y into x.
+ UnicodeText& Copy(const UnicodeText& src);
+ inline UnicodeText& assign(const UnicodeText& src) { return Copy(src); }
+
+ // x.PointTo(y) changes x so that it points to y's data.
+ // It does not copy y or take ownership of y's data.
+ UnicodeText& PointTo(const UnicodeText& src);
+ UnicodeText& PointTo(const const_iterator& first,
+ const const_iterator& last);
+
+ ~UnicodeText();
+
+ void clear(); // Clear text.
+ bool empty() { return repr_.size_ == 0; } // Test if text is empty.
+
+ // Add a codepoint to the end of the text.
+ // If the codepoint is not interchange-valid, add a space instead
+ // and log a warning.
+ void push_back(char32 codepoint);
+
+ // Generic appending operation.
+ // iterator_traits<ForwardIterator>::value_type must be implicitly
+ // convertible to char32. Typical uses of this method might include:
+ // char32 chars[] = {0x1, 0x2, ...};
+ // vector<char32> more_chars = ...;
+ // utext.append(chars, chars+arraysize(chars));
+ // utext.append(more_chars.begin(), more_chars.end());
+ template<typename ForwardIterator>
+ UnicodeText& append(ForwardIterator first, const ForwardIterator last) {
+ while (first != last) { push_back(*first++); }
+ return *this;
+ }
+
+ // A specialization of the generic append() method.
+ UnicodeText& append(const const_iterator& first, const const_iterator& last);
+
+ // An optimization of append(source.begin(), source.end()).
+ UnicodeText& append(const UnicodeText& source);
+
+ int size() const; // the number of Unicode characters (codepoints)
+
+ friend bool operator==(const UnicodeText& lhs, const UnicodeText& rhs);
+ friend bool operator!=(const UnicodeText& lhs, const UnicodeText& rhs);
+
+ class const_iterator {
+ typedef const_iterator CI;
+ public:
+ typedef bidirectional_iterator_tag iterator_category;
+ typedef char32 value_type;
+ typedef ptrdiff_t difference_type;
+ typedef void pointer; // (Not needed.)
+ typedef const char32 reference; // (Needed for const_reverse_iterator)
+
+ // Iterators are default-constructible.
+ const_iterator();
+
+ // It's safe to make multiple passes over a UnicodeText.
+ const_iterator(const const_iterator& other);
+ const_iterator& operator=(const const_iterator& other);
+
+ char32 operator*() const; // Dereference
+
+ const_iterator& operator++(); // Advance (++iter)
+ const_iterator operator++(int) { // (iter++)
+ const_iterator result(*this);
+ ++*this;
+ return result;
+ }
+
+ const_iterator& operator--(); // Retreat (--iter)
+ const_iterator operator--(int) { // (iter--)
+ const_iterator result(*this);
+ --*this;
+ return result;
+ }
+
+ // We love relational operators.
+ friend bool operator==(const CI& lhs, const CI& rhs) {
+ return lhs.it_ == rhs.it_; }
+ friend bool operator!=(const CI& lhs, const CI& rhs) {
+ return !(lhs == rhs); }
+ friend bool operator<(const CI& lhs, const CI& rhs);
+ friend bool operator>(const CI& lhs, const CI& rhs) {
+ return rhs < lhs; }
+ friend bool operator<=(const CI& lhs, const CI& rhs) {
+ return !(rhs < lhs); }
+ friend bool operator>=(const CI& lhs, const CI& rhs) {
+ return !(lhs < rhs); }
+
+ friend difference_type distance(const CI& first, const CI& last);
+
+ // UTF-8-specific methods
+ // Store the UTF-8 encoding of the current codepoint into buf,
+ // which must be at least 4 bytes long. Return the number of
+ // bytes written.
+ int get_utf8(char* buf) const;
+ // Return the iterator's pointer into the UTF-8 data.
+ const char* utf8_data() const { return it_; }
+
+ string DebugString() const;
+
+ private:
+ friend class UnicodeText;
+ friend class UnicodeTextUtils;
+ friend class UTF8StateTableProperty;
+ explicit const_iterator(const char* it) : it_(it) {}
+
+ const char* it_;
+ };
+
+ const_iterator begin() const;
+ const_iterator end() const;
+
+ class const_reverse_iterator : public std::reverse_iterator<const_iterator> {
+ public:
+ const_reverse_iterator(const_iterator it) :
+ std::reverse_iterator<const_iterator>(it) {}
+ const char* utf8_data() const {
+ const_iterator tmp_it = base();
+ return (--tmp_it).utf8_data();
+ }
+ int get_utf8(char* buf) const {
+ const_iterator tmp_it = base();
+ return (--tmp_it).get_utf8(buf);
+ }
+ };
+ const_reverse_iterator rbegin() const {
+ return const_reverse_iterator(end());
+ }
+ const_reverse_iterator rend() const {
+ return const_reverse_iterator(begin());
+ }
+
+ // Substring searching. Returns the beginning of the first
+ // occurrence of "look", or end() if not found.
+ const_iterator find(const UnicodeText& look, const_iterator start_pos) const;
+ // Equivalent to find(look, begin())
+ const_iterator find(const UnicodeText& look) const;
+
+ // Returns whether this contains the character U+FFFD. This can
+ // occur, for example, if the input to Encodings::Decode() had byte
+ // sequences that were invalid in the source encoding.
+ bool HasReplacementChar() const;
+
+ // UTF-8-specific methods
+ //
+ // Return the data, length, and capacity of UTF-8-encoded version of
+ // the text. Length and capacity are measured in bytes.
+ const char* utf8_data() const { return repr_.data_; }
+ int utf8_length() const { return repr_.size_; }
+ int utf8_capacity() const { return repr_.capacity_; }
+
+ // Return the UTF-8 data as a string.
+ static string UTF8Substring(const const_iterator& first,
+ const const_iterator& last);
+
+ // There are three methods for initializing a UnicodeText from UTF-8
+ // data. They vary in details of memory management. In all cases,
+ // the data is tested for interchange-validity. If it is not
+ // interchange-valid, a LOG(WARNING) is issued, and each
+ // structurally invalid byte and each interchange-invalid codepoint
+ // is replaced with a space.
+
+ // x.CopyUTF8(buf, len) copies buf into x.
+ UnicodeText& CopyUTF8(const char* utf8_buffer, int byte_length);
+
+ // x.TakeOwnershipOfUTF8(buf, len, capacity). x takes ownership of
+ // buf. buf is not copied.
+ UnicodeText& TakeOwnershipOfUTF8(char* utf8_buffer,
+ int byte_length,
+ int byte_capacity);
+
+ // x.PointToUTF8(buf,len) changes x so that it points to buf
+ // ("becomes an alias"). It does not take ownership or copy buf.
+ // If the buffer is not valid, this has the same effect as
+ // CopyUTF8(utf8_buffer, byte_length).
+ UnicodeText& PointToUTF8(const char* utf8_buffer, int byte_length);
+
+ // Occasionally it is necessary to use functions that operate on the
+ // pointer returned by utf8_data(). MakeIterator(p) provides a way
+ // to get back to the UnicodeText level. It uses CHECK to ensure
+ // that p is a pointer within this object's UTF-8 data, and that it
+ // points to the beginning of a character.
+ const_iterator MakeIterator(const char* p) const;
+
+ string DebugString() const;
+
+ private:
+ friend class const_iterator;
+ friend class UnicodeTextUtils;
+
+ class Repr { // A byte-string.
+ public:
+ char* data_;
+ int size_;
+ int capacity_;
+ bool ours_; // Do we own data_?
+
+ Repr() : data_(NULL), size_(0), capacity_(0), ours_(true) {}
+ ~Repr() { if (ours_) delete[] data_; }
+
+ void clear();
+ void reserve(int capacity);
+ void resize(int size);
+
+ void append(const char* bytes, int byte_length);
+ void Copy(const char* data, int size);
+ void TakeOwnershipOf(char* data, int size, int capacity);
+ void PointTo(const char* data, int size);
+
+ string DebugString() const;
+
+ private:
+ Repr& operator=(const Repr&);
+ Repr(const Repr& other);
+ };
+
+ Repr repr_;
+
+ // UTF-8-specific private methods.
+ // These routines do not perform a validity check when compiled
+ // in opt mode.
+ // It is an error to call these methods with UTF-8 data that
+ // is not interchange-valid.
+ //
+ UnicodeText& UnsafeCopyUTF8(const char* utf8_buffer, int byte_length);
+ UnicodeText& UnsafeTakeOwnershipOfUTF8(
+ char* utf8_buffer, int byte_length, int byte_capacity);
+ UnicodeText& UnsafePointToUTF8(const char* utf8_buffer, int byte_length);
+ UnicodeText& UnsafeAppendUTF8(const char* utf8_buffer, int byte_length);
+ const_iterator UnsafeFind(const UnicodeText& look,
+ const_iterator start_pos) const;
+};
+
+bool operator==(const UnicodeText& lhs, const UnicodeText& rhs);
+
+inline bool operator!=(const UnicodeText& lhs, const UnicodeText& rhs) {
+ return !(lhs == rhs);
+}
+
+// UnicodeTextRange is a pair of iterators, useful for specifying text
+// segments. If the iterators are ==, the segment is empty.
+typedef pair<UnicodeText::const_iterator,
+ UnicodeText::const_iterator> UnicodeTextRange;
+
+inline bool UnicodeTextRangeIsEmpty(const UnicodeTextRange& r) {
+ return r.first == r.second;
+}
+
+
+// *************************** Utilities *************************
+
+// A factory function for creating a UnicodeText from a buffer of
+// UTF-8 data. The new UnicodeText takes ownership of the buffer. (It
+// is an "owner.")
+//
+// Each byte that is structurally invalid will be replaced with a
+// space. Each codepoint that is interchange-invalid will also be
+// replaced with a space, even if the codepoint was represented with a
+// multibyte sequence in the UTF-8 data.
+//
+inline UnicodeText MakeUnicodeTextAcceptingOwnership(
+ char* utf8_buffer, int byte_length, int byte_capacity) {
+ return UnicodeText().TakeOwnershipOfUTF8(
+ utf8_buffer, byte_length, byte_capacity);
+}
+
+// A factory function for creating a UnicodeText from a buffer of
+// UTF-8 data. The new UnicodeText does not take ownership of the
+// buffer. (It is an "alias.")
+//
+inline UnicodeText MakeUnicodeTextWithoutAcceptingOwnership(
+ const char* utf8_buffer, int byte_length) {
+ return UnicodeText().PointToUTF8(utf8_buffer, byte_length);
+}
+
+// Create a UnicodeText from a UTF-8 string or buffer.
+//
+// If do_copy is true, then a copy of the string is made. The copy is
+// owned by the resulting UnicodeText object and will be freed when
+// the object is destroyed. This UnicodeText object is referred to
+// as an "owner."
+//
+// If do_copy is false, then no copy is made. The resulting
+// UnicodeText object does NOT take ownership of the string; in this
+// case, the lifetime of the UnicodeText object must not exceed the
+// lifetime of the string. This Unicodetext object is referred to as
+// an "alias." This is the same as MakeUnicodeTextWithoutAcceptingOwnership.
+//
+// If the input string does not contain valid UTF-8, then a copy is
+// made (as if do_copy were true) and coerced to valid UTF-8 by
+// replacing each invalid byte with a space.
+//
+inline UnicodeText UTF8ToUnicodeText(const char* utf8_buf, int len,
+ bool do_copy) {
+ UnicodeText t;
+ if (do_copy) {
+ t.CopyUTF8(utf8_buf, len);
+ } else {
+ t.PointToUTF8(utf8_buf, len);
+ }
+ return t;
+}
+
+inline UnicodeText UTF8ToUnicodeText(const string& utf_string, bool do_copy) {
+ return UTF8ToUnicodeText(utf_string.data(), utf_string.size(), do_copy);
+}
+
+inline UnicodeText UTF8ToUnicodeText(const char* utf8_buf, int len) {
+ return UTF8ToUnicodeText(utf8_buf, len, true);
+}
+inline UnicodeText UTF8ToUnicodeText(const string& utf8_string) {
+ return UTF8ToUnicodeText(utf8_string, true);
+}
+
+// Return a string containing the UTF-8 encoded version of all the
+// Unicode characters in t.
+inline string UnicodeTextToUTF8(const UnicodeText& t) {
+ return string(t.utf8_data(), t.utf8_length());
+}
+
+#endif // UTIL_UTF8_UNICODETEXT_H__
diff --git a/third_party/libphonenumber/cpp/src/utf/unilib.cc b/third_party/libphonenumber/cpp/src/utf/unilib.cc
new file mode 100644
index 0000000..6d90954
--- /dev/null
+++ b/third_party/libphonenumber/cpp/src/utf/unilib.cc
@@ -0,0 +1,64 @@
+/**
+ * Copyright 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// Author: Shawn Ligocki
+
+#include "utf/unilib.h"
+
+#include "base/basictypes.h"
+#include "utf/utf.h"
+
+namespace UniLib {
+
+namespace {
+
+// MOE: start_strip
+// MOE: end_strip
+// Codepoints not allowed for interchange are:
+// C0 (ASCII) controls: U+0000 to U+001F excluding Space (SP, U+0020),
+// Horizontal Tab (HT, U+0009), Line-Feed (LF, U+000A),
+// Form Feed (FF, U+000C) and Carriage-Return (CR, U+000D)
+// C1 controls: U+007F to U+009F
+// Surrogates: U+D800 to U+DFFF
+// Non-characters: U+FDD0 to U+FDEF and U+xxFFFE to U+xxFFFF for all xx
+inline bool IsInterchangeValidCodepoint(char32 c) {
+ return !((c >= 0x00 && c <= 0x08) || c == 0x0B || (c >= 0x0E && c <= 0x1F) ||
+ (c >= 0x7F && c <= 0x9F) ||
+ (c >= 0xD800 && c <= 0xDFFF) ||
+ (c >= 0xFDD0 && c <= 0xFDEF) || (c&0xFFFE) == 0xFFFE);
+}
+
+} // namespace
+
+int SpanInterchangeValid(const char* begin, int byte_length) {
+ char32 rune;
+ const char* p = begin;
+ const char* end = begin + byte_length;
+ while (p < end) {
+ int bytes_consumed = charntorune(&rune, p, end - p);
+ // We want to accept Runeerror == U+FFFD as a valid char, but it is used
+ // by chartorune to indicate error. Luckily, the real codepoint is size 3
+ // while errors return bytes_consumed == 1.
+ if ((rune == Runeerror && bytes_consumed == 1) ||
+ !IsInterchangeValidCodepoint(rune)) {
+ break; // Found
+ }
+ p += bytes_consumed;
+ }
+ return p - begin;
+}
+
+} // namespace UniLib
diff --git a/third_party/libphonenumber/cpp/src/utf/unilib.h b/third_party/libphonenumber/cpp/src/utf/unilib.h
new file mode 100644
index 0000000..4cfc787
--- /dev/null
+++ b/third_party/libphonenumber/cpp/src/utf/unilib.h
@@ -0,0 +1,95 @@
+/**
+ * Copyright 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// Routines to do manipulation of Unicode characters or text
+//
+// The StructurallyValid routines accept buffers of arbitrary bytes.
+// For CoerceToStructurallyValid(), the input buffer and output buffers may
+// point to exactly the same memory.
+//
+// In all other cases, the UTF-8 string must be structurally valid and
+// have all codepoints in the range U+0000 to U+D7FF or U+E000 to U+10FFFF.
+// Debug builds take a fatal error for invalid UTF-8 input.
+// The input and output buffers may not overlap at all.
+//
+// The char32 routines are here only for convenience; they convert to UTF-8
+// internally and use the UTF-8 routines.
+
+#ifndef UTIL_UTF8_UNILIB_H__
+#define UTIL_UTF8_UNILIB_H__
+
+#include <string>
+#include "base/basictypes.h"
+
+namespace UniLib {
+
+// Returns true unless a surrogate code point
+inline bool IsValidCodepoint(char32 c) {
+ // In the range [0, 0xD800) or [0xE000, 0x10FFFF]
+ return (static_cast<uint32>(c) < 0xD800)
+ || (c >= 0xE000 && c <= 0x10FFFF);
+}
+
+// Table of UTF-8 character lengths, based on first byte
+static const unsigned char kUTF8LenTbl[256] = {
+ 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,
+
+ 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,
+ 2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,
+ 3,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3, 4,4,4,4,4,4,4,4, 4,4,4,4,4,4,4,4
+};
+
+// Return length of a single UTF-8 source character
+inline int OneCharLen(const char* src) {
+ return kUTF8LenTbl[*reinterpret_cast<const uint8*>(src)];
+}
+
+// Return length of a single UTF-8 source character
+inline int OneCharLen(const uint8* src) {
+ return kUTF8LenTbl[*src];
+}
+
+// Return true if this byte is a trailing UTF-8 byte (10xx xxxx)
+inline bool IsTrailByte(char x) {
+ // return (x & 0xC0) == 0x80;
+ // Since trail bytes are always in [0x80, 0xBF], we can optimize:
+ return static_cast<signed char>(x) < -0x40;
+}
+
+// Returns the length in bytes of the prefix of src that is all
+// interchange valid UTF-8
+int SpanInterchangeValid(const char* src, int byte_length);
+inline int SpanInterchangeValid(const std::string& src) {
+ return SpanInterchangeValid(src.data(), src.size());
+}
+
+// Returns true if the source is all interchange valid UTF-8
+// "Interchange valid" is a stronger than structurally valid --
+// no C0 or C1 control codes (other than CR LF HT FF) and no non-characters.
+inline bool IsInterchangeValid(const char* src, int byte_length) {
+ return (byte_length == SpanInterchangeValid(src, byte_length));
+}
+inline bool IsInterchangeValid(const std::string& src) {
+ return IsInterchangeValid(src.data(), src.size());
+}
+
+} // namespace UniLib
+
+#endif // UTIL_UTF8_PUBLIC_UNILIB_H_
diff --git a/third_party/libphonenumber/cpp/src/utf/utf.h b/third_party/libphonenumber/cpp/src/utf/utf.h
new file mode 100644
index 0000000..f4fd482
--- /dev/null
+++ b/third_party/libphonenumber/cpp/src/utf/utf.h
@@ -0,0 +1,251 @@
+/*
+ * The authors of this software are Rob Pike and Ken Thompson.
+ * Copyright (c) 1998-2002 by Lucent Technologies.
+ * Portions Copyright (c) 2009 The Go Authors. All rights reserved.
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose without fee is hereby granted, provided that this entire notice
+ * is included in all copies of any software which is or includes a copy
+ * or modification of this software and in all copies of the supporting
+ * documentation for such software.
+ * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES MAKE ANY
+ * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
+ * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
+ */
+
+#ifndef _UTFH_
+#define _UTFH_ 1
+
+// stdint.h content doesn't seem to be used in this file and doesn't exist on
+// Windows, therefore we comment it out here so that the code could be compiled
+// on Windows.
+//#include <stdint.h>
+
+typedef signed int Rune; /* Code-point values in Unicode 4.0 are 21 bits wide.*/
+
+enum
+{
+ UTFmax = 4, /* maximum bytes per rune */
+ Runesync = 0x80, /* cannot represent part of a UTF sequence (<) */
+ Runeself = 0x80, /* rune and UTF sequences are the same (<) */
+ Runeerror = 0xFFFD, /* decoding error in UTF */
+ Runemax = 0x10FFFF, /* maximum rune value */
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * rune routines
+ */
+
+/*
+ * These routines were written by Rob Pike and Ken Thompson
+ * and first appeared in Plan 9.
+ * SEE ALSO
+ * utf (7)
+ * tcs (1)
+*/
+
+// runetochar copies (encodes) one rune, pointed to by r, to at most
+// UTFmax bytes starting at s and returns the number of bytes generated.
+
+int runetochar(char* s, const Rune* r);
+
+
+// chartorune copies (decodes) at most UTFmax bytes starting at s to
+// one rune, pointed to by r, and returns the number of bytes consumed.
+// If the input is not exactly in UTF format, chartorune will set *r
+// to Runeerror and return 1.
+//
+// Note: There is no special case for a "null-terminated" string. A
+// string whose first byte has the value 0 is the UTF8 encoding of the
+// Unicode value 0 (i.e., ASCII NULL). A byte value of 0 is illegal
+// anywhere else in a UTF sequence.
+
+int chartorune(Rune* r, const char* s);
+
+
+// charntorune is like chartorune, except that it will access at most
+// n bytes of s. If the UTF sequence is incomplete within n bytes,
+// charntorune will set *r to Runeerror and return 0. If it is complete
+// but not in UTF format, it will set *r to Runeerror and return 1.
+//
+// Added 2004-09-24 by Wei-Hwa Huang
+
+int charntorune(Rune* r, const char* s, int n);
+
+// isvalidcharntorune(str, n, r, consumed)
+// is a convenience function that calls "*consumed = charntorune(r, str, n)"
+// and returns an int (logically boolean) indicating whether the first
+// n bytes of str was a valid and complete UTF sequence.
+
+int isvalidcharntorune(const char* str, int n, Rune* r, int* consumed);
+
+// runelen returns the number of bytes required to convert r into UTF.
+
+int runelen(Rune r);
+
+
+// runenlen returns the number of bytes required to convert the n
+// runes pointed to by r into UTF.
+
+int runenlen(const Rune* r, int n);
+
+
+// fullrune returns 1 if the string s of length n is long enough to be
+// decoded by chartorune, and 0 otherwise. This does not guarantee
+// that the string contains a legal UTF encoding. This routine is used
+// by programs that obtain input one byte at a time and need to know
+// when a full rune has arrived.
+
+int fullrune(const char* s, int n);
+
+// The following routines are analogous to the corresponding string
+// routines with "utf" substituted for "str", and "rune" substituted
+// for "chr".
+
+// utflen returns the number of runes that are represented by the UTF
+// string s. (cf. strlen)
+
+int utflen(const char* s);
+
+
+// utfnlen returns the number of complete runes that are represented
+// by the first n bytes of the UTF string s. If the last few bytes of
+// the string contain an incompletely coded rune, utfnlen will not
+// count them; in this way, it differs from utflen, which includes
+// every byte of the string. (cf. strnlen)
+
+int utfnlen(const char* s, long n);
+
+
+// utfrune returns a pointer to the first occurrence of rune r in the
+// UTF string s, or 0 if r does not occur in the string. The NULL
+// byte terminating a string is considered to be part of the string s.
+// (cf. strchr)
+
+const char* utfrune(const char* s, Rune r);
+
+
+// utfrrune returns a pointer to the last occurrence of rune r in the
+// UTF string s, or 0 if r does not occur in the string. The NULL
+// byte terminating a string is considered to be part of the string s.
+// (cf. strrchr)
+
+const char* utfrrune(const char* s, Rune r);
+
+
+// utfutf returns a pointer to the first occurrence of the UTF string
+// s2 as a UTF substring of s1, or 0 if there is none. If s2 is the
+// null string, utfutf returns s1. (cf. strstr)
+
+const char* utfutf(const char* s1, const char* s2);
+
+
+// utfecpy copies UTF sequences until a null sequence has been copied,
+// but writes no sequences beyond es1. If any sequences are copied,
+// s1 is terminated by a null sequence, and a pointer to that sequence
+// is returned. Otherwise, the original s1 is returned. (cf. strecpy)
+
+char* utfecpy(char *s1, char *es1, const char *s2);
+
+
+
+// These functions are rune-string analogues of the corresponding
+// functions in strcat (3).
+//
+// These routines first appeared in Plan 9.
+// SEE ALSO
+// memmove (3)
+// rune (3)
+// strcat (2)
+//
+// BUGS: The outcome of overlapping moves varies among implementations.
+
+Rune* runestrcat(Rune* s1, const Rune* s2);
+Rune* runestrncat(Rune* s1, const Rune* s2, long n);
+
+const Rune* runestrchr(const Rune* s, Rune c);
+
+int runestrcmp(const Rune* s1, const Rune* s2);
+int runestrncmp(const Rune* s1, const Rune* s2, long n);
+
+Rune* runestrcpy(Rune* s1, const Rune* s2);
+Rune* runestrncpy(Rune* s1, const Rune* s2, long n);
+Rune* runestrecpy(Rune* s1, Rune* es1, const Rune* s2);
+
+Rune* runestrdup(const Rune* s);
+
+const Rune* runestrrchr(const Rune* s, Rune c);
+long runestrlen(const Rune* s);
+const Rune* runestrstr(const Rune* s1, const Rune* s2);
+
+
+
+// The following routines test types and modify cases for Unicode
+// characters. Unicode defines some characters as letters and
+// specifies three cases: upper, lower, and title. Mappings among the
+// cases are also defined, although they are not exhaustive: some
+// upper case letters have no lower case mapping, and so on. Unicode
+// also defines several character properties, a subset of which are
+// checked by these routines. These routines are based on Unicode
+// version 3.0.0.
+//
+// NOTE: The routines are implemented in C, so the boolean functions
+// (e.g., isupperrune) return 0 for false and 1 for true.
+//
+//
+// toupperrune, tolowerrune, and totitlerune are the Unicode case
+// mappings. These routines return the character unchanged if it has
+// no defined mapping.
+
+Rune toupperrune(Rune r);
+Rune tolowerrune(Rune r);
+Rune totitlerune(Rune r);
+
+
+// isupperrune tests for upper case characters, including Unicode
+// upper case letters and targets of the toupper mapping. islowerrune
+// and istitlerune are defined analogously.
+
+int isupperrune(Rune r);
+int islowerrune(Rune r);
+int istitlerune(Rune r);
+
+
+// isalpharune tests for Unicode letters; this includes ideographs in
+// addition to alphabetic characters.
+
+int isalpharune(Rune r);
+
+
+// isdigitrune tests for digits. Non-digit numbers, such as Roman
+// numerals, are not included.
+
+int isdigitrune(Rune r);
+
+
+// isideographicrune tests for ideographic characters and numbers, as
+// defined by the Unicode standard.
+
+int isideographicrune(Rune r);
+
+
+// isspacerune tests for whitespace characters, including "C" locale
+// whitespace, Unicode defined whitespace, and the "zero-width
+// non-break space" character.
+
+int isspacerune(Rune r);
+
+
+// (The comments in this file were copied from the manpage files rune.3,
+// isalpharune.3, and runestrcat.3. Some formatting changes were also made
+// to conform to Google style. /JRM 11/11/05)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/third_party/libphonenumber/cpp/src/utf/utfdef.h b/third_party/libphonenumber/cpp/src/utf/utfdef.h
new file mode 100644
index 0000000..adc6d95
--- /dev/null
+++ b/third_party/libphonenumber/cpp/src/utf/utfdef.h
@@ -0,0 +1,28 @@
+/*
+ * The authors of this software are Rob Pike and Ken Thompson.
+ * Copyright (c) 1998-2002 by Lucent Technologies.
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose without fee is hereby granted, provided that this entire notice
+ * is included in all copies of any software which is or includes a copy
+ * or modification of this software and in all copies of the supporting
+ * documentation for such software.
+ * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES MAKE ANY
+ * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
+ * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
+ */
+
+#define uchar _utfuchar
+#define ushort _utfushort
+#define uint _utfuint
+#define ulong _utfulong
+#define vlong _utfvlong
+#define uvlong _utfuvlong
+
+typedef unsigned char uchar;
+typedef unsigned short ushort;
+typedef unsigned int uint;
+typedef unsigned long ulong;
+
+#define nelem(x) (sizeof(x)/sizeof((x)[0]))
+#define nil ((void*)0)
diff --git a/third_party/libphonenumber/libphonenumber.gyp b/third_party/libphonenumber/libphonenumber.gyp
new file mode 100644
index 0000000..0fdfcc5
--- /dev/null
+++ b/third_party/libphonenumber/libphonenumber.gyp
@@ -0,0 +1,139 @@
+# Copyright (c) 2011 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+{
+ 'variables': {
+ 'protoc_out_dir': '<(SHARED_INTERMEDIATE_DIR)/protoc_out',
+ },
+ 'target_defaults': {
+ 'include_dirs': [
+ '../..', # add it first, so src/base headers are used instead of the ones
+ # brought with the library as cc files would be taken from the
+ # main chrome tree as well.
+ 'cpp/src',
+ '<(protoc_out_dir)',
+ '../protobuf/src',
+ '../icu/public/common',
+ '../icu/public/i18n',
+ ],
+ 'defines': [
+ 'U_USING_ICU_NAMESPACE=0',
+ ],
+ 'conditions': [
+ ['OS!="win" or component=="static_library"', {
+ 'defines': [
+ 'U_STATIC_IMPLEMENTATION',
+ ],
+ }],
+ ],
+ },
+ 'targets': [{
+ 'target_name': 'libphonenumber',
+ 'type': '<(library)',
+ 'dependencies': [
+ '../icu/icu.gyp:icui18n',
+ '../icu/icu.gyp:icuuc',
+ '../protobuf/protobuf.gyp:protobuf_lite',
+ '../../base/base.gyp:base',
+ '../../base/third_party/dynamic_annotations/dynamic_annotations.gyp:dynamic_annotations',
+ 'phonenumber_proto',
+ ],
+ 'sources': [
+ 'chrome/regexp_adapter_icuregexp.cc',
+ 'cpp/src/default_logger.cc',
+ 'cpp/src/logger_adapter.cc',
+ 'cpp/src/metadata.cc',
+ 'cpp/src/phonenumber.cc',
+ 'cpp/src/phonenumberutil.cc',
+ 'cpp/src/stringutil.cc',
+ 'cpp/src/utf/rune.c',
+ 'cpp/src/utf/unicodetext.cc',
+ 'cpp/src/utf/unilib.cc',
+ # Generated by phonenumber_proto.
+ '<(protoc_out_dir)/phonemetadata.pb.cc',
+ '<(protoc_out_dir)/phonenumber.pb.cc',
+ ],
+ 'conditions': [
+ ['OS=="win"', {
+ 'action': [
+ '/wo4309',
+ ],
+ }],
+ ],
+ },
+ {
+ # Protobuf compiler / generate rule for the phones
+ 'target_name': 'phonenumber_proto',
+ 'type': 'none',
+ 'sources': [
+ 'resources/phonemetadata.proto',
+ 'resources/phonenumber.proto',
+ ],
+ 'rules': [{
+ 'rule_name': 'genproto',
+ 'extension': 'proto',
+ 'inputs': [
+ '<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)protoc<(EXECUTABLE_SUFFIX)',
+ ],
+ 'variables': {
+ # The protoc compiler requires a proto_path argument with the
+ # directory containing the .proto file.
+ # There's no generator variable that corresponds to this, so fake it.
+ 'rule_input_relpath': 'resources',
+ },
+ 'outputs': [
+ '<(protoc_out_dir)/<(RULE_INPUT_ROOT).pb.h',
+ '<(protoc_out_dir)/<(RULE_INPUT_ROOT).pb.cc',
+ ],
+ 'action': [
+ '<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)protoc<(EXECUTABLE_SUFFIX)',
+ '--proto_path=<(rule_input_relpath)',
+ '<(rule_input_relpath)/<(RULE_INPUT_ROOT)<(RULE_INPUT_EXT)',
+ '--cpp_out=<(protoc_out_dir)',
+ ],
+ 'message': 'Generating C++ code from <(RULE_INPUT_PATH)',
+ }],
+ 'dependencies': [
+ '../protobuf/protobuf.gyp:protobuf_lite',
+ '../protobuf/protobuf.gyp:protoc#host',
+ ],
+ 'direct_dependent_settings': {
+ 'include_dirs': [
+ '<(protoc_out_dir)',
+ ]
+ },
+ 'export_dependent_settings': [
+ '../../third_party/protobuf/protobuf.gyp:protobuf_lite',
+ ],
+ },
+ {
+ 'target_name': 'libphonenumber_unittests',
+ 'type': 'executable',
+ 'sources': [
+ '../../base/test/run_all_unittests.cc',
+ 'cpp/src/phonenumberutil_test.cc',
+ 'cpp/src/regexp_adapter_unittest.cc',
+ 'cpp/src/stringutil_test.cc',
+ 'cpp/src/test_metadata.cc',
+ ],
+ 'dependencies': [
+ '../icu/icu.gyp:icui18n',
+ '../icu/icu.gyp:icuuc',
+ '../protobuf/protobuf.gyp:protobuf_lite',
+ '../../base/base.gyp:base',
+ '../../base/base.gyp:test_support_base',
+ '../../base/third_party/dynamic_annotations/dynamic_annotations.gyp:dynamic_annotations',
+ '../../testing/gmock.gyp:gmock',
+ '../../testing/gtest.gyp:gtest',
+ 'libphonenumber',
+ ],
+ 'conditions': [
+ ['OS=="win"', {
+ 'action': [
+ '/wo4309',
+ ],
+ }],
+ ],
+ }]
+}
diff --git a/third_party/libphonenumber/patches/version186.patch b/third_party/libphonenumber/patches/version186.patch
new file mode 100644
index 0000000..63afbfaa
--- /dev/null
+++ b/third_party/libphonenumber/patches/version186.patch
@@ -0,0 +1,1177 @@
+Index: regexp_adapter.h
+===================================================================
+--- regexp_adapter.h (revision 0)
++++ regexp_adapter.h (revision 0)
+@@ -0,0 +1,96 @@
++// Copyright (C) 2011 Google Inc.
++//
++// Licensed under the Apache License, Version 2.0 (the "License");
++// you may not use this file except in compliance with the License.
++// You may obtain a copy of the License at
++//
++// http://www.apache.org/licenses/LICENSE-2.0
++//
++// Unless required by applicable law or agreed to in writing, software
++// distributed under the License is distributed on an "AS IS" BASIS,
++// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++// See the License for the specific language governing permissions and
++// limitations under the License.
++
++// Author: George Yakovlev
++
++#ifndef I18N_PHONENUMBERS_REGEXP_ADAPTER_H_
++#define I18N_PHONENUMBERS_REGEXP_ADAPTER_H_
++
++#include <string>
++
++// Regexp adapter to allow pluggable regexp engine, as it is external to
++// libphonenumber.
++
++namespace reg_exp {
++
++// The reg exp input class.
++// It supports only functions used in phonelibrary.
++class RegularExpressionInput {
++ public:
++ virtual ~RegularExpressionInput() {};
++
++ // Matches string to regular expression, returns true if expression was
++ // matched, false otherwise, advances position in the match.
++ // |reg_exp| - expression to be matched.
++ // |beginning_only| - if true match would be successfull only if appears at
++ // the beginning of the tested region of the string.
++ // |matched_string1| - successfully matched first string. Can be NULL.
++ // |matched_string2| - successfully matched second string. Can be NULL.
++ virtual bool ConsumeRegExp(std::string const& reg_exp,
++ bool beginning_only,
++ std::string* matched_string1,
++ std::string* matched_string2) = 0;
++ // Convert unmatched input to a string.
++ virtual std::string ToString() const = 0;
++};
++
++// The regular expression class.
++// It supports only functions used in phonelibrary.
++class RegularExpression {
++ public:
++ RegularExpression() {}
++ virtual ~RegularExpression() {}
++
++ // Matches string to regular expression, returns true if expression was
++ // matched, false otherwise, advances position in the match.
++ // |input_string| - string to be searched.
++ // |beginning_only| - if true match would be successfull only if appears at
++ // the beginning of the tested region of the string.
++ // |matched_string1| - successfully matched first string. Can be NULL.
++ // |matched_string2| - successfully matched second string. Can be NULL.
++ // |matched_string3| - successfully matched third string. Can be NULL.
++ virtual bool Consume(RegularExpressionInput* input_string,
++ bool beginning_only,
++ std::string* matched_string1 = NULL,
++ std::string* matched_string2 = NULL,
++ std::string* matched_string3 = NULL) const = 0;
++
++
++ // Matches string to regular expression, returns true if expression was
++ // matched, false otherwise.
++ // |input_string| - string to be searched.
++ // |full_match| - if true match would be successfull only if it matches the
++ // complete string.
++ // |matched_string| - successfully matched string. Can be NULL.
++ virtual bool Match(const char* input_string,
++ bool full_match,
++ std::string* matched_string) const = 0;
++
++ // Replaces match(es) in the |string_to_process|. if |global| is true,
++ // replaces all the matches, only the first match otherwise.
++ // |replacement_string| - text the matches are replaced with.
++ // Returns true if expression successfully processed through the string,
++ // even if no actual replacements were made. Returns false in case of an
++ // error.
++ virtual bool Replace(std::string* string_to_process,
++ bool global,
++ const char* replacement_string) const = 0;
++};
++
++RegularExpressionInput* CreateRegularExpressionInput(const char* utf8_input);
++RegularExpression* CreateRegularExpression(const char* utf8_regexp);
++
++} // namespace reg_exp
++
++#endif // I18N_PHONENUMBERS_REGEXP_ADAPTER_H_
+
+Property changes on: regexp_adapter.h
+___________________________________________________________________
+Added: svn:eol-style
+ + LF
+
+Index: regexp_adapter_re2.cc
+===================================================================
+--- regexp_adapter_re2.cc (revision 0)
++++ regexp_adapter_re2.cc (revision 0)
+@@ -0,0 +1,192 @@
++// Copyright (C) 2011 Google Inc.
++//
++// Licensed under the Apache License, Version 2.0 (the "License");
++// you may not use this file except in compliance with the License.
++// You may obtain a copy of the License at
++//
++// http://www.apache.org/licenses/LICENSE-2.0
++//
++// Unless required by applicable law or agreed to in writing, software
++// distributed under the License is distributed on an "AS IS" BASIS,
++// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++// See the License for the specific language governing permissions and
++// limitations under the License.
++
++// Author: George Yakovlev
++#include "regexp_adapter.h"
++
++#include <re2/re2.h>
++#include <re2/stringpiece.h>
++#include <re2/re2.h>
++
++namespace {
++scoped_ptr<RE2Cache> re2_cache;
++} // namespace
++
++class RE2RegularExpressionInput : public RegularExpressionInput {
++ public:
++ RE2RegularExpressionInput(const char* utf8_input);
++
++ virtual bool ConsumeRegExp(std::string const& reg_exp,
++ bool beginning_only,
++ std::string* matched_string1,
++ std::string* matched_string2);
++ virtual std::string ToString() const;
++ private:
++ StringPiece utf8_input_;
++};
++
++
++class RE2RegularExpression : public reg_exp::RegularExpression {
++ public:
++ RE2RegularExpression(const char* utf8_regexp);
++
++ virtual bool Consume(reg_exp::RegularExpressionInput* input_string,
++ bool beginning_only,
++ std::string* matched_string1,
++ std::string* matched_string2,
++ std::string* matched_string3) const;
++
++ virtual bool Match(const char* input_string,
++ bool full_match,
++ std::string* matched_string) const;
++
++ virtual bool Replace(std::string* string_to_process,
++ bool global,
++ const char* replacement_string) const;
++ private:
++ RE2 utf8_regexp_;
++};
++
++RE2RegularExpressionInput::RE2RegularExpressionInput(const char* utf8_input)
++ : utf8_input_(utf8_input) {
++ DCHECK(utf8_input);
++}
++
++bool RE2RegularExpressionInput::ConsumeRegExp(std::string const& reg_exp,
++ bool beginning_only,
++ std::string* matched_string1,
++ std::string* matched_string2) {
++ if (beginning_only) {
++ if (matched_string2)
++ return RE2::Consume(&utf8_input_,
++ RE2Cache::ScopedAccess(re2_cache.get(), reg_exp),
++ matched_string1, matched_string2);
++ else if (matched_string1)
++ return RE2::Consume(&utf8_input_,
++ RE2Cache::ScopedAccess(re2_cache.get(), reg_exp),
++ matched_string1);
++ else
++ return RE2::Consume(&utf8_input_,
++ RE2Cache::ScopedAccess(re2_cache.get(), reg_exp));
++ } else {
++ if (matched_string2)
++ return RE2::FindAndConsume(&utf8_input_,
++ RE2Cache::ScopedAccess(re2_cache.get(),
++ reg_exp),
++ matched_string1, matched_string2);
++ else if (matched_string1)
++ return RE2::FindAndConsume(&utf8_input_,
++ RE2Cache::ScopedAccess(re2_cache.get(),
++ reg_exp),
++ matched_string1);
++ else
++ return RE2::FindAndConsume(&utf8_input_,
++ RE2Cache::ScopedAccess(re2_cache.get(),
++ reg_exp));
++ }
++}
++
++std::string RE2RegularExpressionInput::ToString() const {
++ utf8_input_.ToString();
++}
++
++RE2RegularExpression::RE2RegularExpression(const char* utf8_regexp)
++ : utf8_regexp_(utf8_regexp) {
++ DCHECK(utf8_regexp);
++}
++
++bool RE2RegularExpression::Consume(RegularExpressionInput* input_string,
++ bool beginning_only,
++ std::string* matched_string1,
++ std::string* matched_string2,
++ std::string* matched_string3) const {
++ DCHECK(input_string);
++ // matched_string1 may be NULL
++ // matched_string2 may be NULL
++ if (beginning_only) {
++ if (matched_string3) {
++ return RE2::Consume(input_string, utf8_regexp_,
++ matched_string1, matched_string2, matched_string3);
++ } else if (matched_string2) {
++ return RE2::Consume(input_string, utf8_regexp_,
++ matched_string1, matched_string2);
++ } else if (matched_string1) {
++ return RE2::Consume(input_string, utf8_regexp_, matched_string1);
++ } else {
++ return RE2::Consume(input_string, utf8_regexp_);
++ }
++ } else {
++ if (matched_string3) {
++ return RE2::FindAndConsume(input_string, utf8_regexp_,
++ matched_string1, matched_string2,
++ matched_string3);
++ } else if (matched_string2) {
++ return RE2::FindAndConsume(input_string, utf8_regexp_,
++ matched_string1, matched_string2);
++ } else if (matched_string1) {
++ return RE2::FindAndConsume(input_string, utf8_regexp_, matched_string1);
++ } else {
++ return RE2::FindAndConsume(input_string, utf8_regexp_);
++ }
++ }
++}
++
++bool RE2RegularExpression::Match(const char* input_string,
++ bool full_match,
++ std::string* matched_string) const {
++ DCHECK(input_string);
++ // matched_string may be NULL
++ if (full_match) {
++ if (matched_string)
++ return RE2::FullMatch(input_string, matched_string);
++ else
++ return RE2::FullMatch(input_string);
++ } else {
++ if (matched_string)
++ return RE2::PartialMatch(input_string, matched_string);
++ else
++ return RE2::PartialMatch(input_string);
++ }
++}
++
++bool RE2RegularExpression::Replace(std::string* string_to_process,
++ bool global,
++ const char* replacement_string) const {
++ DCHECK(string_to_process);
++ DCHECK(replacement_string);
++ if (global) {
++ StringPiece str(replacement_string);
++ return RE2::GlobalReplace(string_to_process, str);
++ } else {
++ return RE2::Replace(string_to_process, replacement_string);
++ }
++}
++
++
++namespace reg_exp {
++
++RegularExpressionInput* CreateRegularExpressionInput(const char* utf8_input) {
++ if (!re2_cache.get())
++ re2_cache.reset(new RE2Cache(64));
++ return new RE2RegularExpressionInput(utf8_input);
++}
++
++RegularExpression* CreateRegularExpression(const char* utf8_regexp) {
++ if (!re2_cache.get())
++ re2_cache.reset(new RE2Cache(64));
++ return new RE2RegularExpression(utf8_regexp);
++}
++
++} // namespace reg_exp
++
+
+Property changes on: regexp_adapter_re2.cc
+___________________________________________________________________
+Added: svn:eol-style
+ + LF
+
+Index: phonenumberutil_test.cc
+===================================================================
+--- phonenumberutil_test.cc (revision 186)
++++ phonenumberutil_test.cc (working copy)
+@@ -21,12 +21,12 @@
+ #include <string>
+
+ #include <gtest/gtest.h>
+-#include <re2/re2.h>
+
+ #include "phonemetadata.pb.h"
+ #include "phonenumber.h"
+ #include "phonenumber.pb.h"
+ #include "phonenumberutil.h"
++#include "regexp_adapter.h"
+ #include "test_metadata.h"
+
+ namespace i18n {
+Index: phonenumberutil.cc
+===================================================================
+--- phonenumberutil.cc (revision 186)
++++ phonenumberutil.cc (working copy)
+@@ -25,8 +25,6 @@
+ #include <vector>
+
+ #include <google/protobuf/message_lite.h>
+-#include <re2/re2.h>
+-#include <re2/stringpiece.h>
+ #include <unicode/errorcode.h>
+ #include <unicode/translit.h>
+
+@@ -38,7 +36,7 @@
+ #include "phonemetadata.pb.h"
+ #include "phonenumber.h"
+ #include "phonenumber.pb.h"
+-#include "re2_cache.h"
++#include "regexp_adapter.h"
+ #include "stringutil.h"
+ #include "utf/unicodetext.h"
+ #include "utf/utf.h"
+@@ -54,14 +52,11 @@
+ using std::stringstream;
+
+ using google::protobuf::RepeatedPtrField;
+-using re2::StringPiece;
+
+ namespace {
+
+ scoped_ptr<LoggerAdapter> logger;
+
+-scoped_ptr<RE2Cache> re2_cache;
+-
+ // These objects are created in the function InitializeStaticMapsAndSets.
+
+ // These mappings map a character (key) to a specific digit that should replace
+@@ -78,7 +73,7 @@
+ const char kPlusSign[] = "+";
+
+ const char kPlusChars[] = "++";
+-scoped_ptr<const RE2> plus_chars_pattern;
++scoped_ptr<const reg_exp::RegularExpression> plus_chars_pattern;
+
+ const char kRfc3966ExtnPrefix[] = ";ext=";
+
+@@ -89,7 +84,7 @@
+ // prefixes in a region, they will be represented as a regex string that always
+ // contains character(s) other than ASCII digits.
+ // Note this regex also includes tilde, which signals waiting for the tone.
+-scoped_ptr<const RE2> unique_international_prefix;
++scoped_ptr<const reg_exp::RegularExpression> unique_international_prefix;
+
+ // Digits accepted in phone numbers.
+ // Both Arabic-Indic and Eastern Arabic-Indic are supported.
+@@ -97,8 +92,8 @@
+ // We accept alpha characters in phone numbers, ASCII only. We store lower-case
+ // here only since our regular expressions are case-insensitive.
+ const char kValidAlpha[] = "a-z";
+-scoped_ptr<const RE2> capturing_digit_pattern;
+-scoped_ptr<const RE2> capturing_ascii_digits_pattern;
++scoped_ptr<const reg_exp::RegularExpression> capturing_digit_pattern;
++scoped_ptr<const reg_exp::RegularExpression> capturing_ascii_digits_pattern;
+
+ // Regular expression of acceptable characters that may start a phone number
+ // for the purposes of parsing. This allows us to strip away meaningless
+@@ -110,7 +105,7 @@
+ // a number. The string starting with this valid character is captured.
+ // This corresponds to VALID_START_CHAR in the java version.
+ scoped_ptr<const string> valid_start_char;
+-scoped_ptr<const RE2> valid_start_char_pattern;
++scoped_ptr<const reg_exp::RegularExpression> valid_start_char_pattern;
+
+ // Regular expression of characters typically used to start a second phone
+ // number for the purposes of parsing. This allows us to strip off parts of
+@@ -121,7 +116,8 @@
+ // preceding this is captured.
+ // This corresponds to SECOND_NUMBER_START in the java version.
+ const char kCaptureUpToSecondNumberStart[] = "(.*)[\\\\/] *x";
+-scoped_ptr<const RE2> capture_up_to_second_number_start_pattern;
++scoped_ptr<const reg_exp::RegularExpression>
++ capture_up_to_second_number_start_pattern;
+
+ // Regular expression of trailing characters that we want to remove. We remove
+ // all characters that are not alpha or numerical characters. The hash
+@@ -130,7 +126,7 @@
+ // number if this was a match.
+ // This corresponds to UNWANTED_END_CHARS in the java version.
+ const char kUnwantedEndChar[] = "[^\\p{N}\\p{L}#]";
+-scoped_ptr<const RE2> unwanted_end_char_pattern;
++scoped_ptr<const reg_exp::RegularExpression> unwanted_end_char_pattern;
+
+ // Regular expression of acceptable punctuation found in phone numbers. This
+ // excludes punctuation found as a leading character only. This consists of
+@@ -177,20 +173,20 @@
+ scoped_ptr<const string> known_extn_patterns;
+ // Regexp of all known extension prefixes used by different regions followed
+ // by 1 or more valid digits, for use when parsing.
+-scoped_ptr<const RE2> extn_pattern;
++scoped_ptr<const reg_exp::RegularExpression> extn_pattern;
+
+ // We append optionally the extension pattern to the end here, as a valid phone
+ // number may have an extension prefix appended, followed by 1 or more digits.
+-scoped_ptr<const RE2> valid_phone_number_pattern;
++scoped_ptr<const reg_exp::RegularExpression> valid_phone_number_pattern;
+
+ // We use this pattern to check if the phone number has at least three letters
+ // in it - if so, then we treat it as a number where some phone-number digits
+ // are represented by letters.
+-scoped_ptr<const RE2> valid_alpha_phone_pattern;
++scoped_ptr<const reg_exp::RegularExpression> valid_alpha_phone_pattern;
+
+-scoped_ptr<const RE2> first_group_capturing_pattern;
++scoped_ptr<const reg_exp::RegularExpression> first_group_capturing_pattern;
+
+-scoped_ptr<const RE2> carrier_code_pattern;
++scoped_ptr<const reg_exp::RegularExpression> carrier_code_pattern;
+
+ void TransformRegularExpressionToRE2Syntax(string* regex) {
+ DCHECK(regex);
+@@ -280,18 +276,19 @@
+ it = available_formats.begin(); it != available_formats.end(); ++it) {
+ int size = it->leading_digits_pattern_size();
+ if (size > 0) {
+- StringPiece number_copy(number_for_leading_digits_match);
++ scoped_ptr<reg_exp::RegularExpressionInput>
++ number_copy(reg_exp::CreateRegularExpressionInput(
++ number_for_leading_digits_match.c_str()));
+ // We always use the last leading_digits_pattern, as it is the most
+ // detailed.
+- if (!RE2::Consume(&number_copy,
+- RE2Cache::ScopedAccess(
+- re2_cache.get(),
+- it->leading_digits_pattern(size - 1)))) {
++ if (!number_copy->ConsumeRegExp(it->leading_digits_pattern(size - 1),
++ true, NULL, NULL)) {
+ continue;
+ }
+ }
+- RE2Cache::ScopedAccess pattern_to_match(re2_cache.get(), it->pattern());
+- if (RE2::FullMatch(national_number, pattern_to_match)) {
++ scoped_ptr<reg_exp::RegularExpression> pattern_to_match(
++ reg_exp::CreateRegularExpression(it->pattern().c_str()));
++ if (pattern_to_match->Match(national_number.c_str(), true, NULL)) {
+ string formatting_pattern(it->format());
+ if (number_format == PhoneNumberUtil::NATIONAL &&
+ carrier_code.length() > 0 &&
+@@ -299,11 +296,12 @@
+ // Replace the $CC in the formatting rule with the desired carrier code.
+ string carrier_code_formatting_rule =
+ it->domestic_carrier_code_formatting_rule();
+- RE2::Replace(&carrier_code_formatting_rule, *carrier_code_pattern,
+- carrier_code);
++ carrier_code_pattern->Replace(&carrier_code_formatting_rule,
++ false, carrier_code.c_str());
+ TransformRegularExpressionToRE2Syntax(&carrier_code_formatting_rule);
+- RE2::Replace(&formatting_pattern, *first_group_capturing_pattern,
+- carrier_code_formatting_rule);
++ first_group_capturing_pattern->Replace(&formatting_pattern,
++ false,
++ carrier_code_formatting_rule.c_str());
+ } else {
+ // Use the national prefix formatting rule instead.
+ string national_prefix_formatting_rule =
+@@ -315,14 +313,15 @@
+ // should be formatted at this point.
+ TransformRegularExpressionToRE2Syntax(
+ &national_prefix_formatting_rule);
+- RE2::Replace(&formatting_pattern, *first_group_capturing_pattern,
+- national_prefix_formatting_rule);
++ first_group_capturing_pattern->Replace(&formatting_pattern,
++ false,
++ national_prefix_formatting_rule.c_str());
+ }
+ }
+ TransformRegularExpressionToRE2Syntax(&formatting_pattern);
+ formatted_number->assign(national_number);
+- RE2::GlobalReplace(formatted_number, pattern_to_match,
+- formatting_pattern);
++ pattern_to_match->Replace(formatted_number, true,
++ formatting_pattern.c_str());
+ return;
+ }
+ }
+@@ -361,12 +360,14 @@
+
+ bool IsNumberMatchingDesc(const string& national_number,
+ const PhoneNumberDesc& number_desc) {
+- return (RE2::FullMatch(national_number,
+- RE2Cache::ScopedAccess(re2_cache.get(),
+- number_desc.possible_number_pattern())) &&
+- RE2::FullMatch(national_number,
+- RE2Cache::ScopedAccess(re2_cache.get(),
+- number_desc.national_number_pattern())));
++ scoped_ptr<const reg_exp::RegularExpression>
++ possible_pattern(reg_exp::CreateRegularExpression(
++ number_desc.possible_number_pattern().c_str()));
++ scoped_ptr<const reg_exp::RegularExpression>
++ national_pattern(reg_exp::CreateRegularExpression(
++ number_desc.national_number_pattern().c_str()));
++ return (possible_pattern->Match(national_number.c_str(), true, NULL) &&
++ national_pattern->Match(national_number.c_str(), true, NULL));
+ }
+
+ PhoneNumberUtil::PhoneNumberType GetNumberTypeHelper(
+@@ -452,18 +453,25 @@
+ // Initialisation helper function used to populate the regular expressions in a
+ // defined order.
+ void CreateRegularExpressions() {
+- unique_international_prefix.reset(new RE2("[\\d]+(?:[~⁓∼~][\\d]+)?"));
+- first_group_capturing_pattern.reset(new RE2("(\\$1)"));
+- carrier_code_pattern.reset(new RE2("\\$CC"));
+- capturing_digit_pattern.reset(new RE2(StrCat("([", kValidDigits, "])")));
+- capturing_ascii_digits_pattern.reset(new RE2("(\\d+)"));
++ unique_international_prefix.reset(
++ reg_exp::CreateRegularExpression("[\\d]+(?:[~⁓∼~][\\d]+)?"));
++ first_group_capturing_pattern.reset(
++ reg_exp::CreateRegularExpression("(\\$1)"));
++ carrier_code_pattern.reset(
++ reg_exp::CreateRegularExpression("\\$CC"));
++ capturing_digit_pattern.reset(
++ reg_exp::CreateRegularExpression(
++ StrCat("([", kValidDigits, "])").c_str()));
++ capturing_ascii_digits_pattern.reset(
++ reg_exp::CreateRegularExpression("(\\d+)"));
+ valid_start_char.reset(new string(StrCat(
+ "[", kPlusChars, kValidDigits, "]")));
+- valid_start_char_pattern.reset(new RE2(*valid_start_char));
+- capture_up_to_second_number_start_pattern.reset(new RE2(
+- kCaptureUpToSecondNumberStart));
+- unwanted_end_char_pattern.reset(new RE2(
+- kUnwantedEndChar));
++ valid_start_char_pattern.reset(
++ reg_exp::CreateRegularExpression(valid_start_char->c_str()));
++ capture_up_to_second_number_start_pattern.reset(
++ reg_exp::CreateRegularExpression(kCaptureUpToSecondNumberStart));
++ unwanted_end_char_pattern.reset(
++ reg_exp::CreateRegularExpression(kUnwantedEndChar));
+ valid_phone_number.reset(new string(
+ StrCat("[", kPlusChars, "]*(?:[", kValidPunctuation, "]*[", kValidDigits,
+ "]){3,}[", kValidAlpha, kValidPunctuation, kValidDigits, "]*")));
+@@ -479,17 +487,19 @@
+ "int|int|anexo)"
+ "[:\\..]?[  \\t,-]*", capturing_extn_digits, "#?|"
+ "[- ]+([", kValidDigits, "]{1,5})#")));
+- extn_pattern.reset(new RE2(StrCat("(?i)(?:", *known_extn_patterns, ")$")));
+- valid_phone_number_pattern.reset(new RE2(
+- StrCat("(?i)", *valid_phone_number, "(?:", *known_extn_patterns, ")?")));
+- valid_alpha_phone_pattern.reset(new RE2(
+- StrCat("(?i)(?:.*?[", kValidAlpha, "]){3}")));
+- plus_chars_pattern.reset(new RE2(StrCat("[", kPlusChars, "]+")));
++ extn_pattern.reset(reg_exp::CreateRegularExpression(
++ StrCat("(?i)(?:", *known_extn_patterns, ")$").c_str()));
++ valid_phone_number_pattern.reset(reg_exp::CreateRegularExpression(
++ StrCat("(?i)", *valid_phone_number, "(?:", *known_extn_patterns,
++ ")?").c_str()));
++ valid_alpha_phone_pattern.reset(reg_exp::CreateRegularExpression(
++ StrCat("(?i)(?:.*?[", kValidAlpha, "]){3}").c_str()));
++ plus_chars_pattern.reset(reg_exp::CreateRegularExpression(
++ StrCat("[", kPlusChars, "]+").c_str()));
+ }
+
+ void InitializeStaticMapsAndSets() {
+ // Create global objects.
+- re2_cache.reset(new RE2Cache(64));
+ all_plus_number_grouping_symbols.reset(new map<char32, char>);
+ alpha_mappings.reset(new map<char32, char>);
+ all_normalization_mappings.reset(new map<char32, char>);
+@@ -625,36 +635,37 @@
+
+ // Strips the IDD from the start of the number if present. Helper function used
+ // by MaybeStripInternationalPrefixAndNormalize.
+-bool ParsePrefixAsIdd(const RE2& idd_pattern, string* number) {
++bool ParsePrefixAsIdd(const reg_exp::RegularExpression* idd_pattern,
++ string* number) {
+ DCHECK(number);
+- StringPiece number_copy(*number);
++ scoped_ptr<reg_exp::RegularExpressionInput> number_copy(
++ reg_exp::CreateRegularExpressionInput(number->c_str()));
+ // First attempt to strip the idd_pattern at the start, if present. We make a
+ // copy so that we can revert to the original string if necessary.
+- if (RE2::Consume(&number_copy, idd_pattern)) {
++ if (idd_pattern->Consume(number_copy.get(), true, NULL, NULL)) {
+ // Only strip this if the first digit after the match is not a 0, since
+ // country calling codes cannot begin with 0.
+ string extracted_digit;
+- if (RE2::PartialMatch(number_copy,
+- *capturing_digit_pattern,
+- &extracted_digit)) {
++ if (capturing_digit_pattern->Match(number_copy->ToString().c_str(), false,
++ &extracted_digit)) {
+ PhoneNumberUtil::NormalizeDigitsOnly(&extracted_digit);
+ if (extracted_digit == "0") {
+ return false;
+ }
+ }
+- number->assign(number_copy.ToString());
++ number->assign(number_copy->ToString());
+ return true;
+ }
+ return false;
+ }
+
+ PhoneNumberUtil::ValidationResult TestNumberLengthAgainstPattern(
+- const RE2& number_pattern, const string& number) {
++ const reg_exp::RegularExpression* number_pattern, const string& number) {
+ string extracted_number;
+- if (RE2::FullMatch(number, number_pattern, &extracted_number)) {
++ if (number_pattern->Match(number.c_str(), true, &extracted_number)) {
+ return PhoneNumberUtil::IS_POSSIBLE;
+ }
+- if (RE2::PartialMatch(number, number_pattern, &extracted_number)) {
++ if (number_pattern->Match(number.c_str(), false, &extracted_number)) {
+ return PhoneNumberUtil::TOO_LONG;
+ } else {
+ return PhoneNumberUtil::TOO_SHORT;
+@@ -862,8 +873,10 @@
+ PhoneNumberFormat number_format,
+ const RepeatedPtrField<NumberFormat>& user_defined_formats,
+ string* formatted_number) const {
+- static const RE2 national_prefix_pattern("\\$NP");
+- static const RE2 first_group_pattern("\\$FG");
++ static scoped_ptr<const reg_exp::RegularExpression>
++ national_prefix_pattern(reg_exp::CreateRegularExpression("\\$NP"));
++ static scoped_ptr<const reg_exp::RegularExpression>
++ first_group_pattern(reg_exp::CreateRegularExpression("\\$FG"));
+ DCHECK(formatted_number);
+ int country_calling_code = number.country_code();
+ // Note GetRegionCodeForCountryCode() is used because formatting information
+@@ -893,10 +906,12 @@
+ num_format_copy->MergeFrom(*it);
+ if (!national_prefix.empty()) {
+ // Replace $NP with national prefix and $FG with the first group ($1).
+- RE2::Replace(&national_prefix_formatting_rule, national_prefix_pattern,
+- national_prefix);
+- RE2::Replace(&national_prefix_formatting_rule, first_group_pattern,
+- "$1");
++ national_prefix_pattern->Replace(&national_prefix_formatting_rule,
++ false,
++ national_prefix.c_str());
++ first_group_pattern->Replace(&national_prefix_formatting_rule,
++ false,
++ "$1");
+ num_format_copy->set_national_prefix_formatting_rule(
+ national_prefix_formatting_rule);
+ } else {
+@@ -1021,7 +1036,8 @@
+ // format of the number is returned, unless there is a preferred international
+ // prefix.
+ string international_prefix_for_formatting(
+- RE2::FullMatch(international_prefix, *unique_international_prefix)
++ unique_international_prefix->Match(international_prefix.c_str(),
++ true, NULL)
+ ? international_prefix
+ : metadata->preferred_international_prefix());
+ if (!international_prefix_for_formatting.empty()) {
+@@ -1133,7 +1149,8 @@
+ // format of the number is returned, unless there is a preferred international
+ // prefix.
+ string international_prefix_for_formatting(
+- RE2::FullMatch(international_prefix, *unique_international_prefix)
++ unique_international_prefix->Match(international_prefix.c_str(),
++ true, NULL)
+ ? international_prefix
+ : metadata->preferred_international_prefix());
+ if (!international_prefix_for_formatting.empty()) {
+@@ -1179,8 +1196,10 @@
+ number, carrier_code, formatted_number);
+ if (number_format == RFC3966) {
+ // Replace all separators with a "-".
+- static const RE2 separator_pattern(StrCat("[", kValidPunctuation, "]+"));
+- RE2::GlobalReplace(formatted_number, separator_pattern, "-");
++ scoped_ptr<const reg_exp::RegularExpression> separator_pattern(
++ reg_exp::CreateRegularExpression(
++ StrCat("[", kValidPunctuation, "]+").c_str()));
++ separator_pattern->Replace(formatted_number, true, "-");
+ }
+ }
+
+@@ -1288,10 +1307,9 @@
+ it != region_codes.end(); ++it) {
+ const PhoneMetadata* metadata = GetMetadataForRegion(*it);
+ if (metadata->has_leading_digits()) {
+- StringPiece number(national_number);
+- if (RE2::Consume(&number,
+- RE2Cache::ScopedAccess(re2_cache.get(),
+- metadata->leading_digits()))) {
++ scoped_ptr<reg_exp::RegularExpressionInput> number(
++ reg_exp::CreateRegularExpressionInput(national_number.c_str()));
++ if (number->ConsumeRegExp(metadata->leading_digits(), true, NULL, NULL)) {
+ *region_code = *it;
+ return;
+ }
+@@ -1367,8 +1385,10 @@
+ const string& number_to_parse,
+ const string& default_region) const {
+ if (!IsValidRegionCode(default_region) && !number_to_parse.empty()) {
+- StringPiece number_as_string_piece(number_to_parse);
+- if (!RE2::Consume(&number_as_string_piece, *plus_chars_pattern)) {
++ scoped_ptr<reg_exp::RegularExpressionInput> number_as_string_piece(
++ reg_exp::CreateRegularExpressionInput(number_to_parse.c_str()));
++ if (!plus_chars_pattern->Consume(number_as_string_piece.get(),
++ true, NULL, NULL)) {
+ return false;
+ }
+ }
+@@ -1435,8 +1455,6 @@
+ return TOO_SHORT_NSN;
+ }
+ if (country_metadata) {
+- RE2Cache::ScopedAccess valid_number_pattern(re2_cache.get(),
+- country_metadata->general_desc().national_number_pattern());
+ string* carrier_code = keep_raw_input ?
+ temp_number.mutable_preferred_domestic_carrier_code() : NULL;
+ MaybeStripNationalPrefixAndCarrierCode(*country_metadata,
+@@ -1489,7 +1507,7 @@
+ for (it = number_as_unicode.begin(); it != number_as_unicode.end(); ++it) {
+ len = it.get_utf8(current_char);
+ current_char[len] = '\0';
+- if (RE2::FullMatch(current_char, *valid_start_char_pattern)) {
++ if (valid_start_char_pattern->Match(current_char, true, NULL)) {
+ break;
+ }
+ }
+@@ -1505,7 +1523,7 @@
+ for (; reverse_it.base() != it; ++reverse_it) {
+ len = reverse_it.get_utf8(current_char);
+ current_char[len] = '\0';
+- if (!RE2::FullMatch(current_char, *unwanted_end_char_pattern)) {
++ if (!unwanted_end_char_pattern->Match(current_char, true, NULL)) {
+ break;
+ }
+ }
+@@ -1521,9 +1539,9 @@
+ " left with: " + *extracted_number);
+
+ // Now remove any extra numbers at the end.
+- RE2::PartialMatch(*extracted_number,
+- *capture_up_to_second_number_start_pattern,
+- extracted_number);
++ capture_up_to_second_number_start_pattern->Match(extracted_number->c_str(),
++ false,
++ extracted_number);
+ }
+
+ bool PhoneNumberUtil::IsPossibleNumber(const PhoneNumber& number) const {
+@@ -1569,9 +1587,10 @@
+ return IS_POSSIBLE;
+ }
+ }
+- RE2Cache::ScopedAccess possible_number_pattern(re2_cache.get(),
+- StrCat("(", general_num_desc.possible_number_pattern(), ")"));
+- return TestNumberLengthAgainstPattern(possible_number_pattern,
++ scoped_ptr<reg_exp::RegularExpression> possible_number_pattern(
++ reg_exp::CreateRegularExpression(
++ StrCat("(", general_num_desc.possible_number_pattern(), ")").c_str()));
++ return TestNumberLengthAgainstPattern(possible_number_pattern.get(),
+ national_number);
+ }
+
+@@ -1701,13 +1720,16 @@
+
+ string formatted_number;
+ Format(copied_proto, INTERNATIONAL, &formatted_number);
+- StringPiece i18n_number(formatted_number);
++ scoped_ptr<reg_exp::RegularExpressionInput> i18n_number(
++ reg_exp::CreateRegularExpressionInput(formatted_number.c_str()));
+ string digit_group;
+ string ndc;
+ string third_group;
+ for (int i = 0; i < 3; ++i) {
+- if (!RE2::FindAndConsume(&i18n_number, *capturing_ascii_digits_pattern,
+- &digit_group)) {
++ if (!capturing_ascii_digits_pattern->Consume(i18n_number.get(),
++ false,
++ &digit_group,
++ NULL)) {
+ // We should find at least three groups.
+ return 0;
+ }
+@@ -1734,9 +1756,11 @@
+ void PhoneNumberUtil::NormalizeDigitsOnly(string* number) {
+ DCHECK(number);
+ // Delete everything that isn't valid digits.
+- static const RE2 invalid_digits_pattern(StrCat("[^", kValidDigits, "]"));
+- static const StringPiece empty;
+- RE2::GlobalReplace(number, invalid_digits_pattern, empty);
++ static scoped_ptr<reg_exp::RegularExpression> invalid_digits_pattern(
++ reg_exp::CreateRegularExpression(StrCat("[^", kValidDigits,
++ "]").c_str()));
++ static const char *empty = "";
++ invalid_digits_pattern->Replace(number, true, empty);
+ // Normalize all decimal digits to ASCII digits.
+ UParseError error;
+ icu::ErrorCode status;
+@@ -1778,7 +1802,7 @@
+ string number_copy(number);
+ string extension;
+ MaybeStripExtension(&number_copy, &extension);
+- return RE2::FullMatch(number_copy, *valid_alpha_phone_pattern);
++ return valid_alpha_phone_pattern->Match(number_copy.c_str(), true, NULL);
+ }
+
+ void PhoneNumberUtil::ConvertAlphaCharactersInNumber(string* number) const {
+@@ -1798,7 +1822,7 @@
+ // - Arabic-Indic numerals are converted to European numerals.
+ void PhoneNumberUtil::Normalize(string* number) const {
+ DCHECK(number);
+- if (RE2::PartialMatch(*number, *valid_alpha_phone_pattern)) {
++ if (valid_alpha_phone_pattern->Match(number->c_str(), false, NULL)) {
+ NormalizeHelper(*all_normalization_mappings, true, number);
+ }
+ NormalizeDigitsOnly(number);
+@@ -1816,7 +1840,7 @@
+ logger->Debug("Number too short to be viable:" + number);
+ return false;
+ }
+- return RE2::FullMatch(number, *valid_phone_number_pattern);
++ return valid_phone_number_pattern->Match(number.c_str(), true, NULL);
+ }
+
+ // Strips any international prefix (such as +, 00, 011) present in the number
+@@ -1836,17 +1860,20 @@
+ if (number->empty()) {
+ return PhoneNumber::FROM_DEFAULT_COUNTRY;
+ }
+- StringPiece number_string_piece(*number);
+- if (RE2::Consume(&number_string_piece, *plus_chars_pattern)) {
+- number->assign(number_string_piece.ToString());
++ scoped_ptr<reg_exp::RegularExpressionInput> number_string_piece(
++ reg_exp::CreateRegularExpressionInput(number->c_str()));
++ if (plus_chars_pattern->Consume(number_string_piece.get(), true,
++ NULL, NULL)) {
++ number->assign(number_string_piece->ToString());
+ // Can now normalize the rest of the number since we've consumed the "+"
+ // sign at the start.
+ Normalize(number);
+ return PhoneNumber::FROM_NUMBER_WITH_PLUS_SIGN;
+ }
+ // Attempt to parse the first digits as an international prefix.
+- RE2Cache::ScopedAccess idd_pattern(re2_cache.get(), possible_idd_prefix);
+- if (ParsePrefixAsIdd(idd_pattern, number)) {
++ scoped_ptr<reg_exp::RegularExpression> idd_pattern(
++ reg_exp::CreateRegularExpression(possible_idd_prefix.c_str()));
++ if (ParsePrefixAsIdd(idd_pattern.get(), number)) {
+ Normalize(number);
+ return PhoneNumber::FROM_NUMBER_WITH_IDD;
+ }
+@@ -1854,7 +1881,7 @@
+ // This shouldn't be done before, since non-numeric characters (+ and ~) may
+ // legally be in the international prefix.
+ Normalize(number);
+- return ParsePrefixAsIdd(idd_pattern, number)
++ return ParsePrefixAsIdd(idd_pattern.get(), number)
+ ? PhoneNumber::FROM_NUMBER_WITH_IDD
+ : PhoneNumber::FROM_DEFAULT_COUNTRY;
+ }
+@@ -1879,25 +1906,25 @@
+ }
+ // We use two copies here since Consume modifies the phone number, and if the
+ // first if-clause fails the number will already be changed.
+- StringPiece number_copy(*number);
+- StringPiece number_copy_without_transform(*number);
++ scoped_ptr<reg_exp::RegularExpressionInput> number_copy(
++ reg_exp::CreateRegularExpressionInput(number->c_str()));
++ scoped_ptr<reg_exp::RegularExpressionInput> number_copy_without_transform(
++ reg_exp::CreateRegularExpressionInput(number->c_str()));
++
+ string number_string_copy(*number);
+ string captured_part_of_prefix;
+- RE2Cache::ScopedAccess national_number_rule(
+- re2_cache.get(),
+- metadata.general_desc().national_number_pattern());
++ scoped_ptr<reg_exp::RegularExpression> national_number_rule(
++ reg_exp::CreateRegularExpression(
++ metadata.general_desc().national_number_pattern().c_str()));
+ // Attempt to parse the first digits as a national prefix. We make a
+ // copy so that we can revert to the original string if necessary.
+ const string& transform_rule = metadata.national_prefix_transform_rule();
+ if (!transform_rule.empty() &&
+- (RE2::Consume(&number_copy,
+- RE2Cache::ScopedAccess(re2_cache.get(),
+- possible_national_prefix),
+- &carrier_code_temp, &captured_part_of_prefix) ||
+- RE2::Consume(&number_copy,
+- RE2Cache::ScopedAccess(re2_cache.get(),
+- possible_national_prefix),
+- &captured_part_of_prefix)) &&
++ (number_copy->ConsumeRegExp(possible_national_prefix, true,
++ &carrier_code_temp,
++ &captured_part_of_prefix) ||
++ number_copy->ConsumeRegExp(possible_national_prefix, true,
++ &captured_part_of_prefix, NULL)) &&
+ !captured_part_of_prefix.empty()) {
+ string re2_transform_rule(transform_rule);
+ TransformRegularExpressionToRE2Syntax(&re2_transform_rule);
+@@ -1905,29 +1932,27 @@
+ // have been some part of the prefix that we captured.
+ // We make the transformation and check that the resultant number is viable.
+ // If so, replace the number and return.
+- RE2::Replace(&number_string_copy,
+- RE2Cache::ScopedAccess(re2_cache.get(),
+- possible_national_prefix),
+- re2_transform_rule);
+- if (RE2::FullMatch(number_string_copy, national_number_rule)) {
++ scoped_ptr<reg_exp::RegularExpression> possible_national_prefix_rule(
++ reg_exp::CreateRegularExpression(possible_national_prefix.c_str()));
++ possible_national_prefix_rule->Replace(&number_string_copy, false,
++ re2_transform_rule.c_str());
++ if (national_number_rule->Match(number_string_copy.c_str(), true, NULL)) {
+ number->assign(number_string_copy);
+ if (carrier_code) {
+ carrier_code->assign(carrier_code_temp);
+ }
+ }
+- } else if (RE2::Consume(&number_copy_without_transform,
+- RE2Cache::ScopedAccess(re2_cache.get(),
+- possible_national_prefix),
+- &carrier_code_temp) ||
+- RE2::Consume(&number_copy_without_transform,
+- RE2Cache::ScopedAccess(re2_cache.get(),
+- possible_national_prefix))) {
++ } else if (number_copy_without_transform->ConsumeRegExp(
++ possible_national_prefix, true, &carrier_code_temp, NULL) ||
++ number_copy_without_transform->ConsumeRegExp(
++ possible_national_prefix, true, NULL, NULL)) {
+ logger->Debug("Parsed the first digits as a national prefix.");
++ string unconsumed_part(number_copy_without_transform->ToString());
+ // If captured_part_of_prefix is empty, this implies nothing was captured by
+ // the capturing groups in possible_national_prefix; therefore, no
+ // transformation is necessary, and we just remove the national prefix.
+- if (RE2::FullMatch(number_copy_without_transform, national_number_rule)) {
+- number->assign(number_copy_without_transform.ToString());
++ if (national_number_rule->Match(unconsumed_part.c_str(), true, NULL)) {
++ number->assign(unconsumed_part);
+ if (carrier_code) {
+ carrier_code->assign(carrier_code_temp);
+ }
+@@ -1949,11 +1974,13 @@
+ string possible_extension_two;
+ string possible_extension_three;
+ string number_copy(*number);
+- if (RE2::PartialMatch(number_copy, *extn_pattern,
+- &possible_extension_one, &possible_extension_two,
+- &possible_extension_three)) {
++ scoped_ptr<reg_exp::RegularExpressionInput> number_copy_regex_input(
++ reg_exp::CreateRegularExpressionInput(number_copy.c_str()));
++ if (extn_pattern->Consume(number_copy_regex_input.get(), false,
++ &possible_extension_one, &possible_extension_two,
++ &possible_extension_three)) {
+ // Replace the extensions in the original string here.
+- RE2::Replace(&number_copy, *extn_pattern, "");
++ extn_pattern->Replace(&number_copy, false, "");
+ logger->Debug("Found an extension. Possible extension one: "
+ + possible_extension_one
+ + ". Possible extension two: " + possible_extension_two
+@@ -2061,25 +2088,29 @@
+ &potential_national_number)) {
+ const PhoneNumberDesc& general_num_desc =
+ default_region_metadata->general_desc();
+- RE2Cache::ScopedAccess valid_number_pattern(
+- re2_cache.get(),
+- general_num_desc.national_number_pattern());
++ scoped_ptr<reg_exp::RegularExpression> valid_number_pattern(
++ reg_exp::CreateRegularExpression(
++ general_num_desc.national_number_pattern().c_str()));
++
+ MaybeStripNationalPrefixAndCarrierCode(*default_region_metadata,
+ &potential_national_number,
+ NULL);
+ logger->Debug("Number without country code prefix: "
+ + potential_national_number);
+ string extracted_number;
+- RE2Cache::ScopedAccess possible_number_pattern(
+- re2_cache.get(),
+- StrCat("(", general_num_desc.possible_number_pattern(), ")"));
++ scoped_ptr<reg_exp::RegularExpression> possible_number_pattern(
++ reg_exp::CreateRegularExpression(
++ StrCat("(", general_num_desc.possible_number_pattern(),
++ ")").c_str()));
+ // If the number was not valid before but is valid now, or if it was too
+ // long before, we consider the number with the country code stripped to
+ // be a better result and keep that instead.
+- if ((!RE2::FullMatch(*national_number, valid_number_pattern) &&
+- RE2::FullMatch(potential_national_number, valid_number_pattern)) ||
+- TestNumberLengthAgainstPattern(possible_number_pattern,
+- *national_number)
++ if ((!valid_number_pattern->Match(national_number->c_str(),
++ true, NULL) &&
++ valid_number_pattern->Match(potential_national_number.c_str(),
++ true, NULL)) ||
++ TestNumberLengthAgainstPattern(possible_number_pattern.get(),
++ *national_number)
+ == TOO_LONG) {
+ national_number->assign(potential_national_number);
+ if (keep_raw_input) {
+Index: regexp_adapter_unittest.cc
+===================================================================
+--- regexp_adapter_unittest.cc (revision 0)
++++ regexp_adapter_unittest.cc (revision 0)
+@@ -0,0 +1,142 @@
++// Copyright (C) 2011 Google Inc.
++//
++// Licensed under the Apache License, Version 2.0 (the "License");
++// you may not use this file except in compliance with the License.
++// You may obtain a copy of the License at
++//
++// http://www.apache.org/licenses/LICENSE-2.0
++//
++// Unless required by applicable law or agreed to in writing, software
++// distributed under the License is distributed on an "AS IS" BASIS,
++// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++// See the License for the specific language governing permissions and
++// limitations under the License.
++
++// Author: George Yakovlev
++#include <gtest/gtest.h>
++
++#include "base/scoped_ptr.h"
++#include "regexp_adapter.h"
++
++namespace reg_exp {
++
++TEST(RegExpAdapter, TestConsumeRegExp) {
++ scoped_ptr<const reg_exp::RegularExpression> reg_exp1(
++ reg_exp::CreateRegularExpression("[0-9a-z]+"));
++ scoped_ptr<const reg_exp::RegularExpression> reg_exp2(
++ reg_exp::CreateRegularExpression(" \\(([0-9a-z]+)\\)"));
++ scoped_ptr<const reg_exp::RegularExpression> reg_exp3(
++ reg_exp::CreateRegularExpression("([0-9a-z]+)-([0-9a-z]+)"));
++
++ scoped_ptr<reg_exp::RegularExpressionInput> reg_input1(
++ reg_exp::CreateRegularExpressionInput("+1-123-456-789"));
++ scoped_ptr<reg_exp::RegularExpressionInput> reg_input2(
++ reg_exp::CreateRegularExpressionInput("1 (123)456-789"));
++
++ EXPECT_FALSE(reg_exp1->Consume(reg_input1.get(), true, NULL, NULL));
++ EXPECT_EQ(reg_input1->ToString(), "+1-123-456-789");
++ EXPECT_TRUE(reg_exp1->Consume(reg_input1.get(), false, NULL, NULL));
++ EXPECT_EQ(reg_input1->ToString(), "-123-456-789");
++ std::string res1, res2;
++ EXPECT_FALSE(reg_exp2->Consume(reg_input1.get(), true, &res1, NULL));
++ EXPECT_FALSE(reg_exp3->Consume(reg_input1.get(), true, &res1, &res2));
++ EXPECT_TRUE(reg_exp3->Consume(reg_input1.get(), false, &res1, &res2));
++ EXPECT_EQ(reg_input1->ToString(), "-789");
++ EXPECT_EQ(res1, "123");
++ EXPECT_EQ(res2, "456");
++
++ EXPECT_EQ(reg_input2->ToString(), "1 (123)456-789");
++ EXPECT_TRUE(reg_exp1->Consume(reg_input2.get(), true, NULL, NULL));
++ EXPECT_EQ(reg_input2->ToString(), " (123)456-789");
++ EXPECT_TRUE(reg_exp2->Consume(reg_input2.get(), true, &res1, NULL));
++ EXPECT_EQ(reg_input2->ToString(), "456-789");
++ EXPECT_EQ(res1, "123");
++ EXPECT_TRUE(reg_exp3->Consume(reg_input2.get(), true, &res1, &res2));
++ EXPECT_EQ(reg_input2->ToString(), "");
++ EXPECT_EQ(res1, "456");
++ EXPECT_EQ(res2, "789");
++}
++
++TEST(RegExpAdapter, TestConsumeInput) {
++ scoped_ptr<reg_exp::RegularExpressionInput> reg_input(
++ reg_exp::CreateRegularExpressionInput("1 (123)456-789"));
++ std::string res1, res2;
++ EXPECT_EQ(reg_input->ToString(), "1 (123)456-789");
++ EXPECT_FALSE(reg_input->ConsumeRegExp(std::string("\\[1\\]"),
++ true,
++ &res1,
++ &res2));
++ EXPECT_EQ(reg_input->ToString(), "1 (123)456-789");
++ EXPECT_FALSE(reg_input->ConsumeRegExp(std::string("([0-9]+) \\([0-9]+\\)"),
++ true,
++ &res1,
++ &res2));
++ EXPECT_EQ(reg_input->ToString(), "1 (123)456-789");
++ EXPECT_TRUE(reg_input->ConsumeRegExp(std::string("([0-9]+) \\(([0-9]+)\\)"),
++ true,
++ &res1,
++ &res2));
++ EXPECT_EQ(reg_input->ToString(), "456-789");
++ EXPECT_EQ(res1, "1");
++ EXPECT_EQ(res2, "123");
++}
++
++TEST(RegExpAdapter, TestMatch) {
++ scoped_ptr<const reg_exp::RegularExpression> reg_exp(
++ reg_exp::CreateRegularExpression("([0-9a-z]+)"));
++ std::string matched;
++ EXPECT_TRUE(reg_exp->Match("12345af", true, &matched));
++ EXPECT_EQ(matched, "12345af");
++ EXPECT_TRUE(reg_exp->Match("12345af", false, &matched));
++ EXPECT_EQ(matched, "12345af");
++ EXPECT_TRUE(reg_exp->Match("12345af", false, NULL));
++ EXPECT_TRUE(reg_exp->Match("12345af", true, NULL));
++
++ EXPECT_FALSE(reg_exp->Match("[12]", true, &matched));
++ EXPECT_TRUE(reg_exp->Match("[12]", false, &matched));
++ EXPECT_EQ(matched, "12");
++
++ EXPECT_FALSE(reg_exp->Match("[]", true, &matched));
++ EXPECT_FALSE(reg_exp->Match("[]", false, &matched));
++}
++
++TEST(RegExpAdapter, TestReplace) {
++ scoped_ptr<const reg_exp::RegularExpression> reg_exp(
++ reg_exp::CreateRegularExpression("[0-9]"));
++
++ std::string s("123-4567 ");
++ EXPECT_TRUE(reg_exp->Replace(&s, false, "+"));
++ EXPECT_EQ(s, "+23-4567 ");
++ EXPECT_TRUE(reg_exp->Replace(&s, false, "+"));
++ EXPECT_EQ(s, "++3-4567 ");
++ EXPECT_TRUE(reg_exp->Replace(&s, true, "*"));
++ EXPECT_EQ(s, "++*-**** ");
++ EXPECT_TRUE(reg_exp->Replace(&s, true, "*"));
++ EXPECT_EQ(s, "++*-**** ");
++
++ scoped_ptr<const reg_exp::RegularExpression> full_number_expr(
++ reg_exp::CreateRegularExpression("(\\d{3})(\\d{3})(\\d{4})"));
++ s = "1234567890:0987654321";
++ EXPECT_TRUE(full_number_expr->Replace(&s, true, "(\\1) \\2-\\3$1"));
++ EXPECT_EQ(s, "(123) 456-7890$1:(098) 765-4321$1");
++}
++
++TEST(RegExpAdapter, TestUtf8) {
++ // Expression: <tel symbol><opening square bracket>[<alpha>-<omega>]*
++ // <closing square bracket>
++ scoped_ptr<const reg_exp::RegularExpression> reg_exp(
++ reg_exp::CreateRegularExpression(
++ "\xe2\x84\xa1\xe2\x8a\x8f([\xce\xb1-\xcf\x89]*)\xe2\x8a\x90"));
++ std::string matched;
++ // The string is split to avoid problem with MSVC compiler when it thinks
++ // 123 is a part of character code.
++ EXPECT_FALSE(reg_exp->Match("\xe2\x84\xa1\xe2\x8a\x8f" "123\xe2\x8a\x90",
++ true, &matched));
++ EXPECT_TRUE(reg_exp->Match(
++ "\xe2\x84\xa1\xe2\x8a\x8f\xce\xb1\xce\xb2\xe2\x8a\x90", true, &matched));
++ // <alpha><betha>
++ EXPECT_EQ(matched, "\xce\xb1\xce\xb2");
++}
++
++} // namespace reg_exp
++
+
+Property changes on: regexp_adapter_unittest.cc
+___________________________________________________________________
+Added: svn:eol-style
+ + LF
+
diff --git a/third_party/libphonenumber/resources/PhoneNumberMetaData.xml b/third_party/libphonenumber/resources/PhoneNumberMetaData.xml
new file mode 100644
index 0000000..748ce21
--- /dev/null
+++ b/third_party/libphonenumber/resources/PhoneNumberMetaData.xml
@@ -0,0 +1,19202 @@
+<!-- Copyright (C) 2009 Google Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ @author: Shaopeng Jia
+ @author: Lara Rennie
+
+ MetaData on Phone Number Plan and formatting rules
+ Note: Territories are in alphabetical order by their IDs, which are based on ISO 3166-1
+ two-letter country codes. The country names in the comments are the official short names
+ in English according to ISO 3166-1.
+
+ For more information on what each element represents, see
+ java/com/google/i18n/phonenumbers/phonemetadata.proto
+
+ Note that if you want to add validation metadata, the generalDesc nationalNumberPattern and
+ possibleNumberPattern must be provided. If this is missing, then the country will be
+ considered to have no more specific phone-number type metadata (fixedLine, mobile etc) and
+ hence only basic validation rules (numbers should be between 3 and 15 digits long) will be
+ applied.
+
+ Country code, international and national prefix information main source:
+ http://www.itu.int/publ/T-SP-E.164C-2010/en
+-->
+
+<!DOCTYPE phoneNumberMetadata [
+ <!ELEMENT phoneNumberMetadata (territories)>
+ <!ELEMENT territories (territory+)>
+ <!ELEMENT territory (availableFormats?, generalDesc?, noInternationalDialling?,
+ areaCodeOptional?, fixedLine?, mobile?, pager?, tollFree?, premiumRate?,
+ sharedCost?, personalNumber?, voip?, uan?, shortCode?)>
+ <!ELEMENT generalDesc (nationalNumberPattern, possibleNumberPattern)>
+ <!ELEMENT noInternationalDialling (nationalNumberPattern, possibleNumberPattern,
+ exampleNumber?)>
+ <!ELEMENT areaCodeOptional (nationalNumberPattern, possibleNumberPattern, exampleNumber?)>
+ <!ELEMENT fixedLine (nationalNumberPattern?, possibleNumberPattern?, exampleNumber?)>
+ <!ELEMENT mobile (nationalNumberPattern?, possibleNumberPattern?, exampleNumber?)>
+ <!ELEMENT pager (nationalNumberPattern?, possibleNumberPattern?, exampleNumber?)>
+ <!ELEMENT tollFree (nationalNumberPattern?, possibleNumberPattern?, exampleNumber?)>
+ <!ELEMENT premiumRate (nationalNumberPattern?, possibleNumberPattern?, exampleNumber?)>
+ <!ELEMENT sharedCost (nationalNumberPattern?, possibleNumberPattern?, exampleNumber?)>
+ <!ELEMENT personalNumber (nationalNumberPattern?, possibleNumberPattern?, exampleNumber?)>
+ <!ELEMENT voip (nationalNumberPattern?, possibleNumberPattern?, exampleNumber?)>
+ <!ELEMENT uan (nationalNumberPattern?, possibleNumberPattern?, exampleNumber?)>
+ <!ELEMENT shortCode (nationalNumberPattern?, possibleNumberPattern?, exampleNumber?)>
+ <!ELEMENT availableFormats (numberFormat+, intlNumberFormat*)>
+ <!ELEMENT nationalNumberPattern (#PCDATA)>
+ <!ELEMENT possibleNumberPattern (#PCDATA)>
+ <!ELEMENT exampleNumber (#PCDATA)>
+ <!ELEMENT numberFormat (leadingDigits*, format)>
+ <!ELEMENT intlNumberFormat (leadingDigits*, format)>
+ <!ELEMENT format (#PCDATA)>
+ <!ELEMENT leadingDigits (#PCDATA)>
+
+ <!ATTLIST territory id CDATA #REQUIRED>
+ <!ATTLIST territory countryCode CDATA #REQUIRED>
+ <!ATTLIST territory leadingDigits CDATA #IMPLIED>
+ <!ATTLIST territory preferredInternationalPrefix CDATA #IMPLIED>
+ <!ATTLIST territory internationalPrefix CDATA #REQUIRED>
+ <!ATTLIST territory nationalPrefix CDATA #IMPLIED>
+ <!ATTLIST territory nationalPrefixForParsing CDATA #IMPLIED>
+ <!ATTLIST territory nationalPrefixTransformRule CDATA #IMPLIED>
+ <!ATTLIST territory preferredExtnPrefix CDATA #IMPLIED>
+ <!ATTLIST territory nationalPrefixFormattingRule CDATA #IMPLIED>
+ <!ATTLIST territory mainCountryForCode (true) #IMPLIED>
+ <!ATTLIST territory leadingZeroPossible (true) #IMPLIED>
+ <!ATTLIST territory carrierCodeFormattingRule CDATA #IMPLIED>
+ <!ATTLIST numberFormat nationalPrefixFormattingRule CDATA #IMPLIED>
+ <!ATTLIST numberFormat carrierCodeFormattingRule CDATA #IMPLIED>
+ <!ATTLIST numberFormat pattern CDATA #REQUIRED>
+ <!ATTLIST intlNumberFormat pattern CDATA #REQUIRED>
+ <!ATTLIST intlNumberFormat carrierCodeFormattingRule CDATA #IMPLIED>
+]>
+
+<phoneNumberMetadata>
+ <territories>
+ <!-- Ascension Island -->
+ <!-- www.itu.int/oth/T02020000AF -->
+ <territory id="AC" countryCode="247" internationalPrefix="00">
+ <!-- Formatted as a block. -->
+ <generalDesc>
+ <nationalNumberPattern>[2-46]\d{3}</nationalNumberPattern>
+ <possibleNumberPattern>\d{4}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 3[0-5]|
+ 4[4-6]|
+ [26]\d
+ )\d{2}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{4}</possibleNumberPattern>
+ <exampleNumber>6889</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>NA</nationalNumberPattern>
+ <possibleNumberPattern>NA</possibleNumberPattern>
+ </mobile>
+ </territory>
+
+ <!-- Andorra -->
+ <!-- http://www.itu.int/oth/T0202000005/en -->
+ <territory id="AD" countryCode="376" internationalPrefix="00">
+ <availableFormats>
+ <numberFormat pattern="(\d{3})(\d{3})">
+ <leadingDigits>[346-9]</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(180[02])(\d{4})">
+ <leadingDigits>1</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>
+ (?:
+ [346-9]|
+ 180
+ )\d{5}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{6,8}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>[78]\d{5}</nationalNumberPattern>
+ <possibleNumberPattern>\d{6}</possibleNumberPattern>
+ <exampleNumber>712345</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>[346]\d{5}</nationalNumberPattern>
+ <possibleNumberPattern>\d{6}</possibleNumberPattern>
+ <exampleNumber>312345</exampleNumber>
+ </mobile>
+ <tollFree>
+ <!-- Note that the definitions of 1800 and 1802 numbers differ in the plan and on the
+ Andorran www.sta.ad website, but we consider both to be freephone here. -->
+ <nationalNumberPattern>180[02]\d{4}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>18001234</exampleNumber>
+ </tollFree>
+ <!-- The national numbering plan says that numbers beginning with 9 are reserved for special
+ services, so we assume they are premium rate here, although we cannot find examples
+ online. -->
+ <premiumRate>
+ <nationalNumberPattern>9\d{5}</nationalNumberPattern>
+ <possibleNumberPattern>\d{6}</possibleNumberPattern>
+ <exampleNumber>912345</exampleNumber>
+ </premiumRate>
+ </territory>
+
+ <!-- United Arab Emirates -->
+ <!-- http://www.itu.int/oth/T02020000DC/en -->
+ <territory id="AE" countryCode="971" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="([2-4679])(\d{3})(\d{4})">
+ <leadingDigits>[2-4679][2-8]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(5[056])(\d{3})(\d{4})">
+ <leadingDigits>5</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="([4679]00)(\d)(\d{5})" nationalPrefixFormattingRule="$FG">
+ <leadingDigits>[4679]0</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(800)(\d{2,9})" nationalPrefixFormattingRule="$FG">
+ <leadingDigits>8</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>
+ [2-79]\d{7,8}|
+ 800\d{2,9}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{5,12}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ [2-4679][2-8]\d|
+ 600[25]
+ )\d{5}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7,9}</possibleNumberPattern>
+ <exampleNumber>22345678</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>5[056]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>501234567</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>
+ 400\d{6}|
+ 800\d{2,9}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{5,12}</possibleNumberPattern>
+ <exampleNumber>800123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>900[02]\d{5}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>900234567</exampleNumber>
+ </premiumRate>
+ <sharedCost>
+ <nationalNumberPattern>700[05]\d{5}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>700012345</exampleNumber>
+ </sharedCost>
+ </territory>
+
+ <!-- Afghanistan -->
+ <!-- http://www.itu.int/oth/T0202000001/en -->
+ <territory id="AF" countryCode="93" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="([2-7]\d)(\d{3})(\d{4})">
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[2-7]\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7,9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ [25][0-8]|
+ [34][0-4]|
+ 6[0-5]
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <exampleNumber>234567890</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>7[057-9]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>701234567</exampleNumber>
+ </mobile>
+ </territory>
+
+ <!-- Antigua and Barbuda -->
+ <!-- http://www.itu.int/oth/T0202000008/en -->
+ <territory id="AG" countryCode="1" leadingDigits="268"
+ nationalPrefix="1" internationalPrefix="011">
+ <generalDesc>
+ <!-- NANPA country - uses US formatting rules -->
+ <nationalNumberPattern>[2589]\d{9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}(?:\d{3})?</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- 268 468 is not in the plan, but has been added after numbers with this prefix have been
+ found in online searches. -->
+ <nationalNumberPattern>
+ 268(?:
+ 4(?:
+ 6[0-38]|
+ 84
+ )|
+ 56[0-2]
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>2684601234</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- 268 776/778/779 are not in the plan, but have been added after numbers with these
+ prefixes have been found in online searches. Same for 268 780/782/784/786. -->
+ <nationalNumberPattern>
+ 268(?:
+ 464|
+ 7(?:
+ 2[0-9]|
+ 64|
+ 7[0-689]|
+ 8[02-68]
+ )
+ )\d{4}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>2684641234</exampleNumber>
+ </mobile>
+ <pager>
+ <nationalNumberPattern>26840[69]\d{4}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>2684061234</exampleNumber>
+ </pager>
+ <tollFree>
+ <nationalNumberPattern>
+ 8(?:
+ 00|
+ 55|
+ 66|
+ 77|
+ 88
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>8002123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>900[2-9]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>9002123456</exampleNumber>
+ </premiumRate>
+ <personalNumber>
+ <!-- http://www.nanpa.com/pdf/PL_416.pdf -->
+ <nationalNumberPattern>
+ 5(?:
+ 00|
+ 33|
+ 44
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>5002345678</exampleNumber>
+ </personalNumber>
+ <voip>
+ <!-- This is included as Centrex in the plan. -->
+ <nationalNumberPattern>26848[01]\d{4}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>2684801234</exampleNumber>
+ </voip>
+ </territory>
+
+ <!-- Anguilla -->
+ <!-- http://www.itu.int/oth/T0202000007/en -->
+ <territory id="AI" countryCode="1" leadingDigits="264"
+ nationalPrefix="1" internationalPrefix="011">
+ <generalDesc>
+ <!-- NANPA country - uses US formatting rules -->
+ <nationalNumberPattern>[2589]\d{9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}(?:\d{3})?</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ 2644(?:
+ 6[12]|
+ 9[78]
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>2644612345</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ 264(?:
+ 235|
+ 476|
+ 5(?:
+ 3[6-9]|
+ 8[1-4]
+ )|
+ 7(?:
+ 29|
+ 72
+ )
+ )\d{4}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>2642351234</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>
+ 8(?:
+ 00|
+ 55|
+ 66|
+ 77|
+ 88
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>8002123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>900[2-9]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>9002123456</exampleNumber>
+ </premiumRate>
+ <personalNumber>
+ <!-- http://www.nanpa.com/pdf/PL_416.pdf -->
+ <nationalNumberPattern>
+ 5(?:
+ 00|
+ 33|
+ 44
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>5002345678</exampleNumber>
+ </personalNumber>
+ </territory>
+
+ <!-- Albania -->
+ <!-- http://www.itu.int/oth/T0202000002/en -->
+ <territory id="AL" countryCode="355" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <!-- Formats mostly follow http://tirana.usembassy.gov/list_of_doctors.html -->
+ <numberFormat pattern="(4)(\d{3})(\d{4})">
+ <leadingDigits>4[0-6]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(6[6-9])(\d{3})(\d{4})">
+ <leadingDigits>6</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{2})(\d{3})(\d{3})">
+ <leadingDigits>
+ [2358][2-5]|
+ 4[7-9]
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{3,5})">
+ <leadingDigits>
+ [235][16-9]|
+ 8[016-9]|
+ [79]
+ </leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>
+ [2-57]\d{7}|
+ 6\d{8}|
+ 8\d{5,7}|
+ 9\d{5}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{5,9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 2(?:
+ [168][1-9]|
+ [247]\d|
+ 9[1-7]
+ )|
+ 3(?:
+ 1[1-3]|
+ [2-6]\d|
+ [79][1-8]|
+ 8[1-9]
+ )|
+ 4\d{2}|
+ 5(?:
+ 1[1-4]|
+ [2-578]\d|
+ 6[1-5]|
+ 9[1-7]
+ )|
+ 8(?:
+ [19][1-5]|
+ [2-6]\d|
+ [78][1-7]
+ )
+ )\d{5}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{5,8}</possibleNumberPattern>
+ <exampleNumber>22345678</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>6[6-9]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>661234567</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>800\d{4}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}</possibleNumberPattern>
+ <exampleNumber>8001234</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <!-- It is named "Shared Revenue Services" in the plan, but as there is a separate "Shared
+ Cost Services", it is highly likely these numbers are premium rate numbers. No
+ information/example is found in the Internet. -->
+ <nationalNumberPattern>900\d{3}</nationalNumberPattern>
+ <possibleNumberPattern>\d{6}</possibleNumberPattern>
+ <exampleNumber>900123</exampleNumber>
+ </premiumRate>
+ <sharedCost>
+ <nationalNumberPattern>808\d{3}</nationalNumberPattern>
+ <possibleNumberPattern>\d{6}</possibleNumberPattern>
+ <exampleNumber>808123</exampleNumber>
+ </sharedCost>
+ <personalNumber>
+ <nationalNumberPattern>700\d{5}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>70012345</exampleNumber>
+ </personalNumber>
+ </territory>
+
+ <!-- Armenia -->
+ <!-- http://www.itu.int/oth/T020200000A/en -->
+ <!-- We think the national dialling prefix is 0 - it seems this was a change in 2005 (or 2008)
+ along with the new city codes. However, their official document makes no mention of it,
+ websites disagree, and we are not sure if the change has actually been made. -->
+ <territory id="AM" countryCode="374" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="($NP$FG)">
+ <availableFormats>
+ <numberFormat pattern="(\d{2})(\d{6})">
+ <leadingDigits>
+ [17]|
+ 9[1-9]
+ </leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{2})(\d{6})"
+ nationalPrefixFormattingRule="$NP$FG">
+ <leadingDigits>6</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{5})">
+ <leadingDigits>[23]</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{2})(\d{3})"
+ nationalPrefixFormattingRule="$NP $FG">
+ <leadingDigits>
+ 8|
+ 90
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[1-36-9]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{5,8}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 10\d|
+ 2(?:
+ 2[2-46]|
+ 3[1-8]|
+ 4[2-69]|
+ 5[2-7]|
+ 6[1-9]|
+ 8[1-7]
+ )|
+ 3[12]2
+ )\d{5}
+ </nationalNumberPattern>
+ <exampleNumber>10123456</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ (?:
+ 77|
+ 9[1-46-9]
+ )\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>77123456</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>800\d{5}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>80012345</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>90[016]\d{5}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>90012345</exampleNumber>
+ </premiumRate>
+ <sharedCost>
+ <nationalNumberPattern>80[1-4]\d{5}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>80112345</exampleNumber>
+ </sharedCost>
+ <voip>
+ <!-- More info on this found at www.arminco.com/en/voip -->
+ <nationalNumberPattern>6027\d{4}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>60271234</exampleNumber>
+ </voip>
+ <shortCode>
+ <nationalNumberPattern>
+ 8[1-7]\d{2}|
+ 1\d{2}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{3,4}</possibleNumberPattern>
+ <exampleNumber>8711</exampleNumber>
+ </shortCode>
+ </territory>
+
+ <!-- Netherlands Antilles -->
+ <!-- http://www.itu.int/oth/T0202000097/en -->
+ <territory id="AN" countryCode="599" internationalPrefix="00">
+ <availableFormats>
+ <numberFormat pattern="(\d{3})(\d{4})">
+ <leadingDigits>[13-7]</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(9)(\d{3})(\d{4})">
+ <leadingDigits>9</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[13-79]\d{6,7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7,8}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 318|
+ 5(?:
+ 25|
+ 4\d|
+ 8[239]
+ )|
+ 7(?:
+ 1[578]|
+ 50
+ )|
+ 9(?:
+ [48]\d{2}|
+ 50\d|
+ 7(?:
+ 2[0-2]|
+ [34]\d|
+ 6[35-7]|
+ 77
+ )
+ )
+ )\d{4}|
+ 416[0239]\d{3}
+ </nationalNumberPattern>
+ <exampleNumber>7151234</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ (?:
+ 318|
+ 5(?:
+ 1[01]|
+ 2[0-7]|
+ 5\d|
+ 8[016-8]
+ )|
+ 7(?:
+ 0[01]|
+ [89]\d
+ )|
+ 9(?:
+ 5(?:
+ [1246]\d|
+ 3[01]
+ )|
+ 6(?:
+ [1679]\d|
+ 3[01]
+ )
+ )
+ )\d{4}|
+ 416[15-8]\d{3}
+ </nationalNumberPattern>
+ <exampleNumber>3181234</exampleNumber>
+ </mobile>
+ <!-- Value-added services are lumped together under shared cost, since we are not sure exactly
+ what they are. -->
+ <sharedCost>
+ <nationalNumberPattern>
+ (?:
+ 10|
+ 69
+ )\d{5}
+ </nationalNumberPattern>
+ <exampleNumber>1011234</exampleNumber>
+ </sharedCost>
+ </territory>
+
+ <!-- Angola -->
+ <!-- http://www.itu.int/oth/T0202000006/en -->
+ <territory id="AO" countryCode="244" internationalPrefix="00">
+ <availableFormats>
+ <numberFormat pattern="(\d{3})(\d{3})(\d{3})">
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[29]\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ 2\d(?:
+ [26-9]\d|
+ \d[26-9]
+ )\d{5}
+ </nationalNumberPattern>
+ <exampleNumber>222123456</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- Expanded the 92 prefix possibilities to match numbers found online. -->
+ <nationalNumberPattern>9[1-3]\d{7}</nationalNumberPattern>
+ <exampleNumber>923123456</exampleNumber>
+ </mobile>
+ </territory>
+
+ <!-- Argentina -->
+ <!-- http://www.itu.int/oth/T0202000009/en -->
+ <!-- http://www.cnc.gov.ar/numeracion/IndicativosInterurbanos.asp -->
+ <territory id="AR" countryCode="54" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixForParsing="0(?:(11|2(?:2(?:02?|[13]|2[13-79]|4[1-6]|5[2457]|6[124-8]|7[1-4]|8[13-6]|9[1-367])|3(?:[06]2|1[467]|2[02-6]|3[13-8]|[49][2-6]|5[2-8]|7)|47[3-578]|6(?:1|2[2-7]|4[6-8]?|5[125-8])|9(?:0[1-3]|[19]|2\d|3[1-6]|4[0-24-68]|5[2-4]|6[2-6]|72?|8[23]?))|3(?:3(?:2[79]|8[2578])|4(?:0[124-9]|[12]|3[5-8]?|4[24-7]|5[4-68]?|6\d|7[126]|8[237-9]|9[1-36-8])|5(?:1|2[1245]|3[2-4]?|4[1-46-9]|6[2-4]|7[1-6]|8[2-5]?)|7(?:1[15-8]|2[125]|3[1245]|4[13]|5[124-8]|7[2-57]|8[1-36])|8(?:1|2[125-7]|3[23578]|4[13-6]|5[4-8]?|6[1-357-9]|7[5-8]?|8[4-7]?|9[124])))15)?"
+ nationalPrefixTransformRule="9$1" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="([68]\d{2})(\d{3})(\d{4})">
+ <leadingDigits>[68]</leadingDigits>
+ <format>$1-$2-$3</format>
+ </numberFormat>
+ <intlNumberFormat pattern="([68]\d{2})(\d{3})(\d{4})">
+ <leadingDigits>[68]</leadingDigits>
+ <format>$1-$2-$3</format>
+ </intlNumberFormat>
+ <numberFormat pattern="9(11)(\d{4})(\d{4})">
+ <leadingDigits>91</leadingDigits>
+ <format>$1 15-$2-$3</format>
+ </numberFormat>
+ <intlNumberFormat pattern="9(11)(\d{4})(\d{4})">
+ <leadingDigits>91</leadingDigits>
+ <format>9 $1 $2-$3</format>
+ </intlNumberFormat>
+ <numberFormat pattern="9(\d{3})(\d{3})(\d{4})">
+ <leadingDigits>
+ 9(?:
+ 2[2369]|
+ 3[458]
+ )
+ </leadingDigits>
+ <leadingDigits>
+ 9(?:
+ 2(?:
+ 2[013]|
+ 37|
+ 6[14]|
+ 9[179]
+ )|
+ 3(?:
+ 4[1235]|
+ 5[138]|
+ 8[1578]
+ )
+ )
+ </leadingDigits>
+ <format>$1 15-$2-$3</format>
+ </numberFormat>
+ <intlNumberFormat pattern="9(\d{3})(\d{3})(\d{4})">
+ <leadingDigits>
+ 9(?:
+ 2[2369]|
+ 3[458]
+ )
+ </leadingDigits>
+ <leadingDigits>
+ 9(?:
+ 2(?:
+ 2[013]|
+ 37|
+ 6[14]|
+ 9[179]
+ )|
+ 3(?:
+ 4[1235]|
+ 5[138]|
+ 8[1578]
+ )
+ )
+ </leadingDigits>
+ <format>9 $1 $2-$3</format>
+ </intlNumberFormat>
+ <numberFormat pattern="9(\d{4})(\d{2})(\d{4})">
+ <leadingDigits>
+ 9(?:
+ 2[2-469]|
+ 3[3-578]
+ )
+ </leadingDigits>
+ <leadingDigits>
+ 9(?:
+ 2(?:
+ 2[24-9]|
+ 3[0-69]|
+ 47|
+ 6[25]|
+ 9[02-68]
+ )|
+ 3(?:
+ 3[28]|
+ 4[046-9]|
+ 5[2467]|
+ 7[1-578]|
+ 8[23469]
+ )
+ )
+ </leadingDigits>
+ <format>$1 15-$2-$3</format>
+ </numberFormat>
+ <intlNumberFormat pattern="9(\d{4})(\d{2})(\d{4})">
+ <leadingDigits>
+ 9(?:
+ 2[2-469]|
+ 3[3-578]
+ )
+ </leadingDigits>
+ <leadingDigits>
+ 9(?:
+ 2(?:
+ 2[24-9]|
+ 3[0-69]|
+ 47|
+ 6[25]|
+ 9[02-68]
+ )|
+ 3(?:
+ 3[28]|
+ 4[046-9]|
+ 5[2467]|
+ 7[1-578]|
+ 8[23469]
+ )
+ )
+ </leadingDigits>
+ <format>9 $1 $2-$3</format>
+ </intlNumberFormat>
+ <numberFormat pattern="(11)(\d{4})(\d{4})">
+ <leadingDigits>1</leadingDigits>
+ <format>$1 $2-$3</format>
+ </numberFormat>
+ <intlNumberFormat pattern="(11)(\d{4})(\d{4})">
+ <leadingDigits>1</leadingDigits>
+ <format>$1 $2-$3</format>
+ </intlNumberFormat>
+ <!-- Some 4-digit area codes actually are caught by this rule. I'm giving however preference
+ to the 3-digit area codes, since they are considerably larger communities. -->
+ <numberFormat pattern="(\d{3})(\d{3})(\d{4})">
+ <leadingDigits>
+ 2(?:
+ 2[013]|
+ 37|
+ 6[14]|
+ 9[179]
+ )|
+ 3(?:
+ 4[1235]|
+ 5[138]|
+ 8[1578]
+ )
+ </leadingDigits>
+ <format>$1 $2-$3</format>
+ </numberFormat>
+ <intlNumberFormat pattern="(\d{3})(\d{3})(\d{4})">
+ <leadingDigits>
+ 2(?:
+ 2[013]|
+ 37|
+ 6[14]|
+ 9[179]
+ )|
+ 3(?:
+ 4[1235]|
+ 5[138]|
+ 8[1578]
+ )
+ </leadingDigits>
+ <format>$1 $2-$3</format>
+ </intlNumberFormat>
+ <numberFormat pattern="(\d{4})(\d{2})(\d{4})">
+ <leadingDigits>[23]</leadingDigits>
+ <format>$1 $2-$3</format>
+ </numberFormat>
+ <intlNumberFormat pattern="(\d{4})(\d{2})(\d{4})">
+ <leadingDigits>[23]</leadingDigits>
+ <format>$1 $2-$3</format>
+ </intlNumberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[1-9]\d{9,11}</nationalNumberPattern>
+ <possibleNumberPattern>\d{6,12}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>[1-9]\d{9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{6,10}</possibleNumberPattern>
+ <exampleNumber>1123456789</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ 9(?:
+ 11[2-9]\d{7}|
+ (?:
+ 2(?:
+ 2[013]|
+ 37|
+ 6[14]|
+ 9[179]
+ )|
+ 3(?:
+ 4[1235]|
+ 5[138]|
+ 8[1578]
+ )
+ )[2-9]\d{6}|
+ \d{4}[2-9]\d{5}
+ )
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{6,12}</possibleNumberPattern>
+ <exampleNumber>91123456789</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>80\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>8012345678</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>
+ 6(?:
+ 0\d|
+ 10
+ )\d{7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>6001234567</exampleNumber>
+ </premiumRate>
+ </territory>
+
+ <!-- American Samoa -->
+ <!-- http://www.itu.int/oth/T0202000004/en -->
+ <territory id="AS" countryCode="1" leadingDigits="684"
+ nationalPrefix="1" internationalPrefix="011">
+ <generalDesc>
+ <!-- NANPA country - uses US formatting rules -->
+ <nationalNumberPattern>[5689]\d{9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}(?:\d{3})?</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ 6846(?:
+ 22|
+ 33|
+ 44|
+ 55|
+ 77|
+ 88|
+ 9[19]
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>6846221234</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ 684(?:
+ 733|
+ 258
+ )\d{4}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>6847331234</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>
+ 8(?:
+ 00|
+ 55|
+ 66|
+ 77|
+ 88
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>8002123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>900[2-9]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>9002123456</exampleNumber>
+ </premiumRate>
+ <personalNumber>
+ <!-- http://www.nanpa.com/pdf/PL_416.pdf -->
+ <nationalNumberPattern>
+ 5(?:
+ 00|
+ 33|
+ 44
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>5002345678</exampleNumber>
+ </personalNumber>
+ </territory>
+
+ <!-- Austria -->
+ <!-- http://www.rtr.at/en/tk/E129 -->
+ <territory id="AT" countryCode="43" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="([15])(\d{3,12})">
+ <leadingDigits>
+ 1|
+ 5[079]
+ </leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{3,10})">
+ <leadingDigits>
+ 316|
+ 46|
+ 51|
+ 732|
+ 6(?:
+ 44|
+ 5[0-3579]|
+ [6-9]
+ )|
+ 7(?:
+ 1|
+ [28]0
+ )|
+ [89]
+ </leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{4})(\d{3,9})">
+ <leadingDigits>
+ 2|
+ 3(?:
+ 1[1-578]|
+ [3-8]
+ )|
+ 4[2378]|
+ 5[2-6]|
+ 6(?:
+ [12]|
+ 4[1-35-9]|
+ 5[468]
+ )|
+ 7(?:
+ 2[1-8]|
+ 35|
+ 4[1-8]|
+ [57-9]
+ )
+ </leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>\d{4,13}</nationalNumberPattern>
+ <possibleNumberPattern>\d{3,13}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- Note the 050, 057 and 059 prefixes are defined as "private network" in the Austrian
+ plan. This just means they are registered to companies who are distributed over
+ different geographical areas and maintain their own network. Examples here:
+ http://www.rtr.at/?id=4506&S=05&art=d Also note that the full area code is not
+ validated - just the first 3 digits. This also means that even though for most
+ Austrian numbers the minimum length is 7, we allow 6 since we don't differentiate below
+ between 3 and 4 digit area codes for reasons of efficiency. -->
+ <nationalNumberPattern>
+ 1\d{3,12}|
+ (?:
+ 2(?:
+ 1[467]|
+ 2[134-8]|
+ 5[2357]|
+ 6[1-46-8]|
+ 7[1-8]|
+ 8[124-7]|
+ 8[1458]
+ )|
+ 3(?:
+ 1[1-8]|
+ 3[23568]|
+ 4[5-7]|
+ 5[1378]|
+ 6[1-38]|
+ 8[3-68]
+ )|
+ 4(?:
+ 2[1-8]|
+ 35|
+ 63|
+ 7[1368]|
+ 8[2457]
+ )|
+ 5(?:
+ 1[27]|
+ 2[1-8]|
+ 3[357]|
+ 4[147]|
+ 5[12578]|
+ 6[37]
+ )|
+ 6(?:
+ 13|
+ 2[1-47]|
+ 4[1-35-8]|
+ 5[468]|
+ 62
+ )|
+ 7(?:
+ 2[1-8]|
+ 3[25]|
+ 4[13478]|
+ 5[68]|
+ 6[16-8]|
+ 7[1-6]|
+ 9[45]
+ )
+ )\d{3,10}|
+ 5(?:
+ 0[1-9]|
+ [79]\d
+ )\d{2,10}|
+ 720\d{6,10}
+ </nationalNumberPattern>
+ <exampleNumber>1234567890</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ 6(?:
+ 44|
+ 5[0-3579]|
+ 6[013-9]|
+ [7-9]\d
+ )\d{4,10}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7,13}</possibleNumberPattern>
+ <exampleNumber>644123456</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>80[02]\d{6,10}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9,13}</possibleNumberPattern>
+ <exampleNumber>800123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>
+ (?:
+ 711|
+ 9(?:
+ 0[01]|
+ 3[019]
+ )
+ )\d{6,10}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{9,13}</possibleNumberPattern>
+ <exampleNumber>900123456</exampleNumber>
+ </premiumRate>
+ <sharedCost>
+ <nationalNumberPattern>
+ 8(?:
+ 10|
+ 2[018]
+ )\d{6,10}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{9,13}</possibleNumberPattern>
+ <exampleNumber>810123456</exampleNumber>
+ </sharedCost>
+ <voip>
+ <nationalNumberPattern>780\d{6,10}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9,13}</possibleNumberPattern>
+ <exampleNumber>780123456</exampleNumber>
+ </voip>
+ </territory>
+
+ <!-- Australia -->
+ <!-- http://www.itu.int/dms_pub/itu-t/oth/02/02/T020200000D0001MSWE.doc -->
+ <!-- http://en.wikipedia.org/wiki/Telephone_numbers_in_Australia -->
+ <territory id="AU" countryCode="61" preferredInternationalPrefix="0011"
+ internationalPrefix="(?:14(?:1[14]|34|4[17]|[56]6|7[47]|88))?001[14-689]"
+ nationalPrefix="0">
+ <availableFormats>
+ <numberFormat nationalPrefixFormattingRule="($NP$FG)"
+ pattern="([2378])(\d{4})(\d{4})">
+ <leadingDigits>[2378]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat nationalPrefixFormattingRule="$NP$FG"
+ pattern="(4\d{2})(\d{3})(\d{3})">
+ <leadingDigits>4</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat nationalPrefixFormattingRule="$NP$FG"
+ pattern="(5[05]0)(\d{3})(\d{3})">
+ <leadingDigits>5</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat nationalPrefixFormattingRule="$FG"
+ pattern="(1[389]\d{2})(\d{3})(\d{3})">
+ <leadingDigits>
+ 1(?:
+ [38]0|
+ 9
+ )
+ </leadingDigits>
+ <leadingDigits>
+ 1(?:
+ [38]00|
+ 9
+ )
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <!-- Although the national plan doesn't explicitly say so, there is no evidence that a 180
+ xxxx number could be 180 0xxx. -->
+ <numberFormat nationalPrefixFormattingRule="$FG"
+ pattern="(180)(\d{4})">
+ <leadingDigits>180</leadingDigits>
+ <leadingDigits>180[1-9]</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat nationalPrefixFormattingRule="$FG"
+ pattern="(13)(\d{2})(\d{2})">
+ <leadingDigits>13[1-9]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[1-578]\d{5,9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{6,10}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>[2378]\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8,9}</possibleNumberPattern>
+ <exampleNumber>212345678</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ 4(?:
+ [0-2]\d|
+ 3[0-57-9]|
+ 4[47-9]|
+ 5[0-37-9]|
+ 6[6-9]|
+ 7[07-9]|
+ 8[7-9]
+ )\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>412345678</exampleNumber>
+ </mobile>
+ <tollFree>
+ <!-- Local-rate (SmartNumbers) are put here for now because they are also a reverse-charge
+ network, although they charge a small local call connect fee (around 25c). These start
+ with 13 or 1300. -->
+ <nationalNumberPattern>
+ 1(?:
+ 80(?:
+ 0\d{2}
+ )? |
+ 3(?:
+ 00\d{2}
+ )?
+ )\d{4}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{6,10}</possibleNumberPattern>
+ <exampleNumber>1800123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>190[0126]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>1900123456</exampleNumber>
+ </premiumRate>
+ <!-- Wikipedia was the source for these types of numbers, and number allocation search here
+ http://web.acma.gov.au/numb/openAccess/inquiry/allocationSearch.do confirms this. (Search
+ from 0500000000 to 0590000000) -->
+ <personalNumber>
+ <nationalNumberPattern>500\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>500123456</exampleNumber>
+ </personalNumber>
+ <voip>
+ <nationalNumberPattern>550\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>550123456</exampleNumber>
+ </voip>
+ </territory>
+
+ <!-- Aruba -->
+ <!-- http://www.itu.int/oth/T020200000B/en -->
+ <territory id="AW" countryCode="297" internationalPrefix="00">
+ <availableFormats>
+ <numberFormat pattern="([5-9]\d{2})(\d{4})">
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[5-9]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ 5(?:
+ 2\d{2}|
+ 8(?:
+ [2-7]\d|
+ 8[0-79]|
+ 9[48]
+ )
+ )\d{3}
+ </nationalNumberPattern>
+ <exampleNumber>5212345</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- Adding 660 since SMS messages have been successfully delivered to numbers with this
+ prefix, and numbers can be found in the yellow pages. -->
+ <nationalNumberPattern>
+ (?:
+ 5[69]\d|
+ 660|
+ 9(?:
+ 6\d|
+ 9[02-9]
+ )|
+ 7[34]\d
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>5601234</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>800\d{4}</nationalNumberPattern>
+ <exampleNumber>8001234</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>900\d{4}</nationalNumberPattern>
+ <exampleNumber>9001234</exampleNumber>
+ </premiumRate>
+ </territory>
+
+ <!-- Azerbaijan -->
+ <!-- http://www.itu.int/oth/T020200000F/en -->
+ <territory id="AZ" countryCode="994" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="($NP$FG)">
+ <availableFormats>
+ <numberFormat pattern="(\d{2})(\d{3})(\d{2})(\d{2})">
+ <leadingDigits>1[28]</leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{2})(\d{2})(\d{2})(\d{2})">
+ <leadingDigits>22</leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{2})(\d{2,3})(\d{2})(\d{2})">
+ <leadingDigits>3</leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d)(\d{2})(\d{2})">
+ <leadingDigits>
+ 1[013-79]|
+ 2[013-9]
+ </leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{2})(\d{3})(\d{2})(\d{2})"
+ nationalPrefixFormattingRule="$NP$FG">
+ <leadingDigits>[4-8]</leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{2})(\d{2})(\d{2})"
+ nationalPrefixFormattingRule="$NP$FG">
+ <leadingDigits>9</leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[1-9]\d{7,8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{5,9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- Added the 164 area code after it was found in other online lists and in many online
+ numbers. Also includes the area code 44 for CDMA regions, which are classified under
+ "Fixed Network" by the national plan. -->
+ <nationalNumberPattern>
+ (?:
+ 1(?:
+ (?:
+ [28]\d|
+ 9
+ )\d|
+ 02|
+ 1[0-589]|
+ 3[358]|
+ 4[013-79]|
+ 5[0-479]|
+ 6[02346-9]|
+ 7[0-24-8]
+ )|
+ 2(?:
+ 16|
+ 2\d|
+ 3[0-24]|
+ 4[1468]|
+ 55|
+ 6[56]|
+ 79
+ )|
+ 365?\d|
+ 44\d{2}
+ )\d{5}
+ </nationalNumberPattern>
+ <exampleNumber>123123456</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ (?:
+ [46]0|
+ 5[015]|
+ 7[07]
+ )\d{7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>401234567</exampleNumber>
+ </mobile>
+ <tollFree>
+ <!-- 88 is listed as fixed-line for Baku in the ITU document, but online numbers seem to
+ suggest they are in fact national toll-free numbers. -->
+ <nationalNumberPattern>88\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>881234567</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <!-- These are marked as Interactive Calls in the ITU document. -->
+ <nationalNumberPattern>900200\d{3}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>900200123</exampleNumber>
+ </premiumRate>
+ </territory>
+
+ <!-- Bosnia and Herzegovina -->
+ <!-- http://www.cra.ba/en/telecom/numbering/ -->
+ <!-- http://en.wikipedia.org/wiki/+387 -->
+ <territory id="BA" countryCode="387" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="([3-689]\d)(\d{3})(\d{3})">
+ <format>$1 $2-$3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[3-689]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{6,8}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ [35]\d|
+ 49
+ )\d{6}
+ </nationalNumberPattern>
+ <exampleNumber>30123456</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>6[1-356]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>61123456</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>8[08]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>80123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>9[0246]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>90123456</exampleNumber>
+ </premiumRate>
+ <sharedCost>
+ <!-- Using this category to model national tariff numbers - these are under Shared Cost in
+ the plan. -->
+ <nationalNumberPattern>82\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>82123456</exampleNumber>
+ </sharedCost>
+ <uan>
+ <nationalNumberPattern>81\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>81123456</exampleNumber>
+ </uan>
+ </territory>
+
+ <!-- Barbados -->
+ <!-- http://www.itu.int/oth/T0202000013/en -->
+ <territory id="BB" countryCode="1" leadingDigits="246"
+ nationalPrefix="1" internationalPrefix="011">
+ <generalDesc>
+ <!-- NANPA country - uses US formatting rules -->
+ <nationalNumberPattern>[2589]\d{9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}(?:\d{3})?</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>246[2-9]\d{6}</nationalNumberPattern>
+ <exampleNumber>2462345678</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ 246(?:
+ (?:
+ 2[346]|
+ 45|
+ 82
+ )\d|
+ 25[0-4]
+ )\d{4}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>2462501234</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>
+ 8(?:
+ 00|
+ 55|
+ 66|
+ 77|
+ 88
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>8002123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>900[2-9]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>9002123456</exampleNumber>
+ </premiumRate>
+ <personalNumber>
+ <!-- http://www.nanpa.com/pdf/PL_416.pdf -->
+ <nationalNumberPattern>
+ 5(?:
+ 00|
+ 33|
+ 44
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>5002345678</exampleNumber>
+ </personalNumber>
+ </territory>
+
+ <!-- Bangladesh -->
+ <!-- http://www.itu.int/oth/T0202000012/en -->
+ <!-- http://en.wikipedia.org/wiki/Telephone_numbers_in_Bangladesh -->
+ <!-- http://www.btrc.gov.bd/engineering/national_numbering_plan_2005.pdf -->
+ <territory id="BD" countryCode="880" internationalPrefix="00[12]?"
+ preferredInternationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="(2)(\d{7})">
+ <leadingDigits>2</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{2})(\d{4,6})">
+ <leadingDigits>[3-79]1</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{3,7})">
+ <leadingDigits>
+ [3-79][2-9]|
+ 8
+ </leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{4})(\d{6})">
+ <leadingDigits>1</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <!-- This is quite complex so we can define that numbers beginning with 88 are not part of the
+ plan, so the country code can be accurately stripped off. -->
+ <nationalNumberPattern>
+ [2-79]\d{5,9}|
+ 1\d{9}|
+ 8[0-7]\d{4,8}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{6,10}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- There was a plan to move to 10 digit fixed-line numbers, but this does not seem to have
+ been realised, judging by online numbers and wikipedia. These patterns are grouped
+ first by leading digit, then within by number of digits. Several Dhaka prefixes (02
+ 731, 751 etc) are included despite not being mentioned on the wikipedia page due to
+ online evidence. Another oddity is Chittagong - some numbers have a leading 2, others
+ do not - both are allowed for now. -->
+ <nationalNumberPattern>
+ 2(?:
+ 7\d1|
+ 8(?:
+ [026]1|
+ [1379][1-5]|
+ 8[1-8]
+ )|
+ 9(?:
+ 0[0-2]|
+ 1[1-4]|
+ 3[3-5]|
+ 5[56]|
+ 6[67]|
+ 71|
+ 8[078]
+ )
+ )\d{4}|
+ 3(?:
+ [6-8]1|
+ (?:
+ 0[23]|
+ [25][12]|
+ 82|
+ 416
+ )\d|
+ (?:
+ 31|
+ 12?[5-7]
+ )\d{2}
+ )\d{3}|
+ 4(?:
+ (?:
+ 02|
+ [49]6|
+ [68]1
+ )|
+ (?:
+ 0[13]|
+ 21\d? |
+ [23]2|
+ [457][12]|
+ 6[28]
+ )\d|
+ (?:
+ 23|
+ [39]1
+ )\d{2}|
+ 1\d{3}
+ )\d{3}|
+ 5(?:
+ (?:
+ [457-9]1|
+ 62
+ )|
+ (?:
+ 1\d? |
+ 2[12]|
+ 3[1-3]|
+ 52
+ )\d|
+ 61{2}
+ )|
+ 6(?:
+ [45]1|
+ (?:
+ 11|
+ 2[15]|
+ [39]1
+ )\d|
+ (?:
+ [06-8]1|
+ 62
+ )\d{2}
+ )|
+ 7(?:
+ (?:
+ 32|
+ 91
+ )|
+ (?:
+ 02|
+ 31|
+ [67][12]
+ )\d|
+ [458]1\d{2}|
+ 21\d{3}
+ )\d{3}|
+ 8(?:
+ (?:
+ 4[12]|
+ [5-7]2|
+ 1\d?
+ )|
+ (?:
+ 0|
+ 3[12]|
+ [5-7]1|
+ 217
+ )\d
+ )\d{4}|
+ 9(?:
+ [35]1|
+ (?:
+ [024]2|
+ 81
+ )\d|
+ (?:
+ 1|
+ [24]1
+ )\d{2}
+ )\d{3}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{6,9}</possibleNumberPattern>
+ <exampleNumber>27111234</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- Presuming that mobile numbers with the prefixes 66, 37, 44 and 38 must be followed by
+ numbers [02-9] or they would clash with fixed-line codes. According to the plan, mobile
+ numbers should be moving to 1[13-9] anyway. -->
+ <nationalNumberPattern>
+ (?:
+ 1[13-9]\d|
+ (?:
+ 3[78]|
+ 44
+ )[02-9]|
+ 6(?:
+ 44|
+ 6[02-9]
+ )
+ )\d{7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>1812345678</exampleNumber>
+ </mobile>
+ <tollFree>
+ <!-- Note: Including Tele-voting numbers here as they are free of charge. -->
+ <nationalNumberPattern>80[03]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>8001234567</exampleNumber>
+ </tollFree>
+ </territory>
+
+ <!-- Belgium -->
+ <!-- http://www.bipt.be/en/161/ShowContent/502/Database/Databases.aspx -->
+ <!-- http://www.telefoonzones.be/ -->
+ <!-- Information on non-geographic numbers here: (Dutch)
+ http://www.scarletbusiness.be/business/largeenterprise/nl/products/voiceservices/servicenumbers.jsp
+ -->
+ <territory id="BE" countryCode="32" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="(4[7-9]\d)(\d{2})(\d{2})(\d{2})">
+ <leadingDigits>4[7-9]</leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ <numberFormat pattern="([2-49])(\d{3})(\d{2})(\d{2})">
+ <leadingDigits>
+ [23]|
+ [49][23]
+ </leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ <numberFormat pattern="([15-8]\d)(\d{2})(\d{2})(\d{2})">
+ <leadingDigits>
+ [156]|
+ 7[0178]|
+ 8(?:
+ 0[1-9]|
+ [1-79]
+ )
+ </leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ <numberFormat pattern="([89]\d{2})(\d{2})(\d{3})">
+ <leadingDigits>
+ (?:
+ 80|
+ 9
+ )0
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[1-9]\d{7,8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8,9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- Note that 80 is a valid area code, so we explicitly check for this case that the third
+ digit begins with 1-9 -->
+ <nationalNumberPattern>
+ (?:
+ 1[0-69]|
+ [23][2-8]|
+ [49][23]|
+ 5\d|
+ 6[013-57-9]|
+ 7[18]
+ )\d{6}|
+ 8(?:
+ 0[1-9]|
+ [1-69]\d
+ )\d{5}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>12345678</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ 4(?:
+ 7\d|
+ 8[4-9]|
+ 9[1-9]
+ )\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>470123456</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>800\d{5}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>80012345</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>
+ (?:
+ 90|
+ 7[07]
+ )\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>90123456</exampleNumber>
+ </premiumRate>
+ <sharedCost>
+ <nationalNumberPattern>87\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>87123456</exampleNumber>
+ </sharedCost>
+ </territory>
+
+ <!-- Burkina Faso -->
+ <!-- http://www.itu.int/oth/T0202000021/en -->
+ <territory id="BF" countryCode="226" internationalPrefix="00">
+ <availableFormats>
+ <!-- The national numbering plan from ITU suggests grouping of 2, 2 and 4, but we have
+ chosen to use the standard from numbers found on the internet instead. -->
+ <numberFormat pattern="(\d{2})(\d{2})(\d{2})(\d{2})">
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[2457]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- 50 48 and 50 49 exist as well. -->
+ <nationalNumberPattern>
+ (?:
+ 20(?:
+ 49|
+ 5[23]|
+ 9[016-9]
+ )|
+ 40(?:
+ 4[569]|
+ 55|
+ 7[0179]
+ )|
+ 50[34]\d
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>20491234</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- Including the whole range of 75 despite the document restricting it to only a few,
+ since diallable numbers have been found outside the range that the document specifies.
+ Including 716 as well since many numbers seem to have this prefix. -->
+ <nationalNumberPattern>
+ 7(?:
+ [024-6]\d|
+ 1[0-4689]|
+ 3[0-6]|
+ 7[01]|
+ 8[013-9]|
+ 9[0-4]
+ )\d{5}
+ </nationalNumberPattern>
+ <exampleNumber>70123456</exampleNumber>
+ </mobile>
+ </territory>
+
+ <!-- Bulgaria -->
+ <!-- http://www.itu.int/oth/T0202000020/en -->
+ <territory id="BG" countryCode="359" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="(2)(\d{3})(\d{3,4})">
+ <leadingDigits>2</leadingDigits>
+ <format>$1/$2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{4})">
+ <leadingDigits>
+ 43[124-7]|
+ 70[1-9]
+ </leadingDigits>
+ <format>$1/$2</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{3})(\d{2})">
+ <leadingDigits>
+ 43[124-7]|
+ 70[1-9]
+ </leadingDigits>
+ <format>$1/$2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{2})(\d{3})">
+ <leadingDigits>[78]00</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{2})(\d{3})(\d{2,3})">
+ <leadingDigits>
+ [356]|
+ 7[1-9]|
+ 8[1-6]|
+ 9[1-7]
+ </leadingDigits>
+ <format>$1/$2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{2})(\d{3})(\d{3,4})">
+ <leadingDigits>
+ 48|
+ 8[7-9]|
+ 9[08]
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[2-9]\d{6,8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7,9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 2\d|
+ [36]\d|
+ 5[1-9]|
+ 8[1-6]|
+ 9[1-7]
+ )\d{5,6}|
+ (?:
+ 4(?:
+ [124-7]\d|
+ 3[1-6]
+ )|
+ 7(?:
+ 0[1-9]|
+ [1-9]\d
+ )
+ )\d{4,5}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7,8}</possibleNumberPattern>
+ <exampleNumber>2123456</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ (?:
+ 8[7-9]|
+ 98
+ )\d{7}|
+ 4(?:
+ 3[0789]|
+ 8\d
+ )\d{5}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{8,9}</possibleNumberPattern>
+ <exampleNumber>48123456</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>800\d{5}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>80012345</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>90\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>90123456</exampleNumber>
+ </premiumRate>
+ <personalNumber>
+ <nationalNumberPattern>700\d{5}</nationalNumberPattern>
+ <exampleNumber>70012345</exampleNumber>
+ </personalNumber>
+ </territory>
+
+ <!-- Bahrain -->
+ <!-- http://www.itu.int/oth/T0202000011/en -->
+ <!-- http://www.tra.org.bh/en/pdf/National_Numbering_Plan_2.pdf -->
+ <territory id="BH" countryCode="973" internationalPrefix="00">
+ <availableFormats>
+ <numberFormat pattern="(\d{4})(\d{4})">
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[136-9]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ </generalDesc>
+ <!-- Universal Service numbers are under both Mobile and Fixed-Line, as they can be assigned
+ to either. -->
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 1(?:
+ 3[3-6]|
+ 6[0156]|
+ 7\d
+ )|
+ 6(?:
+ 1[16]|
+ 6[03469]|
+ 9[69]
+ )|
+ 77\d
+ )\d{5}
+ </nationalNumberPattern>
+ <exampleNumber>17001234</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ (?:
+ 3(?:
+ [369]\d|
+ 77|
+ 8[38]
+ )|
+ 6(?:
+ 1[16]|
+ 6[03469]|
+ 9[69]
+ )|
+ 77\d
+ )\d{5}
+ </nationalNumberPattern>
+ <exampleNumber>36001234</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>80\d{6}</nationalNumberPattern>
+ <exampleNumber>80123456</exampleNumber>
+ </tollFree>
+ <!-- 87 numbers are "wholly paid by the caller", so they are slotted under premium-rate for
+ now. -->
+ <premiumRate>
+ <nationalNumberPattern>
+ (?:
+ 87|
+ 9[014578]
+ )\d{6}
+ </nationalNumberPattern>
+ <exampleNumber>90123456</exampleNumber>
+ </premiumRate>
+ <sharedCost>
+ <nationalNumberPattern>84\d{6}</nationalNumberPattern>
+ <exampleNumber>84123456</exampleNumber>
+ </sharedCost>
+ </territory>
+
+ <!-- Burundi -->
+ <!-- http://www.itu.int/oth/T0202000022/en -->
+ <territory id="BI" countryCode="257" internationalPrefix="00">
+ <availableFormats>
+ <numberFormat
+ pattern="([27]\d)(\d{2})(\d{2})(\d{2})">
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[27]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ 22(?:
+ 2[0-7]|
+ [3-5]0
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>22201234</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- Extra online mobile number prefixes found: 79 10, 78 \d{2} and 76 [29]\d. The 29
+ prefix is listed as a mobile prefix, but many people list it as their fixed home
+ number. We will keep it as mobile for now, but it may actually be a prefix for fixed
+ satellite phones. -->
+ <nationalNumberPattern>
+ (?:
+ 29\d|
+ 7(?:
+ 1[1-3]|
+ [4-9]\d
+ )
+ )\d{5}
+ </nationalNumberPattern>
+ <exampleNumber>79561234</exampleNumber>
+ </mobile>
+ </territory>
+
+ <!-- Benin -->
+ <!-- http://www.itu.int/oth/T0202000017/en -->
+ <territory id="BJ" countryCode="229" internationalPrefix="00">
+ <availableFormats>
+ <numberFormat pattern="(\d{2})(\d{2})(\d{2})(\d{2})">
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ <!-- Numbers beginning with 7 should be formatted as a block. -->
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>
+ [2689]\d{7}|
+ 7\d{3}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{4,8}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- These come from the national numbering plan, but have been widened to include other
+ prefixes found in the yellow pages - specifically 21 0. -->
+ <nationalNumberPattern>
+ 2(?:
+ 02|
+ 1[037]|
+ 2[45]|
+ 3[68]
+ )\d{5}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>20211234</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- 93 0, 93 4, 93 5 and 93 8 have been added as many online examples of these prefixes can
+ be found. 9[68] and 97[23] prefixes have also been added because of online numbers
+ following these patterns and numbers where SMSs were successfully delivered. 66 has
+ been also added, as it seems to be a prefix for Mobile MTN. -->
+ <nationalNumberPattern>
+ 66\d{6}|
+ 9(?:
+ 0[069]|
+ [35][0-2457-9]|
+ [6-8]\d
+ )\d{5}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>90011234</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>7[3-5]\d{2}</nationalNumberPattern>
+ <possibleNumberPattern>\d{4}</possibleNumberPattern>
+ <exampleNumber>7312</exampleNumber>
+ </tollFree>
+ <!-- Other numbers beginning with 81 are reserved for _either_ free phone or shared-cost, but
+ there is no clear differentiation between these. -->
+ <voip>
+ <nationalNumberPattern>857[58]\d{4}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>85751234</exampleNumber>
+ </voip>
+ </territory>
+
+ <!-- Saint Barthélemy, French Antilles -->
+ <!-- There seems to be some overlap with phone numbers from Saint Martin and Guadeloupe. The
+ national numbering plan does not specify any St Barthélemy-specific numbering prefixes, but
+ it appears from searches in online white and yellow pages that a subset of the prefixes
+ available in Guadeloupe are used. In these cases, if getRegionCodeForNumber is used, one of
+ these region codes will be returned, although numbers will be valid for both regions. -->
+ <!-- http://www.itu.int/oth/T0202000058/en -->
+ <territory id="BL" countryCode="590" internationalPrefix="00"
+ nationalPrefix="0">
+ <!-- Formatting rules borrowed from Guadeloupe. -->
+ <generalDesc>
+ <nationalNumberPattern>[56]\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ 590(?:
+ 2[7-9]|
+ 5[12]|
+ 87
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>590271234</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ 690(?:
+ 10|
+ 2[27]|
+ 66|
+ 77|
+ 8[78]
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>690221234</exampleNumber>
+ </mobile>
+ </territory>
+
+ <!-- Bermuda -->
+ <!-- http://www.itu.int/oth/T0202000018/en -->
+ <territory id="BM" countryCode="1" leadingDigits="441"
+ nationalPrefix="1" internationalPrefix="011">
+ <generalDesc>
+ <!-- NANPA country - uses US formatting rules -->
+ <nationalNumberPattern>[4589]\d{9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}(?:\d{3})?</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ 441(?:
+ 2(?:
+ 02|
+ 23|
+ 61|
+ [3479]\d
+ )|
+ [46]\d{2}|
+ 5(?:
+ 4\d|
+ 60|
+ 89
+ )|
+ 824
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>4412345678</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ 441(?:
+ [37]\d|
+ 5[0-39]
+ )\d{5}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>4413701234</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>
+ 8(?:
+ 00|
+ 55|
+ 66|
+ 77|
+ 88
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>8002123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>900[2-9]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>9002123456</exampleNumber>
+ </premiumRate>
+ <personalNumber>
+ <!-- http://www.nanpa.com/pdf/PL_416.pdf -->
+ <nationalNumberPattern>
+ 5(?:
+ 00|
+ 33|
+ 44
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>5002345678</exampleNumber>
+ </personalNumber>
+ </territory>
+
+ <!-- Brunei Darussalam -->
+ <!-- http://www.itu.int/oth/T020200001F/en -->
+ <territory id="BN" countryCode="673" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <!-- Format is from http://aiti.gov.bn/contact.html -->
+ <availableFormats>
+ <numberFormat pattern="([2-578]\d{2})(\d{4})">
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[2-578]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>[2-5]\d{6}</nationalNumberPattern>
+ <exampleNumber>2345678</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>[78]\d{6}</nationalNumberPattern>
+ <exampleNumber>7123456</exampleNumber>
+ </mobile>
+ </territory>
+
+ <!-- Bolivia -->
+ <!-- http://www.itu.int/oth/T020200001A/en -->
+ <!-- http://www.bolivia.com/Servicios/Plandenumeracion.pdf -->
+ <!-- http://www.itu.int/dms_pub/itu-t/oth/02/02/T020200001A0001MSWE.doc -->
+ <territory id="BO" countryCode="591"
+ internationalPrefix="00(1\d)?"
+ nationalPrefix="0"
+ nationalPrefixForParsing="0(1\d)?"
+ carrierCodeFormattingRule="$NP$CC $FG">
+ <availableFormats>
+ <numberFormat pattern="([234])(\d{7})">
+ <leadingDigits>[234]</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="([67]\d{7})">
+ <leadingDigits>[67]</leadingDigits>
+ <format>$1</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[23467]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7,8}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 2(?:
+ 2\d{2}|
+ 5(?:11|[258]\d|9[67])|
+ 6(?:12|2\d|9[34])|
+ 8(?:2[34]|39|62)
+ )|
+ 3(?:
+ 3\d{2}|
+ 4(?:6\d|8[24])|
+ 8(?:25|42|5[257]|86|9[25])|
+ 9(?:2\d|3[234]|4[248]|5[24]|6[2-6]|7\d)
+ )|
+ 4(?:
+ 4\d{2}|
+ 6(?:11|[24689]\d|72)
+ )
+ )\d{4}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7,8}</possibleNumberPattern>
+ <exampleNumber>22123456</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>[67]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>71234567</exampleNumber>
+ </mobile>
+ </territory>
+
+ <!-- Brazil -->
+ <!-- http://en.wikipedia.org/wiki/%2B55 -->
+ <territory id="BR" countryCode="55"
+ internationalPrefix="00(?:1[45]|2[135]|[34]1|43)"
+ nationalPrefix="0"
+ nationalPrefixForParsing="0(?:(1[245]|2[135]|[34]1)(\d{10}))?"
+ nationalPrefixTransformRule="$2">
+ <!--The national prefix for parsing here also contains a capturing group for the main number,
+ since the carrier codes here may also be area codes, so we want to check the length of
+ the number after capturing. We also need a nationalTransformRule to repopulate with the
+ number without the carrier code. -->
+ <availableFormats>
+ <numberFormat nationalPrefixFormattingRule="($FG)"
+ pattern="(\d{2})(\d{4})(\d{4})"
+ carrierCodeFormattingRule="$NP $CC ($FG)">
+ <leadingDigits>[1-9][1-9]</leadingDigits>
+ <format>$1 $2-$3</format>
+ </numberFormat>
+ <numberFormat pattern="([34]00\d)(\d{4})">
+ <leadingDigits>[34]00</leadingDigits>
+ <leadingDigits>
+ 400|
+ 3003
+ </leadingDigits>
+ <format>$1-$2</format>
+ </numberFormat>
+ <numberFormat nationalPrefixFormattingRule="$NP$FG"
+ pattern="([3589]00)(\d{2,3})(\d{4})">
+ <leadingDigits>[3589]00</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[1-9]\d{7,9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8,10}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ [14689][1-9]|
+ 2[12478]|
+ 3[1-578]|
+ 5[13-5]|
+ 7[13-579]
+ )[2-5]\d{7}
+ </nationalNumberPattern>
+ <exampleNumber>1123456789</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ (?:
+ [14689][1-9]|
+ 2[12478]|
+ 3[1-578]|
+ 5[13-5]|
+ 7[13-579]
+ )[6-9]\d{7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>1161234567</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>800\d{6,7}</nationalNumberPattern>
+ <exampleNumber>800123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>[359]00\d{6,7}</nationalNumberPattern>
+ <exampleNumber>300123456</exampleNumber>
+ </premiumRate>
+ <sharedCost>
+ <nationalNumberPattern>
+ (?:
+ 400\d|
+ 3003
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>40041234</exampleNumber>
+ </sharedCost>
+ </territory>
+
+ <!-- Bahamas -->
+ <!-- http://www.itu.int/dms_pub/itu-t/oth/02/02/T02020000100001MSWE.pdf -->
+ <territory id="BS" countryCode="1" leadingDigits="242"
+ nationalPrefix="1" internationalPrefix="011">
+ <generalDesc>
+ <!-- NANPA country - uses US formatting rules -->
+ <nationalNumberPattern>[2589]\d{9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}(?:\d{3})?</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ 242(?:
+ 3(?:
+ 02|
+ [236][1-9]|
+ 4[0-24-9]|
+ 5[0-68]|
+ 7[3467]|
+ 8[0-4]|
+ 9[2-467]
+ )|
+ 461|
+ 502|
+ 6(?:
+ 12|
+ 7[67]|
+ 8[78]|
+ 9[89]
+ )|
+ 702
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>2423456789</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ 242(?:
+ 3(?:
+ 5[79]|
+ [79]5
+ )|
+ 4(?:
+ [2-4][1-9]|
+ 5[1-8]|
+ 6[2-8]|
+ 7\d|
+ 81
+ )|
+ 5(?:
+ 2[34]|
+ 3[35]|
+ 44|
+ 5[1-9]|
+ 65|
+ 77
+ )|
+ 6[34]6|
+ 727
+ )\d{4}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>2423591234</exampleNumber>
+ </mobile>
+ <tollFree>
+ <!-- 242 300 is a Domestic Toll Free service. -->
+ <nationalNumberPattern>
+ 242300\d{4}|
+ 8(?:
+ 00|
+ 55|
+ 66|
+ 77|
+ 88
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>8002123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>900[2-9]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>9002123456</exampleNumber>
+ </premiumRate>
+ <personalNumber>
+ <!-- http://www.nanpa.com/pdf/PL_416.pdf -->
+ <nationalNumberPattern>
+ 5(?:
+ 00|
+ 33|
+ 44
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>5002345678</exampleNumber>
+ </personalNumber>
+ </territory>
+
+ <!-- Bhutan -->
+ <!-- http://www.itu.int/oth/T0202000019/en -->
+ <territory id="BT" countryCode="975" internationalPrefix="00">
+ <availableFormats>
+ <!-- Format is from
+ http://www.tourism.gov.bt/tour-operators/bhutan-abbot-tours-and-travels.html -->
+ <numberFormat pattern="(17)(\d{2})(\d{2})(\d{2})">
+ <leadingDigits>1</leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ <numberFormat pattern="([2-8])(\d{3})(\d{3})">
+ <leadingDigits>[2-8]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>
+ (?:
+ 17|
+ [2-8]
+ )\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{6,8}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 2[3-6]|
+ [34][5-7]|
+ 5[236]|
+ 6[2-46]|
+ 7[246]|
+ 8[2-4]
+ )\d{5}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{6,7}</possibleNumberPattern>
+ <exampleNumber>2345678</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>17\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>17123456</exampleNumber>
+ </mobile>
+ <!-- No information on other types of phone numbers for Bhutan has been found. -->
+ </territory>
+
+ <!-- Botswana -->
+ <!-- http://www.itu.int/oth/T020200001C/en -->
+ <territory id="BW" countryCode="267" internationalPrefix="00">
+ <availableFormats>
+ <numberFormat pattern="(\d{3})(\d{4})">
+ <leadingDigits>[2-6]</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(7\d)(\d{3})(\d{3})">
+ <leadingDigits>7</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(90)(\d{5})">
+ <leadingDigits>9</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[2-79]\d{6,7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7,8}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 2(?:
+ 4[0-48]|
+ 6[0-24]|
+ 9[0578]
+ )|
+ 3(?:
+ 1[0235-9]|
+ 55|
+ 6\d|
+ 7[01]|
+ 9[0-57]
+ )|
+ 4(?:
+ 6[03]|
+ 7[1267]|
+ 9[0-5]
+ )|
+ 5(?:
+ 3[0389]|
+ 4[0489]|
+ 7[1-47]|
+ 88|
+ 9[0-49]
+ )|
+ 6(?:
+ 2[1-35]|
+ 5[149]|
+ 8[067]
+ )
+ )\d{4}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7}</possibleNumberPattern>
+ <exampleNumber>2401234</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ 7(?:
+ [1-35]\d{6}|
+ [46][0-7]\d{5}
+ )
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>71123456</exampleNumber>
+ </mobile>
+ <!-- No reliable information about toll-free numbers can be found; many are written on the
+ internet like 0800 123 456, but this is not supported by any documentation and no
+ numbers can be found that actually work. -->
+ <premiumRate>
+ <nationalNumberPattern>90\d{5}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}</possibleNumberPattern>
+ <exampleNumber>9012345</exampleNumber>
+ </premiumRate>
+ <voip>
+ <nationalNumberPattern>79[12][01]\d{4}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>79101234</exampleNumber>
+ </voip>
+ </territory>
+
+ <!-- Belarus -->
+ <!-- http://eng.beltelecom.by/info/numbering/ -->
+ <!-- Information on national prefix provided by a Belarussian person. -->
+ <territory id="BY" countryCode="375" internationalPrefix="8~10"
+ nationalPrefixForParsing="80?" nationalPrefix="8">
+ <availableFormats>
+ <numberFormat nationalPrefixFormattingRule="$NP 0$FG"
+ pattern="([1-4]\d)(\d{3})(\d{4})">
+ <leadingDigits>[1-4]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat nationalPrefixFormattingRule="$NP $FG"
+ pattern="([89]\d{2})(\d{3})(\d{4})">
+ <leadingDigits>[89]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>
+ [12-4]\d{8}|
+ [89]\d{9}
+ </nationalNumberPattern>
+ <!-- Numbers are often written without the city code. -->
+ <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 1(?:
+ 5(?:
+ 1[1-5]|
+ 2\d|
+ 6[1-4]|
+ 9[1-7]
+ )|
+ 6(?:
+ [235]\d|
+ 4[1-7]
+ )|
+ 7\d{2}
+ )|
+ 2(?:
+ 1(?:
+ [246]\d|
+ 3[0-35-9]|
+ 5[1-9]
+ )|
+ 2(?:
+ [235]\d|
+ 4[0-8]
+ )|
+ 3(?:
+ 2\d|
+ 3[02-79]|
+ 4[024-7]|
+ 5[0-7]
+ )
+ )
+ )\d{5}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7,9}</possibleNumberPattern>
+ <!-- Using test number for Grodno from the plan. -->
+ <exampleNumber>152450911</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ (?:
+ 2(?:
+ 5[679]|
+ 9[1-9]
+ )|
+ 33\d|
+ 44\d
+ )\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <!-- Using test number for BelCel from the plan. -->
+ <exampleNumber>294911911</exampleNumber>
+ </mobile>
+ <tollFree>
+ <!-- Putting Interactive Polling Service (free) here too. -->
+ <nationalNumberPattern>80[13]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>8011234567</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>902\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>9021234567</exampleNumber>
+ </premiumRate>
+ </territory>
+
+ <!-- Belize -->
+ <!-- http://www.itu.int/oth/T0202000016/en -->
+ <!-- The trunk prefix, formally 0, was dropped in the last reorganisation of the numbering plan.
+ -->
+ <territory id="BZ" countryCode="501" internationalPrefix="00" leadingZeroPossible="true">
+ <availableFormats>
+ <numberFormat pattern="(\d{3})(\d{4})">
+ <leadingDigits>[2-8]</leadingDigits>
+ <!-- Adding hyphen following the Belize Telemedia formatting rules. -->
+ <format>$1-$2</format>
+ </numberFormat>
+ <numberFormat pattern="(0)(800)(\d{4})(\d{3})">
+ <leadingDigits>0</leadingDigits>
+ <format>$1-$2-$3-$4</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>
+ [2-8]\d{6}|
+ 0\d{10}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7}(?:\d{4})?</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>[234578][02]\d{5}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}</possibleNumberPattern>
+ <exampleNumber>2221234</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- 62[6-9] were added as we have been able to successfully send SMSs to these numbers. -->
+ <nationalNumberPattern>
+ 6(?:
+ [0-2]\d|
+ [67][01]
+ )\d{4}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7}</possibleNumberPattern>
+ <exampleNumber>6221234</exampleNumber>
+ </mobile>
+ <!-- We don't know how these would be dialled internationally - it is possible that they can't
+ be dialled internationally at all - so we represent the leading 0 as part of the number.
+ Information from www.belizetelemedia.net. -->
+ <tollFree>
+ <nationalNumberPattern>0800\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{11}</possibleNumberPattern>
+ <exampleNumber>08001234123</exampleNumber>
+ </tollFree>
+ </territory>
+
+ <!-- Canada -->
+ <!-- http://www.cnac.ca/canadian_dial_plan/canadian_dial_plan.htm -->
+ <territory id="CA" countryCode="1" internationalPrefix="011" nationalPrefix="1">
+ <generalDesc>
+ <!-- NANPA country - uses US formatting rules -->
+ <nationalNumberPattern>
+ [2-9]\d{9}|
+ 3\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7}(?:\d{3})?</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 2(?:
+ 04|
+ 26|
+ [48]9|
+ 50
+ )|
+ 3(?:
+ 06|
+ 43
+ )|
+ 4(?:
+ 03|
+ 1[68]|
+ 38|
+ 5[06]
+ )|
+ 5(?:
+ 0[06]|
+ 1[49]|
+ 79|
+ 8[17]
+ )|
+ 6(?:
+ 0[04]|
+ 13|
+ 47
+ )|
+ 7(?:
+ 0[059]|
+ [18]0|
+ 78
+ )|
+ 8(?:
+ [06]7|
+ 19|
+ )|
+ 90[25]
+ )[2-9]\d{6}|
+ 310\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>2042345678</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ (?:
+ 2(?:
+ 04|
+ 26|
+ [48]9|
+ 50
+ )|
+ 3(?:
+ 06|
+ 43
+ )|
+ 4(?:
+ 03|
+ 1[68]|
+ 38|
+ 5[06]
+ )|
+ 5(?:
+ 0[06]|
+ 1[49]|
+ 79|
+ 8[17]
+ )|
+ 6(?:
+ 0[04]|
+ 13|
+ 47
+ )|
+ 7(?:
+ 0[059]|
+ [18]0|
+ 78
+ )|
+ 8(?:
+ [06]7|
+ 19|
+ )|
+ 90[25]
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <exampleNumber>2042345678</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>
+ 8(?:
+ 00|
+ 55|
+ 66|
+ 77|
+ 88
+ )[2-9]\d{6}|
+ 310\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>8002123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>900[2-9]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>9002123456</exampleNumber>
+ </premiumRate>
+ <personalNumber>
+ <!-- http://www.nanpa.com/pdf/PL_416.pdf -->
+ <nationalNumberPattern>
+ 5(?:
+ 00|
+ 33|
+ 44
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>5002345678</exampleNumber>
+ </personalNumber>
+ </territory>
+
+ <!-- Congo, Dem. Rep. of the (formerly Zaire) -->
+ <!-- http://www.itu.int/oth/T0202000037/en -->
+ <territory id="CD" countryCode="243" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="([89]\d{2})(\d{3})(\d{3})">
+ <leadingDigits>[89]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="([1-6]\d)(\d{5})">
+ <leadingDigits>[1-6]</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>
+ [89]\d{8}|
+ [1-6]\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7,9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>[1-6]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}</possibleNumberPattern>
+ <exampleNumber>1234567</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ (?:
+ 8[0-2489]|
+ 9[7-9]
+ )\d{7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>991234567</exampleNumber>
+ </mobile>
+ </territory>
+
+ <!-- Central African Republic -->
+ <!-- http://www.itu.int/oth/T0202000028/en -->
+ <territory id="CF" countryCode="236" internationalPrefix="00">
+ <availableFormats>
+ <numberFormat pattern="(\d{2})(\d{2})(\d{2})(\d{2})">
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[278]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>2[12]\d{6}</nationalNumberPattern>
+ <exampleNumber>21612345</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>7[0257]\d{6}</nationalNumberPattern>
+ <exampleNumber>70012345</exampleNumber>
+ </mobile>
+ <premiumRate>
+ <nationalNumberPattern>8776\d{4}</nationalNumberPattern>
+ <exampleNumber>87761234</exampleNumber>
+ </premiumRate>
+ </territory>
+
+ <!-- Congo (Rep. of the) (Brazzaville) -->
+ <!-- http://www.itu.int/oth/T020200002E/en -->
+ <territory id="CG" countryCode="242" internationalPrefix="00" leadingZeroPossible="true">
+ <availableFormats>
+ <numberFormat pattern="(\d{2})(\d{3})(\d{4})">
+ <leadingDigits>[02]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d)(\d{4})(\d{4})">
+ <leadingDigits>8</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[028]\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>222[1-589]\d{5}</nationalNumberPattern>
+ <exampleNumber>222123456</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>0[14-6]\d{7}</nationalNumberPattern>
+ <exampleNumber>061234567</exampleNumber>
+ </mobile>
+ <!-- Referred to as a "Green number" in the telephone plan. -->
+ <tollFree>
+ <nationalNumberPattern>800\d{6}</nationalNumberPattern>
+ <exampleNumber>800123456</exampleNumber>
+ </tollFree>
+ </territory>
+
+ <!-- Switzerland -->
+ <!-- http://www.bakom.admin.ch/themen/telekom/00479/00604/index.html?lang=en
+ under Technical prescriptions: Numbering plan for international carriers -->
+ <territory id="CH" countryCode="41" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="([2-9]\d)(\d{3})(\d{2})(\d{2})">
+ <leadingDigits>
+ [2-7]|
+ [89]1
+ </leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ <numberFormat pattern="([89]\d{2})(\d{3})(\d{3})">
+ <leadingDigits>
+ 8[047]|
+ 90
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[2-9]\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 2[12467]|
+ 3[1-4]|
+ 4[134]|
+ 5[12568]|
+ 6[12]|
+ [7-9]1
+ )\d{7}
+ </nationalNumberPattern>
+ <exampleNumber>212345678</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>7[46-9]\d{7}</nationalNumberPattern>
+ <exampleNumber>741234567</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>800\d{6}</nationalNumberPattern>
+ <exampleNumber>800123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>90[016]\d{6}</nationalNumberPattern>
+ <exampleNumber>900123456</exampleNumber>
+ </premiumRate>
+ <sharedCost>
+ <nationalNumberPattern>84[0248]\d{6}</nationalNumberPattern>
+ <exampleNumber>840123456</exampleNumber>
+ </sharedCost>
+ <personalNumber>
+ <nationalNumberPattern>878\d{6}</nationalNumberPattern>
+ <exampleNumber>878123456</exampleNumber>
+ </personalNumber>
+ </territory>
+
+ <!-- Côte d'Ivoire -->
+ <!-- http://www.itu.int/oth/T0202000031/en -->
+ <territory id="CI" countryCode="225" internationalPrefix="00" leadingZeroPossible="true">
+ <availableFormats>
+ <!-- Using format from online yellow pages over format implied in national numbering plan.
+ -->
+ <numberFormat pattern="(\d{2})(\d{2})(\d{2})(\d{2})">
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[02-5]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 2(?:
+ 0[023]|
+ 1[02357]|
+ [23][045]|
+ 4[03-5]
+ )|
+ 3(?:
+ 0[06]|
+ 1[069]|
+ [2-4][07]|
+ 5[09]|
+ 6[08]
+ )
+ )\d{5}
+ </nationalNumberPattern>
+ <exampleNumber>21234567</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- Added the prefixes 40 and 57 because SMS messages have been successfully delivered.
+ Supported by numbers found on the internet. -->
+ <nationalNumberPattern>
+ (?:
+ 0[1-9]|
+ 4[04-9]|
+ 5[07]|
+ 6[067]
+ )\d{6}
+ </nationalNumberPattern>
+ <exampleNumber>01234567</exampleNumber>
+ </mobile>
+ </territory>
+
+ <!-- Cook Islands -->
+ <!-- http://www.itu.int/oth/T020200002F/en -->
+ <territory id="CK" countryCode="682" internationalPrefix="00">
+ <availableFormats>
+ <numberFormat pattern="(\d{2})(\d{3})">
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[2-57]\d{4}</nationalNumberPattern>
+ <possibleNumberPattern>\d{5}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 2\d|
+ 3[13-7]|
+ 4[1-5]
+ )\d{3}
+ </nationalNumberPattern>
+ <exampleNumber>21234</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ (?:
+ 5[0-68]|
+ 7\d
+ )\d{3}
+ </nationalNumberPattern>
+ <exampleNumber>71234</exampleNumber>
+ </mobile>
+ </territory>
+
+ <!-- Chile -->
+ <!-- http://www.itu.int/oth/T020200002A/en -->
+ <!-- http://en.wikipedia.org/wiki/%2B56 -->
+ <!-- Carriers listed here: http://www.turismochile.com/datos/carrier.php -->
+ <territory id="CL" countryCode="56"
+ internationalPrefix="(?:0|1(?:1[0-69]|2[0-57]|5[13-58]|69|7[0167]|8[018]))0"
+ nationalPrefix="0"
+ nationalPrefixForParsing="0|(1(?:1[0-69]|2[0-57]|5[13-58]|69|7[0167]|8[018]))"
+ nationalPrefixFormattingRule="$NP$FG">
+ <!-- When dialling mobile numbers from landlines, or vice versa, you need a prefix of 0, which
+ we strip here. National destinations may be dialled with a carrier if they are not local so
+ we extract these carrier codes as well. -->
+ <availableFormats>
+ <numberFormat pattern="(2)(\d{3})(\d{4})"
+ nationalPrefixFormattingRule="($FG)"
+ carrierCodeFormattingRule="$CC ($FG)">
+ <leadingDigits>2</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{2})(\d{2,3})(\d{4})"
+ nationalPrefixFormattingRule="($FG)"
+ carrierCodeFormattingRule="$CC ($FG)">
+ <leadingDigits>
+ [357]|
+ 4[1-35]|
+ 6[13-57]
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(9)([6-9]\d{3})(\d{4})">
+ <leadingDigits>9</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(44)(\d{3})(\d{4})">
+ <leadingDigits>44</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat nationalPrefixFormattingRule="$FG"
+ pattern="([68]00)(\d{3})(\d{3,4})">
+ <leadingDigits>
+ 60|
+ 8
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat nationalPrefixFormattingRule="$FG"
+ pattern="(600)(\d{3})(\d{2})(\d{3})">
+ <leadingDigits>60</leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ <numberFormat nationalPrefixFormattingRule="$FG"
+ pattern="(1230)(\d{3})(\d{4})">
+ <leadingDigits>1</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>
+ (?:
+ [2-9]|
+ 600|
+ 123
+ )\d{7,8}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{6,11}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 2|
+ 32|
+ 41
+ )\d{7}|
+ (?:
+ 3[3-5]|
+ 4[235]|
+ 5[1-3578]|
+ 6[13-57]|
+ 7[1-35]
+ )\d{6,7}
+ </nationalNumberPattern>
+ <!-- Area codes do not need to be dialled when dialling within the same area, so the
+ smallest possible number is length 6. -->
+ <possibleNumberPattern>\d{6,9}</possibleNumberPattern>
+ <exampleNumber>21234567</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>9[6-9]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8,9}</possibleNumberPattern>
+ <exampleNumber>961234567</exampleNumber>
+ </mobile>
+ <!-- Toll free and premium rate patterns have been collected by looking at numbers on the
+ internet, rather than from a definitive source. -->
+ <tollFree>
+ <!-- 1230 numbers are used by Visa/Mastercard helplines in Chile -->
+ <nationalNumberPattern>
+ 800\d{6}|
+ 1230\d{7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{9,11}</possibleNumberPattern>
+ <exampleNumber>800123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>600\d{7,8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10,11}</possibleNumberPattern>
+ <exampleNumber>6001234567</exampleNumber>
+ </premiumRate>
+ <voip>
+ <nationalNumberPattern>44\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>441234567</exampleNumber>
+ </voip>
+ </territory>
+
+ <!-- Cameroon -->
+ <!-- http://www.itu.int/oth/T0202000024/en -->
+ <territory id="CM" countryCode="237" internationalPrefix="00">
+ <availableFormats>
+ <!-- Formatting on the internet is consistently with the first 2 extracted, and usually in
+ the same format as France (all 2 digit groups) so we use this instead of the guidance
+ of the national numbering plan (which has 1 3 2 2 and 4 4 as its two formatting
+ examples.) -->
+ <numberFormat pattern="([237-9]\d)(\d{2})(\d{2})(\d{2})">
+ <leadingDigits>
+ [2379]|
+ 88
+ </leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ <numberFormat pattern="(800)(\d{2})(\d{3})">
+ <leadingDigits>80</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[237-9]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- Technically, the numbers are required only to start with a 2 or a 3, but all numbers at
+ the moment start with 22 or 33 since they have been migrated from seven digit numbers
+ beginning with these numbers. This rule should be relaxed if/when we start getting
+ numbers beginning in other ways. -->
+ <nationalNumberPattern>
+ (?:
+ 22|
+ 33
+ )\d{6}
+ </nationalNumberPattern>
+ <exampleNumber>22123456</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>[79]\d{7}</nationalNumberPattern>
+ <exampleNumber>71234567</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>800\d{5}</nationalNumberPattern>
+ <exampleNumber>80012345</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <!-- These numbers are listed as value-added in the guide, and in practice seem to begin
+ with 88 (usually 880). No information can be found as to whether these are premium rate
+ or shared cost. -->
+ <nationalNumberPattern>88\d{6}</nationalNumberPattern>
+ <exampleNumber>88012345</exampleNumber>
+ </premiumRate>
+ </territory>
+
+ <!-- China -->
+ <!-- http://www.itu.int/dms_pub/itu-t/oth/02/02/T020200002B0001XLSE.xls -->
+ <territory id="CN" countryCode="86" internationalPrefix="00"
+ nationalPrefix="0">
+ <availableFormats>
+ <numberFormat nationalPrefixFormattingRule="$NP$FG"
+ pattern="(80\d{2})(\d{4})">
+ <leadingDigits>80[2678]</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="([48]00)(\d{3})(\d{4})">
+ <leadingDigits>[48]00</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <!-- Local numbers -->
+ <!-- Chinese fixed-line numbers can be dialed from a cell phone without area code and they
+ can be 7 to 8 digits. This rule is here to make formatting work with such numbers, as
+ people frequently store them in their cellphones. It has to stay before formatting
+ rules for fixed-line numbers to make AsYouTypeFormatter work with these numbers. The
+ leadingDigits prefix makes sure it doesn't clash with mobile numbers. -->
+ <numberFormat pattern="(\d{3,4})(\d{4})">
+ <leadingDigits>[2-9]</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat nationalPrefixFormattingRule="$NP$FG"
+ pattern="(21)(\d{4})(\d{4,6})">
+ <leadingDigits>21</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat nationalPrefixFormattingRule="$NP$FG"
+ pattern="([12]\d)(\d{4})(\d{4})">
+ <leadingDigits>
+ 10[1-9]|
+ 2[02-9]
+ </leadingDigits>
+ <!-- Note the leadingDigitsPattern for 4 digits is the same as 3 digits, -->
+ <leadingDigits>
+ 10[1-9]|
+ 2[02-9]
+ </leadingDigits>
+ <leadingDigits>
+ 10(?:
+ [1-79]|
+ 8(?:
+ [1-9]|
+ 0[1-9]
+ )
+ )|
+ 2[02-9]
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat nationalPrefixFormattingRule="$NP$FG"
+ pattern="(\d{3})(\d{4})(\d{4})">
+ <leadingDigits>
+ 3(?:
+ 11|
+ 7[159]
+ )|
+ 4[135]1|
+ 5(?:
+ 1|
+ 2[37]|
+ 3[12]|
+ 7[13-79]|
+ 9[15]
+ )|
+ 7(?:
+ 31|
+ 5[457]|
+ 6[09]
+ )|
+ 898
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat nationalPrefixFormattingRule="$NP$FG"
+ pattern="(\d{3})(\d{3})(\d{4})">
+ <leadingDigits>
+ 3(?:
+ 1[02-9]|
+ 35|
+ 49|
+ 5|
+ 7[02-68]|
+ 9[1-68]
+ )|
+ 4(?:
+ 1[02-9]|
+ 2[179]|
+ [35][2-9]|
+ 6[4789]|
+ 7[0-46-9]|
+ 8[23]
+ )|
+ 5(?:
+ 3[03-9]|
+ 4[36]|
+ 5|
+ 6[1-6]|
+ 7[028]|
+ 80|
+ 9[2-46-9]
+ )|
+ 6(?:
+ 3[1-5]|
+ 6[0238]|
+ 9[12]
+ )|
+ 7(?:
+ 01|
+ [1579]|
+ 2[248]|
+ 3[04-9]|
+ 4[3-6]|
+ 6[2368]
+ )|
+ 8(?:
+ 1[236-8]|
+ 2[5-7]|
+ [37]|
+ 5[1-9]|
+ 8[3678]|
+ 9[1-7]
+ )|
+ 9(?:
+ 0[1-3689]|
+ 1[1-79]|
+ [379]|
+ 4[13]|
+ 5[1-5]
+ )
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(1[3-58]\d)(\d{4})(\d{4})">
+ <leadingDigits>1[3-58]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(10800)(\d{3})(\d{4})">
+ <leadingDigits>108</leadingDigits>
+ <leadingDigits>1080</leadingDigits>
+ <leadingDigits>10800</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <intlNumberFormat pattern="(21)(\d{4})(\d{4,6})">
+ <leadingDigits>21</leadingDigits>
+ <format>$1 $2 $3</format>
+ </intlNumberFormat>
+ <intlNumberFormat pattern="([12]\d)(\d{4})(\d{4})">
+ <leadingDigits>
+ 10[1-9]|
+ 2[02-9]
+ </leadingDigits>
+ <!-- Note the leadingDigitsPattern for 4 digits is the same as 3 digits, -->
+ <leadingDigits>
+ 10[1-9]|
+ 2[02-9]
+ </leadingDigits>
+ <leadingDigits>
+ 10(?:
+ [1-79]|
+ 8(?:
+ [1-9]|
+ 0[1-9]
+ )
+ )|
+ 2[02-9]
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </intlNumberFormat>
+ <intlNumberFormat pattern="(80\d{2})(\d{4})">
+ <leadingDigits>80[2678]</leadingDigits>
+ <format>$1 $2</format>
+ </intlNumberFormat>
+ <intlNumberFormat
+ pattern="(\d{3})(\d{4})(\d{4})">
+ <leadingDigits>
+ 3(?:
+ 11|
+ 7[159]
+ )|
+ 4[135]1|
+ 5(?:
+ 1|
+ 2[37]|
+ 3[12]|
+ 7[13-79]|
+ 9[15]
+ )|
+ 7(?:
+ 31|
+ 5[457]|
+ 6[09]
+ )|
+ 898
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </intlNumberFormat>
+ <intlNumberFormat
+ pattern="(\d{3})(\d{3})(\d{4})">
+ <leadingDigits>
+ 3(?:
+ 1[02-9]|
+ 35|
+ 49|
+ 5|
+ 7[02-68]|
+ 9[1-68]
+ )|
+ 4(?:
+ 1[02-9]|
+ 2[179]|
+ [35][2-9]|
+ 6[4789]|
+ 7[0-46-9]|
+ 8[23]
+ )|
+ 5(?:
+ 3[03-9]|
+ 4[36]|
+ 5|
+ 6[1-6]|
+ 7[028]|
+ 80|
+ 9[2-46-9]
+ )|
+ 6(?:
+ 3[1-5]|
+ 6[0238]|
+ 9[12]
+ )|
+ 7(?:
+ 01|
+ [1579]|
+ 2[248]|
+ 3[04-9]|
+ 4[3-6]|
+ 6[2368]
+ )|
+ 8(?:
+ 1[236-8]|
+ 2[5-7]|
+ [37]|
+ 5[1-9]|
+ 8[3678]|
+ 9[1-7]
+ )|
+ 9(?:
+ 0[1-3689]|
+ 1[1-79]|
+ [379]|
+ 4[13]|
+ 5[1-5]
+ )
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </intlNumberFormat>
+ <intlNumberFormat pattern="(1[3-58]\d)(\d{4})(\d{4})">
+ <leadingDigits>1[3-58]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </intlNumberFormat>
+ <intlNumberFormat pattern="([48]00)(\d{3})(\d{4})">
+ <leadingDigits>[48]00</leadingDigits>
+ <format>$1 $2 $3</format>
+ </intlNumberFormat>
+ <intlNumberFormat pattern="(10800)(\d{3})(\d{4})">
+ <leadingDigits>108</leadingDigits>
+ <leadingDigits>1080</leadingDigits>
+ <leadingDigits>10800</leadingDigits>
+ <format>$1 $2 $3</format>
+ </intlNumberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>
+ [1-79]\d{7,11}|
+ 8[0-357-9]\d{6,9}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{4,12}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ 21\d{8,10}|
+ (?:
+ 10|
+ 2[02-57-9]|
+ 3(?:
+ 11|
+ 7[159]
+ )|
+ 4[135]1|
+ 5(?:
+ 1\d|
+ 2[37]|
+ 3[12]|
+ 7[13-79]|
+ 9[15]
+ )|
+ 7(?:
+ 31|
+ 5[457]|
+ 6[09]
+ )|
+ 898
+ )\d{8}|
+ (?:
+ 3(?:
+ 1[02-9]|
+ 35|
+ 49|
+ 5\d|
+ 7[02-68]|
+ 9[1-68]
+ )|
+ 4(?:
+ 1[02-9]|
+ 2[179]|
+ [35][2-9]|
+ 6[4789]|
+ 7[0-46-9]|
+ 8[23]
+ )|
+ 5(?:
+ 3[03-9]|
+ 4[36]|
+ 5\d|
+ 6[1-6]|
+ 7[028]|
+ 80|
+ 9[2-46-9]
+ )|
+ 6(?:
+ 3[1-5]|
+ 6[0238]|
+ 9[12]
+ )|
+ 7(?:
+ 01|
+ [1579]\d|
+ 2[248]|
+ 3[04-9]|
+ 4[3-6]|
+ 6[2368]
+ )|
+ 8(?:
+ 1[236-8]|
+ 2[5-7]|
+ [37]\d|
+ 5[1-9]|
+ 8[3678]|
+ 9[1-7]
+ )|
+ 9(?:
+ 0[1-3689]|
+ 1[1-79]|
+ [379]\d|
+ 4[13]|
+ 5[1-5]
+ )
+ )\d{7}|
+ 80(?:
+ 29|
+ 6[03578]|
+ 7[018]|
+ 81
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>1012345678</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ 1(?:
+ 3[0-9]|
+ 47|
+ 5[0135689]|
+ 8[05-9]
+ )\d{8}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{11}</possibleNumberPattern>
+ <exampleNumber>13123456789</exampleNumber>
+ </mobile>
+ <!-- Toll free, premium rate, and VoIP numbers are not clearly defined in the official Chinese
+ number plan, and do not seem to have been standardized. The information below is
+ collected from searching the web. -->
+ <!-- http://en.wikipedia.org/wiki/Toll-free_telephone_number -->
+ <tollFree>
+ <nationalNumberPattern>
+ (?:
+ 10
+ )?800\d{7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10,12}</possibleNumberPattern>
+ <exampleNumber>8001234567</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>16[08]\d{5}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>16812345</exampleNumber>
+ </premiumRate>
+ <voip>
+ <nationalNumberPattern>400\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>4001234567</exampleNumber>
+ </voip>
+ </territory>
+
+ <!-- Colombia -->
+ <!-- http://www.itu.int/oth/T020200002C/en
+ http://en.wikipedia.org/wiki/Telephone_numbers_in_Colombia -->
+ <territory id="CO" countryCode="57" internationalPrefix="00[579]|#555|#999"
+ nationalPrefix="0" nationalPrefixForParsing="0([3579]|4(?:44|56))">
+ <availableFormats>
+ <numberFormat pattern="(\d)(\d{7})" carrierCodeFormattingRule="$NP$CC $FG"
+ nationalPrefixFormattingRule="($FG)">
+ <leadingDigits>
+ 1(?:
+ 8[2-9]|
+ 9[0-3]|
+ [2-7]
+ )|
+ [24-8]
+ </leadingDigits>
+ <leadingDigits>
+ 1(?:
+ 8[2-9]|
+ 9(?:
+ 09|
+ [1-3]
+ )|
+ [2-7]
+ )|
+ [24-8]
+ </leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <intlNumberFormat pattern="(\d)(\d{7})">
+ <leadingDigits>
+ 1(?:
+ 8[2-9]|
+ 9[0-3]|
+ [2-7]
+ )|
+ [24-8]
+ </leadingDigits>
+ <leadingDigits>
+ 1(?:
+ 8[2-9]|
+ 9(?:
+ 09|
+ [1-3]
+ )|
+ [2-7]
+ )|
+ [24-8]
+ </leadingDigits>
+ <format>$1 $2</format>
+ </intlNumberFormat>
+ <numberFormat pattern="(\d{3})(\d{7})" carrierCodeFormattingRule="$NP$CC $FG">
+ <leadingDigits>3</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <intlNumberFormat pattern="(\d{3})(\d{7})">
+ <leadingDigits>3</leadingDigits>
+ <format>$1 $2</format>
+ </intlNumberFormat>
+ <numberFormat pattern="(1)(\d{3})(\d{7})" nationalPrefixFormattingRule="$NP$FG">
+ <leadingDigits>
+ 1(?:
+ 80|
+ 9[04]
+ )
+ </leadingDigits>
+ <leadingDigits>
+ 1(?:
+ 800|
+ 9(?:
+ 0[01]|
+ 4[78]
+ )
+ )
+ </leadingDigits>
+ <format>$1-$2-$3</format>
+ </numberFormat>
+ <intlNumberFormat pattern="(1)(\d{3})(\d{7})">
+ <leadingDigits>
+ 1(?:
+ 80|
+ 9[04]
+ )
+ </leadingDigits>
+ <leadingDigits>
+ 1(?:
+ 800|
+ 9(?:
+ 0[01]|
+ 4[78]
+ )
+ )
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </intlNumberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>
+ (?:
+ [13]\d{0,3}|
+ [24-8]
+ )\d{7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7,11}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>[124-8][2-9]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>12345678</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ 3(?:
+ 0[0-24]|
+ 1[0-8]|
+ 2[01]
+ )\d{7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>3211234567</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>1800\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{11}</possibleNumberPattern>
+ <exampleNumber>18001234567</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>
+ 19(?:
+ 0[01]|
+ 4[78]
+ )\d{7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{11}</possibleNumberPattern>
+ <exampleNumber>19001234567</exampleNumber>
+ </premiumRate>
+ </territory>
+
+ <!-- Costa Rica -->
+ <!-- http://www.itu.int/oth/T0202000030/en -->
+ <territory id="CR" countryCode="506" internationalPrefix="00"
+ nationalPrefixForParsing="(1900)" carrierCodeFormattingRule="$CC $FG">
+ <availableFormats>
+ <numberFormat pattern="(\d{4})(\d{4})">
+ <leadingDigits>
+ [24]|
+ 8[3-9]
+ </leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{3})(\d{4})">
+ <leadingDigits>[89]0</leadingDigits>
+ <format>$1-$2-$3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[2489]\d{7,9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8,10}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>2[24-7]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>22123456</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- Adding 87[0-3] prefixes after numbers were found online where these prefixes have been
+ assigned. -->
+ <nationalNumberPattern>
+ 8(?:
+ [389]\d|
+ 7[0-3]
+ )\d{5}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>83123456</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>800\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>8001234567</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <!-- Includes "mass calls" numbers with prefix 905. -->
+ <nationalNumberPattern>90[059]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>9001234567</exampleNumber>
+ </premiumRate>
+ <voip>
+ <nationalNumberPattern>4000\d{4}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>40001234</exampleNumber>
+ </voip>
+ <shortCode>
+ <!-- This pattern excludes 4-digit SMS content numbers for now. -->
+ <nationalNumberPattern>
+ 1(?:
+ 02[2-469]|
+ 1(?:
+ 1[0235-9]|
+ 2|
+ 37|
+ 46|
+ 75|
+ 8[79]|
+ 9[0-379]
+ )|
+ 212)
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{3,4}</possibleNumberPattern>
+ <exampleNumber>1022</exampleNumber>
+ </shortCode>
+ </territory>
+
+ <!-- Cuba -->
+ <!-- www.itu.int/oth/T0202000033/en -->
+ <territory id="CU" countryCode="53" internationalPrefix="119"
+ nationalPrefix="0" nationalPrefixFormattingRule="($NP$FG)">
+ <availableFormats>
+ <numberFormat pattern="(\d)(\d{6,7})">
+ <leadingDigits>7</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{2})(\d{4,6})">
+ <leadingDigits>[2-4]</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(\d)(\d{7})" nationalPrefixFormattingRule="$NP$FG">
+ <leadingDigits>5</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[2-57]\d{5,7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{4,8}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ 2[1-4]\d{5,6}|
+ 3(?:
+ 1\d{6}|
+ [23]\d{4,6})|
+ 4(?:
+ [125]\d{5,6}|
+ [36]\d{6}|
+ [78]\d{4,6})|
+ 7\d{6,7}
+ </nationalNumberPattern>
+ <exampleNumber>71234567</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>5\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>51234567</exampleNumber>
+ </mobile>
+ </territory>
+
+ <!-- Cape Verde -->
+ <!-- http://www.itu.int/oth/T0202000026/en -->
+ <territory id="CV" countryCode="238" internationalPrefix="0">
+ <availableFormats>
+ <numberFormat pattern="(\d{3})(\d{2})(\d{2})">
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[259]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ 2(?:
+ 2[1-7]|
+ 3[0-8]|
+ 4[12]|
+ 5[1256]|
+ 6\d|
+ 7[1-3]|
+ 8[1-5]
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>2211234</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- It seems, contrary to their numbering plan, the entire 9X range is used for mobile
+ phones. SMS messages has been successfully sent to numbers starting with 95 and 97 for
+ example, and there are plenty of numbers on the internet that start with these
+ prefixes. -->
+ <nationalNumberPattern>
+ (?:
+ 9\d|
+ 59
+ )\d{5}
+ </nationalNumberPattern>
+ <exampleNumber>9911234</exampleNumber>
+ </mobile>
+ </territory>
+
+ <!-- Cyprus -->
+ <!-- http://www.itu.int/oth/T0202000034/en -->
+ <territory id="CY" countryCode="357" internationalPrefix="00">
+ <availableFormats>
+ <!-- Format from http://www.cyprusyellowpages.com/-->
+ <numberFormat pattern="([27-9]\d)(\d{6})">
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[27-9]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>2[2-6]\d{6}</nationalNumberPattern>
+ <exampleNumber>22345678</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- Universal Access Service numbers (7777 xxxx) are included here, as they are classified
+ as Mobile in the Cyprus national numbering plan. -->
+ <nationalNumberPattern>
+ 7777\d{4}|
+ 9(?:
+ [69]\d|
+ 7[67]
+ )\d{5}
+ </nationalNumberPattern>
+ <exampleNumber>96123456</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>8000\d{4}</nationalNumberPattern>
+ <exampleNumber>80001234</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>9009\d{4}</nationalNumberPattern>
+ <exampleNumber>90091234</exampleNumber>
+ </premiumRate>
+ <personalNumber>
+ <nationalNumberPattern>700\d{5}</nationalNumberPattern>
+ <exampleNumber>70012345</exampleNumber>
+ </personalNumber>
+ </territory>
+
+ <!-- Czech Rep. -->
+ <!-- http://www.itu.int/oth/T0202000035/en -->
+ <!-- http://en.wikipedia.org/wiki/%2B420 -->
+ <territory id="CZ" countryCode="420" internationalPrefix="00">
+ <availableFormats>
+ <numberFormat pattern="([2-9]\d{2})(\d{3})(\d{3})">
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[2-9]\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ 2\d{8}|
+ (?:
+ 3[1257-9]|
+ 4[16-9]|
+ 5[13-9]
+ )\d{7}
+ </nationalNumberPattern>
+ <exampleNumber>212345678</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ 60[1-8]\d{6}|
+ 7[2379]\d{7}
+ </nationalNumberPattern>
+ <exampleNumber>601123456</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>800\d{6}</nationalNumberPattern>
+ <exampleNumber>800123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>90[0689]\d{6}</nationalNumberPattern>
+ <exampleNumber>900123456</exampleNumber>
+ </premiumRate>
+ <sharedCost>
+ <nationalNumberPattern>8[134]\d{7}</nationalNumberPattern>
+ <exampleNumber>811234567</exampleNumber>
+ </sharedCost>
+ <personalNumber>
+ <nationalNumberPattern>70[01]\d{6}</nationalNumberPattern>
+ <exampleNumber>700123456</exampleNumber>
+ </personalNumber>
+ </territory>
+
+ <!-- Germany -->
+ <!-- http://www.itu.int/oth/T0202000051/en -->
+ <territory id="DE" countryCode="49" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="(\d{2})(\d{4,11})">
+ <leadingDigits>
+ 3[02]|
+ 40|
+ [68]9
+ </leadingDigits>
+ <format>$1/$2</format>
+ </numberFormat>
+ <!-- The order of the rules on 3-5 digits area code matter as fallback is used here. -->
+ <!-- 3 digit area codes. -->
+ <numberFormat pattern="(\d{3})(\d{3,10})">
+ <leadingDigits>
+ 2(?:
+ \d1|
+ 0[2389]|
+ 1[24]|
+ 28|
+ 34
+ )|
+ 3(?:
+ [3-9][15]|
+ 40
+ )|
+ [4-8][1-9]1|
+ 9(?:
+ 06|
+ [1-9]1
+ )
+ </leadingDigits>
+ <format>$1/$2</format>
+ </numberFormat>
+ <!-- 4 digit area codes. -->
+ <numberFormat pattern="(\d{4})(\d{2,8})">
+ <leadingDigits>
+ [24-6]|
+ [7-9](?:
+ \d[1-9]|
+ [1-9]\d
+ )|
+ 3(?:
+ [3569][02-46-9]|
+ 4[2-4679]|
+ 7[2-467]|
+ 8[2-46-8]
+ )
+ </leadingDigits>
+ <leadingDigits>
+ [24-6]|
+ [7-9](?:
+ \d[1-9]|
+ [1-9]\d
+ )|
+ 3(?:
+ 3(?:
+ 0[1-467]|
+ 2[127-9]|
+ 3[124578]|
+ [46][1246]|
+ 7[1257-9]|
+ 8[1256]|
+ 9[145]
+ )|
+ 4(?:
+ 2[135]|
+ 3[1357]|
+ 4[13578]|
+ 6[1246]|
+ 7[1356]|
+ 9[1346]
+ )|
+ 5(?:
+ 0[14]|
+ 2[1-3589]|
+ 3[1357]|
+ 4[1246]|
+ 6[1-4]|
+ 7[1346]|
+ 8[13568]|
+ 9[1246]
+ )|
+ 6(?:
+ 0[356]|
+ 2[1-489]|
+ 3[124-6]|
+ 4[1347]|
+ 6[13]|
+ 7[12579]|
+ 8[1-356]|
+ 9[135]
+ )|
+ 7(?:
+ 2[1-7]|
+ 3[1357]|
+ 4[145]|
+ 6[1-5]|
+ 7[1-4]
+ )|
+ 8(?:
+ 21|
+ 3[1468]|
+ 4[1347]|
+ 6[0135-9]|
+ 7[1467]|
+ 8[136]
+ )|
+ 9(?:
+ 0[12479]|
+ 2[1358]|
+ 3[1357]|
+ 4[134679]|
+ 6[1-9]|
+ 7[136]|
+ 8[147]|
+ 9[1468]
+ )
+ )
+ </leadingDigits>
+ <format>$1/$2</format>
+ </numberFormat>
+ <!-- 5 digit area codes. -->
+ <numberFormat pattern="(\d{5})(\d{1,6})">
+ <leadingDigits>3</leadingDigits>
+ <format>$1/$2</format>
+ </numberFormat>
+ <!-- http://www.t-mobile.de/servicehotlines/0,13401,17660-_,00.html -->
+ <numberFormat pattern="([18]\d{2})(\d{7,9})">
+ <leadingDigits>
+ 1[5-7]|
+ 800
+ </leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d)(\d{4,10})">
+ <leadingDigits>
+ (?:
+ 18|
+ 90
+ )0
+ </leadingDigits>
+ <leadingDigits>
+ 180|
+ 900[1359]
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(700)(\d{4})(\d{4})">
+ <leadingDigits>700</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <!-- When deciding whether to assume a leading 49 is a country code or not, the number is
+ examined to see if it is valid with the 49 as part of the number. Due to the variable
+ length of German numbers, this test is hard to do. The national pattern is hence
+ stricter for numbers starting with 49, to try and remove the country code if the number
+ begins with 49 whenever possible. -->
+ <nationalNumberPattern>
+ [1-35-9]\d{3,13}|
+ 4(?:
+ [0-8]\d{4,12}|
+ 9(?:
+ 4[1-8]|
+ [0-35-7]\d
+ )\d{2,7}
+ )
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{2,14}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- The numbering plan defines rather optimistic longest-number limits - online numbers
+ don't seem to respect this. The max-length is hence extended. -->
+ <nationalNumberPattern>
+ [246]\d{5,13}|
+ 3(?:
+ [03-9]\d{4,11}|
+ 2\d{9}
+ )|
+ 5(?:
+ 0[2-8]|
+ [38][0-8]|
+ [124-6]\d|
+ [79][0-7]
+ )\d{3,10}|
+ 7(?:
+ 0[2-8]|
+ [1-9]\d
+ )\d{3,10}|
+ 8(?:
+ 0[2-9]|
+ [1-9]\d
+ )\d{3,10}|
+ 9(?:
+ 0[6-9]|
+ [1-9]\d
+ )\d{3,10}
+ </nationalNumberPattern>
+ <exampleNumber>30123456</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- Note: 8 digit numbers seem to be available for prefix 176 now,
+ although no official documentation can be found, according to user
+ bug-reports. -->
+ <nationalNumberPattern>
+ 1(?:
+ 5\d{9}|
+ 7(?:
+ [0-57-9]|
+ 6\d
+ )\d{7}|
+ 6(?:
+ [02]\d{7,8}|
+ 3\d{7}
+ )
+ )
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10,11}</possibleNumberPattern>
+ <exampleNumber>15123456789</exampleNumber>
+ </mobile>
+ <pager>
+ <nationalNumberPattern>
+ 16(?:
+ 4\d{1,10}|
+ [89]\d{1,11}
+ )
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{4,14}</possibleNumberPattern>
+ <exampleNumber>16412345</exampleNumber>
+ </pager>
+ <tollFree>
+ <nationalNumberPattern>800\d{7,9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10,12}</possibleNumberPattern>
+ <exampleNumber>8001234567</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>
+ 900(?:
+ [135]\d{6}|
+ 9\d{7}
+ )
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10,11}</possibleNumberPattern>
+ <exampleNumber>9001234567</exampleNumber>
+ </premiumRate>
+ <sharedCost>
+ <!-- See bug 1683119 for a discussion about maximum number lengths. -->
+ <nationalNumberPattern>180\d{5,11}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8,14}</possibleNumberPattern>
+ <exampleNumber>18012345</exampleNumber>
+ </sharedCost>
+ <personalNumber>
+ <nationalNumberPattern>700\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{11}</possibleNumberPattern>
+ <exampleNumber>70012345678</exampleNumber>
+ </personalNumber>
+ </territory>
+
+ <!-- Djibouti -->
+ <!-- http://www.itu.int/oth/T020200003A/en -->
+ <territory id="DJ" countryCode="253" internationalPrefix="00">
+ <availableFormats>
+ <!-- The number format here is suggested in the plan and used online,
+ although the phone numbers of the national numbering authority itself on
+ the plan do not follow this. -->
+ <numberFormat pattern="(\d{2})(\d{2})(\d{2})">
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[1-8]\d{5}</nationalNumberPattern>
+ <possibleNumberPattern>\d{6}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- Includes "Numéro long CDMA fixe" numbers starting with the digit 5. -->
+ <nationalNumberPattern>
+ (?:
+ 1[05]|
+ [2-5]\d
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>251234</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>[6-8]\d{5}</nationalNumberPattern>
+ <exampleNumber>601234</exampleNumber>
+ </mobile>
+ </territory>
+
+ <!-- Denmark -->
+ <!-- http://en.itst.dk/telecom-internet-regulation/numbering-issues/numbering-lists -->
+ <territory id="DK" countryCode="45" internationalPrefix="00">
+ <availableFormats>
+ <numberFormat pattern="([1-9]\d)(\d{2})(\d{2})(\d{2})">
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[1-9]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 3[2-9]|
+ 4[3-9]|
+ 5[4-9]|
+ 6[2-9]|
+ 7[02-9]|
+ 8[26-9]|
+ 9[6-9]
+ )\d{6}
+ </nationalNumberPattern>
+ <exampleNumber>32123456</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- There are some overlaps for some number prefixes - the plan says that they are 'mainly'
+ used for a certain type of number. -->
+ <nationalNumberPattern>
+ (?:
+ 2[0-9]|
+ 3[0-2]|
+ 4[0-2]|
+ 5[0-3]|
+ 6[01]|
+ 7[12]|
+ 81|
+ 99
+ )\d{6}
+ </nationalNumberPattern>
+ <exampleNumber>20123456</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>80\d{6}</nationalNumberPattern>
+ <exampleNumber>80123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>90\d{6}</nationalNumberPattern>
+ <exampleNumber>90123456</exampleNumber>
+ </premiumRate>
+ </territory>
+
+ <!-- Dominica -->
+ <!-- http://www.itu.int/oth/T020200003B/en -->
+ <territory id="DM" countryCode="1" leadingDigits="767"
+ nationalPrefix="1" internationalPrefix="011">
+ <generalDesc>
+ <!-- NANPA country - uses US formatting rules -->
+ <nationalNumberPattern>[57-9]\d{9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}(?:\d{3})?</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ 767(?:
+ 2(?:
+ 55|
+ 66
+ )|
+ 4(?:
+ 2[01]|
+ 4[0-25-9]
+ )|
+ 50[0-4]
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>7674201234</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ 767(?:
+ 2(?:
+ [2346]5|
+ 7[5-7]
+ )|
+ 31[5-7]|
+ 61[4-6]
+ )\d{4}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>7672251234</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>
+ 8(?:
+ 00|
+ 55|
+ 66|
+ 77|
+ 88
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>8002123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>900[2-9]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>9002123456</exampleNumber>
+ </premiumRate>
+ <personalNumber>
+ <!-- http://www.nanpa.com/pdf/PL_416.pdf -->
+ <nationalNumberPattern>
+ 5(?:
+ 00|
+ 33|
+ 44
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>5002345678</exampleNumber>
+ </personalNumber>
+ </territory>
+
+ <!-- Dominican Rep. -->
+ <!-- http://www.itu.int/oth/T020200003C/en -->
+ <territory id="DO" countryCode="1" leadingDigits="8[024]9"
+ nationalPrefix="1" internationalPrefix="011">
+ <generalDesc>
+ <!-- NANPA country - uses US formatting rules -->
+ <nationalNumberPattern>[589]\d{9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}(?:\d{3})?</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- We could be more detailed here, as the metadata contains information about some of the
+ mobile/fixed-line prefixes, but the data is incomplete, so we restrict ourselves to a
+ more generic rule for now. -->
+ <nationalNumberPattern>8[024]9[2-9]\d{6}</nationalNumberPattern>
+ <exampleNumber>8092345678</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>8[024]9[2-9]\d{6}</nationalNumberPattern>
+ <exampleNumber>8092345678</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>
+ 8(?:
+ 00|
+ 55|
+ 66|
+ 77|
+ 88
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>8002123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>900[2-9]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>9002123456</exampleNumber>
+ </premiumRate>
+ <personalNumber>
+ <!-- http://www.nanpa.com/pdf/PL_416.pdf -->
+ <nationalNumberPattern>
+ 5(?:
+ 00|
+ 33|
+ 44
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>5002345678</exampleNumber>
+ </personalNumber>
+ </territory>
+
+ <!-- Algeria -->
+ <!-- http://www.itu.int/oth/T0202000003/en -->
+ <!-- www.arpt.dz -->
+ <territory id="DZ" countryCode="213" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <!-- Formatting from www.pagesjaunes-dz.com. -->
+ <numberFormat pattern="([1-4]\d)(\d{2})(\d{2})(\d{2})">
+ <leadingDigits>[1-4]</leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ <numberFormat pattern="([5-8]\d{2})(\d{2})(\d{2})(\d{2})">
+ <leadingDigits>[5-8]</leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ <numberFormat pattern="(9\d)(\d{3})(\d{2})(\d{2})">
+ <leadingDigits>9</leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>
+ (?:
+ [1-4]|
+ [5-9]\d
+ )\d{7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{8,9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- We include the VSAT lines here. -->
+ <nationalNumberPattern>
+ (?:
+ 1\d|
+ 2[014-79]|
+ 3[0-8]|
+ 4[0135689]
+ )\d{6}|
+ 9619\d{5}
+ </nationalNumberPattern>
+ <exampleNumber>12345678</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ (?:
+ 5[56]|
+ 6[69]|
+ 7[79]
+ )\d{7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>551234567</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>800\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>800123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>80[3-689]1\d{5}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>808123456</exampleNumber>
+ </premiumRate>
+ <!-- The Algerian plan doesn't specify where the costs start to be considered "premium", so we
+ draw an arbitrary line here and say that from 50 Da up they will be considered premium.
+ -->
+ <sharedCost>
+ <nationalNumberPattern>80[12]1\d{5}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>801123456</exampleNumber>
+ </sharedCost>
+ <voip>
+ <nationalNumberPattern>98[23]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>983123456</exampleNumber>
+ </voip>
+ </territory>
+
+ <!-- Ecuador -->
+ <!-- http://en.wikipedia.org/wiki/+593 -->
+ <!-- http://www.conatel.gov.ec -->
+ <!-- http://www.itu.int/oth/T020200003D/en -->
+ <!-- A new plan has been prepared, but no implementation date has yet been stated. -->
+ <territory id="EC" countryCode="593" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="($NP$FG)">
+ <availableFormats>
+ <numberFormat pattern="(\d)(\d{3})(\d{4})">
+ <leadingDigits>[2-7]</leadingDigits>
+ <format>$1 $2-$3</format>
+ </numberFormat>
+ <intlNumberFormat pattern="(\d)(\d{3})(\d{4})">
+ <leadingDigits>[2-7]</leadingDigits>
+ <format>$1-$2-$3</format>
+ </intlNumberFormat>
+ <numberFormat pattern="(\d{2})(\d{3})(\d{3})"
+ nationalPrefixFormattingRule="$NP$FG">
+ <leadingDigits>[89]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <intlNumberFormat pattern="(\d{2})(\d{3})(\d{3})">
+ <leadingDigits>[89]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </intlNumberFormat>
+ <numberFormat pattern="(1800)(\d{3})(\d{3,4})"
+ nationalPrefixFormattingRule="$FG">
+ <leadingDigits>1</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <intlNumberFormat pattern="(1800)(\d{3})(\d{3,4})">
+ <leadingDigits>1</leadingDigits>
+ <format>$1 $2 $3</format>
+ </intlNumberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[2-9]\d{7}|1\d{9,10}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7,11}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>[2-7][2-7]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7,8}</possibleNumberPattern>
+ <exampleNumber>22123456</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>[89]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>99123456</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>1800\d{6,7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10,11}</possibleNumberPattern>
+ <exampleNumber>18001234567</exampleNumber>
+ </tollFree>
+ </territory>
+
+ <!-- Estonia -->
+ <!-- http://www.itu.int/oth/T0202000043/en -->
+ <!-- http://www.tja.ee/public/Legislation_side/Numbering_/Estonian_NP_eng.htm -->
+ <territory id="EE" countryCode="372" internationalPrefix="00">
+ <availableFormats>
+ <numberFormat pattern="([34-79]\d{2})(\d{4})">
+ <leadingDigits>
+ [369]|
+ 4[3-8]|
+ 5(?:
+ [0-2]|
+ 5[0-478]|
+ 6[45]
+ )|
+ 7[1-9]
+ </leadingDigits>
+ <leadingDigits>
+ [369]|
+ 4[3-8]|
+ 5(?:
+ [02]|
+ 1(?:
+ [0-8]|
+ 95
+ )|
+ 5[0-478]|
+ 6(?:
+ 4[0-4]|
+ 5[1-589]
+ )
+ )|
+ 7[1-9]
+ </leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(70)(\d{2})(\d{4})">
+ <leadingDigits>70</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(8000)(\d{3})(\d{3})">
+ <leadingDigits>800</leadingDigits>
+ <leadingDigits>8000</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="([458]\d{3})(\d{3,4})">
+ <leadingDigits>
+ 40|
+ 5|
+ 8(?:
+ 00|
+ [1-5]
+ )
+ </leadingDigits>
+ <leadingDigits>
+ 40|
+ 5|
+ 8(?:
+ 00[1-9]|
+ [1-5]
+ )
+ </leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>
+ [3-9]\d{6,7}|
+ 800\d{6,7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
+ </generalDesc>
+ <noInternationalDialling>
+ <nationalNumberPattern>800[2-9]\d{3}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}</possibleNumberPattern>
+ <exampleNumber>8002123</exampleNumber>
+ </noInternationalDialling>
+ <fixedLine>
+ <!-- Supporting eFax numbers here as well. -->
+ <nationalNumberPattern>
+ (?:
+ 3[23589]|
+ 4(?:
+ 0\d|
+ [3-8]
+ )|
+ 6\d|
+ 7[1-9]|
+ 88
+ )\d{5}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7,8}</possibleNumberPattern>
+ <exampleNumber>3212345</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- 7 digit mobile numbers currently in use with special prefixes are preserved - new
+ numbers are 8 digits. -->
+ <nationalNumberPattern>
+ (?:
+ 5\d|
+ 8[1-5]
+ )\d{6}|
+ 5(?:
+ [02]\d{2}|
+ 1(?:
+ [0-8]\d|
+ 95
+ )|
+ 5[0-478]\d|
+ 64[0-4]|
+ 65[1-589]
+ )\d{3}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7,8}</possibleNumberPattern>
+ <exampleNumber>51234567</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>
+ 800(?:
+ 0\d{3}|
+ 1\d|
+ [2-9]
+ )\d{3}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
+ <exampleNumber>80012345</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>900\d{4}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}</possibleNumberPattern>
+ <exampleNumber>9001234</exampleNumber>
+ </premiumRate>
+ <personalNumber>
+ <nationalNumberPattern>70[0-2]\d{5}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>70012345</exampleNumber>
+ </personalNumber>
+ <shortCode>
+ <nationalNumberPattern>1[1-9]\d</nationalNumberPattern>
+ <possibleNumberPattern>\d{3}</possibleNumberPattern>
+ <exampleNumber>112</exampleNumber>
+ </shortCode>
+ </territory>
+
+ <!-- Egypt -->
+ <!-- http://www.itu.int/dms_pub/itu-t/oth/02/02/T020200003E0001MSWE.doc -->
+ <territory id="EG" countryCode="20" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <!-- Note that no explicit formatting rule is here for 5-digit numbers starting with a 16
+ or 19. These are formatted without national prefix, as a block, so do not need to be
+ listed here. -->
+ <numberFormat pattern="(\d)(\d{7,8})">
+ <leadingDigits>[23]</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{2})(\d{7})">
+ <leadingDigits>
+ [14-6]|
+ [89][2-9]
+ </leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="([89]00)(\d{3})(\d{4})">
+ <leadingDigits>[89]00</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>
+ 1\d{4,9}|
+ [2-689]\d{7,9}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{5,10}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- Short numbers used for businesses (starting with 16 or 19) are covered here. -->
+ <nationalNumberPattern>
+ (?:
+ 1[35][23]|
+ 2[23]\d|
+ 3\d|
+ 4(?:
+ 0[2-4]|
+ [578][23]|
+ 64
+ )|
+ 5(?:
+ 0[234]|
+ [57][23]
+ )|
+ 6[24-689]3|
+ 8(?:
+ [28][2-4]|
+ 42|
+ 6[23]
+ )|
+ 9(?:
+ [25]2|
+ 3[24]|
+ 6[23]|
+ 7[2-4]
+ )
+ )\d{6}|
+ 1[69]\d{3}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{5,9}</possibleNumberPattern>
+ <exampleNumber>234567890</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>1[0-246-9]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>101234567</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>800\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>8001234567</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>900\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>9001234567</exampleNumber>
+ </premiumRate>
+ </territory>
+
+ <!-- Eritrea -->
+ <!-- http://www.itu.int/oth/T0202000042/en -->
+ <territory id="ER" countryCode="291" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="(\d)(\d{3})(\d{3})">
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[178]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{6,7}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ 1(?:
+ 1[12568]|
+ 20|
+ 40|
+ 55|
+ 6[146]
+ )\d{4}|
+ 8\d{6}
+ </nationalNumberPattern>
+ <exampleNumber>8370362</exampleNumber><!-- Test number from plan. -->
+ </fixedLine>
+ <mobile>
+ <!-- It is unclear in the plan whether the 07 mobile prefix superseded the previous 017[1-3]
+ numbers or was in addition to them, so we support both here. -->
+ <nationalNumberPattern>
+ 17[1-3]\d{4}|
+ 7\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7}</possibleNumberPattern>
+ <exampleNumber>7123456</exampleNumber>
+ </mobile>
+ </territory>
+
+ <!-- Spain -->
+ <!-- http://www.mityc.es/telecomunicaciones/es-ES/Servicios/Numeracion/Paginas/Plan.aspx -->
+ <territory id="ES" countryCode="34" internationalPrefix="00">
+ <availableFormats>
+ <numberFormat pattern="([5-9]\d{2})(\d{2})(\d{2})(\d{2})">
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[5-9]\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>[89][1-8]\d{7}</nationalNumberPattern>
+ <exampleNumber>812345678</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>6\d{8}</nationalNumberPattern>
+ <exampleNumber>612345678</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>[89]00\d{6}</nationalNumberPattern>
+ <exampleNumber>800123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>80[367]\d{6}</nationalNumberPattern>
+ <exampleNumber>803123456</exampleNumber>
+ </premiumRate>
+ <sharedCost>
+ <nationalNumberPattern>90[12]\d{6}</nationalNumberPattern>
+ <exampleNumber>901123456</exampleNumber>
+ </sharedCost>
+ <personalNumber>
+ <nationalNumberPattern>70\d{7}</nationalNumberPattern>
+ <exampleNumber>701234567</exampleNumber>
+ </personalNumber>
+ <!-- Modelling non-geographic nomadic numbers as UAN. -->
+ <uan>
+ <nationalNumberPattern>51\d{7}</nationalNumberPattern>
+ <exampleNumber>511234567</exampleNumber>
+ </uan>
+ </territory>
+
+ <!-- Ethiopia -->
+ <!-- http://www.itu.int/oth/T0202000044/en -->
+ <territory id="ET" countryCode="251" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="([1-59]\d)(\d{3})(\d{4})">
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[1-59]\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7,9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 11(?:
+ 1(?:
+ 1[124]|
+ 2[2-57]|
+ 3[1-5]|
+ 5[5-8]|
+ 8[6-8]
+ )|
+ 2(?:
+ 13|
+ 3[6-8]|
+ 5[89]|
+ 7[05-9]|
+ 8[2-6]
+ )|
+ 3(?:
+ 2[01]|
+ 3[0-289]|
+ 4[1289]|
+ 7[1-4]|
+ 87
+ )|
+ 4(?:
+ 1[69]|
+ 3[2-49]|
+ 4[0-23]|
+ 6[5-8]
+ )|
+ 5(?:
+ 1[57]|
+ 44|
+ 5[0-4]
+ )|
+ 6(?:
+ 18|
+ 2[69]|
+ 4[5-7]|
+ 5[1-5]|
+ 6[0-59]|
+ 8[015-8]
+ )
+ )|
+ 2(?:
+ 2(?:
+ 11[1-9]|
+ 22[0-7]|
+ 33\d|
+ 44[1467]|
+ 66[1-68]
+ )|
+ 5(?:
+ 11[124-6]|
+ 33[2-8]|
+ 44[1467]|
+ 55[14]|
+ 66[1-3679]|
+ 77[124-79]|
+ 880
+ )
+ )|
+ 3(?:
+ 3(?:
+ 11[0-46-8]|
+ 22[0-6]|
+ 33[0134689]|
+ 44[04]|
+ 55[0-6]|
+ 66[01467]
+ )|
+ 4(?:
+ 44[0-8]|
+ 55[0-69]|
+ 66[0-3]|
+ 77[1-5]
+ )
+ )|
+ 4(?:
+ 6(?:
+ 22[0-24-7]|
+ 33[1-5]|
+ 44[13-69]|
+ 55[14-689]|
+ 660|
+ 88[1-4]
+ )|
+ 7(?:
+ 11[1-9]|
+ 22[1-9]|
+ 33[13-7]|
+ 44[13-6]|
+ 55[1-689]
+ )
+ )|
+ 5(?:
+ 7(?:
+ 227|
+ 55[05]|
+ (?:
+ 66|
+ 77
+ )[14-8]
+ )|
+ 8(?:
+ 11[149]|
+ 22[013-79]|
+ 33[0-68]|
+ 44[013-8]|
+ 550|
+ 66[1-5]|
+ 77\d
+ )
+ )
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>111112345</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- The data here is not regularly updated by the Ethiopian authorities, and many more
+ numbers are visible online than are reported in the ITU document. This pattern is
+ therefore somewhat more relaxed than in the ITU document. -->
+ <nationalNumberPattern>91[0-8]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>911234567</exampleNumber>
+ </mobile>
+ </territory>
+
+ <!-- Finland -->
+ <!-- http://www.ficora.fi/en/index/palvelut/palvelutaiheittain/numerointi/numerotyypitjaalueet.html -->
+ <territory id="FI" countryCode="358" internationalPrefix="00|99[049]"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="(\d{2})(\d{4,10})">
+ <leadingDigits>
+ 2[09]|
+ [14]|
+ 50|
+ 7[135]
+ </leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(\d)(\d{4,11})">
+ <leadingDigits>
+ [25689][1-8]|
+ 3
+ </leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="([6-8]00)(\d{4,7})">
+ <leadingDigits>[6-8]0</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>
+ 1\d{4,11}|
+ [2-9]\d{4,10}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{5,12}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- This is limited to geographic numbers - non-geographic nationwide
+ subscriber numbers are listed under UAN. -->
+ <nationalNumberPattern>
+ 1(?:
+ [35689][1-8]\d{3,9}|
+ [47]\d{5,10}
+ )|
+ 2[1-8]\d{3,9}|
+ 3(?:
+ [1-8]\d{3,9}|
+ 9\d{4,8}
+ )|
+ [5689][1-8]\d{3,9}|
+ </nationalNumberPattern>
+ <exampleNumber>1312345678</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ 4\d{5,10}|
+ 50\d{4,8}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{6,11}</possibleNumberPattern>
+ <exampleNumber>412345678</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>800\d{4,7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
+ <exampleNumber>8001234567</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>[67]00\d{5,6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8,9}</possibleNumberPattern>
+ <exampleNumber>600123456</exampleNumber>
+ </premiumRate>
+ <uan>
+ <nationalNumberPattern>
+ 10[1-9]\d{3,7}|
+ 2(?:
+ 0(?:
+ [16-8]\d{3,7}|
+ 2[14-9]\d{1,6}|
+ [3-5]\d{2,7}|
+ 9[0-7]\d{1,6}
+ )|
+ 9\d{4,8}
+ )|
+ 30[1-9]\d{3,7}|
+ 7(?:
+ 1\d{7}|
+ 3\d{8}|
+ 5[03-9]\d{2,7}
+ )
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{6,10}</possibleNumberPattern>
+ <exampleNumber>10112345</exampleNumber>
+ </uan>
+ </territory>
+
+ <!-- Fiji -->
+ <!-- http://www.itu.int/oth/T0202000048/en -->
+ <!-- www.tfl.com.fj -->
+ <territory id="FJ" countryCode="679" internationalPrefix="0(?:0|52)"
+ preferredInternationalPrefix="00" leadingZeroPossible="true">
+ <availableFormats>
+ <numberFormat pattern="(\d{3})(\d{4})">
+ <leadingDigits>[36-9]</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{4})(\d{3})(\d{4})">
+ <leadingDigits>0</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>
+ [36-9]\d{6}|
+ 0\d{10}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7}(?:\d{4})?</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- Adding the prefixes 30X, 31X and 62X, since numbers with these prefixes have been found
+ online, including in the white pages. 35X and 85X were found in the exchanges listed on
+ www.tfl.com.fj. -->
+ <nationalNumberPattern>
+ (?:
+ 3[0-5]|
+ 6[25-7]|
+ 8[58]
+ )\d{5}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7}</possibleNumberPattern>
+ <exampleNumber>3212345</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ (?:
+ 7[0-4]|
+ 9[29]
+ )\d{5}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7}</possibleNumberPattern>
+ <exampleNumber>7012345</exampleNumber>
+ </mobile>
+ <tollFree>
+ <!-- Information found on www.tfl.com.fj. It is not clear if these are internationally
+ diallable, or if so, how. -->
+ <nationalNumberPattern>0800\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{11}</possibleNumberPattern>
+ <exampleNumber>08001234567</exampleNumber>
+ </tollFree>
+ <shortCode>
+ <!-- From the Emergency Numbers page on the Telecom Fiji website. -->
+ <nationalNumberPattern>
+ 0(?:
+ 04|
+ 1[34]|
+ 8[1-4]
+ )|
+ 1(?:
+ 0[1-3]|
+ [25]9
+ )|
+ 2[289]|
+ 30|
+ [45]4|
+ 75|
+ 91[137]
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{2,3}</possibleNumberPattern>
+ <exampleNumber>22</exampleNumber>
+ </shortCode>
+ </territory>
+
+ <!-- Falkland Islands (Malvinas) -->
+ <!-- http://www.itu.int/oth/T0202000046/en -->
+ <territory id="FK" countryCode="500" internationalPrefix="00">
+ <!-- All numbers are formatted together, as a block. -->
+ <generalDesc>
+ <nationalNumberPattern>[2-7]\d{4}</nationalNumberPattern>
+ <possibleNumberPattern>\d{5}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>[2-47]\d{4}</nationalNumberPattern>
+ <exampleNumber>31234</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>[56]\d{4}</nationalNumberPattern>
+ <exampleNumber>51234</exampleNumber>
+ </mobile>
+ <shortCode>
+ <!-- Service numbers use 3 digit short codes -->
+ <nationalNumberPattern>
+ 1\d{2}|
+ 999
+ </nationalNumberPattern>
+ <exampleNumber>123</exampleNumber>
+ </shortCode>
+ </territory>
+
+ <!-- Micronesia, Federated States of -->
+ <!-- http://www.itu.int/oth/T020200008B/en -->
+ <territory id="FM" countryCode="691" internationalPrefix="00">
+ <availableFormats>
+ <numberFormat pattern="(\d{3})(\d{4})">
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[39]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ 3[2357]0[1-9]\d{3}|
+ 9[2-6]\d{5}
+ </nationalNumberPattern>
+ <exampleNumber>3201234</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- Note that most ranges are used for both fixed and mobile but numbers starting with 970
+ are exclusively mobile. -->
+ <nationalNumberPattern>
+ 3[2357]0[1-9]\d{3}|
+ 9[2-7]\d{5}
+ </nationalNumberPattern>
+ <exampleNumber>3501234</exampleNumber>
+ </mobile>
+ </territory>
+
+ <!-- Faroe Islands -->
+ <!-- http://www.itu.int/oth/T0202000047/en -->
+ <territory id="FO" countryCode="298" internationalPrefix="00"
+ nationalPrefixForParsing="(10(?:01|[12]0|88))"
+ carrierCodeFormattingRule="$CC $FG">
+ <!-- All numbers are formatted together, as a block. -->
+ <availableFormats>
+ <numberFormat pattern="(\d{6})">
+ <format>$1</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[2-9]\d{5}</nationalNumberPattern>
+ <possibleNumberPattern>\d{6}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 20|
+ [3-4]\d|
+ 8[19]
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>201234</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ (?:
+ 2[1-9]|
+ 5\d|
+ 7[1-79]
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>211234</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>80[257-9]\d{3}</nationalNumberPattern>
+ <exampleNumber>802123</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>
+ 90(?:
+ [1345][15-7]|
+ 2[125-7]|
+ 99
+ )\d{2}
+ </nationalNumberPattern>
+ <exampleNumber>901123</exampleNumber>
+ </premiumRate>
+ <voip>
+ <nationalNumberPattern>
+ (?:
+ 6[0-36]|
+ 88
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>601234</exampleNumber>
+ </voip>
+ <shortCode>
+ <!-- Includes special numbers, special services and universal services. -->
+ <nationalNumberPattern>
+ 1(?:
+ 1[248]|
+ 4[124]\d|
+ 71\d|
+ 8[7-9]\d
+ )
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{3,4}</possibleNumberPattern>
+ <exampleNumber>211234</exampleNumber>
+ </shortCode>
+ </territory>
+
+ <!-- France -->
+ <!-- http://www.itu.int/dms_pub/itu-t/oth/02/02/T020200004A0001MSWE.doc -->
+ <!-- http://www.arcep.fr/index.php?id=8146 -->
+ <!-- http://en.wikipedia.org/wiki/%2B33 -->
+ <territory id="FR" countryCode="33" internationalPrefix="[04579]0"
+ preferredInternationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="([1-79])(\d{2})(\d{2})(\d{2})(\d{2})">
+ <leadingDigits>[1-79]</leadingDigits>
+ <format>$1 $2 $3 $4 $5</format>
+ </numberFormat>
+ <numberFormat nationalPrefixFormattingRule="$NP $FG"
+ pattern="(8\d{2})(\d{2})(\d{2})(\d{2})">
+ <leadingDigits>8</leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[1-9]\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>[1-5]\d{8}</nationalNumberPattern>
+ <exampleNumber>123456789</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ 6\d{8}|
+ 7[5-9]\d{7}
+ </nationalNumberPattern>
+ <exampleNumber>612345678</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>80\d{7}</nationalNumberPattern>
+ <exampleNumber>801234567</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>89[1-37-9]\d{6}</nationalNumberPattern>
+ <exampleNumber>891123456</exampleNumber>
+ </premiumRate>
+ <sharedCost>
+ <nationalNumberPattern>
+ 8(?:
+ 1[019]|
+ 2[0156]|
+ 84|
+ 90
+ )\d{6}
+ </nationalNumberPattern>
+ <exampleNumber>810123456</exampleNumber>
+ </sharedCost>
+ <voip>
+ <nationalNumberPattern>9\d{8}</nationalNumberPattern>
+ <exampleNumber>912345678</exampleNumber>
+ </voip>
+ </territory>
+
+ <!-- Gabon -->
+ <!-- http://www.itu.int/oth/T020200004E/en -->
+ <territory id="GA" countryCode="241" internationalPrefix="00" leadingZeroPossible="true">
+ <availableFormats>
+ <numberFormat pattern="(\d{2})(\d{2})(\d{2})">
+ <leadingDigits>[4-9]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(0\d)(\d{2})(\d{2})(\d{2})">
+ <leadingDigits>0</leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>
+ [4-9]\d{5}|
+ 0\d{7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{6,8}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 4(?:
+ [04-8]\d|
+ 2[04]
+ )|
+ (?:
+ 5[04-689]|
+ 6[024-9]|
+ 7\d|
+ 8[236]|
+ 9[02368]
+ )\d
+ )\d{3}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{6}</possibleNumberPattern>
+ <exampleNumber>441234</exampleNumber>
+ </fixedLine>
+ <!-- The leading zero here is supposed to be temporary - at a later date,
+ Gabon intends to have a 0 as their national prefix for all numbers
+ instead. -->
+ <!-- http://www.wtng.info/wtng-241-ga.html was used as the basis for the acceptable prefixes,
+ with some supplementary prefixes added from internet research. There is supposedly a
+ resource on mobile prefixes on the Gabon Telecom website, but the site (www.ogooue.ga)
+ doesn't seem to work and no alternative can be found. Extra prefixes added: 07 12, 07 13,
+ 06 71, 07 33, 07 [67]\d -->
+ <mobile>
+ <nationalNumberPattern>
+ 0(?:
+ 5(?:
+ 0[89]|
+ 3[0-4]|
+ 8[0-26]|
+ 9[238]
+ )|
+ 6(?:
+ 0[3-7]|
+ 1[01]|
+ 2[0-7]|
+ 6[0-589]|
+ 71|
+ 83|
+ 9[57]
+ )|
+ 7(?:
+ 1[2-5]|
+ 2[89]|
+ 3[35-9]|
+ 4[01]|
+ 5[0-347-9]|
+ [67]\d|
+ 8[457-9]|
+ 9[0146]
+ )
+ )\d{4}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>06031234</exampleNumber>
+ </mobile>
+ </territory>
+
+ <!-- United Kingdom -->
+ <!-- http://stakeholders.ofcom.org.uk/telecoms/numbering/ -->
+ <!-- http://en.wikipedia.org/wiki/List_of_United_Kingdom_dialling_codes -->
+ <!-- http://www.numberingplans.com/?page=dialling&sub=areacodes&ac=GB -->
+ <!-- Note that this excludes Isle of Man, Jersey and Guernsey prefixes for the purposes of
+ validation, although the formatting rules are shared. -->
+ <territory id="GB" countryCode="44" internationalPrefix="00"
+ nationalPrefix="0" preferredExtnPrefix=" x" nationalPrefixFormattingRule="$NP$FG"
+ mainCountryForCode="true">
+ <availableFormats>
+ <!-- 2d, 55, 56, 70, 76 with 10 digits. -->
+ <numberFormat pattern="(\d{2})(\d{4})(\d{4})">
+ <leadingDigits>
+ 2|
+ 5[56]|
+ 7[06]
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <!-- 11d, 1d1, 3dd, 9dd with 10 digits. -->
+ <numberFormat pattern="(\d{3})(\d{3})(\d{4})">
+ <leadingDigits>
+ 1(?:
+ 1|
+ \d1
+ )|
+ 3|
+ 9[018]
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <!-- 1dddd with 9 or 10 digits.
+ These area codes are very rare in GB, and are only available in the following places:
+ 13873(Langholm), 15242(Hornby), 15394(Hawkshead), 15395(Grange-over-Sands),
+ 15396(Sedbergh), 16973(Wigton), 16974(Raughton Head), 16977(Brampton),
+ 17683(Appleby), 17684(Pooley Bridge), 17687(Keswick), 19467(Gosforth). -->
+ <numberFormat pattern="(\d{5})(\d{4,5})">
+ <leadingDigits>
+ 1(?:
+ 38|
+ 5[23]|
+ 69|
+ 76|
+ 94
+ )
+ </leadingDigits>
+ <leadingDigits>
+ 1(?:
+ 387|
+ 5(?:
+ 24|
+ 39
+ )|
+ 697|
+ 768|
+ 946
+ )
+ </leadingDigits>
+ <leadingDigits>
+ 1(?:
+ 3873|
+ 5(?:
+ 242|
+ 39[456]
+ )|
+ 697[347]|
+ 768[347]|
+ 9467
+ )
+ </leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <!-- 1ddd with 9 or 10 digits. -->
+ <numberFormat pattern="(1\d{3})(\d{5,6})">
+ <leadingDigits>1</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <!-- 7ddd (not 70, 76) with 10 digits. -->
+ <numberFormat pattern="(7\d{3})(\d{6})">
+ <leadingDigits>7[1-5789]</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <!-- 800 1111 : UK ChildLine. -->
+ <numberFormat pattern="(800)(\d{4})">
+ <leadingDigits>800</leadingDigits>
+ <leadingDigits>8001</leadingDigits>
+ <leadingDigits>80011</leadingDigits>
+ <leadingDigits>800111</leadingDigits>
+ <leadingDigits>8001111</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <!-- 845 46 47 : UK NHS Direct. -->
+ <numberFormat pattern="(845)(46)(4\d)">
+ <leadingDigits>845</leadingDigits>
+ <leadingDigits>8454</leadingDigits>
+ <leadingDigits>84546</leadingDigits>
+ <leadingDigits>845464</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <!-- 84d, 87d with 10 digits. -->
+ <numberFormat pattern="(8\d{2})(\d{3})(\d{4})">
+ <leadingDigits>
+ 8(?:
+ 4[2-5]|
+ 7[0-3]
+ )
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <!-- 80d (including 800) with 10 digits. -->
+ <numberFormat pattern="(80\d)(\d{3})(\d{4})">
+ <leadingDigits>80</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <!-- 500, 800 with 9 digits. -->
+ <numberFormat pattern="([58]00)(\d{6})">
+ <leadingDigits>[58]00</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>\d{7,10}</nationalNumberPattern>
+ <possibleNumberPattern>\d{4,10}</possibleNumberPattern>
+ </generalDesc>
+ <areaCodeOptional>
+ <!-- These are a subset of the fixed-line rules, with digits 2-9 as the leading digit of the
+ subscriber number. There are patterns for 2+8, 3+7 and a combined pattern for all
+ 4+6/4+5 and 5+5/5+4 numbers. Note that numbers matching this pattern are not
+ necessarily valid numbers. -->
+ <nationalNumberPattern>
+ 2\d[2-9]\d{7}|
+ 1(?:
+ 1\d|
+ \d1
+ )[2-9]\d{6}|
+ 1(?:
+ [248][02-9]\d[2-9]\d{4,5}|
+ (?:
+ 3(?:
+ [02-79]\d|
+ 8[0-69]
+ )|
+ 5(?:
+ [04-9]\d|
+ 2[0-35-9]|
+ 3[0-8]
+ )|
+ 6(?:
+ [02-8]\d|
+ 9[0-689]
+ )|
+ 7(?:
+ [02-5789]\d|
+ 6[0-79]
+ )|
+ 9(?:
+ [0235-9]\d|
+ 4[0-5789]
+ )
+ )[2-9]\d{4,5}|
+ (?:
+ 387(?:
+ 3[2-9]|
+ [24-9]\d
+ )|
+ 5(?:
+ 24(?:
+ 2[2-9]|
+ [3-9]\d
+ )|
+ 39(?:
+ [4-6][2-9]|
+ [237-9]\d
+ )
+ )|
+ 697(?:
+ [347][2-9]|
+ [25689]\d
+ )|
+ 768(?:
+ [347][2-9]|
+ [25679]\d
+ )|
+ 946(?:
+ 7[2-9]|
+ [2-689]\d
+ )
+ )\d{3,4}
+ )
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{9,10}</possibleNumberPattern>
+ <exampleNumber>1332456789</exampleNumber>
+ </areaCodeOptional>
+ <fixedLine>
+ <!-- http://en.wikipedia.org/wiki/List_of_United_Kingdom_dialling_codes -->
+ <!-- Pattern matches geographic NSN=10 numbers as follows:
+ - area code and local number first digit for 2+8,
+ - area code and local number first digit for 3+7,
+ - area code only for 4+6 (including areas with embedded 5+5).
+ Pattern matches geographic NSN=9 numbers as follows:
+ - area code and local number first two digits for 4+5,
+ - area code and local number first three digits for 4+5 special case (01768) 88Ddd,
+ - area code and local number first digit for 5+4 special case (016977) Dddd.
+ All patterns exclude ranges used in GG, IM, JE. -->
+ <nationalNumberPattern>
+ 2(?:
+ 0[01378]|
+ 3[0189]|
+ 4[017]|
+ 8[0-46-9]|
+ 9[012]
+ )\d{7}|
+ 1(?:
+ (?:1
+ (?:3[0-48]|
+ [46][0-4]|
+ 5[012789]|
+ 7[0-39]|
+ 8[01349]
+ )|
+ 21[0-7]|
+ 31[0-8]|
+ [459]1\d|
+ 61[0-46-9]
+ )
+ )\d{6}|
+ 1(?:
+ 2(?:
+ 0[024-9]|
+ 2[3-9]|
+ 3[3-79]|
+ 4[1-689]|
+ [58][02-9]|
+ 6[0-4789]|
+ 7[013-9]|
+ 9\d
+ )|
+ 3(?:
+ 0\d|
+ [25][02-9]|
+ 3[02-579]|
+ [468][0-46-9]|
+ 7[1235679]|
+ 9[24578]
+ )|
+ 4(?:
+ 0[03-9]|
+ [28][02-5789]|
+ [37]\d|
+ 4[02-69]|
+ 5[0-8]|
+ [69][0-79]
+ )|
+ 5(?:
+ 0[1235-9]|
+ 2[024-9]|
+ 3[015689]|
+ 4[02-9]|
+ 5[03-9]|
+ 6\d|
+ 7[0-35-9]|
+ 8[0-468]|
+ 9[0-5789]
+ )|
+ 6(?:
+ 0[034689]|
+ 2[0-35689]|
+ [38][013-9]|
+ 4[1-467]|
+ 5[0-69]|
+ 6[13-9]|
+ 7[0-8]|
+ 9[0124578]
+ )|
+ 7(?:
+ 0[0246-9]|
+ 2\d|
+ 3[023678]|
+ 4[03-9]|
+ 5[0-46-9]|
+ 6[013-9]|
+ 7[0-35-9]|
+ 8[024-9]|
+ 9[02-9]
+ )|
+ 8(?:
+ 0[35-9]|
+ 2[1-5789]|
+ 3[02-578]|
+ 4[0-578]|
+ 5[124-9]|
+ 6[2-69]|
+ 7\d|
+ 8[02-9]|
+ 9[02569]
+ )|
+ 9(?:
+ 0[02-589]|
+ 2[02-689]|
+ 3[1-5789]|
+ 4[2-9]|
+ 5[0-579]|
+ 6[234789]|
+ 7[0124578]|
+ 8\d|
+ 9[2-57]
+ )
+ )\d{6}|
+ 1(?:
+ 2(?:
+ 0(?:
+ 46[1-4]|
+ 87[2-9]
+ )|
+ 545[1-79]|
+ 76(?:
+ 2\d|
+ 3[1-8]|
+ 6[1-6]
+ )|
+ 9(?:
+ 7(?:
+ 2[0-4]|
+ 3[2-5]
+ )|
+ 8(?:
+ 2[2-8]|
+ 7[0-4789]|
+ 8[345]
+ )
+ )
+ )|
+ 3(?:
+ 638[2-5]|
+ 647[23]|
+ 8(?:
+ 47[04-9]|
+ 64[015789]
+ )
+ )|
+ 4(?:
+ 044[1-7]|
+ 20(?:
+ 2[23]|
+ 8\d
+ )|
+ 6(?:
+ 0(?:
+ 30|
+ 5[2-57]|
+ 6[1-8]|
+ 7[2-8]
+ )|
+ 140
+ )|
+ 8(?:
+ 052|
+ 87[123]
+ )
+ )|
+ 5(?:
+ 24(?:
+ 3[2-79]|
+ 6\d
+ )|
+ 276\d|
+ 6(?:
+ 26[06-9]|
+ 686
+ )
+ )|
+ 6(?:
+ 06(?:
+ 4\d|
+ 7[4-79]
+ )|
+ 295[567]|
+ 35[34]\d|
+ 47(?:
+ 24|
+ 61
+ )|
+ 59(?:
+ 5[08]|
+ 6[67]|
+ 74
+ )|
+ 955[0-4]
+ )|
+ 7(?:
+ 26(?:
+ 6[13-9]|
+ 7[0-7]
+ )|
+ 442\d|
+ 50(?:
+ 2[0-3]|
+ [3-68]2|
+ 76
+ )
+ )|
+ 8(?:
+ 27[56]\d|
+ 37(?:
+ 5[2-5]|
+ 8[239]
+ )|
+ 84(?:
+ 3[2-58]
+ )
+ )|
+ 9(?:
+ 0(?:
+ 0(?:
+ 6[1-8]|
+ 85
+ )|
+ 52\d
+ )|
+ 3583|
+ 4(?:
+ 66[1-8]|
+ 9(?:
+ 2[01]|
+ 81
+ )
+ )|
+ 63(?:
+ 23|
+ 3[1-4]
+ )|
+ 9561
+ )
+ )\d{3}|
+ 176888[234678]\d{2}|
+ 16977[23]\d{3}
+ </nationalNumberPattern>
+ <exampleNumber>1212345678</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- http://stakeholders.ofcom.org.uk/telecoms/numbering/telephone-no-availability/numbers-administered/
+ 7100-7599, 7700-7999 with 10 digits; excluding ranges used in GG, IM, JE. -->
+ <nationalNumberPattern>
+ 7(?:
+ [1-4]\d\d|
+ 5(?:
+ 0[0-8]|
+ [13-9]\d|
+ 2[0-35-9]
+ )|
+ 7(?:
+ 0[1-9]|
+ [1-7]\d|
+ 8[02-9]|
+ 9[0-689]
+ )|
+ 8(?:
+ [014-9]\d|
+ [23][0-8]
+ )|
+ 9(?:
+ [04-9]\d|
+ 1[02-9]|
+ 2[0-35-9]|
+ 3[0-689]
+ )
+ )\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>7400123456</exampleNumber>
+ </mobile>
+ <pager>
+ <!-- 76 with 10 digits; excluding ranges used in IM. -->
+ <nationalNumberPattern>
+ 76(?:
+ 0[012]|
+ 2[356]|
+ 4[0134]|
+ 5[49]|
+ 6[0-369]|
+ 77|
+ 81|
+ 9[39]
+ )\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>7640123456</exampleNumber>
+ </pager>
+ <!-- Source for non geographic numbers:
+ http://en.wikipedia.org/wiki/Non-geographical_telephone_numbers_in_the_UK -->
+ <tollFree>
+ <!-- 800 1111 with 7 digits, 800 with 9 or 10 digits, 808 with 10 digits, 500 with 9 digits. -->
+ <nationalNumberPattern>
+ 80(?:
+ 0(?:
+ 1111|
+ \d{6,7}
+ )|
+ 8\d{7}
+ )|
+ 500\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7}(?:\d{2,3})?</possibleNumberPattern>
+ <exampleNumber>8001234567</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <!-- 871, 872, 873 with 10 digits are now Controlled Premium Rate Services, so are listed
+ here as well as 900-909, 910-919, 980-983 with 10 digits. -->
+ <nationalNumberPattern>
+ (?:
+ 87[123]|
+ 9(?:
+ [01]\d|
+ 8[0-3]
+ )
+ )\d{7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>9012345678</exampleNumber>
+ </premiumRate>
+ <sharedCost>
+ <!-- Using shared cost to deal with the various revenue sharing number prefixes in the
+ United Kingdom: 845 46 47 with 7 digits, 842-845, 870 with 10 digits. -->
+ <nationalNumberPattern>
+ 8(?:
+ 4(?:
+ 5464\d|
+ [2-5]\d{7}
+ )|
+ 70\d{7}
+ )
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7}(?:\d{3})?</possibleNumberPattern>
+ <exampleNumber>8431234567</exampleNumber>
+ </sharedCost>
+ <personalNumber>
+ <!-- 70 with 10 digits. -->
+ <nationalNumberPattern>70\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>7012345678</exampleNumber>
+ </personalNumber>
+ <voip>
+ <!-- 56 with 10 digits. -->
+ <nationalNumberPattern>56\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>5612345678</exampleNumber>
+ </voip>
+ <uan>
+ <!-- 30d, 33d, 34d, 37d, 55 with 10 digits. -->
+ <nationalNumberPattern>
+ (?:
+ 3[0347]|
+ 55
+ )\d{8}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>5512345678</exampleNumber>
+ </uan>
+ <shortCode>
+ <!-- This is a list of the ones that can be called. -->
+ <nationalNumberPattern>
+ 1(?:
+ 0[01]|
+ 1(?:
+ [12]|
+ [68]\d{3}
+ )|
+ 2[123]|
+ 33|
+ 4(?:
+ 1|
+ 7\d
+ )|
+ 5\d|
+ 70\d|
+ 800\d|
+ 9[15]
+ )|
+ 2(?:
+ 02|
+ 2(?:
+ 02|
+ 11|
+ 2
+ )|
+ 3(?:
+ 02|
+ 45
+ )
+ 425
+ )|
+ 3[13]3|
+ 4(?:
+ 0[02]|
+ 35[01]|
+ 44[45]|
+ 5\d
+ )|
+ 650|
+ 789|
+ 9(?:
+ 01|
+ 99
+ )
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{3,6}</possibleNumberPattern>
+ <exampleNumber>150</exampleNumber>
+ </shortCode>
+ </territory>
+
+ <!-- Grenada -->
+ <!-- http://www.itu.int/oth/T0202000057/en -->
+ <territory id="GD" countryCode="1" leadingDigits="473"
+ nationalPrefix="1" internationalPrefix="011">
+ <generalDesc>
+ <!-- NANPA country - uses US formatting rules -->
+ <nationalNumberPattern>[4589]\d{9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}(?:\d{3})?</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ 473(?:
+ 2(?:
+ 3[0-2]|
+ 69
+ )|
+ 3(?:
+ 2[89]|
+ 86
+ )|
+ 4(?:
+ [06]8|
+ 3[5-9]|
+ 4[0-49]|
+ 5[5-79]|
+ 73|
+ 90
+ )|
+ 63[68]|
+ 7(?:
+ 58|
+ 84
+ )|
+ 938
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>4732691234</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ 473(?:
+ 4(?:
+ 0[3-79]|
+ 1[04-9]|
+ 20|
+ 58
+ )|
+ 53[3-8]
+ )\d{4}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>4734031234</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>
+ 8(?:
+ 00|
+ 55|
+ 66|
+ 77|
+ 88
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>8002123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>900[2-9]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>9002123456</exampleNumber>
+ </premiumRate>
+ <personalNumber>
+ <!-- http://www.nanpa.com/pdf/PL_416.pdf -->
+ <nationalNumberPattern>
+ 5(?:
+ 00|
+ 33|
+ 44
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>5002345678</exampleNumber>
+ </personalNumber>
+ </territory>
+
+ <!-- Georgia -->
+ <!-- http://www.itu.int/oth/T0202000050/en
+ http://en.wikipedia.org/wiki/Telephone_numbers_in_Georgia. -->
+ <territory id="GE" countryCode="995" internationalPrefix="8~10"
+ nationalPrefix="8" nationalPrefixFormattingRule="$NP $FG">
+ <availableFormats>
+ <!-- Format isn't very strictly defined - the yellow pages omits area code and does 2 2 2,
+ the communications commission uses 2 3 3. Wikipedia says 3 2 3. Some use 2 6. -->
+ <numberFormat pattern="(\d{2})(\d{2})(\d{2})(\d{2})">
+ <leadingDigits>[13-79]</leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ <numberFormat pattern="(800)(\d{2})(\d{2})(\d{2})">
+ <leadingDigits>8</leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>
+ [13-79]\d{7}|
+ 8\d{8}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{5,9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 3(?:
+ [256]\d|
+ 4[124-9]|
+ 7[0-4]
+ )|
+ 4(?:
+ 1\d|
+ 2[2-7]|
+ 3[1-79]|
+ 4[2-8]|
+ 7[239]|
+ 9[1-7]
+ )
+ )\d{5}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{5,8}</possibleNumberPattern>
+ <exampleNumber>32123456</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ (?:
+ 14|
+ 5[01578]|
+ 6[28]|
+ 7[0147-9]|
+ 9[0-35-9]
+ )\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>55123456</exampleNumber>
+ </mobile>
+ <!-- Information from www.yell.ge, examples such as Wissol Petroleum Georgia hotline. -->
+ <tollFree>
+ <nationalNumberPattern>800\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>800123456</exampleNumber>
+ </tollFree>
+ <!-- It seems there may be special 6 digit numbers beginning with 91, but we are not sure, so
+ these are omitted for now. -->
+ </territory>
+
+ <!-- French Guiana (French Dept. of) -->
+ <territory id="GF" countryCode="594" internationalPrefix="00">
+ </territory>
+
+ <!-- Guernsey -->
+ <!-- Inherits formatting rules from the UK. -->
+ <!-- http://en.wikipedia.org/wiki/Telephone_numbers_in_the_United_Kingdom -->
+ <territory id="GG" countryCode="44" internationalPrefix="00"
+ nationalPrefix="0" preferredExtnPrefix=" x" nationalPrefixFormattingRule="$NP$FG">
+ <generalDesc>
+ <nationalNumberPattern>[135789]\d{6,9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{6,10}</possibleNumberPattern>
+ </generalDesc>
+ <areaCodeOptional>
+ <nationalNumberPattern>1481[2-9]\d{5}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>1481250123</exampleNumber>
+ </areaCodeOptional>
+ <!-- Specific to GG. -->
+ <fixedLine>
+ <!-- 1481 with 10 digits. -->
+ <nationalNumberPattern>1481\d{6}</nationalNumberPattern>
+ <exampleNumber>1481456789</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- 7781, 7839, 7911 with 10 digits. -->
+ <nationalNumberPattern>
+ 7(?:
+ 781|
+ 839|
+ 911
+ )\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>7781123456</exampleNumber>
+ </mobile>
+ <!-- Other numbers as per GB. -->
+ <pager>
+ <nationalNumberPattern>
+ 76(?:
+ 0[012]|
+ 2[356]|
+ 4[0134]|
+ 5[49]|
+ 6[0-369]|
+ 77|
+ 81|
+ 9[39]
+ )\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>7640123456</exampleNumber>
+ </pager>
+ <tollFree>
+ <nationalNumberPattern>
+ 80(?:
+ 0(?:
+ 1111|
+ \d{6,7}
+ )|
+ 8\d{7}
+ )|
+ 500\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7}(?:\d{2,3})?</possibleNumberPattern>
+ <exampleNumber>8001234567</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>
+ (?:
+ 87[123]|
+ 9(?:
+ [01]\d|
+ 8[0-3]
+ )
+ )\d{7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>9012345678</exampleNumber>
+ </premiumRate>
+ <sharedCost>
+ <nationalNumberPattern>
+ 8(?:
+ 4(?:
+ 5464\d|
+ [2-5]\d{7}
+ )|
+ 70\d{7}
+ )
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7}(?:\d{3})?</possibleNumberPattern>
+ <exampleNumber>8431234567</exampleNumber>
+ </sharedCost>
+ <personalNumber>
+ <nationalNumberPattern>70\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>7012345678</exampleNumber>
+ </personalNumber>
+ <voip>
+ <nationalNumberPattern>56\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>5612345678</exampleNumber>
+ </voip>
+ <uan>
+ <nationalNumberPattern>
+ (?:
+ 3[0347]|
+ 55
+ )\d{8}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>5512345678</exampleNumber>
+ </uan>
+ <shortCode>
+ <nationalNumberPattern>
+ 1\d{2}(?:\d{3})?|
+ 999
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{3,6}</possibleNumberPattern>
+ <exampleNumber>150</exampleNumber>
+ </shortCode>
+ </territory>
+
+ <!-- Ghana -->
+ <!-- http://www.itu.int/oth/T0202000052/en -->
+ <!-- http://www.nca.org.gh/index.php?option=com_content&view=article&id=90&Itemid=65 -->
+ <territory id="GH" countryCode="233" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="(\d{2})(\d{3})(\d{4})">
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[235]\d{6,8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7,9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ 3(?:
+ 0[237]\d|
+ [167](?:
+ 2[0-6]|
+ 7\d
+ )|
+ 2(?:
+ 2[0-5]|
+ 7\d
+ )|
+ 3(?:
+ 2[0-37]|
+ 7\d
+ )|
+ 4(?:
+ [27]\d|
+ 30
+ )|
+ 5(?:
+ 2[0-7]|
+ 7\d
+ )|
+ 8(?:
+ 2[0-2]|
+ 7\d
+ )|
+ 9(?:
+ 20|
+ 7\d
+ )
+ )\d{5}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7,9}</possibleNumberPattern>
+ <exampleNumber>302345678</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ 2(?:
+ (?:
+ [47]\d|
+ 08
+ )\d{6}|
+ [368]\d{7}
+ )|
+ 54\d{7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>231234567</exampleNumber>
+ </mobile>
+ <!-- No tollFree or premiumRate information can be found. -->
+ </territory>
+
+ <!-- Gibraltar -->
+ <territory id="GI" countryCode="350" internationalPrefix="00">
+ <!-- No formatting rules - numbers are always formatted as a block. -->
+ <generalDesc>
+ <nationalNumberPattern>[2568]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ 2(?:
+ 00\d|
+ 16[0-7]|
+ 22[2457]
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>20012345</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ (?:
+ 5[4-8]|
+ 60
+ )\d{6}
+ </nationalNumberPattern>
+ <exampleNumber>57123456</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>80\d{6}</nationalNumberPattern>
+ <exampleNumber>80123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>8[1-689]\d{6}</nationalNumberPattern>
+ <exampleNumber>88123456</exampleNumber>
+ </premiumRate>
+ <sharedCost>
+ <nationalNumberPattern>87\d{6}</nationalNumberPattern>
+ <exampleNumber>87123456</exampleNumber>
+ </sharedCost>
+ <shortCode>
+ <nationalNumberPattern>
+ 1(?:
+ 00|
+ 1(?:
+ 2|
+ 6(?:
+ 00[06]|
+ 11[17]
+ )|
+ 8\d{2}
+ )|
+ 23|
+ 4(?:
+ 1|
+ 7[014]
+ )|
+ 5[015]|
+ 9[0349]
+ )|
+ 8(?:
+ 00|
+ 4[0-2]|
+ 8\d
+ )
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{3,6}</possibleNumberPattern>
+ <exampleNumber>116123</exampleNumber>
+ </shortCode>
+ </territory>
+
+ <!-- Greenland -->
+ <!-- http://www.itu.int/oth/T0202000056/en -->
+ <territory id="GL" countryCode="299" internationalPrefix="00">
+ <availableFormats>
+ <numberFormat pattern="(\d{2})(\d{2})(\d{2})">
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[1-689]\d{5}</nationalNumberPattern>
+ <possibleNumberPattern>\d{6}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- Including VSAT numbers here. -->
+ <nationalNumberPattern>
+ (?:
+ 19|
+ 3[1-6]|
+ 6[14689]|
+ 8[14-79]|
+ 9\d
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>321000</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>[245][2-9]\d{4}</nationalNumberPattern>
+ <exampleNumber>221234</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>80\d{4}</nationalNumberPattern>
+ <exampleNumber>801234</exampleNumber>
+ </tollFree>
+ <voip>
+ <nationalNumberPattern>3[89]\d{4}</nationalNumberPattern>
+ <exampleNumber>381234</exampleNumber>
+ </voip>
+ </territory>
+
+ <!-- Gambia -->
+ <!-- http://www.itu.int/oth/T020200004F/en -->
+ <territory id="GM" countryCode="220" internationalPrefix="00">
+ <availableFormats>
+ <numberFormat pattern="(\d{3})(\d{4})">
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[3-9]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 4(?:
+ [23]\d{2}|
+ 4(?:
+ 1[024679]|
+ [6-9]\d
+ )
+ )|
+ 5(?:
+ 54[0-7]|
+ 6(?:
+ [67]\d
+ )|
+ 7(?:
+ 1[04]|
+ 2[035]|
+ 3[58]|
+ 48
+ )
+ )|
+ 8\d{3}
+ )\d{3}
+ </nationalNumberPattern>
+ <exampleNumber>5661234</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>[3679]\d{6}</nationalNumberPattern>
+ <exampleNumber>3012345</exampleNumber>
+ </mobile>
+ </territory>
+
+ <!-- Guinea -->
+ <!-- http://www.itu.int/oth/T020200005B/en -->
+ <territory id="GN" countryCode="224" internationalPrefix="00">
+ <availableFormats>
+ <numberFormat pattern="(\d{2})(\d{2})(\d{2})(\d{2})">
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[3567]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ 30(?:
+ 24|
+ 3[12]|
+ 4[1-35-7]|
+ 5[13]|
+ 6[189]|
+ [78]1|
+ 9[1478]
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>30241234</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- WiMAX is in the plan - which is a wireless broadband protocol. Not including this in
+ the metadata for now unless this proves to be necessary. These would start with 79. -->
+ <nationalNumberPattern>
+ 55\d{6}|
+ 6(?:
+ 0(?:
+ 2\d|
+ 3[3467]|
+ 5[2457-9]
+ )|
+ [24578]\d{2}|
+ 3(?:
+ [14]0|
+ 35
+ )
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>60201234</exampleNumber>
+ </mobile>
+ </territory>
+
+ <!-- Guadeloupe -->
+ <!-- http://www.itu.int/oth/T0202000058/en -->
+ <territory id="GP" countryCode="590" internationalPrefix="00"
+ mainCountryForCode="true" nationalPrefix="0"
+ nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="([56]90)(\d{2})(\d{4})">
+ <format>$1 $2-$3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[56]\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- The plan says 59011 and 59012 are not implemented yet, but is from 2006 and online
+ examples can be found. -->
+ <nationalNumberPattern>
+ 590(?:
+ 1[12]|
+ 2[0-68]|
+ 3[28]|
+ 4[126-8]|
+ 5[067]|
+ 6[018]|
+ [89]\d
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>590201234</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- Adding 1[1-9] and 2[013-5] as prefixes after SMSs have been successfully sent to
+ numbers with this prefix. starpy.net/rates.php also attributes this range to Guadeloupe
+ Digicel Mobile. -->
+ <nationalNumberPattern>
+ 690(?:
+ 00|
+ 1[1-9]|
+ 2[013-5]|
+ [3-5]\d|
+ 6[0-57-9]|
+ 7[1-6]|
+ 8[0-6]|
+ 9[09]
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>690301234</exampleNumber>
+ </mobile>
+ </territory>
+
+ <!-- Equatorial Guinea -->
+ <!-- http://www.itu.int/oth/T0202000041/en -->
+ <territory id="GQ" countryCode="240" internationalPrefix="00">
+ <availableFormats>
+ <numberFormat pattern="(\d{2})(\d{3})(\d{4})">
+ <leadingDigits>[235]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{6})">
+ <leadingDigits>[89]</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[23589]\d{8}</nationalNumberPattern>
+ <!-- The 6 here refers to the old number pattern - numbers written down may still be this
+ length although they can no longer be dialled. -->
+ <possibleNumberPattern>\d{6,9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ 3(?:
+ 3(?:
+ 3\d[7-9]|
+ [0-24-9]\d[46]
+ )|
+ 5\d{2}[7-9]
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>333091234</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ (?:
+ 222|
+ 551
+ )\d{6}
+ </nationalNumberPattern>
+ <exampleNumber>222123456</exampleNumber>
+ </mobile>
+ <!-- Note that personal and sharedCost numbers are said to go under here too - hopefully when
+ they start allocating them there will be a differentiation of prefixes, but this is not
+ clear now. -->
+ <tollFree>
+ <nationalNumberPattern>80\d[1-9]\d{5}</nationalNumberPattern>
+ <exampleNumber>800123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>90\d[1-9]\d{5}</nationalNumberPattern>
+ <exampleNumber>900123456</exampleNumber>
+ </premiumRate>
+ </territory>
+
+ <!-- Greece -->
+ <!-- http://www.itu.int/oth/T0202000055/en -->
+ <!-- http://en.wikipedia.org/wiki/%2B30 -->
+ <territory id="GR" countryCode="30" internationalPrefix="00">
+ <availableFormats>
+ <numberFormat pattern="([27]\d)(\d{4})(\d{4})">
+ <leadingDigits>
+ 21|
+ 7
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{3})(\d{4})">
+ <leadingDigits>
+ 2[2-9]1|
+ [689]
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(2\d{3})(\d{6})">
+ <leadingDigits>2[2-9][02-9]</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[26-9]\d{9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ 2(?:
+ 1\d{2}|
+ 2(?:
+ 3[1-8]|
+ 4[1-7]|
+ 5[1-4]|
+ 6[1-8]|
+ 7[1-5]|
+ [289][1-9]
+ )|
+ 3(?:
+ 1\d|
+ 2[1-5]|
+ 3[1-4]|
+ [45][1-3]|
+ 7[1-7]|
+ 8[1-6]|
+ 9[1-79]
+ )|
+ 4(?:
+ 1\d|
+ 2[1-8]|
+ 3[1-4]|
+ 4[13-5]|
+ 6[1-578]|
+ 9[1-5]
+ )|
+ 5(?:
+ 1\d|
+ 2[1-3]|
+ 4[124]|
+ 5[1-6]|
+ [39][1-4]
+ )|
+ 6(?:
+ 1\d|
+ 3[24]|
+ 4[1-7]|
+ 5[13-9]|
+ [269][1-6]|
+ 7[14]|
+ 8[1-35]
+ )|
+ 7(?:
+ 1\d|
+ [23][1-5]|
+ 4[1-7]|
+ 5[1-57]|
+ 6[134]|
+ 9[15-7]
+ )|
+ 8(?:
+ 1\d|
+ 2[1-5]|
+ [34][1-4]|
+ 9[1-7]
+ )
+ )\d{6}
+ </nationalNumberPattern>
+ <exampleNumber>2123456789</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>69\d{8}</nationalNumberPattern>
+ <exampleNumber>6912345678</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>800\d{7}</nationalNumberPattern>
+ <exampleNumber>8001234567</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>90[19]\d{7}</nationalNumberPattern>
+ <exampleNumber>9091234567</exampleNumber>
+ </premiumRate>
+ <!-- Including calls with maximum charge of 0,25 EUR/minute here instead of under premium
+ rate. -->
+ <sharedCost>
+ <nationalNumberPattern>
+ 8(?:
+ 0[16]|
+ 12|
+ 25
+ )\d{7}
+ </nationalNumberPattern>
+ <exampleNumber>8011234567</exampleNumber>
+ </sharedCost>
+ <personalNumber>
+ <nationalNumberPattern>70\d{8}</nationalNumberPattern>
+ <exampleNumber>7012345678</exampleNumber>
+ </personalNumber>
+ </territory>
+
+ <!-- Guatemala -->
+ <!-- http://www.itu.int/oth/T020200005A/en
+ http://www.sit.gob.gt/index.php?page=plan-de-numeracion
+ http://en.wikipedia.org/wiki/Telephone_numbers_in_Guatemala -->
+ <territory id="GT" countryCode="502" internationalPrefix="00">
+ <availableFormats>
+ <numberFormat pattern="(\d{4})(\d{4})">
+ <leadingDigits>[2-7]</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{4})(\d{3})(\d{4})">
+ <leadingDigits>1</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>
+ [2-7]\d{7}|
+ 1[89]\d{9}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{8}(?:\d{3})?</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>[267][2-9]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>22456789</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- Wikipedia claims numbers with 3 are also mobile although in ITU document it says that
+ they are just reserved. -->
+ <nationalNumberPattern>[345]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>51234567</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>18[01]\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{11}</possibleNumberPattern>
+ <exampleNumber>18001112222</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>19\d{9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{11}</possibleNumberPattern>
+ <exampleNumber>19001112222</exampleNumber>
+ </premiumRate>
+ <shortCode>
+ <nationalNumberPattern>
+ 1(?:
+ 2|
+ [57]\d
+ )\d
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{3,4}</possibleNumberPattern>
+ <exampleNumber>123</exampleNumber>
+ </shortCode>
+ </territory>
+
+ <!-- Guam -->
+ <!-- http://www.nationalnanpa.com/nas/public/assigned_code_query_step1.do?method=resetCodeQueryModel -->
+ <territory id="GU" countryCode="1" leadingDigits="671"
+ nationalPrefix="1" internationalPrefix="011">
+ <generalDesc>
+ <!-- NANPA country - uses US formatting rules -->
+ <nationalNumberPattern>[5689]\d{9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}(?:\d{3})?</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- Added 671 555/720/721 based on information from
+ http://www.area-codes.com/area-code/area-code-671.asp -->
+ <nationalNumberPattern>
+ 671(?:
+ 3(?:
+ 00|
+ 3[39]|
+ 4[349]|
+ 55|
+ 6[26]
+ )|
+ 4(?:
+ 56|
+ 7[1-9]|
+ 8[23678]
+ )|
+ 5(?:
+ 55|
+ 6[2-5]|
+ 88
+ )|
+ 6(?:
+ 3[2-578]|
+ 4[24-9]|
+ 5[34]|
+ 78|
+ 8[5-9]
+ )|
+ 7(?:
+ [079]7|
+ 2[0167]|
+ 3[45]|
+ 8[789]
+ )|
+ 8(?:
+ [2-5789]8|
+ 6[48]
+ )|
+ 9(?:
+ 2[29]|
+ 6[79]|
+ 7[179]|
+ 8[789]|
+ 9[78]
+ )
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>6713001234</exampleNumber>
+ </fixedLine>
+ <!-- We assume mobile phone numbers to be the same as fixed-line - further info unavailable -->
+ <mobile>
+ <nationalNumberPattern>
+ 671(?:
+ 3(?:
+ 00|
+ 3[39]|
+ 4[349]|
+ 55|
+ 6[26]
+ )|
+ 4(?:
+ 56|
+ 7[1-9]|
+ 8[23678]
+ )|
+ 5(?:
+ 55|
+ 6[2-5]|
+ 88
+ )|
+ 6(?:
+ 3[2-578]|
+ 4[24-9]|
+ 5[34]|
+ 78|
+ 8[5-9]
+ )|
+ 7(?:
+ [079]7|
+ 2[0167]|
+ 3[45]|
+ 8[789]
+ )|
+ 8(?:
+ [2-5789]8|
+ 6[48]
+ )|
+ 9(?:
+ 2[29]|
+ 6[79]|
+ 7[179]|
+ 8[789]|
+ 9[78]
+ )
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>6713001234</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>
+ 8(?:
+ 00|
+ 55|
+ 66|
+ 77|
+ 88
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>8002123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>900[2-9]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>9002123456</exampleNumber>
+ </premiumRate>
+ <personalNumber>
+ <!-- http://www.nanpa.com/pdf/PL_416.pdf -->
+ <nationalNumberPattern>
+ 5(?:
+ 00|
+ 33|
+ 44
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>5002345678</exampleNumber>
+ </personalNumber>
+ </territory>
+
+ <!-- Guinea-Bissau -->
+ <!-- http://www.itu.int/oth/T020200005C/en -->
+ <territory id="GW" countryCode="245" internationalPrefix="00">
+ <availableFormats>
+ <numberFormat pattern="(\d{3})(\d{4})">
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[3567]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ 3(?:
+ 2[0125]|
+ 3[1245]|
+ 4[12]|
+ 5[1-4]|
+ 70|
+ 9[1-467]
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>3201234</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>[5-7]\d{6}</nationalNumberPattern>
+ <exampleNumber>5012345</exampleNumber>
+ </mobile>
+ </territory>
+
+ <!-- Guyana -->
+ <!-- http://www.itu.int/oth/T020200005D/en -->
+ <territory id="GY" countryCode="592" internationalPrefix="001">
+ <availableFormats>
+ <numberFormat pattern="(\d{3})(\d{4})">
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[2-4679]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 2(?:
+ 1[6-9]|
+ 2[0-35-9]|
+ 3[1-4]|
+ 5[3-9]|
+ 6\d|
+ 7[0-24-79]
+ )|
+ 3(?:
+ 2[25-9]|
+ 3\d
+ )|
+ 4(?:
+ 4[0-24]|
+ 5[56]
+ )|
+ 77[1-57]
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>2201234</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- The ITU document only describes a few ranges for mobile numbers but there is evidence
+ that SMS messages have been succesfully sent to numbers in the entire range prefixed
+ with 6. -->
+ <nationalNumberPattern>6\d{6}</nationalNumberPattern>
+ <exampleNumber>6091234</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>
+ (?:
+ 289|
+ 862
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>2891234</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>9008\d{3}</nationalNumberPattern>
+ <exampleNumber>9008123</exampleNumber>
+ </premiumRate>
+ <shortCode>
+ <nationalNumberPattern>
+ 0(?:
+ 02|
+ 171|
+ 444|
+ 7[67]7|
+ 801|
+ 9(?:
+ 0[78]|
+ [2-47]
+ )
+ )
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{3,4}</possibleNumberPattern>
+ <exampleNumber>0801</exampleNumber>
+ </shortCode>
+ </territory>
+
+ <!-- Hong Kong -->
+ <!-- http://www.ofta.gov.hk/numbering/main.html -->
+ <territory id="HK" countryCode="852" internationalPrefix="00">
+ <availableFormats>
+ <numberFormat pattern="(\d{4})(\d{4})">
+ <leadingDigits>
+ [235-7]|
+ [89](?:
+ 0[1-9]|
+ [1-9]
+ )
+ </leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(800)(\d{3})(\d{3})">
+ <leadingDigits>800</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(900)(\d{2})(\d{3})(\d{3})">
+ <leadingDigits>900</leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <!-- Slightly more complex pattern to allow the country code to be stripped off if
+ necessary. -->
+ <nationalNumberPattern>
+ [235-7]\d{7}|
+ 8\d{7,8}|
+ 9\d{7,10}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{8,11}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>[23]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>21234567</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>[5-79]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>51234567</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>800\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>800123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>900\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{11}</possibleNumberPattern>
+ <exampleNumber>90012345678</exampleNumber>
+ </premiumRate>
+ <personalNumber>
+ <nationalNumberPattern>8[1-3]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>81123456</exampleNumber>
+ </personalNumber>
+ </territory>
+
+ <!-- Honduras -->
+ <!-- http://www.itu.int/oth/T020200005F/en -->
+ <!-- It seems there is no longer a trunk prefix in use, based on websites like
+ http://www.howtocallabroad.com/codes.html and on seeing how locals write their numbers in
+ national format. -->
+ <territory id="HN" countryCode="504" internationalPrefix="00" >
+ <availableFormats>
+ <numberFormat pattern="(\d{4})(\d{4})">
+ <format>$1-$2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[237-9]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ 2(?:
+ 2(?:
+ 0[019]|
+ 1[1-36]|
+ [23]\d|
+ 4[056]|
+ 5[57]|
+ 9[01]
+ )|
+ 4(?:
+ 2|3-59]|
+ 3[13-689]|
+ 4[0-68]|
+ 5[1-35]
+ )|
+ 5(?:
+ 4[3-5]|
+ 5\d|
+ 6[56]|
+ 74
+ )|
+ 6(?:
+ 4[0-378]|
+ [56]\d|
+ [78][0-8]|
+ 9[01]
+ )|
+ 7(?:
+ 6[46-9]|
+ 7[02-9]|
+ 8[34]
+ )|
+ 8(?:
+ 79|
+ 8[0-35789]|
+ 9[1-57-9]
+ )
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>22123456</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>[37-9]\d{7}</nationalNumberPattern>
+ <exampleNumber>91234567</exampleNumber>
+ </mobile>
+ </territory>
+
+ <!-- Croatia -->
+ <!-- http://www.itu.int/oth/T0202000032/en -->
+ <!-- http://en.wikipedia.org/wiki/%2B385 -->
+ <territory id="HR" countryCode="385" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <!-- The plan says 1 XXX XXXX but the government and local telecom websites are formatted 1
+ XXXX XXX, so we prefer that formatting here. These same sources prefer XXX XXX to XX
+ XXXX as well. -->
+ <numberFormat pattern="(1)(\d{4})(\d{3})">
+ <leadingDigits>1</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(6[029])(\d{4})(\d{3})">
+ <leadingDigits>6[029]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="([2-5]\d)(\d{3})(\d{3})">
+ <leadingDigits>[2-5]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(9[12589])(\d{3,4})(\d{3,4})">
+ <leadingDigits>9</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(9[12589])(\d{3,4})(\d{3})(\d{3})">
+ <leadingDigits>9</leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{2})(\d{2})(\d{2,3})">
+ <leadingDigits>
+ 6[145]|
+ 7
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{2})(\d{3,4})(\d{3})">
+ <leadingDigits>
+ 6[145]|
+ 7
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(80[01])(\d{2})(\d{2,3})">
+ <leadingDigits>8</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(80[01])(\d{3,4})(\d{3})">
+ <leadingDigits>8</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>
+ [1-7]\d{5,8}|
+ [89]\d{6,11}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{6,12}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- Supporting 060 (general service), 062 (universal access), 069 (children service)
+ numbers here too. -->
+ <nationalNumberPattern>
+ (?:
+ 1|
+ 6[029]
+ )\d{7}|
+ (?:
+ 2[0-3]|
+ 3[1-5]|
+ 4[02-47-9]|
+ 5[1-3]
+ )\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{6,9}</possibleNumberPattern>
+ <exampleNumber>12345678</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>9[12589]\d{6,10}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8,12}</possibleNumberPattern>
+ <exampleNumber>912345678</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>80[01]\d{4,7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
+ <exampleNumber>8001234567</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <!-- 061 is for TeleVoting numbers - but these are charged at similar rates to premium rate
+ so we include them here. -->
+ <nationalNumberPattern>6[145]\d{4,7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{6,9}</possibleNumberPattern>
+ <exampleNumber>611234</exampleNumber>
+ </premiumRate>
+ <personalNumber>
+ <nationalNumberPattern>7[45]\d{4,7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{6,9}</possibleNumberPattern>
+ <exampleNumber>741234567</exampleNumber>
+ </personalNumber>
+ </territory>
+
+ <!-- Haiti -->
+ <!-- http://www.itu.int/oth/T020200005E/en -->
+ <!-- http://www.numberingplans.com/ -->
+ <territory id="HT" countryCode="509" internationalPrefix="00">
+ <availableFormats>
+ <numberFormat pattern="(\d{2})(\d{2})(\d{4})">
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[2-489]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- The prefix 24 seems to be also used, based on online searches. -->
+ <nationalNumberPattern>
+ 2(?:
+ [24]\d|
+ 5[1-5]|
+ 94
+ )\d{5}
+ </nationalNumberPattern>
+ <exampleNumber>22453300</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ (?:
+ 3[4-9]|
+ 4\d
+ )\d{6}
+ </nationalNumberPattern>
+ <exampleNumber>34101234</exampleNumber>
+ </mobile>
+ <tollFree>
+ <!-- ITU document says numbers with prefix 8 are "value-added services and free numbers
+ without making any further distinction. However, http://www.numberingplans.com/ seems
+ to suggest they are free. -->
+ <nationalNumberPattern>8\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>80012345</exampleNumber>
+ </tollFree>
+ <voip>
+ <!-- ITU document suggests 98\d{6}, but http://www.numberingplans.com/ restricts it to
+ 98[89]\d{5}. -->
+ <nationalNumberPattern>98[89]\d{5}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>98901234</exampleNumber>
+ </voip>
+ <shortCode>
+ <nationalNumberPattern>1\d{2}</nationalNumberPattern>
+ <possibleNumberPattern>\d{3}</possibleNumberPattern>
+ <exampleNumber>114</exampleNumber>
+ </shortCode>
+ </territory>
+
+ <!-- Hungary -->
+ <!-- http://www.itu.int/dms_pub/itu-t/oth/02/02/T02020000610001MSWE.doc -->
+ <territory id="HU" countryCode="36" internationalPrefix="00"
+ nationalPrefix="06" nationalPrefixFormattingRule="($FG)">
+ <!-- Although the national prefix is necessary for dialling, the preferred format (confirmed
+ by a Hungarian person and following the yellow pages) is to omit this when formatting.
+ Yellow pages: www.aranyoldalak.hu -->
+ <availableFormats>
+ <numberFormat pattern="(1)(\d{3})(\d{4})">
+ <leadingDigits>1</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{2})(\d{3})(\d{3,4})">
+ <leadingDigits>[2-9]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>\d{8,9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{6,9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- Includes numbers for corporate networks. -->
+ <nationalNumberPattern>
+ (?:
+ 1\d|
+ 2(?:
+ 1\d|
+ [2-9]
+ )|
+ 3[2-7]|
+ 4[24-9]|
+ 5[2-79]|
+ 6[23689]|
+ 7(?:
+ 1\d|
+ [2-9]
+ )|
+ 8[2-57-9]|
+ 9[2-69]
+ )\d{6}
+ </nationalNumberPattern>
+ <exampleNumber>12345678</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ (?:
+ [27]0|
+ 3[01]
+ )\d{7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>201234567</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>80\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>80123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>9[01]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>90123456</exampleNumber>
+ </premiumRate>
+ <sharedCost>
+ <nationalNumberPattern>40\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>40123456</exampleNumber>
+ </sharedCost>
+ </territory>
+
+ <!-- Indonesia -->
+ <!-- http://www.itu.int/oth/T0202000064/en (from 2001, very out-of-date) -->
+ <!-- http://en.wikipedia.org/wiki/%2B62 -->
+ <territory id="ID" countryCode="62" internationalPrefix="0(?:0[1789]|10(?:00|1[67]))"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat nationalPrefixFormattingRule="($NP$FG)"
+ pattern="(\d{2})(\d{7,8})">
+ <leadingDigits>
+ 2[124]|
+ [36]1
+ </leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat nationalPrefixFormattingRule="($NP$FG)"
+ pattern="(\d{3})(\d{5,7})">
+ <leadingDigits>
+ [4579]|
+ 2[035-9]|
+ [36][02-9]
+ </leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(8\d{2})(\d{3,4})(\d{3,4})">
+ <leadingDigits>8[1-35-9]</leadingDigits>
+ <format>$1-$2-$3</format>
+ </numberFormat>
+ <numberFormat pattern="(177)(\d{6,8})">
+ <leadingDigits>1</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <!-- http://en.wikipedia.org/wiki/Toll-free_telephone_number, and examples on the web show
+ that sometimes they are followed by less digits. -->
+ <numberFormat pattern="(800)(\d{5,7})">
+ <leadingDigits>800</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(809)(\d)(\d{3})(\d{3})">
+ <leadingDigits>809</leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[1-9]\d{6,10}</nationalNumberPattern>
+ <possibleNumberPattern>\d{5,11}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- Area codes taken from wikipedia, with missing ones added from
+ http://www.telkom.co.id/customer-services/area-and-country-code/?type=area.
+ We also added 0770 after user feedback because it seems to be used on Bintan island.
+ -->
+ <nationalNumberPattern>
+ 2[124]\d{7,8}|
+ (?:
+ 2(?:
+ [35][1-4]|
+ 6[0-8]|
+ 7[1-6]|
+ 8\d|
+ 9[1-8]
+ )|
+ 3(?:
+ 1|
+ 2[1-578]|
+ 3[1-68]|
+ 4[1-3]|
+ 5[1-8]|
+ 6[1-3568]|
+ 7[0-46]|
+ 8\d
+ )|
+ 4(?:
+ 0[1-589]|
+ 1[01347-9]|
+ 2[0-36-8]|
+ 3[0-24-68]|
+ 5[1-378]|
+ 6[1-5]|
+ 7[134]|
+ 8[1245]
+ )|
+ 5(?:
+ 1[1-35-9]|
+ 2[25-8]|
+ 3[1246-9]|
+ 4[1-3589]|
+ 5[1-46]|
+ 6[1-8]
+ )|
+ 6(?:
+ 19? |
+ [25]\d|
+ 3[1-469]|
+ 4[1-6]
+ )|
+ 7(?:
+ 1[1-46-9]|
+ 2[14-9]|
+ [36]\d|
+ 4[1-8]|
+ 5[1-9]|
+ 7[0-36-9]
+ )|
+ 9(?:
+ 0[12]|
+ 1[0134-8]|
+ 2[0-479]|
+ 5[125-8]|
+ 6[23679]|
+ 7[159]|
+ 8[01346]
+ )
+ )\d{5,8}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{5,10}</possibleNumberPattern>
+ <exampleNumber>612345678</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>8[1-35-9]\d{7,9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9,11}</possibleNumberPattern>
+ <exampleNumber>812345678</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>
+ 177\d{6,8}|
+ 800\d{5,7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{8,11}</possibleNumberPattern>
+ <exampleNumber>8001234567</exampleNumber>
+ </tollFree>
+ <!-- The infomation below is provided by an Indonesian -->
+ <premiumRate>
+ <nationalNumberPattern>809\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>8091234567</exampleNumber>
+ </premiumRate>
+ </territory>
+
+ <!-- Ireland -->
+ <!-- http://www.comreg.ie/_fileupload/publications/ComReg0802.pdf -->
+ <!-- http://www.comreg.ie/_fileupload/publications/ComReg0435.pdf -->
+ <!-- http://www.comreg.ie/_fileupload/publications/ComReg03147.pdf -->
+ <territory id="IE" countryCode="353" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="($NP$FG)">
+ <availableFormats>
+ <numberFormat pattern="(1)(\d{3,4})(\d{4})">
+ <leadingDigits>1</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{2})(\d{5})">
+ <leadingDigits>
+ 2[2-9]|
+ 4[347]|
+ 5[2-58]|
+ 6[2-47-9]|
+ 9[3-9]
+ </leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{5})">
+ <leadingDigits>
+ 40[24]|
+ 50[45]
+ </leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(48)(\d{4})(\d{4})">
+ <leadingDigits>48</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(818)(\d{3})(\d{3})">
+ <leadingDigits>81</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{2})(\d{3})(\d{3,4})">
+ <leadingDigits>
+ [24-69]|
+ 7[14]
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat nationalPrefixFormattingRule="$NP$FG"
+ pattern="([78]\d)(\d{3,4})(\d{4})">
+ <leadingDigits>
+ 76|
+ 8[35-9]
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat nationalPrefixFormattingRule="$NP$FG"
+ pattern="(700)(\d{3})(\d{3})">
+ <leadingDigits>70</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat nationalPrefixFormattingRule="$FG" pattern="(\d{4})(\d{3})(\d{3})">
+ <leadingDigits>
+ 1(?:
+ 8[059]|
+ 5
+ )
+ </leadingDigits>
+ <leadingDigits>
+ 1(?:
+ 8[059]0|
+ 5
+ )
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[124-9]\d{6,9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{5,10}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- We allow 6-7 digit subscriber numbers for the 021 area code since that seems to be
+ reflected by the numbers in the Yellow Pages. The 023, 043, 052 and 064 area codes also
+ may have 7 digit subscriber numbers, although limited to 5 in the plan. This was caused
+ by a numbering update in 2008 (http://www.wtng.info/wtng-353-ie.html has more details).
+ Other changes not in the plan include consolidating 0502, 0506 and 0509 into 057 and
+ 054, 055 and 053 into 053, and making 044 be followed by 7 digits in some cases.
+ Another peculiarity is that 048 actually replaces 00 44 28 when Irish people dial,
+ allowing them to easily dial Northern Ireland. We support these numbers here, although
+ technically they are numbers for the UK. -->
+ <nationalNumberPattern>
+ 1\d{7,8}|
+ 2(?:
+ 1\d{6,7}|
+ [24-9]\d{5}|
+ 3\d{5,7}
+ )|
+ 4(?:
+ 0[24]\d{5}|
+ [1269]\d{7}|
+ [34]\d{5,7}|
+ 5\d{6}|
+ 7\d{5}|
+ 8[0-46-9]\d{7}
+ )|
+ 5(?:
+ 0[45]\d{5}|
+ 1\d{6}|
+ 2\d{5,7}|
+ [3679]\d{7}|
+ 8\d{5}
+ )|
+ 6(?:
+ 1\d{6}|
+ 4\d{5,7}|
+ [237-9]\d{5}|
+ [56]\d{7}
+ )|
+ 7[14]\d{7}|
+ 9(?:
+ 1\d{6}|
+ [04]\d{7}|
+ [3-9]\d{5}
+ )
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{5,10}</possibleNumberPattern>
+ <exampleNumber>2212345</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ 8(?:
+ 22\d{6}|
+ [35-9]\d{7,8}
+ )
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{9,10}</possibleNumberPattern>
+ <exampleNumber>850123456</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>1800\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>1800123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>
+ 15(?:
+ 1[2-9]|
+ [2-8]0|
+ 59|
+ 9[089]
+ )\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>1520123456</exampleNumber>
+ </premiumRate>
+ <sharedCost>
+ <nationalNumberPattern>18[59]0\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>1850123456</exampleNumber>
+ </sharedCost>
+ <personalNumber>
+ <nationalNumberPattern>700\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>700123456</exampleNumber>
+ </personalNumber>
+ <voip>
+ <nationalNumberPattern>76\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>761234567</exampleNumber>
+ </voip>
+ <uan>
+ <nationalNumberPattern>818\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>818123456</exampleNumber>
+ </uan>
+ </territory>
+
+ <!-- Israel -->
+ <!-- http://www.itu.int/oth/T020200006A/en -->
+ <!-- http://en.wikipedia.org/wiki/%2B972 -->
+ <!-- http://www.wtng.info/wtng-972-il.html -->
+ <!-- http://www.moc.gov.il/new/documents/engineering/MISP0200.ppt (in Hebrew) -->
+ <!-- Formatting practice following wikipedia, and government sites. -->
+ <territory id="IL" countryCode="972" internationalPrefix="0(?:0|1[2-48])"
+ nationalPrefix="0" nationalPrefixFormattingRule="$FG">
+ <availableFormats>
+ <numberFormat nationalPrefixFormattingRule="$NP$FG"
+ pattern="([2-489])(\d{3})(\d{4})">
+ <leadingDigits>[2-489]</leadingDigits>
+ <format>$1-$2-$3</format>
+ </numberFormat>
+ <numberFormat nationalPrefixFormattingRule="$NP$FG"
+ pattern="([57]\d)(\d{3})(\d{4})">
+ <leadingDigits>[57]</leadingDigits>
+ <format>$1-$2-$3</format>
+ </numberFormat>
+ <numberFormat pattern="(1)([7-9]\d{2})(\d{3})(\d{3})">
+ <leadingDigits>1[7-9]</leadingDigits>
+ <format>$1-$2-$3-$4</format>
+ </numberFormat>
+ <!-- The following number is for hospitals. -->
+ <numberFormat pattern="(1255)(\d{3})">
+ <leadingDigits>125</leadingDigits>
+ <format>$1-$2</format>
+ </numberFormat>
+ <numberFormat pattern="(1200)(\d{3})(\d{3})">
+ <leadingDigits>120</leadingDigits>
+ <format>$1-$2-$3</format>
+ </numberFormat>
+ <numberFormat pattern="(1212)(\d{2})(\d{2})">
+ <leadingDigits>121</leadingDigits>
+ <format>$1-$2-$3</format>
+ </numberFormat>
+ <!-- These are 4-digit star numbers which are only accessible within Israel and must be
+ dialed with a star in front of the number. -->
+ <numberFormat pattern="(\d{4})">
+ <leadingDigits>[2-689]</leadingDigits>
+ <format>*$1</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc >
+ <nationalNumberPattern>
+ [17]\d{6,9}|
+ [2-589]\d{3}(?:\d{3,6})?|
+ 6\d{3}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{4,10}</possibleNumberPattern>
+ </generalDesc>
+ <noInternationalDialling>
+ <nationalNumberPattern>
+ 1700\d{6}|
+ [2-689]\d{3}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{4,10}</possibleNumberPattern>
+ <exampleNumber>1700123456</exampleNumber>
+ </noInternationalDialling>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ [2-489]|
+ 7[2-46-8]
+ )\d{7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7,9}</possibleNumberPattern>
+ <exampleNumber>21234567</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>5[024679]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>501234567</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>
+ 1(?:
+ 80[01]\d{3}|
+ 255
+ )\d{3}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
+ <exampleNumber>1800123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <!-- Peculiarly, one source states that 1956 and 1957 are the new premium rate prefixes.
+ However, no online numbers starting with these prefixes can be found, and this data
+ is not found in any other source. Instead, 1919 numbers are commonly used online for
+ these services, so we support them. -->
+ <!-- 1200 and 1212 numbers are for televoting. -->
+ <nationalNumberPattern>
+ 1(?:
+ 212|
+ (?:
+ 919|
+ 200
+ )\d{2}
+ )\d{4}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{8,10}</possibleNumberPattern>
+ <exampleNumber>1919123456</exampleNumber>
+ </premiumRate>
+ <sharedCost>
+ <nationalNumberPattern>
+ 1(?:
+ 700|
+ 809
+ )\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>1700123456</exampleNumber>
+ </sharedCost>
+ <voip>
+ <nationalNumberPattern>77\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>771234567</exampleNumber>
+ </voip>
+ <uan>
+ <!-- 4-digit star numbers. -->
+ <nationalNumberPattern>[2-689]\d{3}</nationalNumberPattern>
+ <possibleNumberPattern>\d{4}</possibleNumberPattern>
+ <exampleNumber>2250</exampleNumber>
+ </uan>
+ <shortCode>
+ <nationalNumberPattern>1\d{3}</nationalNumberPattern>
+ <possibleNumberPattern>\d{4}</possibleNumberPattern>
+ <exampleNumber>1455</exampleNumber>
+ </shortCode>
+ </territory>
+
+ <!-- Isle of Man -->
+ <!-- Inherits formatting rules from the UK. -->
+ <!-- http://en.wikipedia.org/wiki/Telephone_numbers_in_the_United_Kingdom -->
+ <territory id="IM" countryCode="44" internationalPrefix="00"
+ nationalPrefix="0" preferredExtnPrefix=" x" nationalPrefixFormattingRule="$NP$FG">
+ <generalDesc>
+ <nationalNumberPattern>[135789]\d{6,9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{6,10}</possibleNumberPattern>
+ </generalDesc>
+ <areaCodeOptional>
+ <nationalNumberPattern>1624[2-9]\d{5}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>1624250123</exampleNumber>
+ </areaCodeOptional>
+ <!-- Specific to IM. -->
+ <fixedLine>
+ <!-- 1624 with 10 digits. -->
+ <nationalNumberPattern>1624\d{6}</nationalNumberPattern>
+ <exampleNumber>1624456789</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- 7524, 7624, 7924 with 10 digits. -->
+ <nationalNumberPattern>7[569]24\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>7924123456</exampleNumber>
+ </mobile>
+ <tollFree>
+ <!-- 808 162 with 10 digits. -->
+ <nationalNumberPattern>808162\d{4}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>8081624567</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <!-- 872 299, 900 624, 901 624, 906 624, 907 624 with 10 digits. -->
+ <nationalNumberPattern>
+ (?:
+ 872299|
+ 90[0167]624
+ )\d{4}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>9016247890</exampleNumber>
+ </premiumRate>
+ <sharedCost>
+ <!-- 844 040 6, 844 090 6, 845 624, 870 624 with 10 digits. -->
+ <nationalNumberPattern>
+ 8(?:
+ 4(?:
+ 40[49]06|
+ 5624\d
+ )|
+ 70624\d
+ )\d{3}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>8456247890</exampleNumber>
+ </sharedCost>
+ <!-- Other numbers as per GB. -->
+ <personalNumber>
+ <nationalNumberPattern>70\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>7012345678</exampleNumber>
+ </personalNumber>
+ <voip>
+ <nationalNumberPattern>56\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>5612345678</exampleNumber>
+ </voip>
+ <uan>
+ <!-- 308 162, 33d, 344 040 6, 344 090 6, 345 624, 370 624, 372 299, 55 with 10 digits. -->
+ <nationalNumberPattern>
+ 3(?:
+ 08162\d|
+ 3\d{5}|
+ 4(?:
+ 40[49]06|
+ 5624\d
+ )|
+ 7(?:
+ 0624\d|
+ 2299\d
+ )
+ )\d{3}|
+ 55\d{8}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>5512345678</exampleNumber>
+ </uan>
+ <shortCode>
+ <nationalNumberPattern>
+ 1\d{2}(?:\d{3})?|
+ 999
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{3,6}</possibleNumberPattern>
+ <exampleNumber>150</exampleNumber>
+ </shortCode>
+ </territory>
+
+ <!-- India -->
+ <!-- http://www.itu.int/oth/T0202000063/en -->
+ <!-- http://en.wikipedia.org/wiki/%2B91 -->
+ <!-- Note that several changes in area codes have occurred since the numbering plan was released
+ - changes are notified on the www.bsnl.co.in website. Area codes can be verified here at
+ http://www.bsnl.co.in/stdsearch.php. -->
+ <territory id="IN" countryCode="91" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <!-- Mobile numbers. -->
+ <numberFormat pattern="(\d{2})(\d{2})(\d{6})">
+ <leadingDigits>
+ 7(?:
+ 2[0579]|
+ 39|
+ 4[0-389]|
+ 5[04-9]|
+ 6|
+ 7[02-9]|
+ 8[0-79]
+ )|
+ 8(?:
+ 0[01589]|
+ 1[024]|
+ 8[0479]|
+ 9[057-9]
+ )|
+ 9
+ </leadingDigits>
+ <leadingDigits>
+ 7(?:
+ 2[0579]|
+ 39|
+ 4[0-389]|
+ 5(?:
+ 0[0-5]|
+ 49|
+ 50|
+ [6-9]
+ )|
+ 6|
+ 7[02-9]|
+ 8[0-79]
+ )|
+ 8(?:
+ 0[01589]|
+ 1[024]|
+ 8(?:
+ [079]|
+ 44
+ )|
+ 9[057-9]
+ )|
+ 9
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <!-- 2 digits area code -->
+ <numberFormat pattern="(\d{2})(\d{4})(\d{4})">
+ <leadingDigits>
+ 11|
+ 2[02]|
+ 33|
+ 4[04]|
+ 79|
+ 80[2-6]
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <!-- 3 digits area code -->
+ <numberFormat pattern="(\d{3})(\d{3})(\d{4})">
+ <leadingDigits>
+ 1(?:
+ 2[0-249]|
+ 3[0-25]|
+ 4[145]|
+ [569][14]|
+ 7[1257]|
+ 8[1346]|
+ [68][1-9]
+ )
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{3})(\d{4})">
+ <leadingDigits>
+ 2(?:
+ 1[257]|
+ 3[013]|
+ 4[01]|
+ 5[0137]|
+ 6[0158]|
+ 78|
+ 8[1568]|
+ 9[14]
+ )
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{3})(\d{4})">
+ <leadingDigits>
+ 3(?:
+ 26|
+ 4[1-3]|
+ 5[34]|
+ 6[01489]|
+ 7[02-46]|
+ 8[159]
+ )
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{3})(\d{4})">
+ <leadingDigits>
+ 4(?:
+ 1[36]|
+ 2[1-47]|
+ 3[15]|
+ 5[12]|
+ 6[126-9]|
+ 7[0-24-9]|
+ 8[013-57]|
+ 9[014-7]
+ )
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{3})(\d{4})">
+ <leadingDigits>
+ 5(?:
+ [136][25]|
+ 22|
+ 4[28]|
+ 5[12]|
+ [78]1|
+ 9[15]
+ )
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{3})(\d{4})">
+ <leadingDigits>
+ 6(?:
+ 12|
+ [2345]1|
+ 57|
+ 6[13]|
+ 7[14]|
+ 80
+ )
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{3})(\d{4})">
+ <leadingDigits>
+ 7(?:
+ 12|
+ 2[14]|
+ 3[134]|
+ 4[47]|
+ 5[15]|
+ [67]1|
+ 88
+ )
+ </leadingDigits>
+ <leadingDigits>
+ 7(?:
+ 12|
+ 2[14]|
+ 3[134]|
+ 4[47]|
+ 5(?:
+ 1|
+ 5[1-9]
+ )|
+ [67]1|
+ 88
+ )
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{3})(\d{4})">
+ <leadingDigits>
+ 8(?:
+ 16|
+ 2[014]|
+ 3[126]|
+ 6[136]|
+ 7[078]|
+ 8[34]|
+ 91
+ )
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <!-- 4 digits area code -->
+ <!-- Fallback for fixed-line numbers. -->
+ <numberFormat pattern="(\d{4})(\d{3})(\d{3})">
+ <leadingDigits>
+ 1(?:
+ [2-579]|
+ [68][1-9]
+ )|
+ [2-8]
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat nationalPrefixFormattingRule="$FG"
+ pattern="(1600)(\d{2})(\d{4})">
+ <leadingDigits>160</leadingDigits>
+ <leadingDigits>1600</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat nationalPrefixFormattingRule="$FG"
+ pattern="(1800)(\d{4,5})">
+ <leadingDigits>180</leadingDigits>
+ <leadingDigits>1800</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat nationalPrefixFormattingRule="$FG"
+ pattern="(18[06]0)(\d{2,4})(\d{4})">
+ <leadingDigits>18[06]</leadingDigits>
+ <leadingDigits>18[06]0</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>
+ 1\d{7,11}|
+ [2-9]\d{9,10}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{6,12}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- This is a list of the 2 and 3 digit area codes and the first 3
+ digits of 4 digit area codes, so we can check the following digit
+ belongs to one of the operator-codes (2-6). Operator codes from
+ wikipedia, with the addition of 5 (HFCL Infotel). Area codes starting
+ with a 7 are listed separately, since the prefixes need to be more
+ detailed as they would otherwise clash with mobile phone prefixes. -->
+ <nationalNumberPattern>
+ (?:
+ 11|
+ 2[02]|
+ 33|
+ 4[04]|
+ 79|
+ 80
+ )[2-6]\d{7}|
+ (?:
+ 1(?:
+ 2[0-249]|
+ 3[0-25]|
+ 4[145]|
+ [59][14]|
+ 6[014]|
+ 7[1257]|
+ 8[01346]
+ )|
+ 2(?:
+ 1[257]|
+ 3[013]|
+ 4[01]|
+ 5[0137]|
+ 6[0158]|
+ 78|
+ 8[1568]|
+ 9[14]
+ )|
+ 3(?:
+ 26|
+ 4[1-3]|
+ 5[34]|
+ 6[01489]|
+ 7[02-46]|
+ 8[159]
+ )|
+ 4(?:
+ 1[36]|
+ 2[1-47]|
+ 3[15]|
+ 5[12]|
+ 6[126-9]|
+ 7[0-24-9]|
+ 8[013-57]|
+ 9[014-7]
+ )|
+ 5(?:
+ [136][25]|
+ 22|
+ 4[28]|
+ 5[12]|
+ [78]1|
+ 9[15]
+ )|
+ 6(?:
+ 12|
+ [2345]1|
+ 57|
+ 6[13]|
+ 7[14]|
+ 80
+ )|
+ 7(?:
+ 12|
+ 2[14]|
+ 3[134]|
+ 4[47]|
+ 5[15]|
+ [67]1|
+ 88
+ )|
+ 8(?:
+ 16|
+ 2[014]|
+ 3[126]|
+ 6[136]|
+ 7[078]|
+ 8[34]|
+ 91
+ )
+ )[2-6]\d{6}|
+ (?:
+ (?:
+ 1(?:
+ 2[35-8]|
+ 3[346-9]|
+ 4[236-9]|
+ [59][0235-9]|
+ 6[235-9]|
+ 7[34689]|
+ 8[257-9]
+ )|
+ 2(?:
+ 1[134689]|
+ 3[24-8]|
+ 4[2-8]|
+ 5[25689]|
+ 6[2-4679]|
+ 7[13-79]|
+ 8[2-479]|
+ 9[235-9]
+ )|
+ 3(?:
+ 01|
+ 1[79]|
+ 2[1-5]|
+ 4[25-8]|
+ 5[125689]|
+ 6[235-7]|
+ 7[157-9]|
+ 8[2-467]
+ )|
+ 4(?:
+ 1[14578]|
+ 2[5689]|
+ 3[2-467]|
+ 5[4-7]|
+ 6[35]|
+ 73|
+ 8[2689]|
+ 9[2389]
+ )|
+ 5(?:
+ [16][146-9]|
+ 2[14-8]|
+ 3[1346]|
+ 4[14-69]|
+ 5[46]|
+ 7[2-4]|
+ 8[2-8]|
+ 9[246]
+ )|
+ 6(?:
+ 1[1358]|
+ 2[2457]|
+ 3[2-4]|
+ 4[235-7]|
+ 5[2-689]|
+ 6[24-58]|
+ 7[23-689]|
+ 8[1-6]
+ )|
+ 8(?:
+ 1[1357-9]|
+ 2[235-8]|
+ 3[03-57-9]|
+ 4[0-24-9]|
+ 5\d|
+ 6[2457-9]|
+ 7[1-6]|
+ 8[1256]|
+ 9[2-4]
+ )
+ )\d|
+ 7(?:
+ (?:
+ 1[013-9]|
+ 2[0235-9]|
+ 3[2679]|
+ 4[1-35689]|
+ 5[2-46-9]|
+ [67][02-9]|
+ 9\d
+ )\d|
+ 8(?:
+ 2[0-6]|
+ [013-8]\d
+ )
+ )
+ )[2-6]\d{5}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{6,10}</possibleNumberPattern>
+ <exampleNumber>1123456789</exampleNumber>
+ </fixedLine>
+ <!-- http://en.wikipedia.org/wiki/Mobile_telephone_numbering_in_India -->
+ <mobile>
+ <!-- A couple of additional prefixes not found on the wikipedia page, such as 7796, are
+ added because SMS messages have been successfully sent to these numbers. It seems
+ almost impossible to know for some of these numbers whether they are land-line or
+ mobile, since the ranges overlap. -->
+ <nationalNumberPattern>
+ (?:
+ 7(?:
+ 2(?:
+ 0[04-9]|
+ 5[09]|
+ 7[568]|
+ 9[39]
+ )|
+ 3(?:
+ 07|
+ 7[3679]|
+ 9[689]
+ )|
+ 4(?:
+ 05|
+ 1[15-9]|
+ [29][89]|
+ 39|
+ 8[389]
+ )|
+ 5(?:
+ 0[0-5]|
+ [47]9|
+ 50|
+ 6[6-9]|
+ [89][7-9]
+ )|
+ 6(?:
+ 0[027]|
+ 12|
+ 20|
+ 3[19]|
+ 5[45]|
+ 6[5-9]|
+ 7[67]|
+ 9[6-9]
+ )|
+ 7(?:
+ 0[289]|
+ 3[5-9]|
+ 42|
+ 60|
+ 9[5-9]
+ )|
+ 8(?:
+ [03][07-9]|
+ 14|
+ 2[7-9]|
+ 4[25]|
+ 6[09]|
+ 7[015689]|
+ 9[0357-9]
+ )
+ )\d|
+ 9\d{4}|
+ 8(?:
+ (?:
+ 0[01589]|
+ 1[24]|
+ 2[2369]|
+ 4[023458]|
+ 52|
+ 6[0589]|
+ 7[2569]
+ )\d|
+ 8(?:
+ [079]\d|
+ 44
+ )|
+ 9[057-9]\d
+ )\d
+ )\d{5}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>9123456789</exampleNumber>
+ </mobile>
+ <tollFree>
+ <!-- Information gathered from sites such as
+ http://www.surfindia.com/india-facts/toll-free-no.html and
+ http://indmusings.blogspot.com/2008/09/free-help-line-numbersindia.html -->
+ <nationalNumberPattern>
+ 1(?:
+ 600\d{6}|
+ 800\d{4,8}
+ )
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{8,12}</possibleNumberPattern>
+ <exampleNumber>1800123456</exampleNumber>
+ </tollFree>
+ <!-- The metadata on premium rate is temporarily commented out as wikipedia says 900 is
+ mobile, conflicting with the national numbering plan. -->
+ <!--
+ <premiumRate>
+ <nationalNumberPattern>900\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>9001234567</exampleNumber>
+ </premiumRate>
+ -->
+ <uan>
+ <!-- Information gathered from sites such as http://www.calcutta.bsnl.co.in/insuan.html -->
+ <nationalNumberPattern>1860345\d{4}</nationalNumberPattern>
+ <possibleNumberPattern>\d{11}</possibleNumberPattern>
+ <exampleNumber>18603451234</exampleNumber>
+ </uan>
+ </territory>
+
+ <!-- British Indian Ocean Territory / Diego Garcia -->
+ <!-- http://www.itu.int/oth/T0202000039/en -->
+ <territory id="IO" countryCode="246" internationalPrefix="00">
+ <availableFormats>
+ <numberFormat pattern="(\d{3})(\d{4})">
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>3\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>37\d{5}</nationalNumberPattern>
+ <exampleNumber>3709100</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>38\d{5}</nationalNumberPattern>
+ <exampleNumber>3801234</exampleNumber>
+ </mobile>
+ </territory>
+
+ <!-- Iraq -->
+ <!-- http://en.wikipedia.org/wiki/%2B964 -->
+ <!-- http://wtng.info/wtng-964-ik.html -->
+ <territory id="IQ" countryCode="964" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="(1)(\d{3})(\d{4})">
+ <leadingDigits>1</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="([2-6]\d)(\d{3})(\d{3,4})">
+ <leadingDigits>[2-6]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(7[5-9]\d)(\d{3})(\d{4})">
+ <leadingDigits>7</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[1-7]\d{7,9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{6,10}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ 1\d{7}|
+ (?:
+ 2[13-5]|
+ 3[02367]|
+ 4[023]|
+ 5[03]|
+ 6[026]
+ )\d{6,7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{6,9}</possibleNumberPattern>
+ <exampleNumber>12345678</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>7[5-9]\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>7912345678</exampleNumber>
+ </mobile>
+ <!-- No tollFree or premiumRate information can be found. -->
+ </territory>
+
+ <!-- Iran, Islamic Republic of -->
+ <!-- http://en.wikipedia.org/wiki/%2B98 -->
+ <!-- http://www.itu.int/oth/T0202000066/en -->
+ <territory id="IR" countryCode="98" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <!-- Formatting follows wikipedia. -->
+ <numberFormat pattern="(21)(\d{4})(\d{4})">
+ <leadingDigits>21</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{3})(\d{4})">
+ <leadingDigits>
+ [13-89]|
+ 2[02-9]
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[2-6]\d{4,9}|[1789]\d{9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{5,10}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- The patterns here are organized such that numbers with variable lengths come first,
+ followed by numbers that are 10 digits long. -->
+ <nationalNumberPattern>
+ 2(?:
+ 1[2-9]\d{2,7}|
+ 51\d{3,7}
+ )|
+ (?:
+ 241|
+ 3(?:
+ 11|
+ 5[23]
+ )|
+ 441|
+ 5[14]1
+ )\d{4,7}|
+ (?:
+ 3(?:
+ 34|
+ 41
+ )|
+ 6(?:
+ 11|
+ 52
+ )|
+ )\d{6,7}|
+ (?:
+ 1(?:
+ [134589][12]|
+ [27][1-4]
+ )|
+ 2(?:
+ 2[189]|
+ [3689][12]|
+ 42|
+ 5[256]|
+ 7[34]
+ )|
+ 3(?:
+ 12|
+ 2[1-4]|
+ 3[125]|
+ 4[24-9]|
+ 51|
+ [6-9][12]
+ )|
+ 4(?:
+ [135-9][12]|
+ 2[1-467]|
+ 4[2-4]
+ )|
+ 5(?:
+ 12|
+ 2[89]|
+ 3[1-5]|
+ 4[2-8]|
+ [5-7][12]|
+ 8[1245]
+ )|
+ 6(?:
+ 12|
+ [347-9][12]|
+ 51|
+ 6[1-6]
+ )|
+ 7(?:
+ [13589][12]|
+ 2[1289]|
+ 4[1-4]|
+ 6[1-6]|
+ 7[1-3]
+ )|
+ 8(?:
+ [145][12]|
+ 3[124578]|
+ 6[1256]|
+ 7[1245]
+ )
+ )\d{7}
+ </nationalNumberPattern>
+ <exampleNumber>2123456789</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ 9(?:
+ 1\d|
+ 3[124-8]
+ )\d{7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>9123456789</exampleNumber>
+ </mobile>
+ <pager>
+ <nationalNumberPattern>943[24678]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>9432123456</exampleNumber>
+ </pager>
+ <!-- No tollFree or premiumRate information can be found. -->
+ <voip>
+ <!-- Includes VSAT and Boomehen Satellite numbers. -->
+ <nationalNumberPattern>993[12]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>9932123456</exampleNumber>
+ </voip>
+ <uan>
+ <!-- TCI Public Relations numbers -->
+ <nationalNumberPattern>9990\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>9990123456</exampleNumber>
+ </uan>
+ </territory>
+
+ <!-- Iceland -->
+ <!-- http://www.pta.is/default.aspx?cat_id=85 -->
+ <territory id="IS" countryCode="354" internationalPrefix="00">
+ <availableFormats>
+ <numberFormat pattern="(\d{3})(\d{4})">
+ <leadingDigits>[4-9]</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(3\d{2})(\d{3})(\d{3})">
+ <leadingDigits>3</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>
+ [4-9]\d{6}|
+ 38\d{7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7,9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- Including 87[23] XXXX here as it is listed as a fax number. -->
+ <nationalNumberPattern>
+ (?:
+ 4(?:
+ 1[0-245]|
+ 2[0-7]|
+ [37][0-8]|
+ 4[0245]|
+ 5[0-356]|
+ 6\d|
+ 8[0-46-8]|
+ 9[013-79]
+ )|
+ 5(?:
+ 05|
+ [156]\d|
+ 2[02578]|
+ 3[013-6]|
+ 4[03-6]|
+ 7[0-2578]|
+ 8[0-25-9]|
+ 9[013-689]
+ )|
+ 87[23]
+ )\d{4}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7}</possibleNumberPattern>
+ <exampleNumber>4101234</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ 38[59]\d{6}|
+ (?:
+ 6(?:
+ 1[014-8]|
+ 2[0-8]|
+ 3[0-27-9]|
+ 4[0-29]|
+ 5[029]|
+ [67][0-69]|
+ [89]\d
+ )|
+ 7(?:
+ 5[057]|
+ 7[0-7]
+ )|
+ 8(?:
+ 2[0-5]|
+ [469]\d|
+ 5[1-9]
+ )
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>6101234</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>800\d{4}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}</possibleNumberPattern>
+ <exampleNumber>8001234</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>90\d{5}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}</possibleNumberPattern>
+ <exampleNumber>9011234</exampleNumber>
+ </premiumRate>
+ <voip>
+ <nationalNumberPattern>49[013-79]\d{4}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}</possibleNumberPattern>
+ <exampleNumber>4931234</exampleNumber>
+ </voip>
+ </territory>
+
+ <!-- Italy -->
+ <!-- http://en.wikipedia.org/wiki/%2B39 -->
+ <territory id="IT" countryCode="39" internationalPrefix="00" leadingZeroPossible="true">
+ <availableFormats>
+ <!-- The leading zero for fixed numbers will be prepended before the matching of these
+ regular expressions. -->
+ <numberFormat pattern="(0[26])(\d{3,4})(\d{4})">
+ <leadingDigits>0[26]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(0[26])(\d{4})(\d{5})">
+ <leadingDigits>0[26]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(0[26])(\d{4,6})">
+ <leadingDigits>0[26]</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(0\d{2})(\d{3,4})(\d{4})">
+ <leadingDigits>0[13-57-9][0159]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(0\d{2})(\d{4,6})">
+ <leadingDigits>0[13-57-9][0159]</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(0\d{3})(\d{3})(\d{4})">
+ <leadingDigits>0[13-57-9][2-46-8]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(0\d{3})(\d{4,6})">
+ <leadingDigits>0[13-57-9][2-46-8]</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{3})(\d{3,4})">
+ <leadingDigits>
+ [13]|
+ 8(?:
+ 00|
+ 4[78]
+ )
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{3,6})">
+ <leadingDigits>
+ 8(?:
+ 03|
+ 9
+ )
+ </leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[01389]\d{5,10}</nationalNumberPattern>
+ <possibleNumberPattern>\d{6,11}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ 0(?:
+ [26]\d{4,9}|
+ [13-57-9](?:
+ [0159]\d{4,8}|
+ [2-46-8]\d{5,8}
+ )
+ )
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{6,11}</possibleNumberPattern>
+ <exampleNumber>0212345678</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>3\d{8,9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9,10}</possibleNumberPattern>
+ <exampleNumber>312345678</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>
+ 80(?:
+ 0\d{6}|
+ 3\d{3}
+ )
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{6,9}</possibleNumberPattern>
+ <exampleNumber>800123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>
+ 89(?:
+ 2\d{3}|
+ 9\d{6}
+ )
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{6,9}</possibleNumberPattern>
+ <exampleNumber>899123456</exampleNumber>
+ </premiumRate>
+ <sharedCost>
+ <nationalNumberPattern>84[78]\d{6,7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9,10}</possibleNumberPattern>
+ <exampleNumber>8481234567</exampleNumber>
+ </sharedCost>
+ <!-- The plan says these should be 6 digits long, but when you go to telephone companies in
+ Italy, such as http://www.gnetwork.it/EmailServizi/Numerazioni178/tabid/91/Default.aspx
+ and when you search for 178 numbers, they seem to all be 7 digits, so we cover both
+ lengths here. -->
+ <personalNumber>
+ <nationalNumberPattern>178\d{6,7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9,10}</possibleNumberPattern>
+ <exampleNumber>1781234567</exampleNumber>
+ </personalNumber>
+ </territory>
+
+ <!-- Jersey -->
+ <!-- Inherits formatting rules from the UK. -->
+ <!-- http://en.wikipedia.org/wiki/Telephone_numbers_in_the_United_Kingdom -->
+ <!-- http://www.jcra.je/cms3/v2/public/cmsChild.asp?pageID=1024&childID=1036 -->
+ <territory id="JE" countryCode="44" internationalPrefix="00"
+ nationalPrefix="0" preferredExtnPrefix=" x" nationalPrefixFormattingRule="$NP$FG">
+ <generalDesc>
+ <nationalNumberPattern>[135789]\d{6,9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{6,10}</possibleNumberPattern>
+ </generalDesc>
+ <areaCodeOptional>
+ <nationalNumberPattern>1534[2-9]\d{5}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>1534250123</exampleNumber>
+ </areaCodeOptional>
+ <!-- Specific to JE. -->
+ <fixedLine>
+ <!-- 1534 with 10 digits. -->
+ <nationalNumberPattern>1534\d{6}</nationalNumberPattern>
+ <exampleNumber>1534456789</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- 7509, 7700, 7797, 7829, 7937 with 10 digits. -->
+ <nationalNumberPattern>
+ 7(?:
+ 509|
+ 7(?:
+ 00|
+ 97
+ )|
+ 829|
+ 937
+ )\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>7797123456</exampleNumber>
+ </mobile>
+ <pager>
+ <!-- Pager numbers as per GB. -->
+ <nationalNumberPattern>
+ 76(?:
+ 0[012]|
+ 2[356]|
+ 4[0134]|
+ 5[49]|
+ 6[0-369]|
+ 77|
+ 81|
+ 9[39]
+ )\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>7640123456</exampleNumber>
+ </pager>
+ <!-- Specific to JE. -->
+ <tollFree>
+ <!-- 800 735, 800 781, 808 901 with 10 digits. -->
+ <nationalNumberPattern>
+ 80(?:
+ 07(?:
+ 35|
+ 81
+ )|
+ 8901
+ )\d{4}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>8007354567</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <!-- 871 206, 900 665, 900 669, 901 810, 907 107, 907 155 with 10 digits. -->
+ <nationalNumberPattern>
+ (?:
+ 871206|
+ 90(?:
+ 066[59]|
+ 1810|
+ 71(?:
+ 07|
+ 55
+ )
+ )
+ )\d{4}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>9018105678</exampleNumber>
+ </premiumRate>
+ <sharedCost>
+ <!-- 844 405, 844 442, 844 469, 844 703, 845 041, 845 800, 870 002 with 10 digits. -->
+ <nationalNumberPattern>
+ 8(?:
+ 4(?:
+ 4(?:
+ 4(?:
+ 05|
+ 42|
+ 69
+ )|
+ 703
+ )|
+ 5(?:
+ 041|
+ 800
+ )
+ )|
+ 70002
+ )\d{4}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>8447034567</exampleNumber>
+ </sharedCost>
+ <personalNumber>
+ <!-- 70 1511 with 10 digits. -->
+ <nationalNumberPattern>701511\d{4}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>7015115678</exampleNumber>
+ </personalNumber>
+ <voip>
+ <!-- VoIP numbers as per GB. -->
+ <nationalNumberPattern>56\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>5612345678</exampleNumber>
+ </voip>
+ <uan>
+ <!-- 300 735, 300 781, 308 901, 33d, 344 405, 344 442, 344 469, 344 703, 345 041, 345 800,
+ 370 002, 371 206, 55 with 10 digits. -->
+ <nationalNumberPattern>
+ 3(?:
+ 0(?:
+ 07(?:
+ 35|
+ 81
+ )|
+ 8901
+ )|
+ 3\d{4}|
+ 4(?:
+ 4(?:
+ 4(?:
+ 05|
+ 42|
+ 69
+ )|
+ 703
+ )|
+ 5(?:
+ 041|
+ 800
+ )
+ )|
+ 7(?:
+ 0002|
+ 1206
+ )
+ )\d{4}|
+ 55\d{8}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>5512345678</exampleNumber>
+ </uan>
+ <shortCode>
+ <!-- http://www.jcra.je/cms3/v2/public/cmsChild.asp?pageID=1024&childID=1036 -->
+ <nationalNumberPattern>
+ 1(?:
+ 00|
+ 1(?:
+ 2|
+ 8\d{3}
+ )|
+ 23|
+ 4(?:
+ [14]|
+ 28|
+ 7\d
+ )|
+ 5\d|
+ 7(?:
+ 0[12]|
+ [128]|
+ 35?
+ )|
+ 808|
+ 9[135]
+ )|
+ 23[234]|
+ 999
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{3,6}</possibleNumberPattern>
+ <exampleNumber>150</exampleNumber>
+ </shortCode>
+ </territory>
+
+ <!-- Jamaica -->
+ <!-- http://www.itu.int/oth/T020200006C/en -->
+ <territory id="JM" countryCode="1" leadingDigits="876"
+ nationalPrefix="1" internationalPrefix="011">
+ <generalDesc>
+ <!-- NANPA country - uses US formatting rules -->
+ <nationalNumberPattern>[589]\d{9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}(?:\d{3})?</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ 876(?:
+ (?:
+ 5[0-26]|
+ 6\d
+ )\d{5}|
+ (?:
+ 7(?:
+ 0[2-689]|
+ [1-6]\d|
+ 8[056]|
+ 9[45]
+ )|
+ 9(?:
+ 0[1-8]|
+ 1[02378]|
+ [2-8]\d|
+ 9[2-468]
+ )
+ )\d{4}
+ )
+ </nationalNumberPattern>
+ <exampleNumber>8765123456</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- Adding 27, 28 and 31 as extra prefixes, as they have been found to be valid by sending
+ SMSs and looking at online number lookup sites. -->
+ <nationalNumberPattern>
+ 876(?:
+ (?:
+ 2[178]|
+ [348]\d|
+ 5[78]
+ )\d|
+ 7(?:
+ 0[07]|
+ 7\d|
+ 8[1-47-9]|
+ 9[0-36-9]
+ )|
+ 9(?:
+ [01]9|
+ 9[0579]
+ )
+ )\d{4}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>8762101234</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>
+ 8(?:
+ 00|
+ 55|
+ 66|
+ 77|
+ 88
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>8002123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>900[2-9]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>9002123456</exampleNumber>
+ </premiumRate>
+ <personalNumber>
+ <!-- http://www.nanpa.com/pdf/PL_416.pdf -->
+ <nationalNumberPattern>
+ 5(?:
+ 00|
+ 33|
+ 44
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>5002345678</exampleNumber>
+ </personalNumber>
+ </territory>
+
+ <!-- Jordan -->
+ <!-- http://www.trc.gov.jo/images/stories/pdf/NNP_ver200[1].pdf?lang=english -->
+ <!-- http://www.itu.int/oth/T020200006E/en -->
+ <!-- http://en.wikipedia.org/wiki/%2B962 -->
+ <territory id="JO" countryCode="962" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat nationalPrefixFormattingRule="($NP$FG)"
+ pattern="(\d)(\d{3})(\d{4})">
+ <leadingDigits>
+ [2356]
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(7)(\d{2})(\d{2})(\d{2})(\d{2})">
+ <leadingDigits>7[457-9]</leadingDigits>
+ <format>$1 $2 $3 $4 $5</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{5,6})">
+ <leadingDigits>
+ 70|
+ [89]
+ </leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[235-9]\d{7,8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7,9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- Used the plan from www.trc.gov.jo since it is much more complete than the plan on the
+ ITU website. -->
+ <nationalNumberPattern>[2356][2-8]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7,8}</possibleNumberPattern>
+ <exampleNumber>62001234</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ 7(?:
+ [1-8]\d|
+ 9[02-9]
+ )\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>790123456</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>80\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>80012345</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>900\d{5}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>90012345</exampleNumber>
+ </premiumRate>
+ <sharedCost>
+ <nationalNumberPattern>85\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>85012345</exampleNumber>
+ </sharedCost>
+ <personalNumber>
+ <nationalNumberPattern>70\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>700123456</exampleNumber>
+ </personalNumber>
+ <uan>
+ <!-- These numbers are Location Independent Services / Fixed cost according to
+ http://www.trc.gov.jo -->
+ <nationalNumberPattern>
+ 8(?:
+ 10|
+ [78]\d
+ )\d{5}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>87101234</exampleNumber>
+ </uan>
+ </territory>
+
+ <!-- Japan -->
+ <!-- http://www.soumu.go.jp/main_sosiki/joho_tsusin/top/tel_number/fixed.html -->
+ <!-- http://www.numberingplans.com/?page=dialling&sub=areacodes&ac=JP -->
+ <territory id="JP" countryCode="81" internationalPrefix="010"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <!-- Toll-free numbers -->
+ <numberFormat pattern="(\d{3})(\d{3})(\d{3})">
+ <leadingDigits>
+ (?:
+ 12|
+ 99
+ )0
+ </leadingDigits>
+ <format>$1-$2-$3</format>
+ </numberFormat>
+ <!-- Some leading digits are explicitly reserved for a particular purpose.
+ We handle them first in this rule, and let the following rules ignore those exceptions.
+ Note: The rule here is not in the files we rely on when creating the other rules.
+ We would need to manually modify it if the Japanese goverment
+ decided to change the rule.
+
+ (prefix): purpose
+ "50": IP phone
+ "90" and "80": Mobile phone
+ "70": PHS (Personal Handy-phone System, which has been used in Japan
+ with Non-3G, Japanese-specific protocol).
+ See also http://ja.wikipedia.org/wiki/PHS (Japanese)
+ -->
+ <numberFormat pattern="(\d{2})(\d{4})(\d{4})">
+ <leadingDigits>[57-9]0</leadingDigits>
+ <format>$1-$2-$3</format>
+ </numberFormat>
+ <!-- The order of the reg-exps are important.
+ Examples (not all):
+ - "15": 15420 -> 154-20, 15472 -> 1547-2, 15410 -> 15-410,
+ - "22": 22200 -> 22-200, 22300 -> 22-300, 22320 -> 223-20, 22350 -> 22-350
+ - "42": 42000 -> 4-2000, 42901 -> 4-2901, 42910 -> 42-910
+ - "82": 82200 -> 82-200, 82020 -> 820-20, 82400 -> 82-400
+ - "99": 99400 -> 99-400, 99430 -> 994-30, 99692 -> 9969-2, 99750 -> 997-50
+ - "993": 99330 -> 993-30, 99331 -> 99-331, 99332 -> 993-32
+ -->
+ <numberFormat pattern="(\d{4})(\d)(\d{4})">
+ <leadingDigits>
+ 1(?:
+ 26|
+ 3[79]|
+ 4[56]|
+ 5[4-68]|
+ 6[3-5]
+ )|
+ 5(?:
+ 76|
+ 97
+ )|
+ 499|
+ 746|
+ 8(?:
+ 3[89]|
+ 63|
+ 47|
+ 51
+ )|
+ 9(?:
+ 49|
+ 80|
+ 9[16]
+ )
+ </leadingDigits>
+ <leadingDigits>
+ 1(?:
+ 267|
+ 3(?:
+ 7[247]|
+ 9[278]
+ )|
+ 4(?:
+ 5[67]|
+ 66
+ )|
+ 5(?:
+ 47|
+ 58|
+ 64|
+ 8[67]
+ )|
+ 6(?:
+ 3[245]|
+ 48|
+ 5[4-68]
+ )
+ )|
+ 5(?:
+ 76|
+ 97
+ )9|
+ 499[2468]|
+ 7468|
+ 8(?:
+ 3(?:
+ 8[78]|
+ 96
+ )|
+ 636|
+ 477|
+ 51[24]
+ )|
+ 9(?:
+ 496|
+ 802|
+ 9(?:
+ 1[23]|
+ 69
+ )
+ )
+ </leadingDigits>
+ <leadingDigits>
+ 1(?:
+ 267|
+ 3(?:
+ 7[247]|
+ 9[278]
+ )|
+ 4(?:
+ 5[67]|
+ 66
+ )|
+ 5(?:
+ 47|
+ 58|
+ 64|
+ 8[67]
+ )|
+ 6(?:
+ 3[245]|
+ 48|
+ 5[4-68]
+ )
+ )|
+ 5(?:
+ 769|
+ 979[2-69]
+ )|
+ 499[2468]|
+ 7468|
+ 8(?:
+ 3(?:
+ 8[78]|
+ 96[2457-9]
+ )|
+ 636[2-57-9]|
+ 477|
+ 51[24]
+ )|
+ 9(?:
+ 496|
+ 802|
+ 9(?:
+ 1[23]|
+ 69
+ )
+ )
+ </leadingDigits>
+ <format>$1-$2-$3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{2})(\d{4})">
+ <leadingDigits>
+ 1(?:
+ 2[3-6]|
+ 3[3-9]|
+ 4[2-6]|
+ 5[2-8]|
+ [68][2-7]|
+ 7[2-689]|
+ 9[1-578]
+ )|
+ 2(?:
+ 2[034-9]|
+ 3[3-58]|
+ 4[0-468]|
+ 5[04-8]|
+ 6[013-8]|
+ 7[06-9]|
+ 8[02-57-9]|
+ 9[13]
+ )|
+ 4(?:
+ 2[28]|
+ 3[689]|
+ 6[035-7]|
+ 7[05689]|
+ 80|
+ 9[3-5]
+ )|
+ 5(?:
+ 3[1-36-9]|
+ 4[4578]|
+ 5[013-8]|
+ 6[1-9]|
+ 7[2-8]|
+ 8[14-7]|
+ 9[4-9]
+ )|
+ 7(?:
+ 2[15]|
+ 3[5-9]|
+ 4[02-9]|
+ 6[135-8]|
+ 7[0-4689]|
+ 9[014-9]
+ )|
+ 8(?:
+ 2[49]|
+ 3[3-8]|
+ 4[5-8]|
+ 5[2-9]|
+ 6[35-9]|
+ 7[579]|
+ 8[03-579]|
+ 9[2-8]
+ )|
+ 9(?:
+ [23]0|
+ 4[02-46-9]|
+ 5[0245-79]|
+ 6[4-9]|
+ 7[2-47-9]|
+ 8[02-7]|
+ 9[3-7]
+ )
+ </leadingDigits>
+ <leadingDigits>
+ 1(?:
+ 2[3-6]|
+ 3[3-9]|
+ 4[2-6]|
+ 5(?:
+ [236-8]|
+ [45][2-69]
+ )|
+ [68][2-7]|
+ 7[2-689]|
+ 9[1-578]
+ )|
+ 2(?:
+ 2(?:
+ [04-9]|
+ 3[23]
+ )|
+ 3[3-58]|
+ 4[0-468]|
+ 5(?:
+ 5[78]|
+ 7[2-4]|
+ [0468][2-9]
+ )|
+ 6(?:
+ [0135-8]|
+ 4[2-5]
+ )|
+ 7(?:
+ [0679]|
+ 8[2-7]
+ )|
+ 8(?:
+ [024578]|
+ 3[25-9]|
+ 9[6-9]
+ )|
+ 9(?:
+ 11|
+ 3[2-4]
+ )
+ )|
+ 4(?:
+ 2(?:
+ 2[2-9]|
+ 8[237-9]
+ )|
+ 3[689]|
+ 6[035-7]|
+ 7(?:
+ [059][2-8]|
+ [68]
+ )|
+ 80|
+ 9[3-5]
+ )|
+ 5(?:
+ 3[1-36-9]|
+ 4[4578]|
+ 5[013-8]|
+ 6[1-9]|
+ 7[2-8]|
+ 8[14-7]|
+ 9(?:
+ [89][2-8]|
+ [4-7]
+ )
+ )|
+ 7(?:
+ 2[15]|
+ 3[5-9]|
+ 4[02-9]|
+ 6[135-8]|
+ 7[0-4689]|
+ 9(?:
+ [017-9]|
+ 4[6-8]|
+ 5[2-478]|
+ 6[2-589]
+ )
+ )|
+ 8(?:
+ 2(?:
+ 4[4-8]|
+ 9[2-8]
+ )|
+ 3(?:
+ 7[2-56]|
+ [3-6][2-9]|
+ 8[2-5]
+ )|
+ 4[5-8]|
+ 5[2-9]|
+ 6(?:
+ [37]|
+ 5[4-7]|
+ 6[2-9]|
+ 8[2-8]|
+ 9[236-9]
+ )|
+ 7[579]|
+ 8[03-579]|
+ 9[2-8]
+ )|
+ 9(?:
+ [23]0|
+ 4[02-46-9]|
+ 5[0245-79]|
+ 6[4-9]|
+ 7[2-47-9]|
+ 8[02-7]|
+ 9(?:
+ 3[34]|
+ [4-7]
+ )
+ )
+ </leadingDigits>
+ <leadingDigits>
+ 1(?:
+ 2[3-6]|
+ 3[3-9]|
+ 4[2-6]|
+ 5(?:
+ [236-8]|
+ [45][2-69]
+ )|
+ [68][2-7]|
+ 7[2-689]|
+ 9[1-578]
+ )|
+ 2(?:
+ 2(?:
+ [04-9]|
+ 3[23]
+ )|
+ 3[3-58]|
+ 4[0-468]|
+ 5(?:
+ 5[78]|
+ 7[2-4]|
+ [0468][2-9]
+ )|
+ 6(?:
+ [0135-8]|
+ 4[2-5]
+ )|
+ 7(?:
+ [0679]|
+ 8[2-7]
+ )|
+ 8(?:
+ [024578]|
+ 3[25-9]|
+ 9[6-9]
+ )|
+ 9(?:
+ 11|
+ 3[2-4]
+ )
+ )|
+ 4(?:
+ 2(?:
+ 2[2-9]|
+ 8[237-9]
+ )|
+ 3[689]|
+ 6[035-7]|
+ 7(?:
+ [059][2-8]|
+ [68]
+ )|
+ 80|
+ 9[3-5]
+ )|
+ 5(?:
+ 3[1-36-9]|
+ 4[4578]|
+ 5[013-8]|
+ 6[1-9]|
+ 7[2-8]|
+ 8[14-7]|
+ 9(?:
+ [89][2-8]|
+ [4-7]
+ )
+ )|
+ 7(?:
+ 2[15]|
+ 3[5-9]|
+ 4[02-9]|
+ 6[135-8]|
+ 7[0-4689]|
+ 9(?:
+ [017-9]|
+ 4[6-8]|
+ 5[2-478]|
+ 6[2-589]
+ )
+ )|
+ 8(?:
+ 2(?:
+ 4[4-8]|
+ 9(?:
+ [3578]|
+ 20|
+ 4[04-9]|
+ 6[56]
+ )
+ )|
+ 3(?:
+ 7(?:
+ [2-5]|
+ 6[0-59]
+ )|
+ [3-6][2-9]|
+ 8[2-5]
+ )|
+ 4[5-8]|
+ 5[2-9]|
+ 6(?:
+ [37]|
+ 5(?:
+ [467]|
+ 5[014-9]
+ )|
+ 6(?:
+ [2-8]|
+ 9[02-69]
+ )|
+ 8[2-8]|
+ 9(?:
+ [236-8]|
+ 9[23]
+ )
+ )|
+ 7[579]|
+ 8[03-579]|
+ 9[2-8]
+ )|
+ 9(?:
+ [23]0|
+ 4[02-46-9]|
+ 5[0245-79]|
+ 6[4-9]|
+ 7[2-47-9]|
+ 8[02-7]|
+ 9(?:
+ 3(?:
+ 3[02-9]|
+ 4[0-24689]
+ )|
+ 4[2-69]|
+ [5-7]
+ )
+ )
+ </leadingDigits>
+ <leadingDigits>
+ 1(?:
+ 2[3-6]|
+ 3[3-9]|
+ 4[2-6]|
+ 5(?:
+ [236-8]|
+ [45][2-69]
+ )|
+ [68][2-7]|
+ 7[2-689]|
+ 9[1-578]
+ )|
+ 2(?:
+ 2(?:
+ [04-9]|
+ 3[23]
+ )|
+ 3[3-58]|
+ 4[0-468]|
+ 5(?:
+ 5[78]|
+ 7[2-4]|
+ [0468][2-9]
+ )|
+ 6(?:
+ [0135-8]|
+ 4[2-5]
+ )|
+ 7(?:
+ [0679]|
+ 8[2-7]
+ )|
+ 8(?:
+ [024578]|
+ 3[25-9]|
+ 9[6-9]
+ )|
+ 9(?:
+ 11|
+ 3[2-4]
+ )
+ )|
+ 4(?:
+ 2(?:
+ 2[2-9]|
+ 8[237-9]
+ )|
+ 3[689]|
+ 6[035-7]|
+ 7(?:
+ [059][2-8]|
+ [68]
+ )|
+ 80|
+ 9[3-5]
+ )|
+ 5(?:
+ 3[1-36-9]|
+ 4[4578]|
+ 5[013-8]|
+ 6[1-9]|
+ 7[2-8]|
+ 8[14-7]|
+ 9(?:
+ [89][2-8]|
+ [4-7]
+ )
+ )|
+ 7(?:
+ 2[15]|
+ 3[5-9]|
+ 4[02-9]|
+ 6[135-8]|
+ 7[0-4689]|
+ 9(?:
+ [017-9]|
+ 4[6-8]|
+ 5[2-478]|
+ 6[2-589]
+ )
+ )|
+ 8(?:
+ 2(?:
+ 4[4-8]|
+ 9(?:
+ [3578]|
+ 20|
+ 4[04-9]|
+ 6(?:
+ 5[25]|
+ 60
+ )
+ )
+ )|
+ 3(?:
+ 7(?:
+ [2-5]|
+ 6[0-59]
+ )|
+ [3-6][2-9]|
+ 8[2-5]
+ )|
+ 4[5-8]|
+ 5[2-9]|
+ 6(?:
+ [37]|
+ 5(?:
+ [467]|
+ 5[014-9]
+ )|
+ 6(?:
+ [2-8]|
+ 9[02-69]
+ )|
+ 8[2-8]|
+ 9(?:
+ [236-8]|
+ 9[23]
+ )
+ )|
+ 7[579]|
+ 8[03-579]|
+ 9[2-8]
+ )|
+ 9(?:
+ [23]0|
+ 4[02-46-9]|
+ 5[0245-79]|
+ 6[4-9]|
+ 7[2-47-9]|
+ 8[02-7]|
+ 9(?:
+ 3(?:
+ 3[02-9]|
+ 4[0-24689]
+ )|
+ 4[2-69]|
+ [5-7]
+ )
+ )
+ </leadingDigits>
+ <format>$1-$2-$3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{2})(\d{3})(\d{4})">
+ <leadingDigits>
+ 1|
+ 2(?:
+ 23|
+ 5[5-89]|
+ 64|
+ 78|
+ 8[39]|
+ 91
+ )|
+ 4(?:
+ 2[2689]|
+ 64|
+ 7[347]
+ )|
+ 5(?:
+ [2-589]|
+ 39
+ )|
+ 60|
+ 8(?:
+ [46-9]|
+ 3[279]|
+ 2[124589]
+ )|
+ 9(?:
+ [235-8]|
+ 93
+ )
+ </leadingDigits>
+ <leadingDigits>
+ 1|
+ 2(?:
+ 23|
+ 5(?:
+ [57]|
+ [68]0|
+ 9[19]
+ )|
+ 64|
+ 78|
+ 8[39]|
+ 917
+ )|
+ 4(?:
+ 2(?:
+ [68]|
+ 20|
+ 9[178]
+ )|
+ 64|
+ 7[347]
+ )|
+ 5(?:
+ [2-589]|
+ 39[67]
+ )|
+ 60|
+ 8(?:
+ [46-9]|
+ 3[279]|
+ 2[124589]
+ )|
+ 9(?:
+ [235-8]|
+ 93[34]
+ )
+ </leadingDigits>
+ <leadingDigits>
+ 1|
+ 2(?:
+ 23|
+ 5(?:
+ [57]|
+ [68]0|
+ 9(?:
+ 17|
+ 99
+ )
+ )|
+ 64|
+ 78|
+ 8[39]|
+ 917
+ )|
+ 4(?:
+ 2(?:
+ [68]|
+ 20|
+ 9[178]
+ )|
+ 64|
+ 7[347]
+ )|
+ 5(?:
+ [2-589]|
+ 39[67]
+ )|
+ 60|
+ 8(?:
+ [46-9]|
+ 3[279]|
+ 2[124589]
+ )|
+ 9(?:
+ [235-8]|
+ 93(?:
+ 31|
+ 4
+ )
+ )
+ </leadingDigits>
+ <format>$1-$2-$3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{2})(\d{4})">
+ <leadingDigits>
+ 2(?:
+ 9[14-79]|
+ 74|
+ [34]7|
+ [56]9
+ )|
+ 82|
+ 993
+ </leadingDigits>
+ <format>$1-$2-$3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d)(\d{4})(\d{4})">
+ <leadingDigits>
+ 3|
+ 4(?:
+ 2[09]|
+ 7[01]
+ )|
+ 6[1-9]
+ </leadingDigits>
+ <format>$1-$2-$3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{2})(\d{3})(\d{4})">
+ <leadingDigits>[2479]</leadingDigits>
+ <format>$1-$2-$3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>\d{9,10}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9,10}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 1(?:
+ 1[236-8]|
+ 2[3-6]|
+ 3[3-9]|
+ 4[2-6]|
+ [58][2-8]|
+ 6[2-7]|
+ 7[2-9]|
+ 9[1-8]
+ )|
+ 2[2-9]\d|
+ [36][1-9]\d|
+ 4(?:
+ 6[0235-8]|
+ [2-578]\d|
+ 9[2-59]
+ )|
+ 5(?:
+ 6[1-9]|
+ 7[2-8]|
+ [2-589]\d
+ )|
+ 7(?:
+ 3[4-9]|
+ 4[02-9]|
+ [25-9]\d
+ )|
+ 8(?:
+ 3[2-9]|
+ 4[5-9]|
+ 5[1-9]|
+ 8[03-9]|
+ [2679]\d
+ )|
+ 9(?:
+ [679][1-9]|
+ [2-58]\d
+ )
+ )\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>312345678</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>[7-9]0\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>7012345678</exampleNumber>
+ </mobile>
+ <!-- Toll free and premium rate numbers are not clearly defined in the official Japanese
+ number plan, and do not seem to have been standardized. The information below is
+ collected from searching the web. -->
+ <tollFree>
+ <nationalNumberPattern>120\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>120123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>990\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>990123456</exampleNumber>
+ </premiumRate>
+ <!-- Uncertain on number length allowed here. -->
+ <personalNumber>
+ <nationalNumberPattern>60\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>601234567</exampleNumber>
+ </personalNumber>
+ <voip>
+ <nationalNumberPattern>50\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>5012345678</exampleNumber>
+ </voip>
+ </territory>
+
+ <!-- Kenya -->
+ <!-- http://www.cck.go.ke/licensing/numbering/plan.html -->
+ <territory id="KE" countryCode="254" internationalPrefix="000"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="(\d{2})(\d{4,7})">
+ <leadingDigits>
+ [2-6]|
+ 91
+ </leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{6,7})">
+ <leadingDigits>
+ [78]|
+ 90
+ </leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>\d{6,10}</nationalNumberPattern>
+ <possibleNumberPattern>\d{4,10}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 20|
+ 4[0-6]|
+ 5\d|
+ 6[0-24-9]
+ )\d{4,7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{4,9}</possibleNumberPattern>
+ <exampleNumber>202012345</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- Adding 716 after successful delivery of SMSs. -->
+ <nationalNumberPattern>
+ 7(?:
+ 1[0-6]|
+ 2\d|
+ 3[2-8]|
+ 5[0-2]|
+ 7[023]
+ )\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>712123456</exampleNumber>
+ </mobile>
+ <!-- There is no document that has the information on the actual length of premium rates and
+ tollfree numbers. The information below comes from research on existing numbers. -->
+ <tollFree>
+ <nationalNumberPattern>
+ 8(?:
+ 00|
+ 88
+ )\d{6,7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{9,10}</possibleNumberPattern>
+ <exampleNumber>800123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>
+ 9(?:
+ 00|
+ 1
+ )\d{6,7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{8,10}</possibleNumberPattern>
+ <exampleNumber>900123456</exampleNumber>
+ </premiumRate>
+ </territory>
+
+ <!-- Kyrgyzstan -->
+ <!-- http://www.itu.int/oth/T0202000074/en -->
+ <territory id="KG" countryCode="996" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="(\d{3})(\d{3})(\d{3})">
+ <leadingDigits>
+ 31[25]|
+ [5-8]
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{4})(\d{5})">
+ <leadingDigits>
+ 3(?:
+ 1[36]|
+ [2-9]
+ )
+ </leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[356-8]\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{5,9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 3(?:
+ 1(?:
+ 2\d|
+ 3[1-9]|
+ 52|
+ 6[1-8]
+ )|
+ 2(?:
+ 22|
+ 3[0-479]|
+ 6[0-7]
+ )|
+ 4(?:
+ 22|
+ 5[6-9]|
+ 6[0-4]
+ )|
+ 5(?:
+ 22|
+ 3[4-7]|
+ 59|
+ 6[0-5]
+ )|
+ 6(?:
+ 22|
+ 5[35-7]|
+ 6[0-3]
+ )|
+ 7(?:
+ 22|
+ 3[468]|
+ 4[1-8]|
+ 59|
+ 6\d|
+ 7[5-7]
+ )|
+ 9(?:
+ 22|
+ 4[1-7]|
+ 6[0-8]
+ )
+ )|
+ 6(?:
+ 09|
+ 12|
+ 2[2-4]
+ )\d
+ )\d{5}
+ </nationalNumberPattern>
+ <exampleNumber>312123456</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- Added 705 since SMS messages have been successfully sent to numbers with this prefix.
+ -->
+ <nationalNumberPattern>
+ 5[124-7]\d{7}|
+ 7(?:
+ 0[05]|
+ 7\d
+ )\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>700123456</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>800\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>800123456</exampleNumber>
+ </tollFree>
+ <!-- No premiumRate information can be found. -->
+ </territory>
+
+ <!-- Cambodia -->
+ <!-- http://www.itu.int/oth/T0202000023/en -->
+ <territory id="KH" countryCode="855" internationalPrefix="00[178]"
+ nationalPrefix="0">
+ <availableFormats>
+ <numberFormat nationalPrefixFormattingRule="$NP$FG"
+ pattern="(\d{2})(\d{3})(\d{3})">
+ <leadingDigits>
+ 1\d[1-9]|
+ [2-9]
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(1[89]00)(\d{3})(\d{3})">
+ <leadingDigits>1[89]0</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[1-9]\d{7,9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{6,10}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 2[3-6]|
+ 3[2-6]|
+ 4[2-4]|
+ [5-7][2-5]
+ )[2-47-9]\d{5}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{6,8}</possibleNumberPattern>
+ <exampleNumber>23456789</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- Adding 171, 13X, 80[89], 85[2-689] and 921 prefixes as SMS messages could be
+ successfully delivered to these mobile numbers. -->
+ <nationalNumberPattern>
+ (?:
+ (?:
+ 1[0-35-9]|
+ 9[1-49]
+ )[1-9]|
+ 8(?:
+ 0[89]|
+ 5[2-689]
+ )
+ )\d{5}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>91234567</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>
+ 1800(?:
+ 1\d|
+ 2[09]
+ )\d{4}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>1800123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>
+ 1900(?:
+ 1\d|
+ 2[09]
+ )\d{4}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>1900123456</exampleNumber>
+ </premiumRate>
+ </territory>
+
+ <!-- Kiribati -->
+ <!-- http://www.itu.int/oth/T0202000071/en -->
+ <territory id="KI" countryCode="686" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="(\d{5})">
+ <format>$1</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[2-689]\d{4}</nationalNumberPattern>
+ <possibleNumberPattern>\d{5}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ [234]\d|
+ 50|
+ 8[1-5]
+ )\d{3}
+ </nationalNumberPattern>
+ <exampleNumber>31234</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>[69]\d{4}</nationalNumberPattern>
+ <exampleNumber>61234</exampleNumber>
+ </mobile>
+ <shortCode>
+ <nationalNumberPattern>
+ 10(?:
+ [0-8]|
+ 5[01259]
+ )|
+ 99[234]
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{3,4}</possibleNumberPattern>
+ <exampleNumber>992</exampleNumber>
+ </shortCode>
+ </territory>
+
+ <!-- Comoros -->
+ <!-- http://www.itu.int/oth/T020200002D/en -->
+ <territory id="KM" countryCode="269" internationalPrefix="00">
+ <availableFormats>
+ <numberFormat pattern="(\d)(\d{3})(\d{3})">
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[37]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- CDMA phones are included here, as they are considered as an extension of fixed line:
+ http://www.comorestelecom.km/presentationcdma.php -->
+ <nationalNumberPattern>
+ 7(?:
+ 6[0-37-9]|
+ 7[0-57-9]
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>7712345</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>3[23]\d{5}</nationalNumberPattern>
+ <exampleNumber>3212345</exampleNumber>
+ </mobile>
+ </territory>
+
+ <!-- Saint Kitts and Nevis -->
+ <!-- http://www.itu.int/oth/T02020000B0/en -->
+ <territory id="KN" countryCode="1" leadingDigits="869"
+ nationalPrefix="1" internationalPrefix="011">
+ <generalDesc>
+ <!-- NANPA country - uses US formatting rules -->
+ <nationalNumberPattern>[589]\d{9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}(?:\d{3})?</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ 869(?:
+ 2(?:
+ 29|
+ 36
+ )|
+ 4(?:
+ 6[5-9]|
+ 70
+ )
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>8692361234</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ 869(?:
+ 5(?:
+ 5[6-8]|
+ 6[5-7]
+ )|
+ 66[2-9]|
+ 76[2-5]
+ )\d{4}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>8695561234</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>
+ 8(?:
+ 00|
+ 55|
+ 66|
+ 77|
+ 88
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>8002123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>900[2-9]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>9002123456</exampleNumber>
+ </premiumRate>
+ <personalNumber>
+ <!-- http://www.nanpa.com/pdf/PL_416.pdf -->
+ <nationalNumberPattern>
+ 5(?:
+ 00|
+ 33|
+ 44
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>5002345678</exampleNumber>
+ </personalNumber>
+ </territory>
+
+ <!-- Korea, Dem. People's Rep. of -->
+ <territory id="KP" countryCode="850" internationalPrefix="00"
+ nationalPrefix="0">
+ </territory>
+
+ <!-- Korea (Rep. of) -->
+ <!-- http://www.itu.int/oth/T0202000072/en -->
+ <!-- http://en.wikipedia.org/wiki/%2B82 -->
+ <!-- http://www.kcc.go.kr/user.do?mode=view&page=P02030300&dc=K02030300&boardId=1074&boardSeq=2349 -->
+ <!-- http://www.kcc.go.kr/user.do?mode=view&page=P02030300&dc=K02030300&boardId=1074&boardSeq=2240 -->
+ <!-- http://www.telecentro.co.kr/sub/index.php?job=detail&ebcf_id=faq&page=1&mid=0503&eb_seq=36 -->
+ <!-- Exceptions :
+ internationalPrefix
+ 0031, 0033, 0071, 0073 - Special services of KT and DACOM, ignorable
+ nationalPrefix
+ 1[4-6]XX-YYYY - Country-wide common number services, display as it is without hyphens -->
+ <territory id="KR" countryCode="82" internationalPrefix="00(?:[124-68]|[37]\d{2})"
+ nationalPrefix="0" nationalPrefixForParsing="0(8[1-46-8]|85\d{2})?"
+ nationalPrefixFormattingRule="$NP$FG" carrierCodeFormattingRule="$NP$CC-$FG">
+ <availableFormats>
+ <numberFormat pattern="(\d{2})(\d{4})(\d{4})">
+ <leadingDigits>
+ 1(?:
+ 0|
+ 1[19]|
+ [69]9|
+ 5[458]
+ )|
+ [57]0
+ </leadingDigits>
+ <leadingDigits>
+ 1(?:
+ 0|
+ 1[19]|
+ [69]9|
+ 5(?:
+ 44|
+ 59|
+ 8
+ )
+ )|
+ [57]0
+ </leadingDigits>
+ <format>$1-$2-$3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{2})(\d{3})(\d{4})">
+ <leadingDigits>
+ 1(?:
+ [169][2-8]|
+ [78]|
+ 5[1-4]
+ )|
+ [68]0|
+ [3-9][1-9][2-9]
+ </leadingDigits>
+ <leadingDigits>
+ 1(?:
+ [169][2-8]|
+ [78]|
+ 5(?:
+ [1-3]|
+ 4[56]
+ )
+ )|
+ [68]0|
+ [3-9][1-9][2-9]
+ </leadingDigits>
+ <format>$1-$2-$3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d)(\d{4})">
+ <leadingDigits>131</leadingDigits>
+ <leadingDigits>1312</leadingDigits>
+ <format>$1-$2-$3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{2})(\d{4})">
+ <leadingDigits>131</leadingDigits>
+ <leadingDigits>131[13-9]</leadingDigits>
+ <format>$1-$2-$3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{3})(\d{4})">
+ <leadingDigits>13[2-9]</leadingDigits>
+ <format>$1-$2-$3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{2})(\d{2})(\d{3})(\d{4})">
+ <leadingDigits>30</leadingDigits>
+ <format>$1-$2-$3-$4</format>
+ </numberFormat>
+ <numberFormat pattern="(\d)(\d{4})(\d{4})">
+ <leadingDigits>
+ 2(?:
+ [26]|
+ 3[0-467]
+ )
+ </leadingDigits>
+ <leadingDigits>
+ 2(?:
+ [26]|
+ 3(?:
+ 01|
+ 1[45]|
+ 2[17-9]|
+ 39|
+ 4|
+ 6[67]|
+ 7[078]
+ )
+ )
+ </leadingDigits>
+ <format>$1-$2-$3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d)(\d{3})(\d{4})">
+ <leadingDigits>
+ 2(?:
+ 3[0-35-9]|
+ [457-9]
+ )
+ </leadingDigits>
+ <leadingDigits>
+ 2(?:
+ 3(?:
+ 0[02-9]|
+ 1[0-36-9]|
+ 2[02-6]|
+ 3[0-8]|
+ 6[0-589]|
+ 7[1-69]|
+ [589]
+ )|
+ [457-9]
+ )
+ </leadingDigits>
+ <format>$1-$2-$3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d)(\d{3,4})">
+ <leadingDigits>21[0-46-9]</leadingDigits>
+ <format>$1-$2</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{2})(\d{3,4})">
+ <leadingDigits>[3-9][1-9]1</leadingDigits>
+ <leadingDigits>
+ [3-9][1-9]1(?:
+ [0-46-9]
+ )
+ </leadingDigits>
+ <format>$1-$2</format>
+ </numberFormat>
+ <!-- Company numbers. -->
+ <numberFormat pattern="(\d{4})(\d{4})"
+ nationalPrefixFormattingRule="$FG">
+ <leadingDigits>
+ 1(?:
+ 5[46-9]|
+ 6[04678]
+ )
+ </leadingDigits>
+ <leadingDigits>
+ 1(?:
+ 5(?:
+ 44|
+ 66|
+ 77|
+ 88|
+ 99
+ )|
+ 6(?:
+ 00|
+ 44|
+ 6[16]|
+ 70|
+ 88
+ )
+ )
+ </leadingDigits>
+ <format>$1-$2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>
+ [1-79]\d{3,9}|
+ 8\d{8}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{4,10}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 2|
+ [34][1-3]|
+ 5[1-5]|
+ 6[1-4]
+ )(?:
+ 1\d{2,3}|
+ [2-9]\d{6,7}
+ )
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{4,10}</possibleNumberPattern>
+ <exampleNumber>22123456</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>1[0-25-9]\d{7,8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9,10}</possibleNumberPattern>
+ <exampleNumber>1023456789</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>80\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>801234567</exampleNumber>
+ </tollFree>
+ <!-- The information below is provided by a Korean person. -->
+ <premiumRate>
+ <nationalNumberPattern>60[2-9]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>602345678</exampleNumber>
+ </premiumRate>
+ <personalNumber>
+ <nationalNumberPattern>50\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>5012345678</exampleNumber>
+ </personalNumber>
+ <voip>
+ <nationalNumberPattern>70\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>7012345678</exampleNumber>
+ </voip>
+ <uan>
+ <nationalNumberPattern>
+ 1(?:
+ 5(?:
+ 44|
+ 66|
+ 77|
+ 88|
+ 99
+ )|
+ 6(?:
+ 00|
+ 44|
+ 6[16]|
+ 70|
+ 88
+ )
+ )\d{4}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>15441234</exampleNumber>
+ </uan>
+ </territory>
+
+ <!-- Kuwait -->
+ <!-- http://www.itu.int/oth/T0202000073/en -->
+ <territory id="KW" countryCode="965" internationalPrefix="00"
+ nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <!-- Format is from ITU. -->
+ <numberFormat pattern="(\d{4})(\d{3,4})">
+ <leadingDigits>[1269]</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(5[05]\d)(\d{5})">
+ <leadingDigits>5</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[12569]\d{6,7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7,8}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 18\d|
+ 2(?:
+ [23]\d{2}|
+ 4[1-35-9]\d|
+ 5(?:
+ 0[034]|
+ [2-46]\d|
+ 5[1-3]|
+ 7[1-7]
+ )
+ )
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>22345678</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ (?:
+ 5(?:
+ 0[0-2]|
+ 5\d
+ )|
+ 6(?:
+ 0[034679]|
+ 5[015-9]|
+ 6\d|
+ 7[067]|
+ 99
+ )|
+ 9(?:
+ 0[09]|
+ 4[049]|
+ 66|
+ [79]\d
+ )
+ )\d{5}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>50012345</exampleNumber>
+ </mobile>
+ <!-- No tollFree or premiumRate information can be found. -->
+ <shortCode>
+ <nationalNumberPattern>1\d{2}</nationalNumberPattern>
+ <possibleNumberPattern>\d{3}</possibleNumberPattern>
+ <exampleNumber>177</exampleNumber>
+ </shortCode>
+ </territory>
+
+ <!-- Cayman Islands -->
+ <!-- http://www.itu.int/oth/T0202000027/en -->
+ <territory id="KY" countryCode="1" leadingDigits="345"
+ nationalPrefix="1" internationalPrefix="011">
+ <generalDesc>
+ <!-- NANPA country - uses US formatting rules -->
+ <nationalNumberPattern>[3589]\d{9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}(?:\d{3})?</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ 345(?:
+ 2(?:
+ 22|
+ 44
+ )|
+ 444|
+ 6(?:
+ 23|
+ 38|
+ 40
+ )|
+ 7(?:
+ 6[6-9]|
+ 77
+ )|
+ 8(?:
+ 00|
+ 1[45]|
+ 25|
+ 4[89]|
+ 88
+ )|
+ 9(?:
+ 14|
+ 4[035-9]
+ )
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>3452221234</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ 345(?:
+ 32[3-79]|
+ 5(?:
+ 1[467]|
+ 2[5-7]|
+ 4[5-9]
+ )|
+ 9(?:
+ 1[679]|
+ 2[4-9]|
+ 3[89]
+ )
+ )\d{4}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>3453231234</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>
+ 8(?:
+ 00|
+ 55|
+ 66|
+ 77|
+ 88
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>8002345678</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>
+ 900[2-9]\d{6}|
+ 345976\d{4}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>9002345678</exampleNumber>
+ </premiumRate>
+ <personalNumber>
+ <!-- http://www.nanpa.com/pdf/PL_416.pdf -->
+ <nationalNumberPattern>
+ 5(?:
+ 00|
+ 33|
+ 44
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>5002345678</exampleNumber>
+ </personalNumber>
+ </territory>
+
+ <!-- Kazakhstan -->
+ <!-- http://www.itu.int/oth/T020200006F/en -->
+ <territory id="KZ" countryCode="7" internationalPrefix="8~10"
+ nationalPrefix="8" nationalPrefixFormattingRule="$NP$FG">
+ <!-- Formatting rules obtained from Russia. -->
+ <generalDesc>
+ <nationalNumberPattern>
+ (?:
+ 7\d{2}|
+ 80[09]
+ )\d{7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ </generalDesc>
+ <noInternationalDialling>
+ <nationalNumberPattern>751\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>7511234567</exampleNumber>
+ </noInternationalDialling>
+ <fixedLine>
+ <!-- VSAT numbers are also included here. -->
+ <nationalNumberPattern>
+ 7(?:
+ 1(?:
+ 0(?:
+ [23]\d|
+ 4[023]|
+ 59|
+ 63
+ )|
+ 1(?:
+ [23]\d|
+ 4[0-79]|
+ 59
+ )|
+ 2(?:
+ [23]\d|
+ 59
+ )|
+ 3(?:
+ 2\d|
+ 3[1-79]|
+ 4[0-35-9]|
+ 59
+ )|
+ 4(?:
+ 2\d|
+ 3[013-79]|
+ 4[0-8]|
+ 5[1-79]
+ )|
+ 5(?:
+ 2\d|
+ 3[1-8]|
+ 4[1-7]|
+ 59
+ )|
+ 6(?:
+ 2\d|
+ [34]\d|
+ 5[19]|
+ 61
+ )|
+ 72\d|
+ 8(?:
+ [27]\d|
+ 3[1-46-9]|
+ 4[0-5]|
+ )
+ )|
+ 2(?:
+ 1(?:
+ [23]\d|
+ 4[46-9]|
+ 5[3469]
+ )|
+ 2(?:
+ 2\d|
+ 3[0679]|
+ 46|
+ 5[12679]|
+ )|
+ 3(?:
+ [234]\d|
+ 5[139]|
+ )|
+ 4(?:
+ 2\d|
+ 3[1235-9]|
+ 59
+ )|
+ 5(?:
+ [23]\d|
+ 4[01246-8]|
+ 59|
+ 61
+ )|
+ 6(?:
+ 2\d|
+ 3[1-9]|
+ 4[0-4]|
+ 59
+ )|
+ 7(?:
+ [23]\d|
+ 40|
+ 5[279]|
+ 7\d
+ )|
+ 8(?:
+ [23]\d|
+ 4[0-3]|
+ 59
+ )|
+ 9(?:
+ 2\d|
+ 3[124578]|
+ 59
+ )
+ )|
+ 3622
+ )\d{5}
+ </nationalNumberPattern>
+ <exampleNumber>7123456789</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ 7(?:
+ 0[01257]\d{2}|
+ 6[02-4]\d{2}|
+ 7[157]\d{2}
+ )\d{5}
+ </nationalNumberPattern>
+ <exampleNumber>7710009998</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>800\d{7}</nationalNumberPattern>
+ <exampleNumber>8001234567</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>809\d{7}</nationalNumberPattern>
+ <exampleNumber>8091234567</exampleNumber>
+ </premiumRate>
+ <voip>
+ <nationalNumberPattern>751\d{7}</nationalNumberPattern>
+ <exampleNumber>7511234567</exampleNumber>
+ </voip>
+ </territory>
+
+ <!-- Lao People's Dem. Rep. -->
+ <!-- http://www.itu.int/oth/T0202000075/en -->
+ <territory id="LA" countryCode="856" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="(20)(\d{2})(\d{3})(\d{3})">
+ <leadingDigits>20</leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ <numberFormat pattern="([2-57]\d)(\d{3})(\d{3})">
+ <leadingDigits>
+ 21|
+ [3-57]
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[2-57]\d{7,9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{6,10}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ [2-57]1|
+ 54
+ )\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{6,8}</possibleNumberPattern>
+ <exampleNumber>21212862</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ 20(?:
+ 2[23]|
+ 5[4-6]|
+ 77|
+ 9[89]
+ )\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>2023123456</exampleNumber>
+ </mobile>
+ <!-- No information on other types of phone numbers for Lao P.D.R. has been found. -->
+ </territory>
+
+ <!-- Lebanon -->
+ <!-- http://www.itu.int/oth/T0202000077/en -->
+ <!-- http://en.wikipedia.org/wiki/%2B961 -->
+ <territory id="LB" countryCode="961" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="(\d)(\d{3})(\d{3})">
+ <leadingDigits>
+ [13-6]|
+ 7(?:
+ [2-57-9]|
+ 62)|
+ [89][2-9]
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="([7-9]\d)(\d{3})(\d{3})">
+ <leadingDigits>
+ [89][01]|
+ 7(?:
+ [01]|
+ 6[67])
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[13-9]\d{6,7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7,8}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ [14-6]\d{2}|
+ 7(?:
+ [2-57-9]\d|
+ 62)|
+ [89][2-9]\d
+ )\d{4}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7}</possibleNumberPattern>
+ <exampleNumber>1123456</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ (?:
+ 3\d|
+ 7(?:
+ [01]\d|
+ 6[67]
+ )
+ )\d{5}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7,8}</possibleNumberPattern>
+ <exampleNumber>71123456</exampleNumber>
+ </mobile>
+ <premiumRate>
+ <nationalNumberPattern>9[01]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>90123456</exampleNumber>
+ </premiumRate>
+ <sharedCost>
+ <nationalNumberPattern>8[01]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>80123456</exampleNumber>
+ </sharedCost>
+ </territory>
+
+ <!-- Saint Lucia -->
+ <!-- http://www.itu.int/oth/T02020000B1/en -->
+ <territory id="LC" countryCode="1" leadingDigits="758"
+ nationalPrefix="1" internationalPrefix="011">
+ <generalDesc>
+ <!-- NANPA country - uses US formatting rules -->
+ <nationalNumberPattern>[5789]\d{9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}(?:\d{3})?</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ 758(?:
+ 234|
+ 4(?:
+ 5[0-9]|
+ 6[2-9]|
+ 8[0-2]
+ )|
+ 638|
+ 758
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>7582345678</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- Adding 721 and 722 as these prefixes are found widely on the internet and SMS messages
+ have been successfully delivered to these numbers. -->
+ <nationalNumberPattern>
+ 758(?:
+ 28[4-7]|
+ 384|
+ 4(?:
+ 6[01]|
+ 8[4-9]
+ )|
+ 5(?:
+ 1[89]|
+ 20|
+ 84
+ )|
+ 7(?:
+ 1[2-9]|
+ 2[0-4]
+ )
+ )\d{4}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>7582845678</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>
+ 8(?:
+ 00|
+ 55|
+ 66|
+ 77|
+ 88
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>8002123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>900[2-9]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>9002123456</exampleNumber>
+ </premiumRate>
+ <personalNumber>
+ <!-- http://www.nanpa.com/pdf/PL_416.pdf -->
+ <nationalNumberPattern>
+ 5(?:
+ 00|
+ 33|
+ 44
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>5002345678</exampleNumber>
+ </personalNumber>
+ </territory>
+
+ <!-- Liechtenstein -->
+ <!-- http://www.llv.li/amtsstellen/llv-ak-nummerierung.htm -->
+ <!-- http://www.telecom.li has some different patterns for tollfree and shared cost numbers -
+ look at "Mehrwertnummer". -->
+ <territory id="LI" countryCode="423" internationalPrefix="00">
+ <availableFormats>
+ <numberFormat pattern="(\d{3})(\d{2})(\d{2})">
+ <leadingDigits>
+ [23]|
+ 7[4-9]|
+ 87
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(6\d)(\d{3})(\d{3})">
+ <leadingDigits>6</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="([7-9]0\d)(\d{2})(\d{2})">
+ <leadingDigits>[7-9]0</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <!-- 0800 and 0900 are valid prefixes, but Liechtenstein
+ doesn't have a general national prefix, so we include it manually here
+ when formatting. We can tell whether it needs one by number length. -->
+ <numberFormat pattern="([89]0\d)(\d{2})(\d{2})(\d{2})">
+ <leadingDigits>[89]0</leadingDigits>
+ <format>0$1 $2 $3 $4</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>
+ (?:
+ 66|
+ 80|
+ 90
+ )\d{7}|
+ [237-9]\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7,9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- Regular Cost services are included here as well. -->
+ <nationalNumberPattern>
+ (?:
+ 2(?:
+ 17|
+ 3\d|
+ 6[02-58]|
+ 96
+ )|
+ 3(?:
+ 02|
+ 7[01357]|
+ 8[048]|
+ 9[0269]
+ )|
+ 870
+ )\d{4}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7}</possibleNumberPattern>
+ <exampleNumber>2345678</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ 66(?:
+ [0178][0-4]|
+ 2[025-9]|
+ [36]\d|
+ 4[129]|
+ 5[45]|
+ 9[019]
+ )\d{5}|
+ 7(?:
+ 4[2-59]|
+ 56|
+ [6-9]\d
+ )\d{4}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7,9}</possibleNumberPattern>
+ <exampleNumber>661234567</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>
+ 80(?:
+ 0(?:
+ 07|
+ 2[238]|
+ 79|
+ \d{4}
+ )|
+ 9\d{2}
+ )\d{2}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7,9}</possibleNumberPattern>
+ <exampleNumber>8002222</exampleNumber>
+ </tollFree>
+ <sharedCost>
+ <nationalNumberPattern>
+ 90(?:
+ 0(?:
+ 2[278]|
+ 79|
+ \d{4}
+ )|
+ 1(?:
+ 23|
+ \d{4}
+ )|
+ 6(?:
+ 66|
+ \d{4}
+ )
+ )\d{2}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7,9}</possibleNumberPattern>
+ <exampleNumber>9002222</exampleNumber>
+ </sharedCost>
+ <personalNumber>
+ <nationalNumberPattern>701\d{4}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}</possibleNumberPattern>
+ <exampleNumber>7011234</exampleNumber>
+ </personalNumber>
+ </territory>
+
+ <!-- Sri Lanka -->
+ <!-- http://en.wikipedia.org/wiki/%2B94 -->
+ <!-- http://www.itu.int/oth/T02020000C3/en -->
+ <territory id="LK" countryCode="94" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="(\d{2})(\d{1})(\d{6})">
+ <leadingDigits>[1-689]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{2})(\d{3})(\d{4})">
+ <leadingDigits>7</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[1-9]\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7,9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ [189]1|
+ 2[13-7]|
+ 3[1-8]|
+ 4[157]|
+ 5[12457]|
+ 6[35-7]
+ )[2-57]\d{6}
+ </nationalNumberPattern>
+ <exampleNumber>112345678</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>7[12578]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>712345678</exampleNumber>
+ </mobile>
+ </territory>
+
+ <!-- Liberia -->
+ <!-- http://www.itu.int/oth/T0202000079/en -->
+ <territory id="LR" countryCode="231" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <!-- Formatting from Ministry of Agriculture,
+ http://www.moa.gov.lr/content.php?sub=Email&?related=Contacts -->
+ <numberFormat pattern="([279]\d)(\d{3})(\d{3})">
+ <leadingDigits>[279]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="([4-6])(\d{3})(\d{3})">
+ <leadingDigits>[4-6]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>
+ (?:
+ [279]\d|
+ [4-6]
+ )\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7,8}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>2\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>21234567</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- Added 66, 67 and 68 as prefixes because of online numbers fitting this pattern. -->
+ <nationalNumberPattern>
+ (?:
+ 4[67]|
+ 5\d|
+ 6[4-8]|
+ 7\d{2}
+ )\d{5}
+ </nationalNumberPattern>
+ <exampleNumber>4612345</exampleNumber>
+ </mobile>
+ <premiumRate>
+ <!-- Telemedia service is listed under premium rate. -->
+ <nationalNumberPattern>90\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>90123456</exampleNumber>
+ </premiumRate>
+ </territory>
+
+ <!-- Lesotho -->
+ <!-- http://www.itu.int/oth/T0202000078/en -->
+ <territory id="LS" countryCode="266" internationalPrefix="00">
+ <availableFormats>
+ <!-- Formatting following yellow pages: www.yellowpages.co.ls -->
+ <numberFormat pattern="(\d{4})(\d{4})">
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[2568]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>2\d{7}</nationalNumberPattern>
+ <exampleNumber>22123456</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>[56]\d{7}</nationalNumberPattern>
+ <exampleNumber>50123456</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>800[256]\d{4}</nationalNumberPattern>
+ <exampleNumber>80021234</exampleNumber>
+ </tollFree>
+ </territory>
+
+ <!-- Lithuania -->
+ <!-- http://www.itu.int/oth/T020200007C/en -->
+ <territory id="LT" countryCode="370" internationalPrefix="00"
+ nationalPrefix="8" nationalPrefixFormattingRule="$NP $FG">
+ <availableFormats>
+ <!-- Two-digit area codes -->
+ <numberFormat pattern="([34]\d)(\d{2})(\d{2})(\d{2})">
+ <leadingDigits>
+ 37|
+ 4(?:
+ 1|
+ 5[45]|
+ 6[2-4]
+ )
+ </leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ <!-- Three-digit area codes -->
+ <numberFormat pattern="([3-689]\d{2})(\d{2})(\d{3})">
+ <leadingDigits>
+ 3[148]|
+ 4(?:
+ [24]|
+ 6[09]
+ )|
+ 5(?:
+ [0189]|
+ 28
+ )|
+ [689]
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(5)(2[0-79]\d)(\d{4})">
+ <leadingDigits>52[0-79]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[3-9]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 3[1478]|
+ 4[124-6]|
+ 52
+ )\d{6}
+ </nationalNumberPattern>
+ <exampleNumber>31234567</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>6\d{7}</nationalNumberPattern>
+ <exampleNumber>61234567</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>800\d{5}</nationalNumberPattern>
+ <exampleNumber>80012345</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>90[0239]\d{5}</nationalNumberPattern>
+ <exampleNumber>90012345</exampleNumber>
+ </premiumRate>
+ </territory>
+
+ <!-- Luxembourg -->
+ <!-- http://www.ilr.public.lu/communications_electroniques/numerotation/index.html
+ -->
+ <territory id="LU" countryCode="352" internationalPrefix="00"
+ nationalPrefixForParsing="(15(?:0[06]|1[12]|35|4[04]|55|6[26]|77|88|99)\d)"
+ carrierCodeFormattingRule="$CC $FG">
+ <availableFormats>
+ <!-- Patterns overlap because of variable number length. -->
+ <numberFormat pattern="(\d{2})(\d{3})">
+ <leadingDigits>
+ [23-5]|
+ 7[1-9]|
+ [89](?:
+ [1-9]|
+ 0[2-9]
+ )
+ </leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{2})(\d{2})(\d{2})">
+ <leadingDigits>
+ [23-5]|
+ 7[1-9]|
+ [89](?:
+ [1-9]|
+ 0[2-9]
+ )
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{2})(\d{2})(\d{3})">
+ <leadingDigits>20</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <!-- The pattern for 7-digit numbers starting with 20 here will never be reached - but since
+ we want this pattern to apply for 8-digit numbers with a 20 prefix, we include 20 in
+ the leading digits. This is also done for 9-10 digit numbers starting with 20 below.
+ -->
+ <numberFormat pattern="(\d{2})(\d{2})(\d{2})(\d{1,2})">
+ <leadingDigits>
+ 2(?:
+ [0367]|
+ 4[3-8]
+ )
+ </leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{2})(\d{2})(\d{2})(\d{3})">
+ <leadingDigits>20</leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{2})(\d{2})(\d{2})(\d{2})(\d{1,2})">
+ <leadingDigits>
+ 2(?:
+ [0367]|
+ 4[3-8]
+ )
+ </leadingDigits>
+ <format>$1 $2 $3 $4 $5</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{2})(\d{2})(\d{2})(\d{1,4})">
+ <leadingDigits>
+ 2(?:
+ [12589]|
+ 4[12]
+ )|
+ [3-5]|
+ 7[1-9]|
+ [89](?:
+ [1-9]|
+ 0[2-9]
+ )
+ </leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{2})(\d{3})">
+ <leadingDigits>
+ [89]0[01]|
+ 70
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{3})(\d{3})">
+ <leadingDigits>6</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <!-- The country-code is an impossible number prefix, so has been excluded here. This is
+ necessary since the numbers have a variable number length. -->
+ <nationalNumberPattern>
+ [24-9]\d{3,10}|
+ 3(?:
+ [0-46-9]\d{2,9}|
+ 5[013-9]\d{1,8}
+ )
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{4,11}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- Note that numbers starting with 2[367] can be a maximum of 10 digits - all others a
+ maximum of 11. -->
+ <nationalNumberPattern>
+ (?:
+ 2(?:
+ 2\d{1,2}|
+ 3[2-9]|
+ [67]\d|
+ 4[1-8]\d?|
+ 5[1-5]\d?|
+ 9[0-24-9]\d?
+ )|
+ 3(?:
+ [059][05-9]|
+ [13]\d|
+ [26][015-9]|
+ 4[0-26-9]|
+ 7[0-389]|
+ 8[08]
+ )\d?|
+ 4\d{2,3}|
+ 5(?:
+ [01458]\d|
+ [27][0-69]|
+ 3[0-3]|
+ [69][0-7]
+ )\d?|
+ 7(?:
+ 1[019]|
+ 2[05-9]|
+ 3[05]|
+ [45][07-9]|
+ [679][089]|
+ 8[06-9]
+ )\d?|
+ 8(?:
+ 0[2-9]|
+ 1[0-36-9]|
+ 3[3-9]|
+ [469]9|
+ [58][7-9]|
+ 7[89]
+ )\d?|
+ 9(?:
+ 0[89]|
+ 2[0-49]|
+ 37|
+ 49|
+ 5[0-27-9]|
+ 7[7-9]|
+ 9[0-478]
+ )\d?
+ )\d{1,7}
+ </nationalNumberPattern>
+ <exampleNumber>27123456</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>6[269][18]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>628123456</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>800\d{5}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>80012345</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>90[01]\d{5}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>90012345</exampleNumber>
+ </premiumRate>
+ <sharedCost>
+ <nationalNumberPattern>801\d{5}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>80112345</exampleNumber>
+ </sharedCost>
+ <personalNumber>
+ <nationalNumberPattern>70\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>70123456</exampleNumber>
+ </personalNumber>
+ <voip>
+ <nationalNumberPattern>20\d{2,8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{4,10}</possibleNumberPattern>
+ <exampleNumber>2012345</exampleNumber>
+ </voip>
+ <shortCode>
+ <nationalNumberPattern>
+ 1(?:
+ 1[23]|
+ 2\d{3}
+ )
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{3,5}</possibleNumberPattern>
+ <exampleNumber>12123</exampleNumber>
+ </shortCode>
+ </territory>
+
+ <!-- Latvia -->
+ <!-- http://www.itu.int/oth/T0202000076/en -->
+ <territory id="LV" countryCode="371" internationalPrefix="00">
+ <availableFormats>
+ <numberFormat pattern="([2689]\d)(\d{3})(\d{3})">
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[2689]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>6\d{7}</nationalNumberPattern>
+ <exampleNumber>61234567</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>2\d{7}</nationalNumberPattern>
+ <exampleNumber>21234567</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>80\d{6}</nationalNumberPattern>
+ <exampleNumber>80123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>90\d{6}</nationalNumberPattern>
+ <exampleNumber>90123456</exampleNumber>
+ </premiumRate>
+ </territory>
+
+ <!-- Libya (Soc. People’s Libyan Arab Jamahiriya) -->
+ <!-- Status as of 21 Jan 2011: a lot of outdated information on the web including on wikipedia
+ and itu.int. The new area codes are on the Arabic website of the main telecommunication
+ operator (Hatef Libya). A new mobile operator Aljeel Aljadeed for Technology will start
+ using 096 (they are allowing customers to register numbers currently), so their code has
+ also been added. -->
+ <!-- http://hlc.ly/price.php -->
+ <territory id="LY" countryCode="218" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="([25679]\d)(\d{7})">
+ <format>$1-$2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[25679]\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7,9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 2[1345]|
+ 5[1347]|
+ 6[123479]|
+ 71
+ )\d{7}
+ </nationalNumberPattern>
+ <exampleNumber>212345678</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- The prefix 094 has been added on the strength of numbers found online, and numbers
+ where SMS messages have been apparently successfully received. -->
+ <nationalNumberPattern>9[1-6]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>912345678</exampleNumber>
+ </mobile>
+ </territory>
+
+ <!-- Morocco -->
+ <!-- http://www.itu.int/oth/T0202000090/en -->
+ <!-- http://en.wikipedia.org/wiki/+212 -->
+ <territory id="MA" countryCode="212" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="([56]\d{2})(\d{6})">
+ <leadingDigits>
+ 5(?:
+ 2[015-7]|
+ 3[0-4]
+ )|
+ 6
+ </leadingDigits>
+ <format>$1-$2</format>
+ </numberFormat>
+ <numberFormat pattern="([58]\d{3})(\d{5})">
+ <leadingDigits>
+ 5(?:
+ 2[2-489]|
+ 3[5-9]
+ )|
+ 892
+ </leadingDigits>
+ <leadingDigits>
+ 5(?:
+ 2(?:
+ [2-48]|
+ 90
+ )|
+ 3(?:
+ [5-79]|
+ 80
+ )
+ )|
+ 892
+ </leadingDigits>
+ <format>$1-$2</format>
+ </numberFormat>
+ <numberFormat pattern="(5\d{4})(\d{4})">
+ <leadingDigits>
+ 5(?:
+ 29|
+ 38
+ )
+ </leadingDigits>
+ <leadingDigits>
+ 5(?:
+ 29|
+ 38
+ )[89]
+ </leadingDigits>
+ <format>$1-$2</format>
+ </numberFormat>
+ <numberFormat pattern="(8[09])(\d{7})">
+ <leadingDigits>
+ 8(?:
+ 0|
+ 9[013-9]
+ )
+ </leadingDigits>
+ <format>$1-$2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[5689]\d{8}</nationalNumberPattern>
+ <!-- Closed numbering plan. -->
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ 5(?:
+ 2(?:
+ (?:
+ [015-7]\d|
+ 2[2-9]|
+ 3[2-57]|
+ 4[2-8]|
+ 8[235-9]|
+ )\d|
+ 9(?:
+ 0\d|
+ [89]0
+ )
+ )|
+ 3(?:
+ (?:
+ [0-4]\d|
+ [57][2-9]|
+ 6[235-8]|
+ 9[3-9]
+ )\d|
+ 8(?:
+ 0\d|
+ [89]0
+ )
+ )
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>520123456</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ 6(?:
+ 0[06]|
+ [14-7]\d|
+ 2[236]|
+ 33|
+ 99
+ )\d{6}
+ </nationalNumberPattern>
+ <exampleNumber>650123456</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>80\d{7}</nationalNumberPattern>
+ <exampleNumber>801234567</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>89\d{7}</nationalNumberPattern>
+ <exampleNumber>891234567</exampleNumber>
+ </premiumRate>
+ </territory>
+
+ <!-- Monaco -->
+ <!-- http://www.itu.int/oth/T020200008D/en -->
+ <!-- We support Kosovo mobile numbers (044, 045) with a Monaco country-code here, as we do not
+ support Kosovo at the moment. Kosovo seems to use a variety of country codes currently. -->
+ <territory id="MC" countryCode="377" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <!-- Following formatting found online rather than in the ITU document example. -->
+ <numberFormat pattern="(\d{2})(\d{2})(\d{2})(\d{2})">
+ <leadingDigits>[89]</leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{2})(\d{3})(\d{3})">
+ <leadingDigits>4</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(6)(\d{2})(\d{2})(\d{2})(\d{2})">
+ <leadingDigits>6</leadingDigits>
+ <format>$1 $2 $3 $4 $5</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[4689]\d{7,8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8,9}</possibleNumberPattern>
+ </generalDesc>
+ <noInternationalDialling>
+ <nationalNumberPattern>8\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ </noInternationalDialling>
+ <fixedLine>
+ <!-- Restricted to this as no numbers with the prefix of 91, 95 or 96 have been found. -->
+ <nationalNumberPattern>9[2-47-9]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>99123456</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- 4X mobile numbers are actually used by Kosovo. -->
+ <nationalNumberPattern>
+ 6\d{8}|
+ 4\d{7}
+ </nationalNumberPattern>
+ <exampleNumber>612345678</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>
+ (?:
+ 8\d|
+ 90
+ )\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>90123456</exampleNumber>
+ </tollFree>
+ </territory>
+
+ <!-- Moldova, Rep. of -->
+ <!-- http://www.itu.int/oth/T020200008C/en -->
+ <territory id="MD" countryCode="373" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="(22)(\d{3})(\d{3})">
+ <leadingDigits>22</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="([25-7]\d{2})(\d{2})(\d{3})">
+ <leadingDigits>
+ 2[13-79]|
+ [5-7]
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="([89]00)(\d{5})">
+ <leadingDigits>[89]</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[256-9]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 2(?:
+ 1[0569]|
+ 2\d|
+ 3[015-7]|
+ 4[1-46-9]|
+ 5[0-24689]|
+ 6[2-589]|
+ 7[1-37]|
+ 9[1347-9]
+ )|
+ 5(?:
+ 33|
+ 5[257]
+ )
+ )\d{5}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{5,8}</possibleNumberPattern>
+ <exampleNumber>22212345</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- Added 688 and 689 since SMS messages have been successfully sent to these numbers. -->
+ <nationalNumberPattern>
+ (?:
+ 6(?:
+ 50|
+ 7[12]|
+ [89]\d
+ )|
+ 7(?:
+ 80|
+ 9\d
+ )
+ )\d{5}
+ </nationalNumberPattern>
+ <exampleNumber>65012345</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>800\d{5}</nationalNumberPattern>
+ <exampleNumber>80012345</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>900\d{5}</nationalNumberPattern>
+ <exampleNumber>90012345</exampleNumber>
+ </premiumRate>
+ </territory>
+
+ <!-- Montenegro -->
+ <!-- http://www.itu.int/oth/T02020000DA/en
+ http://en.wikipedia.org/wiki/Telephone_numbers_in_Montenegro
+ http://www.ekip.me/numeracija/dodijeljena.php -->
+ <territory id="ME" countryCode="382" internationalPrefix="00" nationalPrefix="0"
+ nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="(\d{2})(\d{3})(\d{3})">
+ <leadingDigits>[2-57-9]|6[3789]</leadingDigits>
+ <leadingDigits>
+ [2-57-9]|
+ 6(?:
+ [389]|
+ 7(?:
+ [0-8]|
+ 9[3-9]
+ )
+ )
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(67)(9)(\d{3})(\d{3})">
+ <leadingDigits>679</leadingDigits>
+ <leadingDigits>679[0-2]</leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[2-9]\d{7,8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{6,9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- Fixed line numbers have prefix 20,30,31,32,33,40,41,50,51,52 followed by 6 digits.
+ The valid options for the third digit were from
+ http://www.ekip.me/numeracija/dodijeljena.php -->
+ <nationalNumberPattern>
+ (?:
+ 20[2-8]|
+ 3(?:
+ 0[2-7]|
+ 1[35-7]|
+ 2[367]|
+ 3[4-7]
+ )|
+ 4(?:
+ 0[237]|
+ 1[2467]
+ )|
+ 5(?:
+ 0[47]|
+ 1[27]|
+ 2[378]
+ )
+ )\d{5}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{6,8}</possibleNumberPattern>
+ <exampleNumber>30234567</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- Mobile numbers start with 632, 67, 68 or 69. -->
+ <nationalNumberPattern>
+ 6(?:
+ 32\d|
+ [89]\d{2}|
+ 7(?:
+ [0-8]\d|
+ 9(?:
+ [3-9]|
+ [0-2]\d
+ )
+ )
+ )\d{4}
+ </nationalNumberPattern>
+ <!-- According to ITU it is possible for the numbers to be between length 4-12
+ (http://www.itu.int/oth/T02020000DA/en). However, in reality they seem to be 8 or 9
+ digits long. -->
+ <possibleNumberPattern>\d{8,9}</possibleNumberPattern>
+ <exampleNumber>67622901</exampleNumber>
+ </mobile>
+ <tollFree>
+ <!-- All toll free numbers have prefix 80 followed by 02 or 08. -->
+ <nationalNumberPattern>800[28]\d{4}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>80080002</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <!-- Numbers with prefix 88, 94 or 95 are services with additional charges. -->
+ <nationalNumberPattern>
+ (?:
+ 88\d|
+ 9(?:
+ 4[13-8]|
+ 5[16-8]
+ )
+ )\d{5}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>94515151</exampleNumber>
+ </premiumRate>
+ <voip>
+ <!-- VOIP are prefixed with 78. -->
+ <nationalNumberPattern>78[134579]\d{5}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>78108780</exampleNumber>
+ </voip>
+ <uan>
+ <!-- Corporate Telephony are prefixed with 77. -->
+ <nationalNumberPattern>77\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>77273012</exampleNumber>
+ </uan>
+ <shortCode>
+ <!-- Emergency and other services. -->
+ <nationalNumberPattern>
+ 1(?:
+ 16\d{3}|
+ 2\d{1,2}|
+ [0135]\d{2}|
+ 4\d{2,3}|
+ 9\d{3}
+ )
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{3,6}</possibleNumberPattern>
+ <exampleNumber>123</exampleNumber>
+ </shortCode>
+ </territory>
+
+ <!-- Madagascar -->
+ <!-- http://www.itu.int/oth/T020200007F/en -->
+ <territory id="MG" countryCode="261" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="([23]\d)(\d{2})(\d{3})(\d{2})">
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[23]\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7,9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- Added the prefixes 20 44 and 20 47 as they seem popular on the internet - the plan says
+ 20 4 is for the rest of the province of Antanarivo, but then fails to mention any area
+ codes beginning with 4. -->
+ <nationalNumberPattern>
+ 2(?:
+ 0(?:
+ (?:
+ 2\d|
+ 4[47]|
+ 5[3467]|
+ 6[279]|
+ 8[268]|
+ 9[245]
+ )\d|
+ 7(?:
+ 2[29]|
+ [35]\d
+ )
+ )|
+ 210\d
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>202123456</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- The numbering plan suggests the third digit, Z, should be 24-9,
+ but this is not borne out by reality. -->
+ <nationalNumberPattern>3[02-4]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>301234567</exampleNumber>
+ </mobile>
+ </territory>
+
+ <!-- Saint-Martin, French Antilles -->
+ <!-- http://www.itu.int/oth/T0202000058/en -->
+ <territory id="MF" countryCode="590" internationalPrefix="00"
+ nationalPrefix="0">
+ <!-- Formatting rules borrowed from Guadeloupe. -->
+ <generalDesc>
+ <nationalNumberPattern>[56]\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ 590(?:
+ 10|
+ 2[79]|
+ 5[128]|
+ [78]7
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>590271234</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ 690(?:
+ 10|
+ 2[27]|
+ 66|
+ 77|
+ 8[78]
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>690221234</exampleNumber>
+ </mobile>
+ </territory>
+
+ <!-- Marshall Islands -->
+ <territory id="MH" countryCode="692" internationalPrefix="011"
+ nationalPrefix="1">
+ </territory>
+
+ <!-- Macedonia, Former Yugoslav Rep. of -->
+ <!-- http://en.wikipedia.org/wiki/%2B389
+ http://www.aek.mk/ go to Telecommunications, Numbering, then Numbering plan. -->
+ <territory id="MK" countryCode="389" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <!-- Formats follow wikipedia. -->
+ <numberFormat pattern="(2)(\d{3})(\d{4})">
+ <leadingDigits>2</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="([347]\d)(\d{3})(\d{3})">
+ <leadingDigits>[347]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="([58]\d{2})(\d)(\d{2})(\d{2})">
+ <leadingDigits>[58]</leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[2-578]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 2(?:
+ [23]\d|
+ 5[125]|
+ 61
+ )|
+ 3(?:
+ 1[3-6]|
+ 2[2-6]|
+ 3[2-5]|
+ 4[235]
+ )|
+ 4(?:
+ [23][2-6]|
+ 4[3-6]|
+ 5[25]|
+ 6[25-8]|
+ 7[24-6]|
+ 8[4-6]
+ )
+ )\d{5}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{6,8}</possibleNumberPattern>
+ <exampleNumber>22212345</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>7[0-25-8]\d{6}</nationalNumberPattern>
+ <exampleNumber>72345678</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>800\d{5}</nationalNumberPattern>
+ <exampleNumber>80012345</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>5[02-9]\d{6}</nationalNumberPattern>
+ <exampleNumber>50012345</exampleNumber>
+ </premiumRate>
+ <sharedCost>
+ <nationalNumberPattern>
+ 8(?:
+ 0[1-9]|
+ [1-9]\d
+ )\d{5}
+ </nationalNumberPattern>
+ <exampleNumber>80123456</exampleNumber>
+ </sharedCost>
+ </territory>
+
+ <!-- Mali -->
+ <!-- http://www.itu.int/oth/T0202000083/en -->
+ <!-- http://crt-mali.org/pdf/plan_num -->
+ <territory id="ML" countryCode="223" internationalPrefix="00"
+ nationalPrefix="0">
+ <availableFormats>
+ <numberFormat pattern="([246-8]\d)(\d{2})(\d{2})(\d{2})">
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[246-8]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- 20 70 seems a common pattern, in addition to 21 25. -->
+ <nationalNumberPattern>
+ (?:
+ 2(?:
+ 0(?:
+ 2[0-589]|
+ 7[027-9]
+ )|
+ 1(?:
+ 2[5-7]|
+ [3-689]\d
+ )
+ )|
+ 442\d
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>20212345</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ (?:
+ 6(?:
+ [569]\d
+ )|
+ 7(?:
+ [08][1-9]|
+ [3579][0-4]|
+ 4[014-7]|
+ 6\d
+ )
+ )\d{5}
+ </nationalNumberPattern>
+ <exampleNumber>65012345</exampleNumber>
+ </mobile>
+ <tollFree>
+ <!-- Online examples have not been found, but this seems to follow the prescriptions in the
+ plan. -->
+ <nationalNumberPattern>800\d{5}</nationalNumberPattern>
+ <exampleNumber>80012345</exampleNumber>
+ </tollFree>
+ </territory>
+
+ <!-- Myanmar -->
+ <!-- http://www.itu.int/oth/T0202000092/en -->
+ <territory id="MM" countryCode="95" internationalPrefix="00">
+ <availableFormats>
+ <numberFormat pattern="(1)(\d{3})(\d{3})">
+ <leadingDigits>1</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <!-- This overlaps the previous pattern. -->
+ <numberFormat pattern="(1)(3)(33\d)(\d{3})">
+ <leadingDigits>133</leadingDigits>
+ <leadingDigits>1333</leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ <numberFormat pattern="(2)(\d{2})(\d{3})">
+ <leadingDigits>2</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{2})(\d{2})(\d{3})">
+ <leadingDigits>[4-8]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <!-- Format is from http://www.aitaa.ait.ac.th/chapters/copy17_of_aitaa-national-chapters-1 -->
+ <numberFormat pattern="(9444)(\d{5})">
+ <leadingDigits>94</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(9)([25689]\d{2})(\d{4})">
+ <leadingDigits>9[25689]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>
+ [124-8]\d{5,7}|
+ 9\d{7,8}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{5,9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- Fixed satellite network numbers (1 3 33X XXX) are also included here. -->
+ <nationalNumberPattern>
+ (?:
+ 1\d|
+ 2|
+ 4[2-6]|
+ 5[2-9]|
+ 6\d|
+ 7[0-5]|
+ 8[1-6]
+ )\d{5}|
+ 1333\d{4}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{5,8}</possibleNumberPattern>
+ <exampleNumber>1234567</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ 9(?:
+ [25689]\d|
+ 444
+ )\d{5}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{8,9}</possibleNumberPattern>
+ <exampleNumber>92123456</exampleNumber>
+ </mobile>
+ <!-- No information on other types of phone numbers for Myanmar has been found. -->
+ </territory>
+
+ <!-- Mongolia -->
+ <!-- http://www.itu.int/oth/T020200008E/en -->
+ <territory id="MN" countryCode="976" internationalPrefix="001"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="([12]\d)(\d{2})(\d{4})">
+ <leadingDigits>[12]1</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="([12]2\d)(\d{5,6})">
+ <leadingDigits>[12]2[1-3]</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="([12]\d{3})(\d{5})">
+ <leadingDigits>
+ [12](?:
+ 27|
+ [3-5]
+ )
+ </leadingDigits>
+ <leadingDigits>
+ [12](?:
+ 27|
+ [3-5]\d
+ )2
+ </leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <!-- It seems from online formatting that the national prefix is not written (or perhaps
+ needed?) for numbers in these ranges. -->
+ <numberFormat pattern="(\d{4})(\d{4})"
+ nationalPrefixFormattingRule="$FG">
+ <leadingDigits>[57-9]</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="([12]\d{4})(\d{4,5})">
+ <leadingDigits>
+ [12](?:
+ 27|
+ [3-5]
+ )
+ </leadingDigits>
+ <leadingDigits>
+ [12](?:
+ 27|
+ [3-5]\d
+ )[4-9]
+ </leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>
+ [12]\d{7,9}|
+ [57-9]\d{7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{6,10}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- Note the leading digit is the access code: 1 is used by Mongolia Telecom subscribers
+ and 2 is used by Mongolian Railway subscribers. The area code then follows the access
+ code, and could be 1 to 4 digits long. We also cover wireless local loop numbers here
+ as well, even though we are not certain whether they are in fact fixed or mobile in
+ this country. 5-digit subscriber numbers for 4-digit area codes have been added due to
+ online numbers being found. -->
+ <nationalNumberPattern>
+ [12](?:
+ 1\d|
+ 2(?:
+ [1-3]\d?|
+ 7\d
+ )|
+ 3[2-8]\d{1,2}|
+ 4[2-68]\d{1,2}|
+ 5[1-4689]\d{1,2}
+ )\d{5}|
+ (?:
+ 5[0568]|
+ 70
+ )\d{6}
+ </nationalNumberPattern>
+ <exampleNumber>70123456</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- Adding prefix 98 from numbers found on the internet. -->
+ <nationalNumberPattern>
+ (?:
+ 8[89]|
+ 9[15689]
+ )\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>88123456</exampleNumber>
+ </mobile>
+ <!-- No tollFree or premiumRate information can be found. -->
+ <voip>
+ <nationalNumberPattern>7[569]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>75123456</exampleNumber>
+ </voip>
+ </territory>
+
+ <!-- Macao, China -->
+ <!-- http://www.itu.int/oth/T020200007E/en -->
+ <territory id="MO" countryCode="853" internationalPrefix="00">
+ <availableFormats>
+ <numberFormat pattern="([268]\d{3})(\d{4})">
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[268]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 28[2-57-9]|
+ 8[2-57-9]\d
+ )\d{5}
+ </nationalNumberPattern>
+ <exampleNumber>28212345</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- The 62 prefix is added as SMS messages have been successfully delivered to these
+ numbers, and they are also widely present on the Internet. -->
+ <nationalNumberPattern>6[26]\d{6}</nationalNumberPattern>
+ <exampleNumber>66123456</exampleNumber>
+ </mobile>
+ <!-- No tollFree or premiumRate information can be found. -->
+ </territory>
+
+ <!-- Northern Mariana Islands -->
+ <!-- http://www.itu.int/oth/T02020000EE/en -->
+ <!-- www.cnmiphonebook.com/ -->
+ <territory id="MP" countryCode="1" leadingDigits="670"
+ nationalPrefix="1" internationalPrefix="011">
+ <generalDesc>
+ <!-- NANPA country - uses US formatting rules -->
+ <nationalNumberPattern>[5689]\d{9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}(?:\d{3})?</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ 670(?:
+ 2(?:
+ 3[3-5]|
+ 88|
+ 56
+ )|
+ 32[23]|
+ 4[38]3|
+ 532|
+ 6(?:
+ 64|
+ 70|
+ 8\d
+ )
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>6702345678</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ 670(?:
+ 2(?:
+ 3[3-5]|
+ 88|
+ 56
+ )|
+ 32[23]|
+ 4[38]3|
+ 532|
+ 6(?:
+ 64|
+ 70|
+ 8\d
+ )
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>6702345678</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>
+ 8(?:
+ 00|
+ 55|
+ 66|
+ 77|
+ 88
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>8002123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>900[2-9]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>9002123456</exampleNumber>
+ </premiumRate>
+ <personalNumber>
+ <!-- http://www.nanpa.com/pdf/PL_416.pdf -->
+ <nationalNumberPattern>
+ 5(?:
+ 00|
+ 33|
+ 44
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>5002345678</exampleNumber>
+ </personalNumber>
+ </territory>
+
+ <!-- Martinique (French Dept. of) -->
+ <territory id="MQ" countryCode="596" internationalPrefix="00"
+ nationalPrefix="0">
+ </territory>
+
+ <!-- Mauritania -->
+ <!-- http://www.itu.int/oth/T0202000087/en -->
+ <!-- http://www.are.mr/com-1-4-1.html -->
+ <territory id="MR" countryCode="222" internationalPrefix="00" >
+ <availableFormats>
+ <numberFormat pattern="([2-48]\d)(\d{2})(\d{2})(\d{2})">
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[2-48]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ 25[08]\d{5}|
+ 35\d{6}|
+ 45[1-7]\d{5}
+ </nationalNumberPattern>
+ <exampleNumber>35123456</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ (?:
+ 2(?:
+ 2\d|
+ 70
+ )|
+ 3(?:
+ 3\d|
+ 6[1-36]|
+ 7[1-3]
+ )|
+ 4(?:
+ 4\d|
+ 6[0457-9]|
+ 7[4-9]
+ )
+ )\d{5}
+ </nationalNumberPattern>
+ <exampleNumber>22123456</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>800\d{5}</nationalNumberPattern>
+ <exampleNumber>80012345</exampleNumber>
+ </tollFree>
+ </territory>
+
+ <!-- Montserrat -->
+ <!-- http://www.itu.int/oth/T020200008F/en -->
+ <territory id="MS" countryCode="1" leadingDigits="664"
+ nationalPrefix="1" internationalPrefix="011">
+ <generalDesc>
+ <!-- NANPA country - uses US formatting rules -->
+ <nationalNumberPattern>[5689]\d{9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}(?:\d{3})?</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>664491\d{4}</nationalNumberPattern>
+ <exampleNumber>6644912345</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>664492\d{4}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>6644923456</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>
+ 8(?:
+ 00|
+ 55|
+ 66|
+ 77|
+ 88
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>8002123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>900[2-9]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>9002123456</exampleNumber>
+ </premiumRate>
+ <personalNumber>
+ <!-- http://www.nanpa.com/pdf/PL_416.pdf -->
+ <nationalNumberPattern>
+ 5(?:
+ 00|
+ 33|
+ 44
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>5002345678</exampleNumber>
+ </personalNumber>
+ </territory>
+
+ <!-- Malta -->
+ <!-- www.itu.int/oth/T0202000084/en -->
+ <!-- www.mca.org.mt (Numbering link in the LHS menu - has more up-to-date allocations) -->
+ <territory id="MT" countryCode="356" internationalPrefix="00">
+ <availableFormats>
+ <numberFormat pattern="(\d{4})(\d{4})">
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[2579]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ 2(?:
+ 0(?:
+ 1[0-6]|
+ [69]\d
+ )|
+ [1-357]\d{2}
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>21001234</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ (?:
+ 7(?:
+ 210|
+ [79]\d{2}|
+ )|
+ 9(?:
+ 2[13]\d|
+ 696|
+ 8(?:
+ 1[1-3]|
+ 89|
+ 97
+ )|
+ 9\d{2}
+ )
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>96961234</exampleNumber>
+ </mobile>
+ <pager>
+ <nationalNumberPattern>7117\d{4}</nationalNumberPattern>
+ <exampleNumber>71171234</exampleNumber>
+ </pager>
+ <premiumRate>
+ <nationalNumberPattern>
+ 50(?:
+ 0(?:
+ 3[1679]|
+ 4\d
+ )|
+ [169]\d{2}|
+ 7[06]\d
+ )\d{3}
+ </nationalNumberPattern>
+ <exampleNumber>50031234</exampleNumber>
+ </premiumRate>
+ </territory>
+
+ <!-- Mauritius -->
+ <!-- http://www.itu.int/oth/T0202000088/en - covers mobile only -->
+ <!-- http://www.icta.mu/telecommunications/numbering.htm -->
+ <territory id="MU" countryCode="230" internationalPrefix="0(?:[2-7]0|33)"
+ preferredInternationalPrefix="020">
+ <!-- There is a proposal to change this to 8 digits - this is supposed to happen August 2010,
+ and 7 digit numbers will be phased out by 1 November 2010. Update Aug 9th: Changeover
+ postponed to indeterminate later date. -->
+ <availableFormats>
+ <numberFormat pattern="([2-9]\d{2})(\d{4})">
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[2-9]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- Wireless local loop numbers are considered to be fixed, since there is almost no
+ roaming capability. -->
+ <nationalNumberPattern>
+ (?:
+ 2(?:
+ [034789]\d|
+ 1[0-8]|
+ 2[0-79]
+ )|
+ 4(?:
+ [013-8]\d|
+ 2[4-7]
+ )|
+ [56]\d{2}|
+ 8(?:
+ 14|
+ 3[129]
+ )
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>2012345</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!--Adding 92 as SMS messages have been successfully sent to this prefix. -->
+ <nationalNumberPattern>
+ (?:
+ 25\d|
+ 4(?:
+ 2[12389]|
+ 9\d
+ )|
+ 7\d{2}|
+ 87[15-7]|
+ 9[1-8]\d
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>2512345</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>80[012]\d{4}</nationalNumberPattern>
+ <exampleNumber>8001234</exampleNumber>
+ </tollFree>
+ <!-- These may be either shared cost or premium rate - they don't differentiate between these
+ in the plan. This is expected to change with the introduction of the new numbering plan
+ in late 2010 - at that time, this will be updated appropriately. -->
+ <premiumRate>
+ <nationalNumberPattern>30\d{5}</nationalNumberPattern>
+ <exampleNumber>3012345</exampleNumber>
+ </premiumRate>
+ </territory>
+
+ <!-- Maldives -->
+ <!-- http://www.itu.int/oth/T0202000082/en -->
+ <!-- www.dhiraagu.com.mv -->
+ <territory id="MV" countryCode="960" internationalPrefix="0(?:0|19)"
+ preferredInternationalPrefix="00">
+ <availableFormats>
+ <numberFormat pattern="(\d{3})(\d{4})">
+ <leadingDigits>
+ [367]|
+ 9(?:
+ [1-9]|
+ 0[1-9]
+ )
+ </leadingDigits>
+ <format>$1-$2</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{3})(\d{4})">
+ <leadingDigits>900</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>
+ [367]\d{6}|
+ 9(?:
+ 00\d{7}|
+ \d{6}
+ )
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- 300 has been added as prefixes from online searches, since the numbers seemed to be
+ diallable. -->
+ <nationalNumberPattern>
+ (?:
+ 3(?:
+ 0[01]|
+ 3[0-59]|
+ )|
+ 6(?:
+ [567][02468]|
+ 8[024689]|
+ 90
+ )
+ )\d{4}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7}</possibleNumberPattern>
+ <exampleNumber>6701234</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- 7[45] has been added as many numbers online have been found with this prefix. -->
+ <nationalNumberPattern>
+ (?:
+ 7[3-9]|
+ 9[6-9]
+ )\d{5}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7}</possibleNumberPattern>
+ <exampleNumber>7712345</exampleNumber>
+ </mobile>
+ <pager>
+ <nationalNumberPattern>781\d{4}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}</possibleNumberPattern>
+ <exampleNumber>7812345</exampleNumber>
+ </pager>
+ <premiumRate>
+ <nationalNumberPattern>900\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>9001234567</exampleNumber>
+ </premiumRate>
+ <shortCode>
+ <nationalNumberPattern>
+ 1(?:
+ [19]0|
+ 23
+ )
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{3}</possibleNumberPattern>
+ <exampleNumber>123</exampleNumber>
+ </shortCode>
+ </territory>
+
+ <!-- Malawi -->
+ <!-- http://www.itu.int/oth/T0202000080/en -->
+ <!-- The plan doesn't state that a national prefix exists, but numbers found on the internet are
+ consistent in having one. -->
+ <territory id="MW" countryCode="265" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="(\d)(\d{3})(\d{3})">
+ <leadingDigits>[13-5]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(2\d{2})(\d{3})(\d{3})">
+ <leadingDigits>2</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d)(\d{4})(\d{4})">
+ <leadingDigits>7</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d)(\d{3,4})(\d{3,4})">
+ <leadingDigits>[89]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <!-- According to the plan, the switch from 7 to 9 digits for mobile numbers happened in July
+ 2009. However, online numbers don't seem to reflect this - even on the telephone company
+ websites such as www.mw.zain.com. Allowing both for now. -->
+ <generalDesc>
+ <nationalNumberPattern>
+ (?:
+ [13-5]|
+ [27]\d{2}|
+ [89](?:
+ \d{2}
+ )?
+ )\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7,9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 1[2-9]|
+ 21\d{2}
+ )\d{5}
+ </nationalNumberPattern>
+ <exampleNumber>1234567</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ (?:
+ [3-5]|
+ 77|
+ 8(?:
+ 8\d
+ )? |
+ 9(?:
+ 9\d
+ )?
+ )\d{6}
+ </nationalNumberPattern>
+ <exampleNumber>991234567</exampleNumber>
+ </mobile>
+ </territory>
+
+ <!-- Mexico -->
+ <!-- http://www.itu.int/oth/T020200008A/en -->
+ <!-- http://en.wikipedia.org/wiki/%2B52 -->
+ <!-- http://en.wikipedia.org/wiki/Premium-rate_telephone_number#Mexico -->
+ <!-- http://en.wikipedia.org/wiki/Toll-free_telephone_number -->
+ <territory id="MX" countryCode="52" internationalPrefix="0[09]"
+ nationalPrefix="01"
+ nationalPrefixForParsing="0[12]|04[45](\d{10})"
+ nationalPrefixTransformRule="1$1"
+ nationalPrefixFormattingRule="$NP $FG">
+ <!-- When a number starts with 01 or 02, we remove the prefixes; when a number starts with 045
+ or 046 followed by 10 digits, we replace the prefixes with 1. This way all the mobile
+ numbers, regardless of whether they are written in international format (leading 1) or
+ national format (leading 045/046), will be parsed into the same form. -->
+ <availableFormats>
+ <numberFormat pattern="([358]\d)(\d{4})(\d{4})">
+ <leadingDigits>
+ 33|
+ 55|
+ 81
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <intlNumberFormat pattern="([358]\d)(\d{4})(\d{4})">
+ <leadingDigits>
+ 33|
+ 55|
+ 81
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </intlNumberFormat>
+ <numberFormat pattern="(\d{3})(\d{3})(\d{4})">
+ <leadingDigits>
+ [2467]|
+ 3[12457-9]|
+ 5[89]|
+ 8[02-9]|
+ 9[0-35-9]
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <intlNumberFormat pattern="(\d{3})(\d{3})(\d{4})">
+ <leadingDigits>
+ [2467]|
+ 3[12457-9]|
+ 5[89]|
+ 8[02-9]|
+ 9[0-35-9]
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </intlNumberFormat>
+ <numberFormat nationalPrefixFormattingRule="$FG"
+ pattern="1([358]\d)(\d{4})(\d{4})">
+ <leadingDigits>
+ 1(?:
+ 33|
+ 55|
+ 81
+ )
+ </leadingDigits>
+ <format>045 $1 $2 $3</format>
+ </numberFormat>
+ <intlNumberFormat pattern="(1)([358]\d)(\d{4})(\d{4})">
+ <leadingDigits>
+ 1(?:
+ 33|
+ 55|
+ 81
+ )
+ </leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </intlNumberFormat>
+ <numberFormat nationalPrefixFormattingRule="$FG"
+ pattern="1(\d{3})(\d{3})(\d{4})">
+ <leadingDigits>
+ 1(?:
+ [2467]|
+ 3[12457-9]|
+ 5[89]|
+ 8[2-9]|
+ 9[1-35-9]
+ )
+ </leadingDigits>
+ <format>045 $1 $2 $3</format>
+ </numberFormat>
+ <intlNumberFormat pattern="(1)(\d{3})(\d{3})(\d{4})">
+ <leadingDigits>
+ 1(?:
+ [2467]|
+ 3[12457-9]|
+ 5[89]|
+ 8[2-9]|
+ 9[1-35-9]
+ )
+ </leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </intlNumberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[1-9]\d{9,10}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7,11}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- http://en.wikipedia.org/wiki/Area_codes_in_Mexico_by_code -->
+ <nationalNumberPattern>
+ (?:
+ 33|
+ 55|
+ 81
+ )\d{8}|
+ (?:
+ 2(?:
+ 2[2-9]|
+ 3[1-35-8]|
+ 4[13-9]|
+ 7[1-689]|
+ 8[1-58]|
+ 9[467]
+ )|
+ 3(?:
+ 1[1-79]|
+ [2458][1-9]|
+ 7[1-8]|
+ 9[1-5]
+ )|
+ 4(?:
+ 1[1-57-9]|
+ [24-6][1-9]|
+ [37][1-8]|
+ 8[1-35-9]|
+ 9[2-689]
+ )|
+ 5(?:
+ 88|
+ 9[1-79]
+ )|
+ 6(?:
+ 1[2-68]|
+ [234][1-9]|
+ 5[1-3689]|
+ 6[12457-9]|
+ 7[1-7]|
+ 8[67]|
+ 9[4-8]
+ )|
+ 7(?:
+ [13467][1-9]|
+ 2[1-8]|
+ 5[13-9]|
+ 8[1-69]|
+ 9[17]
+ )|
+ 8(?:
+ 2[13-689]|
+ 3[1-6]|
+ 4[124-6]|
+ 6[1246-9]|
+ 7[1-378]|
+ 9[12479]
+ )|
+ 9(?:
+ 1[346-9]|
+ 2[1-4]|
+ 3[2-46-8]|
+ 5[1348]|
+ [69][1-9]|
+ 7[12]|
+ 8[1-8]
+ )
+ )\d{7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
+ <exampleNumber>2221234567</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ 1(?:
+ (?:
+ 33|
+ 55|
+ 81
+ )\d{8}|
+ (?:
+ 2(?:
+ 2[2-9]|
+ 3[1-35-8]|
+ 4[13-9]|
+ 7[1-689]|
+ 8[1-58]|
+ 9[467]
+ )|
+ 3(?:
+ 1[1-79]|
+ [2458][1-9]|
+ 7[1-8]|
+ 9[1-5]
+ )|
+ 4(?:
+ 1[1-57-9]|
+ [24-6][1-9]|
+ [37][1-8]|
+ 8[1-35-9]|
+ 9[2-689]
+ )|
+ 5(?:
+ 88|
+ 9[1-79]
+ )|
+ 6(?:
+ 1[2-68]|
+ [2-4][1-9]|
+ 5[1-3689]|
+ 6[12457-9]|
+ 7[1-7]|
+ 8[67]|
+ 9[4-8]
+ )|
+ 7(?:
+ [13467][1-9]|
+ 2[1-8]|
+ 5[13-9]|
+ 8[1-69]|
+ 9[17]
+ )|
+ 8(?:
+ 2[13-689]|
+ 3[1-6]|
+ 4[124-6]|
+ 6[1246-9]|
+ 7[1-378]|
+ 9[12479]
+ )|
+ 9(?:
+ 1[346-9]|
+ 2[1-4]|
+ 3[2-46-8]|
+ 5[1348]|
+ [69][1-9]|
+ 7[12]|
+ 8[1-8]
+ )
+ )\d{7}
+ )
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{11}</possibleNumberPattern>
+ <exampleNumber>12221234567</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>800\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>8001234567</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>900\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>9001234567</exampleNumber>
+ </premiumRate>
+ </territory>
+
+ <!-- Malaysia -->
+ <!-- http://en.wikipedia.org/wiki/%2B60 -->
+ <!-- http://www.skmm.gov.my/what_we_do/numbering/index.asp -->
+ <territory id="MY" countryCode="60" internationalPrefix="00"
+ nationalPrefix="0">
+ <availableFormats>
+ <numberFormat nationalPrefixFormattingRule="$NP$FG"
+ pattern="([4-79])(\d{3})(\d{4})">
+ <leadingDigits>[4-79]</leadingDigits>
+ <format>$1-$2 $3</format>
+ </numberFormat>
+ <numberFormat nationalPrefixFormattingRule="$NP$FG"
+ pattern="(3)(\d{4})(\d{4})">
+ <leadingDigits>3</leadingDigits>
+ <format>$1-$2 $3</format>
+ </numberFormat>
+ <numberFormat nationalPrefixFormattingRule="$NP$FG"
+ pattern="([18]\d)(\d{3})(\d{3,4})">
+ <leadingDigits>
+ 1[0-46-9][1-9]|
+ 8
+ </leadingDigits>
+ <format>$1-$2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(1)([36-8]00)(\d{2})(\d{4})">
+ <leadingDigits>1[36-8]0</leadingDigits>
+ <format>$1-$2-$3-$4</format>
+ </numberFormat>
+ <numberFormat nationalPrefixFormattingRule="$NP$FG"
+ pattern="(154)(\d{3})(\d{4})">
+ <leadingDigits>15</leadingDigits>
+ <format>$1-$2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[13-9]\d{7,9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{6,10}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 3\d{2}|
+ [4-79]\d|
+ 8[2-9]
+ )\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{6,9}</possibleNumberPattern>
+ <exampleNumber>312345678</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>1[0-46-9]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>123456789</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>1[38]00\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>1300123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>1600\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>1600123456</exampleNumber>
+ </premiumRate>
+ <personalNumber>
+ <nationalNumberPattern>1700\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>1700123456</exampleNumber>
+ </personalNumber>
+ <voip>
+ <nationalNumberPattern>154\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>1541234567</exampleNumber>
+ </voip>
+ </territory>
+
+ <!-- Mozambique -->
+ <!-- http://www.itu.int/oth/T0202000091/en -->
+ <territory id="MZ" countryCode="258" internationalPrefix="00">
+ <availableFormats>
+ <numberFormat pattern="([28]\d)(\d{3})(\d{3,4})">
+ <leadingDigits>
+ 2|
+ 8[24]
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(80\d)(\d{3})(\d{3})">
+ <leadingDigits>80</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[28]\d{7,8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8,9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ 2(?:
+ [1346]\d|
+ 5[0-2]|
+ [78][12]|
+ 93
+ )\d{5}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>21123456</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>8[24]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>821234567</exampleNumber>
+ </mobile>
+ <tollFree>
+ <!-- Unsure of the length requirement on toll-free numbers, so using 9
+ based on online examples. -->
+ <nationalNumberPattern>800\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>800123456</exampleNumber>
+ </tollFree>
+ <!-- The plan suggests 801 and 802 numbers are shared-cost numbers, and numbers beginning with
+ a 9 are premium rate, but no online examples can be found of any of these so they are
+ omitted for the time-being. -->
+ </territory>
+
+ <!-- Namibia -->
+ <!-- http://www.itu.int/oth/T0202000093/en -->
+ <territory id="NA" countryCode="264" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="(8\d)(\d{3})(\d{4})">
+ <leadingDigits>8[125]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(6\d)(\d{2,3})(\d{4})">
+ <leadingDigits>6</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(88)(\d{3})(\d{3})">
+ <leadingDigits>88</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(870)(\d{3})(\d{3})">
+ <leadingDigits>870</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[68]\d{7,8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8,9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- Includes VSAT service. -->
+ <nationalNumberPattern>
+ 6(?:
+ 1(?:
+ 17|
+ 2(?:
+ [0189]\d|
+ [23-6]|
+ 7\d?
+ )|
+ 3(?:
+ 2\d|
+ 3[378]
+ )|
+ 4[01]|
+ 69|
+ 7[014]
+ )|
+ 2(?:
+ 17|
+ 25|
+ 5(?:
+ [0-36-8]|
+ 4\d?
+ )|
+ 69|
+ 70
+ )|
+ 3(?:
+ 17|
+ 2(?:
+ [0237]\d?|
+ [14-689]
+ )|
+ 34|
+ 6[29]|
+ 7[01]|
+ 81
+ )|
+ 4(?:
+ 17|
+ 2(?:
+ [012]|
+ 7?
+ )|
+ 4(?:
+ [06]|
+ 1\d
+ )|
+ 5(?:
+ [01357]|
+ [25]\d?
+ )|
+ 69|
+ 7[01]
+ )|
+ 5(?:
+ 17|
+ 2(?:
+ [0459]|
+ [23678]\d?
+ )|
+ 69|
+ 7[01]
+ )|
+ 6(?:
+ 17|
+ 2(?:
+ 5|
+ 6\d?
+ )|
+ 38|
+ 42|
+ 69|
+ 7[01]
+ )|
+ 7(?:
+ 17|
+ 2(?:
+ [569]|
+ [234]\d?
+ )|
+ 3(?:
+ 0\d?|
+ [13]
+ )|
+ 69|
+ 7[01]
+ )
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>612012345</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- Includes the Switch CDMA Service. -->
+ <nationalNumberPattern>
+ (?:
+ 60|
+ 8[125]
+ )\d{7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>811234567</exampleNumber>
+ </mobile>
+ <premiumRate>
+ <nationalNumberPattern>8701\d{5}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>870123456</exampleNumber>
+ </premiumRate>
+ <voip>
+ <nationalNumberPattern>886\d{5}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>88612345</exampleNumber>
+ </voip>
+ <shortCode>
+ <nationalNumberPattern>
+ 1(?:
+ 0111|
+ \d{3}
+ )|
+ 9(?:
+ 3111|
+ \d{2}
+ )
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{3,5}</possibleNumberPattern>
+ <exampleNumber>93111</exampleNumber>
+ </shortCode>
+ </territory>
+
+ <!-- New Caledonia (Territoire français d'outre-mer) -->
+ <territory id="NC" countryCode="687" internationalPrefix="00"
+ nationalPrefix="0">
+ </territory>
+
+ <!-- Niger -->
+ <!-- http://www.itu.int/oth/T020200009B/en -->
+ <territory id="NE" countryCode="227" internationalPrefix="00" leadingZeroPossible="true">
+ <availableFormats>
+ <numberFormat pattern="([029]\d)(\d{2})(\d{2})(\d{2})">
+ <leadingDigits>
+ [29]|
+ 09
+ </leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ <numberFormat pattern="(08)(\d{3})(\d{3})">
+ <leadingDigits>08</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[029]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- Adding 20 61 from online numbers. -->
+ <nationalNumberPattern>
+ 2(?:
+ 0(?:
+ 20|
+ 3[1-7]|
+ 4[134]|
+ 5[14]|
+ 6[14578]|
+ 7[1-578]
+ )|
+ 1(?:
+ 4[145]|
+ 5[14]|
+ 6[14-68]|
+ 7[169]|
+ 88
+ )
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>20201234</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- Added 90 and 97 from online data. Zain have confirmed that they use the 97 prefix. -->
+ <nationalNumberPattern>9[03467]\d{6}</nationalNumberPattern>
+ <exampleNumber>93123456</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>08\d{6}</nationalNumberPattern>
+ <exampleNumber>08123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>09\d{6}</nationalNumberPattern>
+ <exampleNumber>09123456</exampleNumber>
+ </premiumRate>
+ </territory>
+
+ <!-- Norfolk Island -->
+ <!-- http://www.itu.int/oth/T020200009D/en -->
+ <!-- Including numbers for Australian Antarctic stations. -->
+ <territory id="NF" countryCode="672" internationalPrefix="00">
+ <availableFormats>
+ <numberFormat pattern="(\d{2})(\d{4})">
+ <leadingDigits>1</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(\d)(\d{5})">
+ <leadingDigits>3</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[13]\d{5}</nationalNumberPattern>
+ <possibleNumberPattern>\d{5,6}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- ITU says all 3X numbers except 38 are fixed-line, but 3[3-79] numbers don't seem to
+ connect after we tried calling them. -->
+ <nationalNumberPattern>
+ (?:
+ 1(?:
+ 06|
+ 17|
+ 28|
+ 39
+ )|
+ 3[012]\d
+ )\d{3}
+ </nationalNumberPattern>
+ <exampleNumber>106609</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>38\d{4}</nationalNumberPattern>
+ <exampleNumber>381234</exampleNumber>
+ </mobile>
+ </territory>
+
+ <!-- Nigeria -->
+ <!-- http://www.itu.int/oth/T020200009C/en -->
+ <territory id="NG" countryCode="234" internationalPrefix="009"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="([129])(\d{3})(\d{3,4})">
+ <leadingDigits>[129]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="([3-8]\d)(\d{3})(\d{2,3})">
+ <leadingDigits>
+ [3-6]|
+ 7(?:
+ [1-79]|
+ 0[1-9]
+ )|
+ 8[2-9]
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="([78]\d{2})(\d{3})(\d{3,4})">
+ <leadingDigits>
+ 70|
+ 8[01]
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="([78]00)(\d{4})(\d{4,5})">
+ <leadingDigits>[78]00</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="([78]00)(\d{5})(\d{5,6})">
+ <leadingDigits>[78]00</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(78)(\d{2})(\d{3})">
+ <leadingDigits>78</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>
+ [1-69]\d{5,8}|
+ [78]\d{5,13}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{5,14}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ [12]\d{6,7}|
+ 9\d{7}|
+ (?:
+ 4[023568]|
+ 5[02368]|
+ 6[02-469]|
+ 7[569]|
+ 8[2-9]
+ )\d{6}|
+ (?:
+ 4[47]|
+ 5[14579]|
+ 6[1578]|
+ 7[0-357]
+ )\d{5,6}|
+ (?:
+ 78|
+ 41
+ )\d{5}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{5,9}</possibleNumberPattern>
+ <exampleNumber>12345678</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- More 81X prefixes have been added based on online numbers. -->
+ <nationalNumberPattern>
+ (?:
+ 70(?:
+ [3-9]\d|
+ 2[1-9]
+ )|
+ 8(?:
+ 0[2-9]|
+ 1[23689]
+ )\d
+ )\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>8021234567</exampleNumber>
+ </mobile>
+ <!-- Info on these numbers from http://www.alphatechnologieslimited.com. -->
+ <tollFree>
+ <nationalNumberPattern>800\d{7,11}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10,14}</possibleNumberPattern>
+ <exampleNumber>80017591759</exampleNumber>
+ </tollFree>
+ <personalNumber>
+ <nationalNumberPattern>700\d{7,11}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10,14}</possibleNumberPattern>
+ <exampleNumber>7001234567</exampleNumber>
+ </personalNumber>
+ </territory>
+
+ <!-- Nicaragua -->
+ <!-- http://www.itu.int/oth/T020200009A/en -->
+ <territory id="NI" countryCode="505" internationalPrefix="00">
+ <availableFormats>
+ <numberFormat pattern="(\d{4})(\d{4})">
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[128]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>2\d{7}</nationalNumberPattern>
+ <exampleNumber>21234567</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>8\d{7}</nationalNumberPattern>
+ <exampleNumber>81234567</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>1800\d{4}</nationalNumberPattern>
+ <exampleNumber>18001234</exampleNumber>
+ </tollFree>
+ </territory>
+
+ <!-- Netherlands -->
+ <!-- http://en.wikipedia.org/wiki/%2B31 -->
+ <!-- http://www2.opta.nl/asp/en/numbers/ -->
+ <territory id="NL" countryCode="31" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="([1-578]\d)(\d{3})(\d{4})">
+ <leadingDigits>
+ 1[035]|
+ 2[0346]|
+ 3[03568]|
+ 4[0356]|
+ 5[0358]|
+ 7|
+ 8[458]
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="([1-5]\d{2})(\d{3})(\d{3})">
+ <leadingDigits>
+ 1[16-8]|
+ 2[259]|
+ 3[124]|
+ 4[17-9]|
+ 5[124679]
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(6)(\d{8})">
+ <leadingDigits>6</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="([89]0\d)(\d{4,7})">
+ <leadingDigits>
+ 80|
+ 9
+ </leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[1-9]\d{6,9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 1[0135-8]|
+ 2[02-69]|
+ 3[0-68]|
+ 4[0135-9]|
+ [57]\d|
+ 8[478]
+ )\d{7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>101234567</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>6[1-58]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>612345678</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>800\d{4,7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
+ <exampleNumber>8001234</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>90[069]\d{4,7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
+ <exampleNumber>9001234</exampleNumber>
+ </premiumRate>
+ <voip>
+ <nationalNumberPattern>85\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ </voip>
+ </territory>
+
+ <!-- Norway -->
+ <!-- Metadata (excluding fixed-line) shared with Svalbard. -->
+ <!-- http://www.npt.no/pt_internet/numsys/E.164.pdf -->
+ <territory id="NO" countryCode="47" internationalPrefix="00" leadingZeroPossible="true"
+ mainCountryForCode="true">
+ <availableFormats>
+ <numberFormat pattern="([489]\d{2})(\d{2})(\d{3})">
+ <leadingDigits>[489]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="([235-7]\d)(\d{2})(\d{2})(\d{2})">
+ <leadingDigits>[235-7]</leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>
+ 0\d{4}|
+ [2-9]\d{7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{5}(?:\d{3})?</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- Excludes Svalbard fixed-line numbers. -->
+ <nationalNumberPattern>
+ (?:
+ 2[1-4]|
+ 3[1-3578]|
+ 5[1-35-7]|
+ 6[1-4679]|
+ 7[0-8]
+ )\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>21234567</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ (?:
+ 4[015-8]|
+ 9\d
+ )\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>41234567</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>80[01]\d{5}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>80012345</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>82[09]\d{5}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>82012345</exampleNumber>
+ </premiumRate>
+ <sharedCost>
+ <nationalNumberPattern>
+ 810(?:
+ 0[0-6]|
+ [2-8]\d
+ )\d{3}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>81021234</exampleNumber>
+ </sharedCost>
+ <personalNumber>
+ <nationalNumberPattern>880\d{5}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>88012345</exampleNumber>
+ </personalNumber>
+ <uan>
+ <!-- Includes some 810 local-rate numbers, and long-distance rate numbers. -->
+ <nationalNumberPattern>
+ 0\d{4}|
+ 81(?:
+ 0(?:
+ 0[7-9]|
+ 1\d
+ )|
+ 5\d{2}
+ )\d{3}
+ </nationalNumberPattern>
+ <exampleNumber>01234</exampleNumber>
+ </uan>
+ </territory>
+
+ <!-- Nepal -->
+ <!-- http://www.itu.int/oth/T0202000095/en -->
+ <!-- http://www.ntc.net.np/mobile/mob_postpaid_number_scheme.php -->
+ <territory id="NP" countryCode="977" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="(1)([4-6]\d{3})(\d{3})">
+ <leadingDigits>1[4-6]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{2})(\d{3})(\d{3})">
+ <leadingDigits>
+ 1[01]|
+ [2-8]|
+ 9[1-79]
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <!-- Format is from http://www.fco.gov.uk/en/travel-and-living-abroad/travel-advice-by-country/country-profile/asia-oceania/nepal/ -->
+ <numberFormat pattern="(98[45])(\d{3})(\d{4})">
+ <leadingDigits>98</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>
+ [1-8]\d{5,7}|
+ 98[45]\d{7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{6,10}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 1[014-6]|
+ 2[13-79]|
+ 3[135-8]|
+ 4[146-9]|
+ 5[135-7]|
+ 6[13-9]|
+ 7[15-9]|
+ 8[1-4679]|
+ 9[1-79]
+ )\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{6,8}</possibleNumberPattern>
+ <exampleNumber>14567890</exampleNumber>
+ </fixedLine>
+ <!-- There is no definitive source of information for mobile numbers in Nepal. The infomation
+ here is collected by searching the Internet. -->
+ <mobile>
+ <nationalNumberPattern>98[45]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>9841234567</exampleNumber>
+ </mobile>
+ <!-- No information on other types of phone numbers for Nepal has been found. -->
+ </territory>
+
+ <!-- Nauru -->
+ <!-- http://www.itu.int/oth/T0202000094/en -->
+ <territory id="NR" countryCode="674" internationalPrefix="00">
+ <availableFormats>
+ <numberFormat pattern="(\d{3})(\d{4})">
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[458]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 444|
+ 888
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>4441234</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>55[5-9]\d{4}</nationalNumberPattern>
+ <exampleNumber>5551234</exampleNumber>
+ </mobile>
+ <shortCode>
+ <nationalNumberPattern>
+ 1(?:
+ 1[012]|
+ 23|
+ 92
+ )
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{3}</possibleNumberPattern>
+ <exampleNumber>110</exampleNumber>
+ </shortCode>
+ </territory>
+
+ <!-- Niue -->
+ <!-- http://www.itu.int/oth/T02020000EC/en -->
+ <territory id="NU" countryCode="683" internationalPrefix="00">
+ <!-- Numbers are always formatted as a block. -->
+ <generalDesc>
+ <nationalNumberPattern>[1-5]\d{3}</nationalNumberPattern>
+ <possibleNumberPattern>\d{4}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- Putting FWT (fixed-wireless-terminals) numbers here too. -->
+ <nationalNumberPattern>[34]\d{3}</nationalNumberPattern>
+ <exampleNumber>4002</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>[125]\d{3}</nationalNumberPattern>
+ <exampleNumber>1234</exampleNumber>
+ </mobile>
+ </territory>
+
+ <!-- New Zealand -->
+ <!-- http://www.itu.int/oth/T0202000099/en -->
+ <!-- Includes Ross Dependency, Antarctica -->
+ <!-- Does not currently support 083 "Enhanced voice services", New Zealand direct service
+ numbers and 050 "Nation-Wide Service". -->
+ <territory id="NZ" countryCode="64" internationalPrefix="0(?:0|161)"
+ preferredInternationalPrefix="00" nationalPrefix="0"
+ nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="([34679])(\d{3})(\d{4})">
+ <leadingDigits>
+ [3467]|
+ 9[1-9]
+ </leadingDigits>
+ <format>$1-$2 $3</format>
+ </numberFormat>
+ <!-- Mobile numbers do not have exclusive leading digits - formatting depends on number
+ length. -->
+ <!-- Vodafone numbers are formatted with 021 separated. -->
+ <numberFormat pattern="(21)(\d{4})(\d{3,4})">
+ <leadingDigits>21</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <!-- Adding in the toll free numbers here as well since they follow the same format. -->
+ <numberFormat pattern="([2589]\d{2})(\d{3})(\d{3,4})">
+ <leadingDigits>
+ 2[0247-9]|
+ 5|
+ [89]00
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <!-- Vodafone and Orcon numbers can also be 8 digits (without leading 0), and these are
+ formatted differently. -->
+ <numberFormat pattern="(\d{2})(\d{3})(\d{3,4})">
+ <leadingDigits>2[0169]|86</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <!-- Antarctica -->
+ <numberFormat pattern="(24099)(\d{3})">
+ <leadingDigits>240</leadingDigits>
+ <leadingDigits>2409</leadingDigits>
+ <leadingDigits>24099</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>
+ 6[235-9]\d{6}|
+ [2-57-9]\d{7,10}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7,11}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 3[2-79]|
+ [49][2-689]|
+ 6[235-9]|
+ 7[2-589]
+ )\d{6}|
+ 24099\d{3}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7,8}</possibleNumberPattern>
+ <exampleNumber>32345678</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- Includes mobile radio service numbers. -->
+ <nationalNumberPattern>
+ 2(?:
+ [079]\d{7}|
+ 1(?:
+ 0\d{5,7}|
+ [12]\d{5,6}|
+ [3-9]\d{5}
+ )|
+ [28]\d{7,8}|
+ 4[1-9]\d{6}
+ )
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{8,10}</possibleNumberPattern>
+ <exampleNumber>211234567</exampleNumber>
+ </mobile>
+ <pager>
+ <nationalNumberPattern>[28]6\d{6,7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8,9}</possibleNumberPattern>
+ <exampleNumber>26123456</exampleNumber>
+ </pager>
+ <!-- These are the toll free patterns used, by Telecom and Telstra/Clear, but they are
+ referred to as 'Value-added service' in the phone plan for some reason. 85 numbers are
+ not covered, as telecom companies don't seem to support them yet. -->
+ <tollFree>
+ <nationalNumberPattern>
+ 508\d{6,7}|
+ 80\d{6,8}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{8,10}</possibleNumberPattern>
+ <exampleNumber>800123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>90\d{7,9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9,11}</possibleNumberPattern>
+ <exampleNumber>900123456</exampleNumber>
+ </premiumRate>
+ </territory>
+
+ <!-- Oman -->
+ <!-- http://www.itu.int/oth/T020200009F/en -->
+ <territory id="OM" countryCode="968" internationalPrefix="00" >
+ <availableFormats>
+ <numberFormat pattern="(2\d)(\d{6})">
+ <leadingDigits>2</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(9\d{3})(\d{4})">
+ <leadingDigits>9</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="([58]00)(\d{4,6})">
+ <leadingDigits>[58]</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>
+ (?:
+ 2[3-6]|
+ 5|
+ 9[2-9]
+ )\d{6}|
+ 800\d{5,6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7,9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>2[3-6]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>23123456</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>9[2-9]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>92123456</exampleNumber>
+ </mobile>
+ <tollFree>
+ <!-- Link to document about toll-free numbers on www.tra.gov.om, which suggests they should
+ be 8007 followed by 4 digits. However, the only examples I can find, including the
+ customer help line for the main telephony company there (omantel), is 8007 followed by
+ 5 digits, so am allowing both for now to be on the safe side. 500 numbers seem to offer
+ international toll-free dialing numbers - +968 500 1300 for international help desk for
+ omantel, for example. -->
+ <nationalNumberPattern>
+ 8007\d{4,5}|
+ 500\d{4}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7,9}</possibleNumberPattern>
+ <exampleNumber>80071234</exampleNumber>
+ </tollFree>
+ <!-- No premiumRate information can be found. -->
+ </territory>
+
+ <!-- Panama -->
+ <territory id="PA" countryCode="507" internationalPrefix="00"
+ nationalPrefix="0">
+ </territory>
+
+ <!-- Peru -->
+ <!-- http://www.itu.int/oth/T02020000A6/en -->
+ <!-- http://en.wikipedia.org/wiki/+51 -->
+ <territory id="PE" countryCode="51" internationalPrefix="19(?:1[124]|77|90)00"
+ nationalPrefix="0" nationalPrefixFormattingRule="($FG)"
+ preferredExtnPrefix=" Anexo ">
+ <availableFormats>
+ <numberFormat pattern="(1)(\d{7})">
+ <leadingDigits>1</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="([4-8]\d)(\d{6})">
+ <leadingDigits>[4-8]</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <!-- Formatting from common usage found on the internet, supported by ITU doc. -->
+ <numberFormat pattern="(9\d{2})(\d{3})(\d{3})"
+ nationalPrefixFormattingRule="$FG">
+ <leadingDigits>9</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[14-9]\d{7,8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{6,9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 1\d|
+ 4[1-4]|
+ 5[1-46]|
+ 6[1-7]|
+ 7[2-46]|
+ 8[2-4]
+ )\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{6,8}</possibleNumberPattern>
+ <exampleNumber>11234567</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>9\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>912345678</exampleNumber>
+ </mobile>
+ </territory>
+
+ <!-- French Polynesia (Tahiti) (Territoire français d'outre-mer) -->
+ <territory id="PF" countryCode="689" internationalPrefix="00">
+ </territory>
+
+ <!-- Papua New Guinea -->
+ <!-- http://www.itu.int/oth/T02020000A4/en -->
+ <!-- http://en.wikipedia.org/wiki/%2B675 -->
+ <territory id="PG" countryCode="675" internationalPrefix="00">
+ <availableFormats>
+ <numberFormat pattern="(\d{3})(\d{4})">
+ <leadingDigits>[1-689]</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(7[1-36]\d)(\d{2})(\d{3})">
+ <leadingDigits>7[1-36]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[1-9]\d{6,7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7,8}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- Fixed line patterns are from the numbering plan, with additions for 4XX since many
+ numbers in the yellow pages seem to be outside the 47X range prescribed by the plan.
+ The same applies to extra 64X numbers. -->
+ <nationalNumberPattern>
+ (?:
+ 3\d{2}|
+ 4[257]\d|
+ 5[34]\d|
+ 6(?:
+ 29|
+ 4[1-9]
+ )|
+ 85[02-46-9]|
+ 9[78]\d
+ )\d{4}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7}</possibleNumberPattern>
+ <exampleNumber>3123456</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- Mobile number patterns from the numbering plan are included here,
+ as well as 68x from wikipedia. -->
+ <nationalNumberPattern>
+ (?:
+ 68|
+ 7(?:
+ [126]\d|
+ 3[1-9]
+ )
+ )\d{5}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7,8}</possibleNumberPattern>
+ <exampleNumber>6812345</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>180\d{4}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}</possibleNumberPattern>
+ <exampleNumber>1801234</exampleNumber>
+ </tollFree>
+ <voip>
+ <!-- VSAT prefixes are here. -->
+ <nationalNumberPattern>275\d{4}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}</possibleNumberPattern>
+ <exampleNumber>2751234</exampleNumber>
+ </voip>
+ </territory>
+
+ <!-- Philippines -->
+ <!-- http://en.wikipedia.org/wiki/%2B63 -->
+ <territory id="PH" countryCode="63" internationalPrefix="00"
+ nationalPrefix="0">
+ <availableFormats>
+ <!--Area code separated from number. Area codes found here:
+ http://en.wikipedia.org/wiki/Telecommunications_in_the_Philippines#Area_Codes -->
+ <numberFormat nationalPrefixFormattingRule="($NP$FG)"
+ pattern="(2)(\d{3})(\d{4})">
+ <leadingDigits>2</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat nationalPrefixFormattingRule="($NP$FG)"
+ pattern="(\d{4})(\d{5})">
+ <leadingDigits>
+ 3(?:
+ 23|
+ 39|
+ 46
+ )|
+ 4(?:
+ 2[3-6]|
+ [35]9|
+ 4[26]|
+ 76
+ )|
+ 5(?:
+ 22|
+ 44
+ )|
+ 642|
+ 8(?:
+ 62|
+ 8[245]
+ )
+ </leadingDigits>
+ <leadingDigits>
+ 3(?:
+ 230|
+ 397|
+ 461
+ )|
+ 4(?:
+ 2(?:
+ 35|
+ [46]4|
+ 51
+ )|
+ 396|
+ 4(?:
+ 22|
+ 63
+ )|
+ 59[347]|
+ 76[15]
+ )|
+ 5(?:
+ 221|
+ 446
+ )|
+ 642[23]|
+ 8(?:
+ 622|
+ 8(?:
+ [24]2|
+ 5[13]
+ )
+ )
+ </leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat nationalPrefixFormattingRule="($NP$FG)"
+ pattern="(\d{5})(\d{4})">
+ <leadingDigits>
+ 346|
+ 4(?:
+ 27|
+ 9[35]
+ )|
+ 883
+ </leadingDigits>
+ <leadingDigits>
+ 3469|
+ 4(?:
+ 279|
+ 9(?:
+ 30|
+ 56
+ )
+ )|
+ 8834
+ </leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <!-- This rule is a fallback for the more specific area codes. -->
+ <numberFormat nationalPrefixFormattingRule="($NP$FG)"
+ pattern="([3-8]\d)(\d{3})(\d{4})">
+ <leadingDigits>[3-8]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat nationalPrefixFormattingRule="$NP$FG"
+ pattern="(9\d{2})(\d{3})(\d{4})">
+ <leadingDigits>9</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <!-- Formatting from http://www.uniontelecard.com/calling-guides/philippines/guide1.aspx -->
+ <numberFormat pattern="(1800)(\d{3})(\d{4})">
+ <leadingDigits>1</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(1800)(\d{1,2})(\d{3})(\d{4})">
+ <leadingDigits>1</leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>
+ [2-9]\d{7,9}|
+ 1800\d{7,9}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7,13}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 2|
+ 3[2-68]|
+ 4[2-9]|
+ 5[2-6]|
+ 6[2-58]|
+ 7[24578]|
+ 8[2-8]
+ )\d{7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7,9}</possibleNumberPattern>
+ <exampleNumber>21234567</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ 9(?:
+ 0[5-9]|
+ 1[025-9]|
+ 2[0-36-9]|
+ 3[0235-9]|
+ 7[349]|
+ [89]9
+ )\d{7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>9051234567</exampleNumber>
+ </mobile>
+ <!-- Information on toll-free numbers collected from searching the internet -->
+ <tollFree>
+ <nationalNumberPattern>1800\d{7,9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{11,13}</possibleNumberPattern>
+ <exampleNumber>180012345678</exampleNumber>
+ </tollFree>
+ <!-- No information can be found about other types of numbers (such as premium rate) in the
+ Philippines. -->
+ </territory>
+
+ <!-- Pakistan -->
+ <!-- http://www.itu.int/oth/T02020000A1/en -->
+ <!-- http://en.wikipedia.org/wiki/%2B92 -->
+ <territory id="PK" countryCode="92" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="($NP$FG)">
+ <availableFormats>
+ <!-- Universal Access Numbers (UAN) number format patterns first, so that these numbers are
+ formatted nicely by the AYTF. -->
+ <numberFormat pattern="(\d{2})(111)(\d{3})(\d{3})">
+ <leadingDigits>
+ (?:
+ 2[125]|
+ 4[0-246-9]|
+ 5[1-35-7]|
+ 6[1-8]|
+ 7[14]|
+ 8[16]|
+ 91
+ )1
+ </leadingDigits>
+ <leadingDigits>
+ (?:
+ 2[125]|
+ 4[0-246-9]|
+ 5[1-35-7]|
+ 6[1-8]|
+ 7[14]|
+ 8[16]|
+ 91
+ )11
+ </leadingDigits>
+ <leadingDigits>
+ (?:
+ 2[125]|
+ 4[0-246-9]|
+ 5[1-35-7]|
+ 6[1-8]|
+ 7[14]|
+ 8[16]|
+ 91
+ )111
+ </leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(111)(\d{3})(\d{3})">
+ <leadingDigits>
+ 2[349]|
+ 45|
+ 54|
+ 60|
+ 72|
+ 8[2-5]|
+ 9[2-9]
+ </leadingDigits>
+ <leadingDigits>
+ (?:
+ 2[349]|
+ 45|
+ 54|
+ 60|
+ 72|
+ 8[2-5]|
+ 9[2-9]
+ )\d1
+ </leadingDigits>
+ <leadingDigits>
+ (?:
+ 2[349]|
+ 45|
+ 54|
+ 60|
+ 72|
+ 8[2-5]|
+ 9[2-9]
+ )\d11
+ </leadingDigits>
+ <leadingDigits>
+ (?:
+ 2[349]|
+ 45|
+ 54|
+ 60|
+ 72|
+ 8[2-5]|
+ 9[2-9]
+ )\d111
+ </leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{2})(\d{7,8})">
+ <leadingDigits>
+ (?:
+ 2[125]|
+ 4[0-246-9]|
+ 5[1-35-7]|
+ 6[1-8]|
+ 7[14]|
+ 8[16]|
+ 91
+ )[2-9]
+ </leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{6,7})">
+ <leadingDigits>
+ 2[349]|
+ 45|
+ 54|
+ 60|
+ 72|
+ 8[2-5]|
+ 9[2-9]
+ </leadingDigits>
+ <leadingDigits>
+ (?:
+ 2[349]|
+ 45|
+ 54|
+ 60|
+ 72|
+ 8[2-5]|
+ 9[2-9]
+ )\d[2-9]
+ </leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(3\d{2})(\d{7})" nationalPrefixFormattingRule="$NP$FG">
+ <leadingDigits>3</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="([15]\d{3})(\d{5,6})">
+ <leadingDigits>
+ 58[12]|
+ 1
+ </leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <!-- This is from online examples. -->
+ <numberFormat pattern="(586\d{2})(\d{5})">
+ <leadingDigits>586</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="([89]00)(\d{3})(\d{2})" nationalPrefixFormattingRule="$NP$FG">
+ <leadingDigits>[89]00</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <!-- This is horribly complex because the country code is 92, and several area codes start
+ with 92, and the number length is widely variable. -->
+ <nationalNumberPattern>
+ 1\d{8}|
+ [2-8]\d{5,11}|
+ 9(?:
+ [013-9]\d{4,9}|
+ 2\d(?:
+ 111\d{6}|
+ \d{3,7}
+ )
+ )
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{6,12}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- The subscriber number length is not well defined for some area codes. From online
+ examples, we have come up with a heuristic that for 3-digit area codes, the subscriber
+ number will be 6 or 7 digits - for 2-digit area codes it will be 7, with the exceptions
+ of Karachi and Lahore (both 8). -->
+ <nationalNumberPattern>
+ (?:
+ 21|
+ 42
+ )[2-9]\d{7}|
+ (?:
+ 2[25]|
+ 4[0146-9]|
+ 5[1-35-7]|
+ 6[1-8]|
+ 7[14]|
+ 8[16]|
+ 91
+ )[2-9]\d{6}|
+ (?:
+ 2(?:
+ 3[2358]|
+ 4[2-4]|
+ 9[2-8]
+ )|
+ 45[3479]|
+ 54[2-467]|
+ 60[468]|
+ 72[236]|
+ 8(?:
+ 2[2-689]|
+ 3[23578]|
+ 4[3478]|
+ 5[2356]
+ )|
+ 9(?:
+ 1|
+ 2[2-8]|
+ 3[27-9]|
+ 4[2-6]|
+ 6[3569]|
+ 9[25-8]
+ )
+ )[2-9]\d{5,6}|
+ 58[126]\d{7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{6,10}</possibleNumberPattern>
+ <exampleNumber>2123456789</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- Adding 347 as SMSs have been successfully sent to these numbers and numbers can be
+ found online with these prefixes. -->
+ <nationalNumberPattern>
+ 3(?:
+ 0\d|
+ 1[2-5]|
+ 2[1-3]|
+ 3[1-6]|
+ 4[2-7]|
+ 64
+ )\d{7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>3012345678</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>800\d{5}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>80012345</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>900\d{5}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>90012345</exampleNumber>
+ </premiumRate>
+ <!-- These are referred to as UPT numbers in the plan. -->
+ <personalNumber>
+ <nationalNumberPattern>122\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <!-- The example number here is the test number from the plan. -->
+ <exampleNumber>122044444</exampleNumber>
+ </personalNumber>
+ <uan>
+ <!-- Data on what a UAN is is hard to come by. http://www.ptcl.com.pk has information under
+ http://www.ptcl.com.pk/contentb.php?NID=143#uan - which defines their format - but not
+ what type of number they are. We exclude Azad Jammu, Kashmir and Northern Areas here
+ since no online example UANs can be found, and they have an "access code" at the start,
+ making it difficult to guess what a UAN in these areas would look like. -->
+ <nationalNumberPattern>
+ (?:
+ 2(?:
+ [125]|
+ 3[2358]|
+ 4[2-4]|
+ 9[2-8]
+ )|
+ 4(?:
+ [0-246-9]|
+ 5[3479]
+ )|
+ 5(?:
+ [1-35-7]|
+ 4[2-467]
+ )|
+ 6(?:
+ [1-8]|
+ 0[468]
+ )|
+ 7(?:
+ [14]|
+ 2[236]
+ )|
+ 8(?:
+ [16]|
+ 2[2-689]|
+ 3[23578]|
+ 4[3478]|
+ 5[2356]
+ )|
+ 9(?:
+ 1|
+ 22|
+ 3[27-9]|
+ 4[2-6]|
+ 6[3569]|
+ 9[2-7]
+ )
+ )111\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{11,12}</possibleNumberPattern>
+ <exampleNumber>21111825888</exampleNumber>
+ </uan>
+ </territory>
+
+ <!-- Poland -->
+ <!-- http://en.wikipedia.org/wiki/%2B48 -->
+ <!--
+ http://www.uke.gov.pl/uke/index.jsp?place=Lead24&news_cat_id=277&news_id=3791&layout=9&page=text
+ (in Polish) -->
+ <territory id="PL" countryCode="48" internationalPrefix="00">
+ <availableFormats>
+ <numberFormat pattern="(\d{2})(\d{3})(\d{2})(\d{2})">
+ <leadingDigits>
+ [124]|
+ 3[2-4]|
+ 5[24-689]|
+ 6[1-3578]|
+ 7[14-7]|
+ 8[1-79]|
+ 9[145]
+ </leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ <!-- We are formatting 70 numbers as per mobile numbers, based on information from some
+ Poles that this is more usual. -->
+ <numberFormat pattern="(\d{3})(\d{3})(\d{3})">
+ <leadingDigits>
+ 39|
+ 5[013]|
+ 6[069]|
+ 7[0289]|
+ 8[08]
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[1-9]\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 1[2-8]|
+ 2[2-59]|
+ 3[2-4]|
+ 4[1-468]|
+ 5[24-689]|
+ 6[1-3578]|
+ 7[14-7]|
+ 8[1-79]|
+ 9[145]
+ )\d{7}
+ </nationalNumberPattern>
+ <exampleNumber>123456789</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ (?:
+ 5[013]|
+ 6[069]|
+ 7[289]|
+ 88
+ )\d{7}
+ </nationalNumberPattern>
+ <exampleNumber>512345678</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>800\d{6}</nationalNumberPattern>
+ <exampleNumber>800123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>70\d{7}</nationalNumberPattern>
+ <exampleNumber>701234567</exampleNumber>
+ </premiumRate>
+ <sharedCost>
+ <nationalNumberPattern>801\d{6}</nationalNumberPattern>
+ <exampleNumber>801234567</exampleNumber>
+ </sharedCost>
+ <voip>
+ <nationalNumberPattern>39\d{7}</nationalNumberPattern>
+ <exampleNumber>391234567</exampleNumber>
+ </voip>
+ </territory>
+
+ <!-- Saint Pierre and Miquelon (Collectivité territoriale de la République française) -->
+ <territory id="PM" countryCode="508" internationalPrefix="00"
+ nationalPrefix="0">
+ </territory>
+
+ <!-- Puerto Rico -->
+ <!-- http://www.itu.int/oth/T02020000AA/en -->
+ <territory id="PR" countryCode="1" leadingDigits="787|939"
+ nationalPrefix="1" internationalPrefix="011">
+ <generalDesc>
+ <!-- NANPA country - uses US formatting rules -->
+ <nationalNumberPattern>[5789]\d{9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}(?:\d{3})?</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 787|
+ 939
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <exampleNumber>7872345678</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ (?:
+ 787|
+ 939
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <exampleNumber>7872345678</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>
+ 8(?:
+ 00|
+ 55|
+ 66|
+ 77|
+ 88
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>8002345678</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>900[2-9]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>9002345678</exampleNumber>
+ </premiumRate>
+ <personalNumber>
+ <!-- http://www.nanpa.com/pdf/PL_416.pdf -->
+ <nationalNumberPattern>
+ 5(?:
+ 00|
+ 33|
+ 44
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>5002345678</exampleNumber>
+ </personalNumber>
+ </territory>
+
+ <!-- Palestinian Authority -->
+ <!-- http://en.wikipedia.org/wiki/%2B970 -->
+ <!-- http://www.wtng.info/wtng-970-ps.html -->
+ <!-- http://www.paltel.ps -->
+ <!-- Palestinian phone numbers can be reached through the Israeli country code (972) in addition
+ to the Palestinian country code (970) and so Palestinian landlines and mobile lines are a
+ subset of the Israeli formats. -->
+ <territory id="PS" countryCode="970" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="([2489])(2\d{2})(\d{4})">
+ <leadingDigits>[2489]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(5[69]\d)(\d{3})(\d{3})">
+ <leadingDigits>5</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat nationalPrefixFormattingRule="$FG"
+ pattern="(1[78]00)(\d{3})(\d{3})">
+ <leadingDigits>1[78]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <!-- 4 and 5 digit premium numbers will be formatted as one block by default. -->
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>
+ [24589]\d{7,8}|
+ 1(?:
+ [78]\d{8}|
+ [49]\d{2,3}
+ )
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{4,10}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 22[234789]|
+ 42[45]|
+ 82[01458]|
+ 92[369]
+ )\d{5}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7,8}</possibleNumberPattern>
+ <exampleNumber>22234567</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>5[69]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>599123456</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>1800\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>1800123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <!-- According to Paltel, premium numbers are 14xx and 19xxx -->
+ <nationalNumberPattern>
+ 1(?:
+ 4|
+ 9\d
+ )\d{2}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{4,5}</possibleNumberPattern>
+ <exampleNumber>19123</exampleNumber>
+ </premiumRate>
+ <sharedCost>
+ <nationalNumberPattern>1700\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>1700123456</exampleNumber>
+ </sharedCost>
+ </territory>
+
+ <!-- Portugal -->
+ <!-- http://www.anacom.pt/render.jsp?categoryId=279098 -->
+ <territory id="PT" countryCode="351" internationalPrefix="00">
+ <availableFormats>
+ <numberFormat pattern="([2-46-9]\d{2})(\d{3})(\d{3})">
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[2-46-9]\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ 2(?:
+ [12]\d|
+ [35][1-689]|
+ 4[1-59]|
+ 6[1-35689]|
+ 7[1-9]|
+ 8[1-69]|
+ 9[1256]
+ )\d{6}
+ </nationalNumberPattern>
+ <exampleNumber>212345678</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ 9(?:
+ [136]\d{2}|
+ 2[124-79]\d|
+ 4(?:
+ 80|
+ 9\d
+ )
+ )\d{5}
+ </nationalNumberPattern>
+ <exampleNumber>912345678</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>
+ 4\d{8}|
+ 80[02]\d{6}
+ </nationalNumberPattern>
+ <exampleNumber>800123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>71\d{7}</nationalNumberPattern>
+ <exampleNumber>712345678</exampleNumber>
+ </premiumRate>
+ <sharedCost>
+ <nationalNumberPattern>808\d{6}</nationalNumberPattern>
+ <exampleNumber>808123456</exampleNumber>
+ </sharedCost>
+ <voip>
+ <nationalNumberPattern>30\d{7}</nationalNumberPattern>
+ <exampleNumber>301234567</exampleNumber>
+ </voip>
+ </territory>
+
+ <!-- Palau -->
+ <territory id="PW" countryCode="680" internationalPrefix="011">
+ </territory>
+
+ <!-- Paraguay -->
+ <territory id="PY" countryCode="595" internationalPrefix="002"
+ nationalPrefix="0">
+ </territory>
+
+ <!-- Qatar -->
+ <!-- http://www.itu.int/oth/T02020000AB/en -->
+ <!-- http://wtng.info/wtng-qq.html -->
+ <territory id="QA" countryCode="974" internationalPrefix="00">
+ <availableFormats>
+ <numberFormat pattern="(8\d{2})(\d{4})">
+ <leadingDigits>8</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="([3-7]\d{3})(\d{4})">
+ <leadingDigits>[3-7]</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[3-8]\d{6,7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7,8}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>44\d{6}</nationalNumberPattern>
+ <exampleNumber>44123456</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ (?:
+ 33|
+ 55|
+ 66|
+ 77
+ )\d{6}
+ </nationalNumberPattern>
+ <exampleNumber>33123456</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>800\d{4}</nationalNumberPattern>
+ <exampleNumber>8001234</exampleNumber>
+ </tollFree>
+ <!-- No premiumRate information can be found. -->
+ </territory>
+
+ <!-- Réunion (French Departments and Territories in the Indian Ocean) -->
+ <!-- Note this shares the same country code as La Mayotte and French Southern Territories, and
+ the formatting patterns here are used by all of them. -->
+ <!-- http://www.itu.int/oth/T020200004B/en -->
+ <territory id="RE" countryCode="262" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG"
+ leadingDigits="262|6[49]|8" mainCountryForCode="true" >
+ <availableFormats>
+ <numberFormat pattern="([268]\d{2})(\d{2})(\d{2})(\d{2})">
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[268]\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- 0876 numbers are mentioned in the plan, but none in use can be found. -->
+ <nationalNumberPattern>262\d{6}</nationalNumberPattern>
+ <exampleNumber>262161234</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ 6(?:
+ 9[23]|
+ 47
+ )\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>692123456</exampleNumber>
+ </mobile>
+ <!-- 08* Numbers in Réunion are the same as those valid in France. -->
+ <tollFree>
+ <nationalNumberPattern>80\d{7}</nationalNumberPattern>
+ <exampleNumber>801234567</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>89[1-37-9]\d{6}</nationalNumberPattern>
+ <exampleNumber>891123456</exampleNumber>
+ </premiumRate>
+ <sharedCost>
+ <nationalNumberPattern>
+ 8(?:
+ 1[019]|
+ 2[0156]|
+ 84|
+ 90
+ )\d{6}
+ </nationalNumberPattern>
+ <exampleNumber>810123456</exampleNumber>
+ </sharedCost>
+ </territory>
+
+ <!-- Romania -->
+ <!-- http://www.itu.int/dms_pub/itu-t/oth/02/02/T02020000AC0001MSWE.doc -->
+ <!-- http://en.wikipedia.org/wiki/Romania_telephone_area_codes -->
+ <!-- http://en.wikipedia.org/wiki/Telephone_numbers_in_Romania -->
+ <!-- Extension prefix found online, confirmed by a Romanian. -->
+ <territory id="RO" countryCode="40" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG"
+ preferredExtnPrefix=" int ">
+ <availableFormats>
+ <numberFormat pattern="([237]\d)(\d{3})(\d{4})">
+ <leadingDigits>
+ [23]1|
+ 7
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{3})(\d{3})">
+ <leadingDigits>
+ [23][02-9]|
+ [89]
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[237-9]\d{8}</nationalNumberPattern>
+ <!-- Although the ITU plan says the number plan is open, this was changed in 2008 according
+ to wikipedia and people must dial the full number. For this reason the possible number
+ pattern is restricted to 9 digits. -->
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>[23][13-6]\d{7}</nationalNumberPattern>
+ <exampleNumber>211234567</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>7[1-8]\d{7}</nationalNumberPattern>
+ <exampleNumber>712345678</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>800\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>800123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>90[036]\d{6}</nationalNumberPattern>
+ <exampleNumber>900123456</exampleNumber>
+ </premiumRate>
+ <sharedCost>
+ <nationalNumberPattern>801\d{6}</nationalNumberPattern>
+ <exampleNumber>801123456</exampleNumber>
+ </sharedCost>
+ <personalNumber>
+ <nationalNumberPattern>802\d{6}</nationalNumberPattern>
+ <exampleNumber>802123456</exampleNumber>
+ </personalNumber>
+ </territory>
+
+ <!-- Serbia -->
+ <!-- http://www.itu.int/oth/T02020000B9/en -->
+ <territory id="RS" countryCode="381" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="([23]\d{2})(\d{4,7})">
+ <leadingDigits>
+ (?:
+ 2[389]|
+ 39
+ )0
+ </leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="([1-4]\d)(\d{4,8})">
+ <leadingDigits>
+ 1|
+ 2(?:
+ [0-24-7]|
+ [389][1-9]
+ )|
+ 3(?:
+ [0-8]|
+ 9[1-9]
+ )|
+ 42
+ </leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(6[0-689])(\d{3,10})">
+ <leadingDigits>6</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="([89]\d{2})(\d{3,6})">
+ <leadingDigits>[89]</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[1-46-9]\d{4,11}</nationalNumberPattern>
+ <possibleNumberPattern>\d{5,12}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>[1-3]\d{6,9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{5,10}</possibleNumberPattern>
+ <exampleNumber>1012345</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>6[0-689]\d{3,10}</nationalNumberPattern>
+ <possibleNumberPattern>\d{5,12}</possibleNumberPattern>
+ <exampleNumber>6012345</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>800\d{3,6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{6,9}</possibleNumberPattern>
+ <exampleNumber>80012345</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>
+ (?:
+ 9[0-2]|
+ 42
+ )\d{4,7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{6,9}</possibleNumberPattern>
+ <exampleNumber>90012345</exampleNumber>
+ </premiumRate>
+ </territory>
+
+ <!-- Russian Federation -->
+ <!-- http://www.itu.int/oth/T02020000AD/en -->
+ <!-- http://en.wikipedia.org/wiki/%2B7 -->
+ <territory id="RU" countryCode="7" internationalPrefix="8~10"
+ nationalPrefix="8" nationalPrefixFormattingRule="$NP ($FG)"
+ mainCountryForCode="true" >
+ <availableFormats>
+ <!-- Formatting from wikipedia, confirmed on Goverment websites such as
+ http://www.minjust.ru/ru/structure/contact/. Contains formatting instructions for
+ Kazakhstan as well. -->
+ <numberFormat pattern="([3489]\d{2})(\d{3})(\d{2})(\d{2})">
+ <leadingDigits>[34689]</leadingDigits>
+ <format>$1 $2-$3-$4</format>
+ </numberFormat>
+ <numberFormat pattern="(7\d{2})(\d{3})(\d{4})">
+ <leadingDigits>7</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[3489]\d{9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- The Ivanovo area code 493 was omitted on the official document, but this is still used
+ in the yellow pages, and on their own website and is listed on wikipedia. This applies
+ also to 395 (Irkutsk). Also including the 840 prefix for Abkhazia. -->
+ <nationalNumberPattern>
+ (?:
+ 3(?:
+ 0[12]|
+ 4[1-35-79]|
+ 5[1-3]|
+ 8[1-58]|
+ 9[0145]
+ )|
+ 4(?:
+ 01|
+ 1[1356]|
+ 2[13467]|
+ 7[1-5]|
+ 8[1-7]|
+ 9[1-689]
+ )|
+ 8(?:
+ 1[1-8]|
+ 2[01]|
+ 3[13-6]|
+ 4[0-8]|
+ 5[15]|
+ 6[1-35-7]|
+ 7[1-37-9]
+ )
+ )\d{7}
+ </nationalNumberPattern>
+ <exampleNumber>3011234567</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>9\d{9}</nationalNumberPattern>
+ <exampleNumber>9123456789</exampleNumber>
+ </mobile>
+ <tollFree>
+ <!-- The metadata states that 804 numbers are UAN numbers, but
+ teleum.ru/numbers/toll_free_804 states that they are now being offered as toll-free
+ numbers. -->
+ <nationalNumberPattern>80[04]\d{7}</nationalNumberPattern>
+ <exampleNumber>8001234567</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <!-- Covers tele-voting numbers as well. -->
+ <nationalNumberPattern>80[39]\d{7}</nationalNumberPattern>
+ <exampleNumber>8091234567</exampleNumber>
+ </premiumRate>
+ </territory>
+
+ <!-- Rwanda -->
+ <!-- http://www.rura.gov.rw/docs/RWANDA_NATIONAL_NUMBERING_PLAN.pdf -->
+ <territory id="RW" countryCode="250" internationalPrefix="000"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat nationalPrefixFormattingRule="$FG"
+ pattern="(25\d)(\d{3})(\d{3})">
+ <leadingDigits>2</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="([7-9]\d{2})(\d{3})(\d{3})">
+ <leadingDigits>[7-9]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[27-9]\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>25\d{7}</nationalNumberPattern>
+ <exampleNumber>250123456</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>7[258]\d{7}</nationalNumberPattern>
+ <exampleNumber>720123456</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>800\d{6}</nationalNumberPattern>
+ <exampleNumber>800123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>900\d{6}</nationalNumberPattern>
+ <exampleNumber>900123456</exampleNumber>
+ </premiumRate>
+ </territory>
+
+ <!-- Saudi Arabia -->
+ <!-- http://en.wikipedia.org/wiki/Telephone_numbers_in_Saudi_Arabia -->
+ <!-- http://www.itu.int/oth/T02020000B7/en -->
+ <territory id="SA" countryCode="966" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="([1-467])(\d{3})(\d{4})">
+ <leadingDigits>[1-467]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(9200)(\d{3})(\d{4})">
+ <leadingDigits>9</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(5\d)(\d{3})(\d{4})">
+ <leadingDigits>5</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(800)(\d{3})(\d{4})">
+ <leadingDigits>80</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(8111)(\d{3})(\d{3})">
+ <leadingDigits>81</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[1-9]\d{7,10}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7,11}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 1[24-7]|
+ 2[24-8]|
+ 3[35-8]|
+ 4[34-68]|
+ 6[2-5]|
+ 7[235-7]
+ )\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7,8}</possibleNumberPattern>
+ <exampleNumber>12345678</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- Including "Nomadic" numbers from the Telecom Company "Go" -->
+ <nationalNumberPattern>
+ (?:
+ 5[013-69]\d|
+ 8111
+ )\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{9,10}</possibleNumberPattern>
+ <exampleNumber>512345678</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>800\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>8001234567</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>9200\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{11}</possibleNumberPattern>
+ <exampleNumber>92001234567</exampleNumber>
+ </premiumRate>
+ </territory>
+
+ <!-- Solomon Islands -->
+ <territory id="SB" countryCode="677" internationalPrefix="00">
+ </territory>
+
+ <!-- Seychelles -->
+ <!-- http://www.itu.int/oth/T02020000BA/en -->
+ <!-- No evidence can be found that they still use their national prefix, so this is not
+ currently supported. -->
+ <territory id="SC" countryCode="248" internationalPrefix="0[0-2]"
+ preferredInternationalPrefix="00">
+ <availableFormats>
+ <numberFormat pattern="(\d{3})(\d{3})">
+ <leadingDigits>
+ [23578]|
+ [46][0-35-9]
+ </leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(\d)(\d{3})(\d{3})">
+ <leadingDigits>[46]4</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[2-8]\d{5,6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{6,7}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- Includes Fixed Cellular. We are putting Fixed Services numbers here for now, as we
+ cannot find any evidence that they are more expensive to call than other Fixed Line
+ services. ISDN and DID services are here too, since they seem to be also fixed-line
+ phone numbers. -->
+ <nationalNumberPattern>
+ (?:
+ 2(?:
+ 1[78]|
+ 2[14-69]|
+ 3[2-4]|
+ 4[1-36-8]|
+ 6[167]|
+ [89]\d
+ )|
+ 3(?:
+ 2[1-6]|
+ 4[4-6]|
+ 55|
+ 6[016]|
+ 7\d|
+ 8[0-589]|
+ 9[0-5]
+ )|
+ 5(?:
+ 5\d|
+ 6[0-2]
+ )|
+ 6(?:
+ 0[0-27-9]|
+ 1[0-478]|
+ 2[145]|
+ 3[02-4]|
+ 4[124]|
+ 6[015]|
+ 7\d|
+ 8[1-3]
+ )|
+ 78[0138]
+ )\d{3}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{6}</possibleNumberPattern>
+ <exampleNumber>217123</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ (?:
+ 5(?:
+ [1247-9]\d|
+ 6[3-9]
+ )|
+ 7(?:
+ [14679]\d|
+ 2[1-9]|
+ 8[24-79]
+ )
+ )\d{3}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{6}</possibleNumberPattern>
+ <exampleNumber>510123</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>8000\d{2}</nationalNumberPattern>
+ <possibleNumberPattern>\d{6}</possibleNumberPattern>
+ <exampleNumber>800000</exampleNumber>
+ </tollFree>
+ <voip>
+ <nationalNumberPattern>
+ (?:
+ 44[1-3]|
+ 647
+ )\d{4}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7}</possibleNumberPattern>
+ <exampleNumber>4410123</exampleNumber>
+ </voip>
+ </territory>
+
+ <!-- Sudan -->
+ <!-- http://www.itu.int/oth/T02020000C4/en -->
+ <territory id="SD" countryCode="249" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="(\d{2})(\d{3})(\d{4})">
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[19]\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- Retaining previous prefix as 18 since it seems still to be used. -->
+ <nationalNumberPattern>
+ 1(?:
+ [25]\d|
+ 8[3567]
+ )\d{6}
+ </nationalNumberPattern>
+ <exampleNumber>121231234</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>9[1259]\d{7}</nationalNumberPattern>
+ <exampleNumber>911231234</exampleNumber>
+ </mobile>
+ </territory>
+
+ <!-- Sweden -->
+ <!-- http://www.pts.se/upload/Ovrigt/Tele/Nummerfragor/Sv_nrplan_telefoni_enl_TU-T_rek_E.164.pdf -->
+ <!-- Formatting patterns are from that document and from the Swedish yellow pages
+ http://gulasidorna.eniro.se -->
+ <territory id="SE" countryCode="46" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="(8)(\d{2,3})(\d{2,3})(\d{2})">
+ <leadingDigits>8</leadingDigits>
+ <format>$1-$2 $3 $4</format>
+ </numberFormat>
+ <intlNumberFormat pattern="(8)(\d{2,3})(\d{2,3})(\d{2})">
+ <leadingDigits>8</leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </intlNumberFormat>
+ <numberFormat pattern="([1-69]\d)(\d{2,3})(\d{2})(\d{2})">
+ <leadingDigits>
+ 1[013689]|
+ 2[0136]|
+ 3[1356]|
+ 4[0246]|
+ 54|
+ 6[03]|
+ 90
+ </leadingDigits>
+ <format>$1-$2 $3 $4</format>
+ </numberFormat>
+ <intlNumberFormat pattern="([1-69]\d)(\d{2,3})(\d{2})(\d{2})">
+ <leadingDigits>
+ 1[013689]|
+ 2[0136]|
+ 3[1356]|
+ 4[0246]|
+ 54|
+ 6[03]|
+ 90
+ </leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </intlNumberFormat>
+ <numberFormat pattern="([1-69]\d)(\d{3})(\d{2})">
+ <leadingDigits>
+ 1[13689]|
+ 2[136]|
+ 3[1356]|
+ 4[0246]|
+ 54|
+ 6[03]|
+ 90
+ </leadingDigits>
+ <format>$1-$2 $3</format>
+ </numberFormat>
+ <intlNumberFormat pattern="([1-69]\d)(\d{3})(\d{2})">
+ <leadingDigits>
+ 1[13689]|
+ 2[136]|
+ 3[1356]|
+ 4[0246]|
+ 54|
+ 6[03]|
+ 90
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </intlNumberFormat>
+ <numberFormat pattern="(\d{3})(\d{2})(\d{2})(\d{2})">
+ <leadingDigits>
+ 1[2457]|
+ 2[2457-9]|
+ 3[0247-9]|
+ 4[1357-9]|
+ 5[0-35-9]|
+ 6[124-9]|
+ 9(?:
+ [125-8]|
+ 3[0-5]|
+ 4[0-3]
+ )
+ </leadingDigits>
+ <format>$1-$2 $3 $4</format>
+ </numberFormat>
+ <intlNumberFormat pattern="(\d{3})(\d{2})(\d{2})(\d{2})">
+ <leadingDigits>
+ 1[2457]|
+ 2[2457-9]|
+ 3[0247-9]|
+ 4[1357-9]|
+ 5[0-35-9]|
+ 6[124-9]|
+ 9(?:
+ [125-8]|
+ 3[0-5]|
+ 4[0-3]
+ )
+ </leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </intlNumberFormat>
+ <numberFormat pattern="(\d{3})(\d{2,3})(\d{2})">
+ <leadingDigits>
+ 1[2457]|
+ 2[2457-9]|
+ 3[0247-9]|
+ 4[1357-9]|
+ 5[0-35-9]|
+ 6[124-9]|
+ 9(?:
+ [125-8]|
+ 3[0-5]|
+ 4[0-3]
+ )
+ </leadingDigits>
+ <format>$1-$2 $3</format>
+ </numberFormat>
+ <intlNumberFormat pattern="(\d{3})(\d{2,3})(\d{2})">
+ <leadingDigits>
+ 1[2457]|
+ 2[2457-9]|
+ 3[0247-9]|
+ 4[1357-9]|
+ 5[0-35-9]|
+ 6[124-9]|
+ 9(?:
+ [125-8]|
+ 3[0-5]|
+ 4[0-3]
+ )
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </intlNumberFormat>
+ <numberFormat pattern="(7[02-467])(\d{3})(\d{2})(\d{2})">
+ <leadingDigits>7[02-467]</leadingDigits>
+ <format>$1-$2 $3 $4</format>
+ </numberFormat>
+ <intlNumberFormat pattern="(7[02-467])(\d{3})(\d{2})(\d{2})">
+ <leadingDigits>7[02-467]</leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </intlNumberFormat>
+ <numberFormat pattern="(20)(\d{2,3})(\d{2})">
+ <leadingDigits>20</leadingDigits>
+ <format>$1-$2 $3</format>
+ </numberFormat>
+ <intlNumberFormat pattern="(20)(\d{2,3})(\d{2})">
+ <leadingDigits>20</leadingDigits>
+ <format>$1 $2 $3</format>
+ </intlNumberFormat>
+ <numberFormat pattern="(9[034]\d)(\d{2})(\d{2})(\d{3})">
+ <leadingDigits>9[034]</leadingDigits>
+ <format>$1-$2 $3 $4</format>
+ </numberFormat>
+ <intlNumberFormat pattern="(9[034]\d)(\d{2})(\d{2})(\d{3})">
+ <leadingDigits>9[034]</leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </intlNumberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>\d{7,10}</nationalNumberPattern>
+ <possibleNumberPattern>\d{5,10}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ 1(?:
+ 0[1-8]\d{6}|
+ [136]\d{5,7}|
+ (?:
+ 2[0-35]|
+ 4[0-4]|
+ 5[0-25-9]|
+ 7[13-6]|
+ [89]\d
+ )\d{5,6}
+ )|
+ 2(?:
+ [136]\d{5,7}|
+ (?:
+ 2[0-7]|
+ 4[0136-8]|
+ 5[0-38]|
+ 7[018]|
+ 8[01]|
+ 9[0-57]
+ )\d{5,6}
+ )|
+ 3(?:
+ [356]\d{5,7}|
+ (?:
+ 0[0-4]|
+ 1\d|
+ 2[0-25]|
+ 4[056]|
+ 7[0-2]|
+ 8[0-3]|
+ 9[023]
+ )\d{5,6}
+ )|
+ 4(?:
+ [0246]\d{5,7}|
+ (?:
+ 1[01-8]|
+ 3[0135]|
+ 5[14-79]|
+ 7[0-246-9]|
+ 8[0156]|
+ 9[0-689]
+ )\d{5,6}
+ )|
+ 5(?:
+ 0[0-6]|
+ 1[1-5]|
+ 2[0-68]|
+ 3[0-4]|
+ 4\d|
+ 5[0-5]|
+ 6[03-5]|
+ 7[013]|
+ 8[0-79]|
+ 9[01]
+ )\d{5,6}|
+ 6(?:
+ [03]\d{5,7}|
+ (?:
+ 1[1-3]|
+ 2[0-4]|
+ 4[02-57]|
+ 5[0-37]|
+ 6[0-3]|
+ 7[0-2]|
+ 8[0247]|
+ 9[0-356]
+ )\d{5,6}
+ )|
+ 8\d{6,8}|
+ 9(?:
+ 0\d{5,7}|
+ (?:
+ 1[0-68]|
+ 2\d|
+ 3[02-59]|
+ 4[0-4]|
+ 5[0-4]|
+ 6[01]|
+ 7[0135-8]|
+ 8[01]
+ )\d{5,6}
+ )
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{5,9}</possibleNumberPattern>
+ <exampleNumber>8123456</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>7[02-46]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>701234567</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>20\d{4,7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{6,9}</possibleNumberPattern>
+ <exampleNumber>201234567</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>
+ 9(?:
+ 00|
+ 39|
+ 44
+ )\d{7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>9001234567</exampleNumber>
+ </premiumRate>
+ <sharedCost>
+ <nationalNumberPattern>77\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>771234567</exampleNumber>
+ </sharedCost>
+ </territory>
+
+ <!-- Singapore -->
+ <!-- http://www.ida.gov.sg/policies%20and%20regulation/20060508120124.aspx -->
+ <territory id="SG" countryCode="65" internationalPrefix="0[0-3][0-9]">
+ <availableFormats>
+ <numberFormat pattern="([3689]\d{3})(\d{4})">
+ <leadingDigits>
+ [369]|
+ 8[1-9]
+ </leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(1[89]00)(\d{3})(\d{4})">
+ <leadingDigits>1[89]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(7000)(\d{4})(\d{3})">
+ <leadingDigits>70</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(800)(\d{3})(\d{4})">
+ <leadingDigits>80</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <!-- We have a stricter national number pattern for numbers beginning with 6 to enable us to
+ easily strip off leading "65" country codes. -->
+ <nationalNumberPattern>
+ [36]\d{7}|
+ [17-9]\d{7,10}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{8,11}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>6[1-8]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>61234567</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ (?:
+ 8[1-5]|
+ 9[0-8]
+ )\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>81234567</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>1?800\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10,11}</possibleNumberPattern>
+ <exampleNumber>18001234567</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>1900\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{11}</possibleNumberPattern>
+ <exampleNumber>19001234567</exampleNumber>
+ </premiumRate>
+ <voip>
+ <nationalNumberPattern>3[0-2]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>31234567</exampleNumber>
+ </voip>
+ <uan>
+ <!-- Although not detailed in the plan beyond mentioning their existence, it seems 7000
+ numbers are used for companies. Most of the online examples are in fact alpha-numbers.
+ -->
+ <nationalNumberPattern>7000\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{11}</possibleNumberPattern>
+ <exampleNumber>70001234567</exampleNumber>
+ </uan>
+ <shortCode>
+ <nationalNumberPattern>
+ 1(?:
+ [0136]\d{2}|
+ 41\d|
+ [89](?:
+ [1-9]\d|
+ 0[1-9]
+ )|
+ [57]\d{2,3})|
+ 99\d
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{3,5}</possibleNumberPattern>
+ <exampleNumber>1312</exampleNumber>
+ </shortCode>
+ </territory>
+
+ <!-- Saint Helena and Tristan da Cunha -->
+ <!-- http://www.itu.int/oth/T02020000AF/en -->
+ <territory id="SH" countryCode="290" internationalPrefix="00">
+ <!-- Numbers are formatted as a block. -->
+ <generalDesc>
+ <nationalNumberPattern>[2-9]\d{3}</nationalNumberPattern>
+ <possibleNumberPattern>\d{4}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ [2-468]\d|
+ 7[01]
+ )\d{2}
+ </nationalNumberPattern>
+ <!-- Using St Helena Tourism as the example number. -->
+ <exampleNumber>2158</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>NA</nationalNumberPattern>
+ <possibleNumberPattern>NA</possibleNumberPattern>
+ </mobile>
+ <premiumRate>
+ <nationalNumberPattern>
+ (?:
+ [59]\d|
+ 7[2-9]
+ )\d{2}
+ </nationalNumberPattern>
+ <exampleNumber>5012</exampleNumber>
+ </premiumRate>
+ <shortCode>
+ <nationalNumberPattern>1\d{2,3}</nationalNumberPattern>
+ <possibleNumberPattern>\d{3,4}</possibleNumberPattern>
+ </shortCode>
+ </territory>
+
+ <!-- Slovenia -->
+ <!-- http://www.itu.int/oth/T02020000BE/en -->
+ <territory id="SI" countryCode="386" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat nationalPrefixFormattingRule="($NP$FG)"
+ pattern="(\d)(\d{3})(\d{2})(\d{2})">
+ <leadingDigits>
+ [12]|
+ 3[4-8]|
+ 4[24-8]|
+ 5[3-8]|
+ 7[3-8]
+ </leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ <numberFormat pattern="([3-7]\d)(\d{3})(\d{3})">
+ <leadingDigits>
+ [37][01]|
+ 4[019]|
+ 51|
+ 64
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="([89][09])(\d{3,6})">
+ <leadingDigits>[89][09]</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="([58]\d{2})(\d{5})">
+ <leadingDigits>
+ 59|
+ 8[1-3]
+ </leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>
+ [1-7]\d{6,7}|
+ [89]\d{4,7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{5,8}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 1\d|
+ 2[2-8]|
+ 3[4-8]|
+ 4[24-8]|
+ [57][3-8]
+ )\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7,8}</possibleNumberPattern>
+ <exampleNumber>11234567</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- We include 049 here - it is VoIP in the plan, but SMS messages have been successfully
+ delivered - and it is run by Mobitel. There are also mobile numbers found on the
+ internet with this prefix - it is apparently used in Kosovo. -->
+ <nationalNumberPattern>
+ (?:
+ [37][01]|
+ 4[019]|
+ 51|
+ 64
+ )\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>31234567</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>80\d{4,6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{6,8}</possibleNumberPattern>
+ <exampleNumber>80123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <!-- Includes televoting, mass calling -->
+ <nationalNumberPattern>
+ 90\d{4,6}|
+ 89[1-3]\d{2,5}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{5,8}</possibleNumberPattern>
+ <exampleNumber>90123456</exampleNumber>
+ </premiumRate>
+ <voip>
+ <nationalNumberPattern>
+ (?:
+ 59|
+ 8[1-3]
+ )\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>59012345</exampleNumber>
+ </voip>
+ </territory>
+
+ <!-- Svalbard -->
+ <!-- Metadata shared with Norway. -->
+ <!-- http://www.npt.no/pt_internet/numsys/E.164.pdf -->
+ <territory id="SJ" countryCode="47" internationalPrefix="00" leadingZeroPossible="true">
+ <generalDesc>
+ <nationalNumberPattern>
+ 0\d{4}|
+ [4789]\d{7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{5}(?:\d{3})?</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>79\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>79123456</exampleNumber>
+ </fixedLine>
+ <!-- Copied from Norway metadata. -->
+ <mobile>
+ <nationalNumberPattern>
+ (?:
+ 4[015-8]|
+ 9\d
+ )\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>41234567</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>80[01]\d{5}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>80012345</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>82[09]\d{5}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>82012345</exampleNumber>
+ </premiumRate>
+ <sharedCost>
+ <nationalNumberPattern>
+ 810(?:
+ 0[0-6]|
+ [2-8]\d
+ )\d{3}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>81021234</exampleNumber>
+ </sharedCost>
+ <personalNumber>
+ <nationalNumberPattern>880\d{5}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>88012345</exampleNumber>
+ </personalNumber>
+ <uan>
+ <nationalNumberPattern>
+ 0\d{4}|
+ 81(?:
+ 0(?:
+ 0[7-9]|
+ 1\d
+ )|
+ 5\d{2}
+ )\d{3}
+ </nationalNumberPattern>
+ <exampleNumber>01234</exampleNumber>
+ </uan>
+ </territory>
+
+ <!-- Slovakia -->
+ <!-- http://www.itu.int/oth/T02020000BD/en -->
+ <territory id="SK" countryCode="421" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="(2)(\d{3})(\d{3})(\d{2})">
+ <leadingDigits>2</leadingDigits>
+ <format>$1/$2 $3 $4</format>
+ </numberFormat>
+ <numberFormat pattern="([3-5]\d)(\d{3})(\d{2})(\d{2})">
+ <leadingDigits>[3-5]</leadingDigits>
+ <format>$1/$2 $3 $4</format>
+ </numberFormat>
+ <numberFormat pattern="([689]\d{2})(\d{3})(\d{3})">
+ <leadingDigits>[689]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[2-689]\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>[2-5]\d{8}</nationalNumberPattern>
+ <exampleNumber>212345678</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- 948 isn't in the number pattern, but many examples using this have been found, so
+ deeming it valid for now. -->
+ <nationalNumberPattern>
+ 9(?:
+ 0[1-8]|
+ 1[0-24-9]|
+ 4[0489]
+ )\d{6}
+ </nationalNumberPattern>
+ <exampleNumber>912123456</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>800\d{6}</nationalNumberPattern>
+ <exampleNumber>800123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>
+ 9(?:
+ [78]\d{7}|
+ 00\d{6}
+ )
+ </nationalNumberPattern>
+ <exampleNumber>900123456</exampleNumber>
+ </premiumRate>
+ <sharedCost>
+ <nationalNumberPattern>8[5-9]\d{7}</nationalNumberPattern>
+ <exampleNumber>850123456</exampleNumber>
+ </sharedCost>
+ <voip>
+ <nationalNumberPattern>
+ 6(?:
+ 5[0-4]|
+ 9[0-6]
+ )\d{6}
+ </nationalNumberPattern>
+ <exampleNumber>690123456</exampleNumber>
+ </voip>
+ </territory>
+
+ <!-- Sierra Leone -->
+ <!-- http://www.itu.int/oth/T02020000BB/en -->
+ <territory id="SL" countryCode="232" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="($NP$FG)">
+ <availableFormats>
+ <!-- Following formatting of online yellow pages www.leonedirect.com -->
+ <numberFormat pattern="(\d{2})(\d{6})">
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[2-578]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{6,8}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>[235]2[2-4][2-9]\d{4}</nationalNumberPattern>
+ <exampleNumber>22221234</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- Adding prefix 50 because it was found in online numbers and this is supported by
+ http://www.wtng.info/wtng-232-sl.html - although the data may be outdated, since no
+ further information about Datatel can be found. -->
+ <nationalNumberPattern>
+ (?:
+ 25|
+ 3[03]|
+ 44|
+ 5[056]|
+ 7[6-8]|
+ 88
+ )[1-9]\d{5}
+ </nationalNumberPattern>
+ <exampleNumber>25123456</exampleNumber>
+ </mobile>
+ </territory>
+
+ <!-- San Marino -->
+ <!-- http://www.itu.int/oth/T02020000B5/en -->
+ <!-- http://en.wikipedia.org/wiki/%2B39 (Information about Italy) -->
+ <!-- http://en.wikipedia.org/wiki/%2B378-->
+ <!-- San Marino fixed-line numbers have an area code of "0549". However, this seems to be
+ optional when dialling from outside the country; the phone number can be reached both with
+ and without this area code. The nationalPrefixForParsing and nationalPrefixTransformRule
+ are used to ensure that if the 0549 is not present, it will be added. -->
+ <territory id="SM" countryCode="378" internationalPrefix="00"
+ nationalPrefixForParsing="(?:0549)?([89]\d{5})" nationalPrefixTransformRule="0549$1"
+ leadingZeroPossible="true">
+ <availableFormats>
+ <numberFormat pattern="(\d{2})(\d{2})(\d{2})(\d{2})">
+ <leadingDigits>[5-7]</leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ <intlNumberFormat pattern="(\d{2})(\d{2})(\d{2})(\d{2})">
+ <leadingDigits>[5-7]</leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </intlNumberFormat>
+ <!-- We follow the guidelines of the yellow-pages when formatting in national format. -->
+ <numberFormat pattern="(0549)(\d{6})">
+ <leadingDigits>0</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <!-- We follow the guidelines of the Telecommunications Document published on ITU when
+ formatting in international format. -->
+ <intlNumberFormat pattern="(0549)(\d{6})">
+ <leadingDigits>0</leadingDigits>
+ <format>($1) $2</format>
+ </intlNumberFormat>
+ <!-- A rule in case the number has been stored without the leading 0549 necessary for
+ fixed-lines. -->
+ <numberFormat pattern="(\d{6})">
+ <leadingDigits>[89]</leadingDigits>
+ <format>0549 $1</format>
+ </numberFormat>
+ <intlNumberFormat pattern="(\d{6})">
+ <leadingDigits>[89]</leadingDigits>
+ <format>(0549) $1</format>
+ </intlNumberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[05-7]\d{7,9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{6,10}</possibleNumberPattern>
+ </generalDesc>
+ <!-- Example numbers provided by the Telecommunications Services. -->
+ <fixedLine>
+ <nationalNumberPattern>
+ 0549(?:
+ 8[0157-9]|
+ 9\d
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>0549886377</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>6[16]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>66661212</exampleNumber>
+ </mobile>
+ <premiumRate>
+ <!-- Includes Video Call numbers. -->
+ <nationalNumberPattern>7[178]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>71123456</exampleNumber>
+ </premiumRate>
+ <voip>
+ <nationalNumberPattern>5[158]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>58001110</exampleNumber>
+ </voip>
+ </territory>
+
+ <!-- Senegal -->
+ <!-- http://www.itu.int/oth/T02020000B8/en -->
+ <territory id="SN" countryCode="221" internationalPrefix="00">
+ <availableFormats>
+ <!-- Using yellow pages and online telecom company formatting, rather than that implied in
+ the national numbering plan. -->
+ <numberFormat pattern="(\d{2})(\d{3})(\d{2})(\d{2})">
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[37]\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ 3(?:
+ 010|
+ 3(?:
+ 8[1-9]|
+ 9[2-9]
+ )
+ )\d{5}
+ </nationalNumberPattern>
+ <exampleNumber>301012345</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- Adding 77 7[45]X and 77 9[0-6]X from online searches and from numbers successfully
+ delivered by the wireless team. -->
+ <nationalNumberPattern>
+ 7(?:
+ 0[1256]0|
+ 6(?:
+ 1[23]|
+ 2[89]|
+ 3[3489]|
+ 4[6-9]|
+ 5[1-389]|
+ 6[6-9]|
+ 7[45]|
+ 8[3-8]
+ )|
+ 7(?:
+ 1[014-8]|
+ 2[0-7]|
+ 3[0-35-8]|
+ 4[0-6]|
+ [56]\d|
+ 7[0-589]|
+ 8[01]|
+ 9[0-6]
+ )
+ )\d{5}
+ </nationalNumberPattern>
+ <exampleNumber>701012345</exampleNumber>
+ </mobile>
+ <voip>
+ <nationalNumberPattern>33301\d{4}</nationalNumberPattern>
+ <exampleNumber>333011234</exampleNumber>
+ </voip>
+ </territory>
+
+ <!-- Somalia -->
+ <!-- http://www.itu.int/oth/T02020000C0/en -->
+ <!-- This document seems to cover only a small set of prefixes in Somalia.
+ Somalia has limited information available, and the numerous telecom carriers
+ were previously working under an unregulated environment. The extra prefixes
+ were added from the contact phone numbers of the countries main telecom
+ operators. See regression tests for more details. -->
+ <territory id="SO" countryCode="252" internationalPrefix="00">
+ <availableFormats>
+ <!-- These follow formats online, such as www.hortel.net/contact_us.html -->
+ <numberFormat pattern="([13-5])(\d{6})">
+ <leadingDigits>[13-5]</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <!-- Unfortunately numbers beginning with 1 are hard to format based on prefixes, since it
+ depends on number length. -->
+ <numberFormat pattern="([19]\d)(\d{6})">
+ <leadingDigits>15|9</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[13-59]\d{6,7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7,8}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 5[57-9]|
+ [134]\d
+ )\d{5}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7}</possibleNumberPattern>
+ <!-- Example numbers are test numbers from the document. -->
+ <exampleNumber>5522010</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ (?:
+ 9[01]|
+ 15
+ )\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>90792024</exampleNumber>
+ </mobile>
+ </territory>
+
+ <!-- Suriname -->
+ <territory id="SR" countryCode="597" internationalPrefix="00">
+ </territory>
+
+ <!-- Sao Tome and Principe -->
+ <!-- http://www.itu.int/oth/T02020000B6/en -->
+ <territory id="ST" countryCode="239" internationalPrefix="00">
+ <availableFormats>
+ <numberFormat pattern="(\d{3})(\d{4})">
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[29]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>22\d{5}</nationalNumberPattern>
+ <exampleNumber>2221234</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>9[89]\d{5}</nationalNumberPattern>
+ <exampleNumber>9812345</exampleNumber>
+ </mobile>
+ </territory>
+
+ <!-- El Salvador -->
+ <!-- http://www.itu.int/oth/T020200003F/en
+ http://www.siget.gob.sv/BusquedaPublica.aspx?pagina=3&tipo=27&titulo=t8&sector=2&ordenar=&dir=DESC
+ -->
+ <territory id="SV" countryCode="503" internationalPrefix="00">
+ <availableFormats>
+ <numberFormat pattern="(\d{4})(\d{4})">
+ <leadingDigits>[27]</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{4})">
+ <leadingDigits>[89]</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{4})(\d{4})">
+ <leadingDigits>[89]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>
+ [27]\d{7}|
+ [89]\d{6}(?:\d{4})?
+ </nationalNumberPattern>
+ <possibleNumberPattern>
+ \d{7,8}|
+ \d{11}
+ </possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- Numbers starting with 20, 27, 28 and 29 are reserved but not yet used. -->
+ <nationalNumberPattern>2[1-6]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>21234567</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>7\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>70123456</exampleNumber>
+ </mobile>
+ <tollFree>
+ <!-- Toll free numbers are either 800 NNNN or 800 NNNN NNNN. -->
+ <nationalNumberPattern>800\d{4}(?:\d{4})?</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}(?:\d{4})?</possibleNumberPattern>
+ <exampleNumber>8001234</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <!-- Premium rate numbers are either 900 NNNN or 900 NNNN NNNN. -->
+ <nationalNumberPattern>900\d{4}(?:\d{4})?</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}(?:\d{4})?</possibleNumberPattern>
+ <exampleNumber>9001234</exampleNumber>
+ </premiumRate>
+ </territory>
+
+ <!-- Syrian Arab Republic -->
+ <!-- http://www.itu.int/oth/T02020000C9/en -->
+ <territory id="SY" countryCode="963" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="(\d{2})(\d{3})(\d{3,4})">
+ <leadingDigits>[1-5]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(9[3-689])(\d{4})(\d{3})">
+ <leadingDigits>9</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[1-59]\d{7,8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{6,9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 1(?:
+ 1\d?|
+ 4\d|
+ [2356]
+ )|
+ 2[1-35]|
+ 3(?:
+ 1\d|
+ [34]
+ )|
+ 4[13]|
+ 5[1-3]
+ )\d{6}
+ </nationalNumberPattern>
+ <exampleNumber>112345678</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- 945, 967 and 991 numbers are added as SMS messages have been successfully delivered to
+ these numbers, and they are also widely present on the Internet. -->
+ <nationalNumberPattern>
+ 9(?:
+ 3[23]|
+ 4[457]|
+ 55|
+ 6[67]|
+ 88|
+ 9[19]
+ )\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>944567890</exampleNumber>
+ </mobile>
+ <!-- No tollFree or premiumRate information can be found. -->
+ </territory>
+
+ <!-- Swaziland -->
+ <!-- http://www.itu.int/oth/T02020000C6/en -->
+ <territory id="SZ" countryCode="268" internationalPrefix="00" leadingZeroPossible="true">
+ <availableFormats>
+ <numberFormat pattern="(\d{4})(\d{4})">
+ <leadingDigits>[027]</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[027]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ </generalDesc>
+ <noInternationalDialling>
+ <nationalNumberPattern>0800\d{4}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>08001234</exampleNumber>
+ </noInternationalDialling>
+ <fixedLine>
+ <nationalNumberPattern>
+ 2(?:
+ 2(?:
+ 0[07]|
+ [13]7|
+ 2[57]
+ )|
+ 3(?:
+ 0[34]|
+ [1278]3|
+ 3[23]|
+ [46][34]
+ )|
+ (?:
+ 40[4-69]|
+ 67
+ )|
+ 5(?:
+ 0[5-7]|
+ 1[6-9]|
+ [23][78]|
+ 48|
+ 5[01]
+ )
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>22171234</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>7[6-8]\d{6}</nationalNumberPattern>
+ <exampleNumber>76123456</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>0800\d{4}</nationalNumberPattern>
+ <exampleNumber>08001234</exampleNumber>
+ </tollFree>
+ </territory>
+
+ <!-- Turks and Caicos Islands -->
+ <!-- http://www.itu.int/oth/T02020000D8/en -->
+ <territory id="TC" countryCode="1" leadingDigits="649"
+ nationalPrefix="1" internationalPrefix="011">
+ <generalDesc>
+ <!-- NANPA country - uses US formatting rules -->
+ <nationalNumberPattern>[5689]\d{9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}(?:\d{3})?</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ 649(?:
+ 712|
+ 9(?:
+ 4\d|
+ 50
+ )
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>6497121234</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ 649(?:
+ 2(?:
+ 3[12]|
+ 4[1-5]
+ )|
+ 3(?:
+ 3[1-39]|
+ 4[1-57]
+ )|
+ 4[34][12]
+ )\d{4}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>6492311234</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>
+ 8(?:
+ 00|
+ 55|
+ 66|
+ 77|
+ 88
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>8002345678</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>900[2-9]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>9002345678</exampleNumber>
+ </premiumRate>
+ <personalNumber>
+ <!-- http://www.nanpa.com/pdf/PL_416.pdf -->
+ <nationalNumberPattern>
+ 5(?:
+ 00|
+ 33|
+ 44
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>5002345678</exampleNumber>
+ </personalNumber>
+ <voip>
+ <nationalNumberPattern>64971[01]\d{4}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>6497101234</exampleNumber>
+ </voip>
+ </territory>
+
+ <!-- Chad -->
+ <!-- http://www.itu.int/oth/T0202000029/en -->
+ <!-- The international prefix includes 16 as the international manual exchange. -->
+ <territory id="TD" countryCode="235" preferredInternationalPrefix="00"
+ internationalPrefix="00|16">
+ <availableFormats>
+ <numberFormat
+ pattern="(\d{2})(\d{2})(\d{2})(\d{2})">
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[2679]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ 22(?:
+ [3789]0|
+ 5[0-5]|
+ 6[89]
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>22501234</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- Sotel Tchad "SALAM" (77 XX XX XX) is classified as a fixed operator in the plan, but it
+ also says numbers starting with 7 are mobile numbers. Putting under mobile for now.
+ Also adding 63[5-7] from evidence of successful SMS delivery. -->
+ <nationalNumberPattern>
+ (?:
+ 6(?:
+ 3[0-7]|
+ 6\d
+ )|
+ 77\d|
+ 9(?:
+ 5[0-4]|
+ 9\d
+ )
+ )\d{5}
+ </nationalNumberPattern>
+ <exampleNumber>63012345</exampleNumber>
+ </mobile>
+ </territory>
+
+ <!-- French Southern Territories -->
+ <territory id="TF" countryCode="262" internationalPrefix="00"
+ nationalPrefix="0">
+ </territory>
+
+ <!-- Togo -->
+ <!-- http://www.itu.int/oth/T02020000D1/en -->
+ <territory id="TG" countryCode="228" internationalPrefix="00" leadingZeroPossible="true">
+ <availableFormats>
+ <numberFormat pattern="(\d{3})(\d{2})(\d{2})">
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[02-9]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 2[2-7]|
+ 3[23]|
+ 44|
+ 55|
+ 66|
+ 77
+ )\d{5}
+ </nationalNumberPattern>
+ <exampleNumber>2212345</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- Added prefix 09 because many mobile numbers were found with this. -->
+ <nationalNumberPattern>
+ (?:
+ 0[1-9]|
+ 7[56]|
+ 8[1-7]|
+ 9\d
+ )\d{5}
+ </nationalNumberPattern>
+ <exampleNumber>0112345</exampleNumber>
+ </mobile>
+ </territory>
+
+ <!-- Thailand -->
+ <!-- http://www.itu.int/dms_pub/itu-t/oth/02/02/T02020000CD0001MSWE.doc -->
+ <territory id="TH" countryCode="66" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <!-- Formatting patterns from wikipedia and the document itself -
+ http://en.wikipedia.org/wiki/%2B66 -->
+ <numberFormat pattern="(2)(\d{3})(\d{4})">
+ <leadingDigits>2</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="([3-7]\d)(\d{3})(\d{3,4})">
+ <leadingDigits>[3-7]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(8)(\d{4})(\d{4})">
+ <leadingDigits>8</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat nationalPrefixFormattingRule="$FG"
+ pattern="(1[89]00)(\d{3})(\d{3})">
+ <leadingDigits>1</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>
+ [2-8]\d{7,8}|
+ 1\d{9}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{8,10}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 2[1-9]|
+ 3[24-9]|
+ 4[2-5]|
+ 5[3-6]|
+ 7[3-7]
+ )\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ <exampleNumber>21234567</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- 8[02] numbers are added as SMS messages have been successfully delivered to these
+ numbers, and they are also widely present on the Internet. -->
+ <nationalNumberPattern>8\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>812345678</exampleNumber>
+ </mobile>
+ <!-- http://en.wikipedia.org/wiki/Toll-free_telephone_number -->
+ <tollFree>
+ <nationalNumberPattern>1800\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>1800123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>1900\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>1900123456</exampleNumber>
+ </premiumRate>
+ <voip>
+ <nationalNumberPattern>60\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>601234567</exampleNumber>
+ </voip>
+ </territory>
+
+ <!-- Tajikistan -->
+ <!-- http://www.itu.int/oth/T02020000CA/en -->
+ <territory id="TJ" countryCode="992" internationalPrefix="8~10"
+ nationalPrefix="8" nationalPrefixFormattingRule="($NP) $FG">
+ <availableFormats>
+ <numberFormat pattern="([349]\d{2})(\d{2})(\d{4})">
+ <leadingDigits>
+ [34]7|
+ 91[78]
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="([459]\d)(\d{3})(\d{4})">
+ <leadingDigits>
+ 4[48]|
+ 5|
+ 9(?:
+ 19|
+ [0235-9]
+ )
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(331700)(\d)(\d{2})">
+ <leadingDigits>331</leadingDigits>
+ <leadingDigits>3317</leadingDigits>
+ <leadingDigits>33170</leadingDigits>
+ <leadingDigits>331700</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{4})(\d)(\d{4})">
+ <leadingDigits>3[1-5]</leadingDigits>
+ <leadingDigits>
+ 3(?:
+ [1245]|
+ 3(?:
+ [02-9]|
+ 1[0-589]
+ )
+ )
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[3-59]\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{3,9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 3(?:
+ 1[3-5]|
+ 2[245]|
+ 3[12]|
+ 4[24-7]|
+ 5[25]|
+ 72
+ )|
+ 4(?:
+ 46|
+ 74|
+ 87
+ )
+ )\d{6}
+ </nationalNumberPattern>
+ <exampleNumber>372123456</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- Adding 90 prefix as SMS messages could be successfully delivered to these mobile
+ numbers. -->
+ <nationalNumberPattern>
+ (?:
+ 505|
+ 9[0-35-9]\d
+ )\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>917123456</exampleNumber>
+ </mobile>
+ <!-- No tollFree or premiumRate information can be found. -->
+ </territory>
+
+ <!-- Tokelau -->
+ <territory id="TK" countryCode="690" internationalPrefix="00">
+ </territory>
+
+ <!-- Timor-Leste (East Timor) -->
+ <!-- http://www.itu.int/oth/T02020000D0/en -->
+ <territory id="TL" countryCode="670" internationalPrefix="00">
+ <availableFormats>
+ <numberFormat pattern="(\d{3})(\d{4})">
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[2-47-9]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 2[1-5]|
+ 3[1-9]|
+ 4[1-4]
+ )\d{5}
+ </nationalNumberPattern>
+ <exampleNumber>2112345</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>7[2-4]\d{5}</nationalNumberPattern>
+ <exampleNumber>7212345</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>80\d{5}</nationalNumberPattern>
+ <exampleNumber>8012345</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>90\d{5}</nationalNumberPattern>
+ <exampleNumber>9012345</exampleNumber>
+ </premiumRate>
+ <personalNumber>
+ <nationalNumberPattern>70\d{5}</nationalNumberPattern>
+ <exampleNumber>7012345</exampleNumber>
+ </personalNumber>
+ </territory>
+
+ <!-- Turkmenistan -->
+ <!-- http://www.itu.int/oth/T02020000D7/en -->
+ <territory id="TM" countryCode="993" internationalPrefix="8~10"
+ nationalPrefix="8" nationalPrefixFormattingRule="$NP $FG">
+ <availableFormats>
+ <!-- There doesn't seem to be a standardized format. The format below is based on the
+ Turkmenistan embassy at
+ http://www.turkmenistanembassy.org/turkmen/info/contact.html -->
+ <numberFormat pattern="([1-6]\d)(\d{2})(\d{2})(\d{2})">
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[1-6]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 12\d|
+ 243|
+ [3-5]22
+ )\d{5}
+ </nationalNumberPattern>
+ <exampleNumber>12345678</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- Adding 68 as SMS messages have been successfully sent to numbers with this prefix. -->
+ <nationalNumberPattern>6[6-8]\d{6}</nationalNumberPattern>
+ <exampleNumber>66123456</exampleNumber>
+ </mobile>
+ <!-- No tollFree or premiumRate information can be found. -->
+ </territory>
+
+ <!-- Tunisia -->
+ <!-- http://www.itu.int/oth/T02020000D5/en -->
+ <territory id="TN" countryCode="216" internationalPrefix="00">
+ <availableFormats>
+ <numberFormat pattern="([247-9]\d)(\d{3})(\d{3})">
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[247-9]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>7\d{7}</nationalNumberPattern>
+ <exampleNumber>71234567</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ (?:
+ 2[0-7]|
+ 40|
+ 9\d
+ )\d{6}
+ </nationalNumberPattern>
+ <exampleNumber>20123456</exampleNumber>
+ </mobile>
+ <!-- These are listed as 'value added services' - pending further information, we add them
+ here for now. -->
+ <premiumRate>
+ <nationalNumberPattern>8[028]\d{6}</nationalNumberPattern>
+ <exampleNumber>80123456</exampleNumber>
+ </premiumRate>
+ </territory>
+
+ <!-- Tonga -->
+ <territory id="TO" countryCode="676" internationalPrefix="00">
+ </territory>
+
+ <!-- Turkey -->
+ <!-- http://en.wikipedia.org/wiki/%2B90 -->
+ <!-- http://www.itu.int/oth/T02020000D6/en -->
+ <territory id="TR" countryCode="90" internationalPrefix="00" nationalPrefix="0">
+ <availableFormats>
+ <numberFormat nationalPrefixFormattingRule="($NP$FG)" pattern="(\d{3})(\d{3})(\d{4})">
+ <leadingDigits>
+ [23]|
+ 4(?:
+ [0-35-9]|
+ 4[0-35-9]
+ )
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat nationalPrefixFormattingRule="$NP$FG" pattern="(\d{3})(\d{3})(\d{4})">
+ <leadingDigits>[589]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(444)(\d{1})(\d{3})">
+ <leadingDigits>444</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>
+ [2-589]\d{9}|
+ 444\d{4}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- Includes numbers starting with 392 for Northern Cyprus. -->
+ <nationalNumberPattern>
+ (?:
+ 2(?:
+ [13][26]|
+ [28][2468]|
+ [45][268]|
+ [67][246]
+ )|
+ 3(?:
+ [13][28]|
+ [24-6][2468]|
+ [78][02468]|
+ 92
+ )|
+ 4(?:
+ [16][246]|
+ [23578][2468]|
+ 4[26]
+ )
+ )\d{7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>2123456789</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ 5(?:
+ 0[1-35-7]|
+ 22|
+ 3\d|
+ 4[1-79]|
+ 5[1-5]|
+ 9[246]
+ )\d{7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>5012345678</exampleNumber>
+ </mobile>
+ <pager>
+ <nationalNumberPattern>512\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>5123456789</exampleNumber>
+ </pager>
+ <tollFree>
+ <nationalNumberPattern>800\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>8001234567</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>900\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>9001234567</exampleNumber>
+ </premiumRate>
+ <uan>
+ <!-- http://www.turktelekom.com.tr/tt/portal/News/Archive/7-digit-special-service-number-starting-with-444 -->
+ <nationalNumberPattern>
+ 444\d{4}|
+ 850\d{7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
+ <exampleNumber>4441444</exampleNumber>
+ </uan>
+ </territory>
+
+ <!-- Trinidad and Tobago -->
+ <!-- http://www.itu.int/oth/T02020000D4/en -->
+ <territory id="TT" countryCode="1" leadingDigits="868"
+ nationalPrefix="1" internationalPrefix="011">
+ <generalDesc>
+ <!-- NANPA country - uses US formatting rules -->
+ <nationalNumberPattern>[589]\d{9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}(?:\d{3})?</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ 868(?:
+ 2(?:
+ 01|
+ 2[1-4]
+ )|
+ 6(?:
+ 07|
+ 1[4-6]|
+ 2[1-9]|
+ [3-6]\d|
+ 7[0-79]|
+ 9[0-8]
+ )|
+ 82[12]
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>8682211234</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ 868(?:
+ 29\d|
+ 3(?:
+ 0[1-9]|
+ 1[02-9]|
+ [2-9]\d
+ )|
+ 4(?:
+ [679]\d|
+ 8[0-4]
+ )|
+ 6(?:
+ 20|
+ 78|
+ 8\d
+ )|
+ 7(?:
+ 1[02-9]|
+ [2-9]\d
+ )
+ )\d{4}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>8682911234</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>
+ 8(?:
+ 00|
+ 55|
+ 66|
+ 77|
+ 88
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>8002345678</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>900[2-9]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>9002345678</exampleNumber>
+ </premiumRate>
+ <personalNumber>
+ <!-- http://www.nanpa.com/pdf/PL_416.pdf -->
+ <nationalNumberPattern>
+ 5(?:
+ 00|
+ 33|
+ 44
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>5002345678</exampleNumber>
+ </personalNumber>
+ </territory>
+
+ <!-- Tuvalu -->
+ <!-- http://www.itu.int/oth/T02020000D9/en -->
+ <territory id="TV" countryCode="688" internationalPrefix="00">
+ <!-- Numbers are formatted as a block. -->
+ <generalDesc>
+ <nationalNumberPattern>[29]\d{4,5}</nationalNumberPattern>
+ <possibleNumberPattern>\d{5,6}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>2[02-9]\d{3}</nationalNumberPattern>
+ <possibleNumberPattern>\d{5}</possibleNumberPattern>
+ <exampleNumber>20123</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- Some numbers online can be found that are 5-digits long, and start with 90 or 91. We
+ don't know if these are valid or not - the ITU document excludes them - so are not
+ covering these for now. -->
+ <nationalNumberPattern>90\d{4}</nationalNumberPattern>
+ <possibleNumberPattern>\d{6}</possibleNumberPattern>
+ <exampleNumber>901234</exampleNumber>
+ </mobile>
+ </territory>
+
+ <!-- Taiwan, China -->
+ <!-- http://www.itu.int/dms_pub/itu-t/oth/02/02/T02020000EB0003MSWE.doc -->
+ <!-- Extension symbols found on the internet so far have been #, X and Ext -
+ so # has been chosen as the preferred extension prefix. -->
+ <territory id="TW" countryCode="886" internationalPrefix="0(?:0[25679]|19)"
+ nationalPrefix="0" preferredExtnPrefix="#" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="([2-8])(\d{3,4})(\d{4})">
+ <leadingDigits>
+ [2-7]|
+ 8[1-9]
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="([89]\d{2})(\d{3})(\d{3})">
+ <leadingDigits>
+ 80|
+ 9
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[2-9]\d{7,8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8,9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>[2-8]\d{7,8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8,9}</possibleNumberPattern>
+ <exampleNumber>21234567</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>9\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>912345678</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>800\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>800123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>900\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>900123456</exampleNumber>
+ </premiumRate>
+ </territory>
+
+ <!-- Tanzania -->
+ <!-- http://www.itu.int/dms_pub/itu-t/oth/02/02/T02020000CB0001MSWE.doc -->
+ <territory id="TZ" countryCode="255" internationalPrefix="00[056]"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="([24]\d)(\d{3})(\d{4})">
+ <leadingDigits>[24]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="([67]\d{2})(\d{3})(\d{3})">
+ <leadingDigits>[67]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <!-- Formatting for special numbers from www.tcra.go.tz -->
+ <numberFormat pattern="([89]\d{2})(\d{2})(\d{4})">
+ <leadingDigits>[89]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>\d{9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7,9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>2[2-8]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7,9}</possibleNumberPattern>
+ <exampleNumber>222345678</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ (?:
+ 6[158]|
+ 7[1-9]
+ )\d{7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>612345678</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>80[08]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>800123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>90\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>900123456</exampleNumber>
+ </premiumRate>
+ <sharedCost>
+ <nationalNumberPattern>
+ 8(?:
+ 40|
+ 6[01]
+ )\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>840123456</exampleNumber>
+ </sharedCost>
+ <voip>
+ <nationalNumberPattern>41\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>412345678</exampleNumber>
+ </voip>
+ </territory>
+
+ <!-- Ukraine -->
+ <!-- http://www.itu.int/oth/T02020000DB/en -->
+ <!-- http://en.wikipedia.org/wiki/%2B380 -->
+ <territory id="UA" countryCode="380" internationalPrefix="0~0"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <!-- City codes separated out. No definitive list has been found of what constitutes the
+ area code - http://www.ua.all-biz.info/guide/phonecodes is useful but not error-free.
+ Have used local yellow pages guidelines, Google searches and regression tests to
+ reverse-engineer these rules as well as bugs. -->
+ <numberFormat pattern="([3-69]\d)(\d{3})(\d{4})">
+ <leadingDigits>
+ 39|
+ 4(?:
+ [45][0-5]|
+ 87
+ )|
+ 5(?:
+ 0|
+ 6[37]|
+ 7[37]
+ )|
+ 6[36-8]|
+ 9[1-9]
+ </leadingDigits>
+ <leadingDigits>
+ 39|
+ 4(?:
+ [45][0-5]|
+ 87
+ )|
+ 5(?:
+ 0|
+ 6(?:
+ 3[14-7]|
+ 7
+ )|
+ 7[37]
+ )|
+ 6[36-8]|
+ 9[1-9]
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="([3-689]\d{2})(\d{3})(\d{3})">
+ <leadingDigits>
+ 3[1-8]2|
+ 4[1378]2|
+ 5(?:
+ [12457]2|
+ 6[24]
+ )|
+ 6(?:
+ [49]2|
+ [12][29]|
+ 5[24]
+ )|
+ 8|
+ 90
+ </leadingDigits>
+ <leadingDigits>
+ 3(?:
+ [1-46-8]2[013-9]|
+ 52
+ )|
+ 4[1378]2|
+ 5(?:
+ [12457]2|
+ 6[24]
+ )|
+ 6(?:
+ [49]2|
+ [12][29]|
+ 5[24]
+ )|
+ 8|
+ 90
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="([3-6]\d{3})(\d{5})">
+ <leadingDigits>
+ 3(?:
+ 5[013-9]|
+ [1-46-8]
+ )|
+ 4(?:
+ [137][013-9]|
+ 6|
+ [45][6-9]|
+ 8[4-6]
+ )|
+ 5(?:
+ [1245][013-9]|
+ 6[0135-9]|
+ 3|
+ 7[4-6]
+ )|
+ 6(?:
+ [49][013-9]|
+ 5[0135-9]|
+ [12][13-8]
+ )
+ </leadingDigits>
+ <leadingDigits>
+ 3(?:
+ 5[013-9]|
+ [1-46-8](?:
+ 22|
+ [013-9]
+ )
+ )|
+ 4(?:
+ [137][013-9]|
+ 6|
+ [45][6-9]|
+ 8[4-6]
+ )|
+ 5(?:
+ [1245][013-9]|
+ 6(?:
+ 3[02389]|
+ [015689]
+ )|
+ 3|
+ 7[4-6]
+ )|
+ 6(?:
+ [49][013-9]|
+ 5[0135-9]|
+ [12][13-8]
+ )
+ </leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[3-689]\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{5,9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 3[1-8]|
+ 4[13-8]|
+ 5[1-7]|
+ 6[12459]
+ )\d{7}
+ </nationalNumberPattern>
+ <exampleNumber>311234567</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ (?:
+ 39|
+ 50|
+ 6[36-8]|
+ 9[1-9]
+ )\d{7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>391234567</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>800\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>800123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>900\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>900123456</exampleNumber>
+ </premiumRate>
+ </territory>
+
+ <!-- Uganda -->
+ <!-- http://www.itu.int/dms_pub/itu-t/oth/02/02/T02020000F10001MSWE.doc -->
+ <!-- http://www.ucc.co.ug/licensing/ugandaNumberingPlan.pdf -->
+ <territory id="UG" countryCode="256" internationalPrefix="00[057]"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="([247-9]\d{2})(\d{6})">
+ <leadingDigits>
+ [7-9]|
+ 200|
+ 4(?:
+ 6[45]|
+ [7-9]
+ )
+ </leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="([34]\d)(\d{7})">
+ <leadingDigits>
+ 3|
+ 4(?:
+ [1-5]|
+ 6[0-36-9]
+ )
+ </leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(2024)(\d{5})">
+ <leadingDigits>202</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>\d{9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{5,9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ 3\d{8}|
+ 4(?:
+ [1-6]\d|
+ 7[136]|
+ 8[1356]|
+ 96
+ )\d{6}|
+ 20(?:
+ 0\d|
+ 24
+ )\d{5}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{5,9}</possibleNumberPattern>
+ <exampleNumber>312345678</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ 7(?:
+ [1578]\d|
+ 0[0-4]
+ )\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>712345678</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>800[123]\d{5}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>800123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>90[123]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>901123456</exampleNumber>
+ </premiumRate>
+ </territory>
+
+ <!-- United States -->
+ <!-- http://www.nanpa.com/reports/reports_npa.html -->
+ <!-- http://en.wikipedia.org/wiki/North_American_Numbering_Plan -->
+ <!-- Note the national prefix of US is the same as its country code, and when formatting phone
+ numbers in the national format, it is not included. Therefore, we omit it here to make
+ formatting consistent with the rest of the world. The same applies to all the
+ countries/regions under NANPA -->
+ <!-- The national prefix of "1" here is the same as the country code. It is not used by default
+ when formatting, but is set here so that users who are calling formatByPattern can specify
+ NationalPrefixFormattingRule if they want to. -->
+ <territory id="US" countryCode="1" internationalPrefix="011"
+ mainCountryForCode="true" nationalPrefix="1">
+ <availableFormats>
+ <numberFormat pattern="(\d{3})(\d{3})(\d{4})">
+ <format>($1) $2-$3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{4})">
+ <format>$1-$2</format>
+ </numberFormat>
+ <!-- A different pattern is used when formatting internationally, as the area code is no
+ longer optional and should not be in brackets. -->
+ <intlNumberFormat pattern="(\d{3})(\d{3})(\d{4})">
+ <format>$1-$2-$3</format>
+ </intlNumberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[2-9]\d{9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}(?:\d{3})?</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 2(?:
+ 0[1-35-9]|
+ 1[02-9]|
+ 2[4589]|
+ 3[149]|
+ 4[08]|
+ 5[1-46]|
+ 6[0279]|
+ 7[06]|
+ 8[13]
+ )|
+ 3(?:
+ 0[1-57-9]|
+ 1[02-9]|
+ 2[0135]|
+ 3[014679]|
+ 47|
+ 5[12]|
+ 6[01]|
+ 8[056]
+ )|
+ 4(?:
+ 0[124-9]|
+ 1[02-579]|
+ 2[3-5]|
+ 3[0245]|
+ 4[0235]|
+ 58|
+ 69|
+ 7[0589]|
+ 8[04]
+ )|
+ 5(?:
+ 0[1-57-9]|
+ 1[0235-8]|
+ 20|
+ 3[0149]|
+ 4[01]|
+ 5[19]|
+ 6[1-37]|
+ 7[013-5]|
+ 8[056]
+ )|
+ 6(?:
+ 0[1-35-9]|
+ 1[024-9]|
+ 2[036]|
+ 3[016]|
+ 4[16]|
+ 5[017]|
+ 6[0-29]|
+ 78|
+ 8[12]
+ )|
+ 7(?:
+ 0[1-46-8]|
+ 1[2-9]|
+ 2[047]|
+ 3[124]|
+ 4[07]|
+ 5[47]|
+ 6[02359]|
+ 7[02-59]|
+ 8[156]
+ )|
+ 8(?:
+ 0[1-68]|
+ 1[02-8]|
+ 28|
+ 3[0-25]|
+ 4[3578]|
+ 5[06-9]|
+ 6[02-5]|
+ 7[028]
+ )|
+ 9(?:
+ 0[1346-9]|
+ 1[02-9]|
+ 2[0589]|
+ 3[1678]|
+ 4[0179]|
+ 5[1246]|
+ 7[0-3589]|
+ 8[059]
+ )
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <exampleNumber>2012345678</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ (?:
+ 2(?:
+ 0[1-35-9]|
+ 1[02-9]|
+ 2[4589]|
+ 3[149]|
+ 4[08]|
+ 5[1-46]|
+ 6[0279]|
+ 7[06]|
+ 8[13]
+ )|
+ 3(?:
+ 0[1-57-9]|
+ 1[02-9]|
+ 2[0135]|
+ 3[014679]|
+ 47|
+ 5[12]|
+ 6[01]|
+ 8[056]
+ )|
+ 4(?:
+ 0[124-9]|
+ 1[02-579]|
+ 2[3-5]|
+ 3[0245]|
+ 4[0235]|
+ 58|
+ 69|
+ 7[0589]|
+ 8[04]
+ )|
+ 5(?:
+ 0[1-57-9]|
+ 1[0235-8]|
+ 20|
+ 3[0149]|
+ 4[01]|
+ 5[19]|
+ 6[1-37]|
+ 7[013-5]|
+ 8[056]
+ )|
+ 6(?:
+ 0[1-35-9]|
+ 1[024-9]|
+ 2[036]|
+ 3[016]|
+ 4[16]|
+ 5[017]|
+ 6[0-29]|
+ 78|
+ 8[12]
+ )|
+ 7(?:
+ 0[1-46-8]|
+ 1[2-9]|
+ 2[047]|
+ 3[124]|
+ 4[07]|
+ 5[47]|
+ 6[02359]|
+ 7[02-59]|
+ 8[156]
+ )|
+ 8(?:
+ 0[1-68]|
+ 1[02-8]|
+ 28|
+ 3[0-25]|
+ 4[3578]|
+ 5[06-9]|
+ 6[02-5]|
+ 7[028]
+ )|
+ 9(?:
+ 0[1346-9]|
+ 1[02-9]|
+ 2[0589]|
+ 3[1678]|
+ 4[0179]|
+ 5[1246]|
+ 7[0-3589]|
+ 8[059]
+ )
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <exampleNumber>2012345678</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>
+ 8(?:
+ 00|
+ 55|
+ 66|
+ 77|
+ 88
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>8002345678</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>900[2-9]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>9002345678</exampleNumber>
+ </premiumRate>
+ <personalNumber>
+ <!-- http://www.nanpa.com/pdf/PL_416.pdf -->
+ <nationalNumberPattern>
+ 5(?:
+ 00|
+ 33|
+ 44
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>5002345678</exampleNumber>
+ </personalNumber>
+ </territory>
+
+ <!-- Uruguay -->
+ <territory id="UY" countryCode="598" internationalPrefix="00"
+ nationalPrefix="0">
+ </territory>
+
+ <!-- Uzbekistan -->
+ <!-- http://www.itu.int/oth/T02020000E1/en -->
+ <territory id="UZ" countryCode="998" internationalPrefix="8~10"
+ nationalPrefix="8" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="([679]\d)(\d{3})(\d{2})(\d{2})">
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[679]\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7,9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- Adding 70 prefix as suggested by http://www.ttts.uz/eng/telephone_codes/codes_uzb_eng
+ -->
+ <nationalNumberPattern>
+ (?:
+ 6[125679]|
+ 7[0-69]
+ )\d{7}
+ </nationalNumberPattern>
+ <exampleNumber>612345678</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- Adding 9[45] as suggested by http://www.ucell.uz/en/for_subscribers/how_to_call.html
+ -->
+ <nationalNumberPattern>9[0-57-9]\d{7}</nationalNumberPattern>
+ <exampleNumber>912345678</exampleNumber>
+ </mobile>
+ <!-- No tollFree or premiumRate information can be found. -->
+ </territory>
+
+ <!-- Vatican City -->
+ <!-- http://en.wikipedia.org/wiki/Telephone_numbers_in_Vatican_City -->
+ <!-- Note that numbers here are also accessible via Italy (+39 and prefix of 06 698) but can
+ also be dialled with the Vatican City country code. -->
+ <territory id="VA" countryCode="379" internationalPrefix="00" leadingZeroPossible="true">
+ <availableFormats>
+ <numberFormat pattern="(06)(\d{4})(\d{4})">
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>06\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>06698\d{5}</nationalNumberPattern>
+ <exampleNumber>0669812345</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- We have no information on mobile numbers from the Vatican. It is probable that they use
+ Italian mobile contracts. -->
+ <nationalNumberPattern>N/A</nationalNumberPattern>
+ <possibleNumberPattern>N/A</possibleNumberPattern>
+ </mobile>
+ <!-- No information exists about other types of numbers. -->
+ </territory>
+
+ <!-- Saint Vincent and the Grenadines -->
+ <!-- http://www.itu.int/oth/T02020000B3/en -->
+ <territory id="VC" countryCode="1" leadingDigits="784"
+ nationalPrefix="1" internationalPrefix="011">
+ <generalDesc>
+ <!-- NANPA country - uses US formatting rules -->
+ <nationalNumberPattern>[5789]\d{9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}(?:\d{3})?</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ 784(?:
+ 266|
+ 3(?:
+ 6[6-9]|
+ 7\d|
+ 8[0-24-6]
+ )|
+ 4(?:
+ 38|
+ 5[0-36-8]|
+ 8\d|
+ 9[01]
+ )|
+ 555|
+ 638|
+ 784
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>7842661234</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ 784(?:
+ 4(?:
+ 3[0-24]|
+ 5[45]|
+ 9[2-5]
+ )|
+ 5(?:
+ 2[6-9]|
+ 3[0-3]|
+ 93
+ )
+ )\d{4}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>7844301234</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>
+ 8(?:
+ 00|
+ 55|
+ 66|
+ 77|
+ 88
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>8002345678</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>900[2-9]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>9002345678</exampleNumber>
+ </premiumRate>
+ <personalNumber>
+ <!-- http://www.nanpa.com/pdf/PL_416.pdf -->
+ <nationalNumberPattern>
+ 5(?:
+ 00|
+ 33|
+ 44
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>5002345678</exampleNumber>
+ </personalNumber>
+ </territory>
+
+ <!-- Venezuela -->
+ <!-- http://www.itu.int/oth/T02020000E3/en -->
+ <!-- http://en.wikipedia.org/wiki/+58 -->
+ <!-- 1XX specifies a particular carrier to route a call to. -->
+ <territory id="VE" countryCode="58" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixForParsing="(1\d{2})|0"
+ nationalPrefixFormattingRule="$NP$FG"
+ carrierCodeFormattingRule="$CC $FG">
+ <availableFormats>
+ <numberFormat pattern="(\d{3})(\d{7})">
+ <format>$1-$2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[24589]\d{9}</nationalNumberPattern>
+ <!-- Open numbering plan. -->
+ <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- Including region-free 500 calls here, since these are treated as local calls. Wikipedia
+ mentions these as 5XX, but online examples that can be found are seemingly restricted
+ to 50[01]. -->
+ <nationalNumberPattern>
+ (?:
+ 2(?:
+ 12|
+ 3[457-9]|
+ [58][1-9]|
+ [467]\d|
+ 9[1-6]
+ )|
+ 50[01]
+ )\d{7}
+ </nationalNumberPattern>
+ <exampleNumber>2121234567</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ 4(?:
+ 1[24-8]|
+ 2[46]
+ )\d{7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>4121234567</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>800\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>8001234567</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>900\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>9001234567</exampleNumber>
+ </premiumRate>
+ </territory>
+
+ <!-- Virgin Islands, British -->
+ <!-- http://www.itu.int/oth/T020200001E/en -->
+ <territory id="VG" countryCode="1" leadingDigits="284"
+ nationalPrefix="1" internationalPrefix="011">
+ <generalDesc>
+ <!-- NANPA country - uses US formatting rules -->
+ <nationalNumberPattern>[2589]\d{9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}(?:\d{3})?</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ 284(?:
+ (?:
+ 229|
+ 4(?:
+ 46|
+ 9[45]
+ )|
+ 8(?:
+ 52|
+ 6[459]
+ )
+ )\d{4}|
+ 496[0-5]\d{3}
+ )
+ </nationalNumberPattern>
+ <exampleNumber>2842291234</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ 284(?:
+ (?:
+ 30[0-3]|
+ 4(?:
+ 4[0-5]|
+ 68|
+ 99
+ )|
+ 54[0-4]
+ )\d{4}|
+ 496[6-9]\d{3}
+ )
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>2843001234</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>
+ 8(?:
+ 00|
+ 55|
+ 66|
+ 77|
+ 88
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>8002345678</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>900[2-9]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>9002345678</exampleNumber>
+ </premiumRate>
+ <personalNumber>
+ <!-- http://www.nanpa.com/pdf/PL_416.pdf -->
+ <nationalNumberPattern>
+ 5(?:
+ 00|
+ 33|
+ 44
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>5002345678</exampleNumber>
+ </personalNumber>
+ </territory>
+
+ <!-- Virgin Islands, United States -->
+ <!-- http://www.itu.int/oth/T02020000DF/en -->
+ <territory id="VI" countryCode="1" leadingDigits="340"
+ nationalPrefix="1" internationalPrefix="011">
+ <generalDesc>
+ <!-- NANPA country - uses US formatting rules -->
+ <nationalNumberPattern>[3589]\d{9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}(?:\d{3})?</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ 340(?:
+ 6[49]2|
+ 7[17]\d
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>3406421234</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ 340(?:
+ 6[49]2|
+ 7[17]\d
+ )\d{4}
+ </nationalNumberPattern>
+ <exampleNumber>3406421234</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>
+ 8(?:
+ 00|
+ 55|
+ 66|
+ 77|
+ 88
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>8002345678</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>900[2-9]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>9002345678</exampleNumber>
+ </premiumRate>
+ <personalNumber>
+ <!-- http://www.nanpa.com/pdf/PL_416.pdf -->
+ <nationalNumberPattern>
+ 5(?:
+ 00|
+ 33|
+ 44
+ )[2-9]\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>5002345678</exampleNumber>
+ </personalNumber>
+ </territory>
+
+ <!-- Viet Nam (Vietnam) -->
+ <!-- http://www.itu.int/oth/T02020000E4/en -->
+ <!-- http://en.wikipedia.org/wiki/%2B84 -->
+ <territory id="VN" countryCode="84" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="([48])(\d{4})(\d{4})">
+ <leadingDigits>[48]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="([235-7]\d)(\d{4})(\d{3})">
+ <leadingDigits>
+ 2[025-79]|
+ 3[0136-9]|
+ 5[2-9]|
+ 6[0-46-9]|
+ 7[02-79]
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(80)(\d{5})">
+ <leadingDigits>80</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(69\d)(\d{4,5})">
+ <leadingDigits>69</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="([235-7]\d{2})(\d{4})(\d{3})">
+ <leadingDigits>
+ 2[1348]|
+ 3[25]|
+ 5[01]|
+ 65|
+ 7[18]
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(9\d)(\d{3})(\d{2})(\d{2})">
+ <leadingDigits>9</leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ <numberFormat pattern="(1[2689]\d)(\d{3})(\d{4})">
+ <leadingDigits>
+ 1(?:
+ [26]|
+ 88|
+ 99
+ )
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat nationalPrefixFormattingRule="$FG"
+ pattern="(1[89]00)(\d{4,6})">
+ <leadingDigits>1[89]0</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>
+ 8\d{5,8}|
+ [1-79]\d{7,9}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 2(?:
+ [025-79]|
+ 1[0189]|
+ [348][01]
+ )|
+ 3(?:
+ [0136-9]|
+ [25][01]
+ )|
+ [48]\d|
+ 5(?:
+ [01][01]|
+ [2-9]
+ )|
+ 6(?:
+ [0-46-8]|
+ 5[01]
+ )|
+ 7(?:
+ [02-79]|
+ [18][01]
+ )
+ )\d{7}|
+ 69\d{5,6}|
+ 80\d{5}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
+ <exampleNumber>2101234567</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ (?:
+ 9\d|
+ 1(?:
+ 2\d|
+ 6[3-9]|
+ 88|
+ 99
+ )
+ )\d{7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{9,10}</possibleNumberPattern>
+ <exampleNumber>912345678</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>1800\d{4,6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8,10}</possibleNumberPattern>
+ <exampleNumber>1800123456</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>1900\d{4,6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8,10}</possibleNumberPattern>
+ <exampleNumber>1900123456</exampleNumber>
+ </premiumRate>
+ </territory>
+
+ <!-- Vanuatu -->
+ <territory id="VU" countryCode="678" internationalPrefix="00">
+ </territory>
+
+ <!-- Wallis and Futuna (Territoire français d'outre-mer) -->
+ <territory id="WF" countryCode="681" internationalPrefix="19">
+ </territory>
+
+ <!-- Samoa -->
+ <!-- http://www.itu.int/oth/T02020000B4/en -->
+ <territory id="WS" countryCode="685" internationalPrefix="0"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <!-- Should be formatted in one block, apart from the specific series below. For this reason
+ the leadingDigits is more detailed than would appear necessary. -->
+ <numberFormat pattern="(8[04]0)(\d{3,4})">
+ <leadingDigits>8[04]0</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(7[25-7])(\d{5})">
+ <leadingDigits>7[25-7]</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[2-8]\d{4,6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{5,7}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ [2-5]\d|
+ 6[1-9]|
+ 840\d
+ )\d{3}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{5,7}</possibleNumberPattern>
+ <exampleNumber>22123</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ (?:
+ 60|
+ 7[25-7]\d
+ )\d{4}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{6,7}</possibleNumberPattern>
+ <exampleNumber>601234</exampleNumber>
+ </mobile>
+ <tollFree>
+ <!-- The 800 number series is new, and is used by companies such as the ANZ bank in Samoa to
+ provide 24 hour eMerchant support. It is marked as "Customized Services" in the plan
+ for now, so may be also used for other purposes than toll free, but until we have
+ further evidence of these we will keep it as toll free. -->
+ <nationalNumberPattern>800\d{3}</nationalNumberPattern>
+ <possibleNumberPattern>\d{6}</possibleNumberPattern>
+ <exampleNumber>800123</exampleNumber>
+ </tollFree>
+ <!-- Current research suggests other types of numbers are not used in Samoa. -->
+ </territory>
+
+ <!-- Yemen -->
+ <!-- http://www.itu.int/oth/T02020000E7/en -->
+ <territory id="YE" countryCode="967" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="([1-7])(\d{3})(\d{3,4})">
+ <leadingDigits>
+ [1-6]|
+ 7[24-68]
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(7[137]\d)(\d{3})(\d{3})">
+ <leadingDigits>7[137]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[1-7]\d{6,8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{6,9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 1(?:
+ 7\d|
+ [2-68]
+ )|
+ 2[2-68]|
+ 3[2358]|
+ 4[2-58]|
+ 5[2-6]|
+ 6[3-58]|
+ 7[24-68]
+ )\d{5}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{6,8}</possibleNumberPattern>
+ <exampleNumber>1234567</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>7[137]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>712345678</exampleNumber>
+ </mobile>
+ <!-- No tollFree or premiumRate information can be found. -->
+ </territory>
+
+ <!-- Mayotte -->
+ <!-- Some information at http://en.wikipedia.org/wiki/Telephone_numbers_in_France - most from
+ collection of internet data. http://www.comores-online.com/mwezinet/internet/262.htm
+ verifies the fixed-line prefixes, but the mobile prefixes listed here seem out of date.
+ -->
+ <territory id="YT" countryCode="262" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG"
+ leadingDigits="269|63">
+ <!-- Formatting as per La Réunion. -->
+ <generalDesc>
+ <nationalNumberPattern>[268]\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>2696[0-4]\d{4}</nationalNumberPattern>
+ <exampleNumber>269601234</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>639\d{6}</nationalNumberPattern>
+ <exampleNumber>639123456</exampleNumber>
+ </mobile>
+ <!-- Same as in France. -->
+ <tollFree>
+ <nationalNumberPattern>80\d{7}</nationalNumberPattern>
+ <exampleNumber>801234567</exampleNumber>
+ </tollFree>
+ </territory>
+
+ <!-- South Africa -->
+ <!-- http://www.itu.int/dms_pub/itu-t/oth/02/02/T02020000C10001PDFE.pdf -->
+ <!-- http://en.wikipedia.org/wiki/Telephone_numbers_in_South_Africa -->
+ <territory id="ZA" countryCode="27" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="(860)(\d{3})(\d{3})">
+ <leadingDigits>860</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="([1-578]\d)(\d{3})(\d{4})">
+ <leadingDigits>
+ [1-57]|
+ 8(?:
+ [0-57-9]|
+ 6[1-9]
+ )
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>\d{9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8,9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>
+ (?:
+ 1[0-8]|
+ 2[1-478]|
+ 3[1-69]|
+ 4\d|
+ 5[1346-8]
+ )\d{7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{8,9}</possibleNumberPattern>
+ <exampleNumber>101234567</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>
+ (?:
+ 7[1-4689]|
+ 8[1-5789]
+ )\d{7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>711234567</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>80\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>801234567</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>86[1-9]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>861234567</exampleNumber>
+ </premiumRate>
+ <sharedCost>
+ <nationalNumberPattern>860\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>860123456</exampleNumber>
+ </sharedCost>
+ <voip>
+ <nationalNumberPattern>87\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>871234567</exampleNumber>
+ </voip>
+ </territory>
+
+ <!-- Zambia -->
+ <!-- http://www.itu.int/oth/T02020000E8/en -->
+ <territory id="ZM" countryCode="260" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="([29]\d)(\d{7})">
+ <leadingDigits>[29]</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(800)(\d{3})(\d{3})">
+ <leadingDigits>8</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[289]\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>21[1-8]\d{6}</nationalNumberPattern>
+ <exampleNumber>211234567</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- Adding extra prefixes 6[457-9] and 7[4-6] since SMS messages have been successfully
+ delivered to these numbers, and numbers like this can be found on the Internet. -->
+ <nationalNumberPattern>
+ 9(?:
+ 55|
+ 6[4-9]|
+ 7[4-9]
+ )\d{6}
+ </nationalNumberPattern>
+ <exampleNumber>955123456</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>800\d{6}</nationalNumberPattern>
+ <exampleNumber>800123456</exampleNumber>
+ </tollFree>
+ </territory>
+
+ <!-- Zimbabwe -->
+ <!-- http://www.itu.int/oth/T02020000E9/en -->
+ <territory id="ZW" countryCode="263" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <!-- One-digit area codes -->
+ <numberFormat pattern="([49])(\d{3})(\d{2,5})">
+ <leadingDigits>
+ 4|
+ 9[2-9]
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <!-- Mobile numbers -->
+ <numberFormat pattern="([179]\d)(\d{3})(\d{3,4})">
+ <leadingDigits>
+ [19]1|
+ 7
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <!-- Two-digit area codes -->
+ <numberFormat pattern="([1-356]\d)(\d{3,5})">
+ <leadingDigits>
+ 1[3-9]|
+ 2(?:
+ [1-469]|
+ 0[0-35-9]|
+ [45][0-79]
+ )|
+ 3(?:
+ 0[0-79]|
+ 1[0-689]|
+ [24-69]|
+ 3[0-69]
+ )|
+ 5(?:
+ [02-46-9]|
+ [15][0-69]
+ )|
+ 6(?:
+ [0145]|
+ [29][0-79]|
+ 3[0-689]|
+ [68][0-69]
+ )
+ </leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="([1-356]\d)(\d{3})(\d{3})">
+ <leadingDigits>
+ 1[3-9]|
+ 2(?:
+ [1-469]|
+ 0[0-35-9]|
+ [45][0-79]
+ )|
+ 3(?:
+ 0[0-79]|
+ 1[0-689]|
+ [24-69]|
+ 3[0-69]
+ )|
+ 5(?:
+ [02-46-9]|
+ [15][0-69]
+ )|
+ 6(?:
+ [0145]|
+ [29][0-79]|
+ 3[0-689]|
+ [68][0-69]
+ )
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <!-- Three-digit area codes -->
+ <numberFormat pattern="([2356]\d{2})(\d{3,5})">
+ <leadingDigits>
+ 2(?:
+ [278]|
+ 0[45]|
+ 48
+ )|
+ 3(?:
+ 08|
+ 17|
+ 3[78]|
+ [78]
+ )|
+ 5[15][78]|
+ 6(?:
+ [29]8|
+ 37|
+ [68][78]
+ )
+ </leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="([2356]\d{2})(\d{3})(\d{3})">
+ <leadingDigits>
+ 2(?:
+ [278]|
+ 0[45]|
+ 48
+ )|
+ 3(?:
+ 08|
+ 17|
+ 3[78]|
+ [78]
+ )|
+ 5[15][78]|
+ 6(?:
+ [29]8|
+ 37|
+ [68][78]
+ )
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <!-- Four-digit area codes -->
+ <numberFormat pattern="([25]\d{3})(\d{3,5})">
+ <leadingDigits>
+ (?:
+ 25|
+ 54
+ )8
+ </leadingDigits>
+ <leadingDigits>
+ 258[23]|
+ 5483
+ </leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="([25]\d{3})(\d{3})(\d{3})">
+ <leadingDigits>
+ (?:
+ 25|
+ 54
+ )8
+ </leadingDigits>
+ <leadingDigits>
+ 258[23]|
+ 5483
+ </leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <!-- VOIP numbers -->
+ <numberFormat pattern="(8\d{3})(\d{6})">
+ <leadingDigits>8</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <!-- A complicated nationalNumberPattern is necessary here, since the numbers are extremely
+ variable in length and the possible prefixes clash with the country code. -->
+ <nationalNumberPattern>
+ 2(?:
+ [012457-9]\d{3,8}|
+ 6\d{3,6}
+ )|
+ [13-79]\d{4,8}|
+ 86\d{8}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{3,10}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- Numbering is grouped by subscriber-number length. -->
+ <nationalNumberPattern>
+ (?:
+ 1[3-9]|
+ 2(?:
+ 0[45]|
+ [16]|
+ 2[28]|
+ [49]8?|
+ 58[23]|
+ 7[246]|
+ 8[1346-9]
+ )|
+ 3(?:
+ 08?|
+ 17?|
+ 3[78]|
+ [2456]|
+ 7[1569]|
+ 8[379]
+ )|
+ 5(?:
+ [07-9]|
+ 1[78]|
+ 483|
+ 5(?:
+ 7?|
+ 8
+ )
+ )|
+ 6(?:
+ 0|
+ 28|
+ 37?|
+ [45][68][78]|
+ 98?
+ )|
+ 848
+ )\d{3,6}|
+ (?:
+ 2(?:
+ 27|
+ 5|
+ 7[135789]|
+ 8[25]
+ )|
+ 3[39]|
+ 5[1-46]|
+ 6[126-8]
+ )\d{4,6}|
+ 2(?:
+ 0|
+ 70
+ )\d{5,6}|
+ (?:
+ 4\d|
+ 9[2-8]
+ )\d{4,7}
+ </nationalNumberPattern>
+ <exampleNumber>1312345</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>7[137]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>711234567</exampleNumber>
+ </mobile>
+ <!-- No tollFree or premiumRate information can be found. -->
+ <voip>
+ <nationalNumberPattern>
+ 86(?:
+ 1[12]|
+ 22|
+ 30|
+ 44|
+ 8[367]|
+ 99
+ )\d{6}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>8686123456</exampleNumber>
+ </voip>
+ </territory>
+ </territories>
+</phoneNumberMetadata>
diff --git a/third_party/libphonenumber/resources/PhoneNumberMetaDataForTesting.xml b/third_party/libphonenumber/resources/PhoneNumberMetaDataForTesting.xml
new file mode 100644
index 0000000..661bdd2
--- /dev/null
+++ b/third_party/libphonenumber/resources/PhoneNumberMetaDataForTesting.xml
@@ -0,0 +1,764 @@
+<!-- Copyright (C) 2009 Google Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ @author: Shaopeng Jia
+
+ MetaData on Phone Number Plan and formatting rules. This file is used
+ solely for the purpose of unittesting, so data in this file is not
+ necessarily consistent with that of
+ ../src/PhoneNumberMetaData.xml
+-->
+
+<phoneNumberMetadata>
+ <territories>
+ <!-- Andorra -->
+ <territory id="AD" countryCode="376" internationalPrefix="00">
+ </territory>
+
+ <!-- Angola -->
+ <!-- This country has been coopted to test the case of a national prefix
+ with a non-numeric symbol in it. -->
+ <territory id="AO" countryCode="244" internationalPrefix="00" nationalPrefix="0~0">
+ <availableFormats>
+ <numberFormat pattern="(\d{3})(\d{3})(\d{3})">
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[29]\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>2\d(?:[26-9]\d|\d[26-9])\d{5}</nationalNumberPattern>
+ <exampleNumber>222123456</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <!-- Expanded the 92 prefix possibilities to matchnumbers found online. -->
+ <nationalNumberPattern>9[1-3]\d{7}</nationalNumberPattern>
+ <exampleNumber>923123456</exampleNumber>
+ </mobile>
+ </territory>
+
+ <!-- Argentina -->
+ <territory id="AR" countryCode="54" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG"
+ nationalPrefixForParsing="0(?:(11|343|3715)15)?"
+ nationalPrefixTransformRule="9$1">
+ <!-- Note in nationalPrefixForParsing, the areacode (such as 11, 343, etc.), when present in
+ front of carrier selection code 15, is captured to replace $1 in
+ nationalPrefixTransformRule -->
+ <availableFormats>
+ <numberFormat pattern="(\d{2})(\d{4})(\d{4})">
+ <leadingDigits>11</leadingDigits>
+ <format>$1 $2-$3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{4})(\d{2})(\d{4})">
+ <leadingDigits>1[02-9]|[23]</leadingDigits>
+ <format>$1 $2-$3</format>
+ </numberFormat>
+ <numberFormat pattern="9(11)(\d{4})(\d{4})">
+ <leadingDigits>911</leadingDigits>
+ <format>$1 15 $2-$3</format>
+ </numberFormat>
+ <numberFormat pattern="9(\d{4})(\d{2})(\d{4})"
+ carrierCodeFormattingRule="$NP$FG $CC">
+ <leadingDigits>9(?:1[02-9]|[23])</leadingDigits>
+ <format>$1 $2-$3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{3})(\d{4})">
+ <leadingDigits>[68]</leadingDigits>
+ <format>$1-$2-$3</format>
+ </numberFormat>
+ <intlNumberFormat pattern="(\d{2})(\d{4})(\d{4})">
+ <leadingDigits>11</leadingDigits>
+ <format>$1 $2-$3</format>
+ </intlNumberFormat>
+ <intlNumberFormat pattern="(\d{4})(\d{2})(\d{4})">
+ <leadingDigits>1[02-9]|[23]</leadingDigits>
+ <format>$1 $2-$3</format>
+ </intlNumberFormat>
+ <intlNumberFormat pattern="(9)(11)(\d{4})(\d{4})">
+ <leadingDigits>911</leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </intlNumberFormat>
+ <intlNumberFormat pattern="(9)(\d{4})(\d{2})(\d{4})">
+ <leadingDigits>9(?:1[02-9]|[23])</leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </intlNumberFormat>
+ <intlNumberFormat pattern="(\d{3})(\d{3})(\d{4})">
+ <leadingDigits>[68]</leadingDigits>
+ <format>$1-$2-$3</format>
+ </intlNumberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[1-3689]\d{9,10}</nationalNumberPattern>
+ <possibleNumberPattern>\d{6,11}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>[1-3]\d{9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{6,10}</possibleNumberPattern>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>9\d{10}|[1-3]\d{9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10,11}</possibleNumberPattern>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>80\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>6(0\d|10)\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ </premiumRate>
+ </territory>
+
+ <!-- Australia -->
+ <territory id="AU" countryCode="61" internationalPrefix="001[12]"
+ nationalPrefix="0" preferredInternationalPrefix="0011"
+ nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat nationalPrefixFormattingRule="$FG"
+ pattern="(\d{4})(\d{3})(\d{3})" >
+ <leadingDigits>1</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{1})(\d{4})(\d{4})">
+ <leadingDigits>[2-478]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc >
+ <nationalNumberPattern>[1-578]\d{4,14}</nationalNumberPattern>
+ <possibleNumberPattern>\d{5,15}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>[2378]\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>4\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>1800\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>190[0126]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ </premiumRate>
+ </territory>
+
+ <!-- Bahamas -->
+ <territory id="BS" countryCode="1" internationalPrefix="011"
+ nationalPrefix="1">
+ <generalDesc>
+ <nationalNumberPattern>(242|8(00|66|77|88)|900)\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>242(?:3(?:02|[236][1-9]|4[0-24-9]|5[0-68]|7[3-57]|9[2-5])|4(?:2[237]|51|64|77)|502|636|702)\d{4}</nationalNumberPattern>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>242(357|359|457|557)\d{4}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>8(00|66|77|88)\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>900\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ </premiumRate>
+ </territory>
+
+ <!-- Germany -->
+ <territory id="DE" countryCode="49" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="(\d{3})(\d{3,8})">
+ <leadingDigits>2|3[3-9]|906|[4-9][1-9]1</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{2})(\d{4,9})">
+ <leadingDigits>[34]0|[68]9</leadingDigits>
+ <format>$1/$2</format>
+ </numberFormat>
+ <!-- Extra fictional pattern for shorter numbers with the same prefixes as the following
+ pattern, to illustrate the problem the AYTF has with real patterns that share this
+ property. -->
+ <numberFormat pattern="([4-9]\d)(\d{2})">
+ <leadingDigits>[4-9]</leadingDigits>
+ <leadingDigits>[4-6]|[7-9](?:\d[1-9]|[1-9]\d)</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="([4-9]\d{3})(\d{2,7})">
+ <leadingDigits>[4-9]</leadingDigits>
+ <leadingDigits>[4-6]|[7-9](?:\d[1-9]|[1-9]\d)</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{1})(\d{6})">
+ <leadingDigits>800</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{3,4})(\d{4})">
+ <leadingDigits>900</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>\d{4,14}</nationalNumberPattern>
+ <possibleNumberPattern>\d{2,14}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>(?:[24-6]\d{2}|3[03-9]\d|[789](?:[1-9]\d|0[2-9]))\d{3,8}</nationalNumberPattern>
+ <exampleNumber>30123456</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>1(5\d{9}|7\d{8}|6[02]\d{8}|63\d{7})</nationalNumberPattern>
+ <possibleNumberPattern>\d{10,11}</possibleNumberPattern>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>800\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>900([135]\d{6}|9\d{7})</nationalNumberPattern>
+ <possibleNumberPattern>\d{10,11}</possibleNumberPattern>
+ </premiumRate>
+ </territory>
+
+ <!-- United Kingdom -->
+ <territory id="GB" countryCode="44" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="($NP$FG)">
+ <availableFormats>
+ <numberFormat pattern="(\d{2})(\d{4})(\d{4})">
+ <leadingDigits>[1-59]|[78]0</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d)(\d{3})(\d{3})(\d{3})">
+ <leadingDigits>6</leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{4})(\d{3})(\d{3})">
+ <leadingDigits>7[1-57-9]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{3})(\d{4})">
+ <leadingDigits>8[47]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>\d{10}</nationalNumberPattern>
+ <possibleNumberPattern>\d{6,10}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>[1-6]\d{9}</nationalNumberPattern>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>7[1-57-9]\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>80\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>9[018]\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ </premiumRate>
+ <sharedCost>
+ <nationalNumberPattern>8(?:4[3-5]|7[0-2])\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ </sharedCost>
+ <voip>
+ <nationalNumberPattern>56\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ </voip>
+ <personalNumber>
+ <nationalNumberPattern>70\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ </personalNumber>
+ </territory>
+
+ <!-- Italy -->
+ <!-- http://en.wikipedia.org/wiki/%2B39 -->
+ <territory id="IT" countryCode="39" internationalPrefix="00" leadingZeroPossible="true">
+ <availableFormats>
+ <numberFormat pattern="(\d{2})(\d{4})(\d{4})">
+ <leadingDigits>0[26]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{4})(\d{3,4})">
+ <leadingDigits>0[13-57-9]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{3})(\d{3,4})">
+ <leadingDigits>3</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{3,6})">
+ <leadingDigits>8</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[0389]\d{5,10}</nationalNumberPattern>
+ <possibleNumberPattern>\d{6,11}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>0\d{9,10}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10,11}</possibleNumberPattern>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>3\d{8,9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9,10}</possibleNumberPattern>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>80(?:0\d{6}|3\d{3})</nationalNumberPattern>
+ <possibleNumberPattern>\d{6,9}</possibleNumberPattern>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>89(?:2\d{3}|9\d{6})</nationalNumberPattern>
+ <possibleNumberPattern>\d{6,9}</possibleNumberPattern>
+ </premiumRate>
+ </territory>
+
+ <!-- Japan -->
+ <!-- The metadata here is added to unit test AsYouTypeFormatter for JP, which requires switching
+ patterns as digits beyond the third one are entered. As a result, only a few fake
+ formatting rules are added. -->
+ <territory id="JP" countryCode="81" internationalPrefix="010"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="(\d{2})(\d{4})(\d{4})">
+ <leadingDigits>[57-9]0</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{2})(\d{3})(\d{4})">
+ <leadingDigits>222|333</leadingDigits>
+ <leadingDigits>(?:222|333)1</leadingDigits>
+ <leadingDigits>(?:222|333)11</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{4})(\d)(\d{4})">
+ <leadingDigits>222|333</leadingDigits>
+ <leadingDigits>2221|3332</leadingDigits>
+ <leadingDigits>22212|3332</leadingDigits>
+ <leadingDigits>222120|3332</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{2})(\d{4})">
+ <leadingDigits>[23]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <!-- The following numberFormat is added to test that the format containing the star sign is
+ not used by the AYTF. -->
+ <numberFormat pattern="(\d{4})">
+ <leadingDigits>[23]</leadingDigits>
+ <format>*$1</format>
+ </numberFormat>
+ </availableFormats>
+ </territory>
+
+ <!-- Korea (Rep. of) -->
+ <!-- http://www.itu.int/oth/T0202000072/en -->
+ <!-- http://en.wikipedia.org/wiki/%2B82 -->
+ <!-- http://www.kcc.go.kr/user.do?mode=view&page=P02030300&dc=K02030300&boardId=1074&boardSeq=2349 -->
+ <!-- http://www.kcc.go.kr/user.do?mode=view&page=P02030300&dc=K02030300&boardId=1074&boardSeq=2240 -->
+ <!-- http://www.telecentro.co.kr/sub/index.php?job=detail&ebcf_id=faq&page=1&mid=0503&eb_seq=36 -->
+ <!-- Exceptions :
+ internationalPrefix
+ 0031, 0033, 0071, 0073 - Special services of KT and DACOM, ignorable
+ nationalPrefix
+ 1[4-6]XX-YYYY - Country-wide common number services, display as it is without hyphens -->
+ <territory id="KR" countryCode="82" internationalPrefix="00(?:[124-68]|[37]\d{2})"
+ nationalPrefix="0" nationalPrefixForParsing="0(8[1-46-8]|85\d{2})?"
+ nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="(\d{2})(\d{4})(\d{4})">
+ <leadingDigits>1(?:0|1[19]|[69]9|5[458])|[57]0</leadingDigits>
+ <leadingDigits>1(?:0|1[19]|[69]9|5(?:44|59|8))|[57]0</leadingDigits>
+ <format>$1-$2-$3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{2})(\d{3})(\d{4})">
+ <leadingDigits>1(?:[169][2-8]|[78]|5[1-4])|[68]0|[3-9][1-9][2-9]</leadingDigits>
+ <leadingDigits>1(?:[169][2-8]|[78]|5(?:[1-3]|4[56]))|[68]0|[3-9][1-9][2-9]</leadingDigits>
+ <format>$1-$2-$3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d)(\d{4})">
+ <leadingDigits>131</leadingDigits>
+ <leadingDigits>1312</leadingDigits>
+ <format>$1-$2-$3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{2})(\d{4})">
+ <leadingDigits>131</leadingDigits>
+ <leadingDigits>131[13-9]</leadingDigits>
+ <format>$1-$2-$3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{3})(\d{4})">
+ <leadingDigits>13[2-9]</leadingDigits>
+ <format>$1-$2-$3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{2})(\d{2})(\d{3})(\d{4})">
+ <leadingDigits>30</leadingDigits>
+ <format>$1-$2-$3-$4</format>
+ </numberFormat>
+ <numberFormat pattern="(\d)(\d{4})(\d{4})">
+ <leadingDigits>2(?:[26]|3[0-467])</leadingDigits>
+ <leadingDigits>2(?:[26]|3(?:01|1[45]|2[17-9]|39|4|6[67]|7[078]))</leadingDigits>
+ <format>$1-$2-$3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d)(\d{3})(\d{4})">
+ <leadingDigits>2(?:3[0-35-9]|[457-9])</leadingDigits>
+ <leadingDigits>2(?:3(?:0[02-9]|1[0-36-9]|2[02-6]|3[0-8]|6[0-589]|7[1-69]|[589])|[457-9])</leadingDigits>
+ <format>$1-$2-$3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d)(\d{3})">
+ <leadingDigits>21[0-46-9]</leadingDigits>
+ <leadingDigits>21(?:[0-247-9]|3[124]|6[1269])</leadingDigits>
+ <format>$1-$2</format>
+ </numberFormat>
+ <numberFormat pattern="(\d)(\d{4})">
+ <leadingDigits>21[36]</leadingDigits>
+ <leadingDigits>21(?:3[035-9]|6[03-578])</leadingDigits>
+ <format>$1-$2</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{2})(\d{3})">
+ <leadingDigits>[3-9][1-9]1</leadingDigits>
+ <leadingDigits>[3-9][1-9]1(?:[0-46-9])</leadingDigits>
+ <leadingDigits>[3-9][1-9]1(?:[0-247-9]|3[124]|6[1269])</leadingDigits>
+ <format>$1-$2</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{2})(\d{4})">
+ <leadingDigits>[3-9][1-9]1</leadingDigits>
+ <leadingDigits>[3-9][1-9]1[36]</leadingDigits>
+ <leadingDigits>[3-9][1-9]1(?:3[035-9]|6[03-578])</leadingDigits>
+ <format>$1-$2</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[1-79]\d{3,9}|8\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{4,10}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>(?:2|[34][1-3]|5[1-5]|6[1-4])(?:1\d{2,3}|[2-9]\d{6,7})</nationalNumberPattern>
+ <possibleNumberPattern>\d{4,10}</possibleNumberPattern>
+ <exampleNumber>22123456</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>1[0-25-9]\d{7,8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9,10}</possibleNumberPattern>
+ <exampleNumber>1023456789</exampleNumber>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>80\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>801234567</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>60[2-9]\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>602345678</exampleNumber>
+ </premiumRate>
+ <personalNumber>
+ <nationalNumberPattern>50\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>5012345678</exampleNumber>
+ </personalNumber>
+ <voip>
+ <nationalNumberPattern>70\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ <exampleNumber>7012345678</exampleNumber>
+ </voip>
+ </territory>
+
+ <!-- Mexico -->
+ <territory id="MX" countryCode="52" internationalPrefix="00"
+ nationalPrefix="01" nationalPrefixForParsing="01|04[45](\d{10})"
+ nationalPrefixTransformRule="1$1">
+ <availableFormats>
+ <numberFormat pattern="(\d{3})(\d{3})(\d{4})">
+ <leadingDigits>[89]00</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{2})(\d{4})(\d{4})">
+ <leadingDigits>33|55|81</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{3})(\d{4})">
+ <leadingDigits>[2467]|3[0-24-9]|5[0-46-9]|8[2-9]|9[1-9]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="1(\d{2})(\d{4})(\d{4})">
+ <leadingDigits>1(?:33|55|81)</leadingDigits>
+ <format>045 $1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="1(\d{3})(\d{3})(\d{4})">
+ <leadingDigits>1(?:[124579]|3[0-24-9]|5[0-46-9]|8[02-9])</leadingDigits>
+ <format>045 $1 $2 $3</format>
+ </numberFormat>
+ <intlNumberFormat pattern="(\d{3})(\d{3})(\d{4})">
+ <leadingDigits>[89]00</leadingDigits>
+ <format>$1 $2 $3</format>
+ </intlNumberFormat>
+ <intlNumberFormat pattern="(\d{2})(\d{4})(\d{4})">
+ <leadingDigits>33|55|81</leadingDigits>
+ <format>$1 $2 $3</format>
+ </intlNumberFormat>
+ <intlNumberFormat pattern="(\d{3})(\d{3})(\d{4})">
+ <leadingDigits>[2467]|3[0-24-9]|5[0-46-9]|8[2-9]|9[1-9]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </intlNumberFormat>
+ <intlNumberFormat pattern="(1)(\d{2})(\d{4})(\d{4})">
+ <leadingDigits>1(?:33|55|81)</leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </intlNumberFormat>
+ <intlNumberFormat pattern="(1)(\d{3})(\d{3})(\d{4})">
+ <leadingDigits>1(?:[124579]|3[0-24-9]|5[0-46-9]|8[02-9])</leadingDigits>
+ <format>$1 $2 $3 $4</format>
+ </intlNumberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[1-9]\d{9,10}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7,11}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>[2-9]\d{9}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>1\d{10}</nationalNumberPattern>
+ <possibleNumberPattern>\d{11}</possibleNumberPattern>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>800\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>900\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ </premiumRate>
+ </territory>
+
+ <!-- New Zealand -->
+ <territory id="NZ" countryCode="64" internationalPrefix="00"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="(\d)(\d{3})(\d{4})">
+ <leadingDigits>24|[34679]</leadingDigits>
+ <format>$1-$2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d)(\d{3})(\d{3,5})">
+ <leadingDigits>2[179]</leadingDigits>
+ <format>$1-$2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{3})(\d{3,4})">
+ <leadingDigits>[89]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>
+ [289]\d{7,9}|
+ [3-7]\d{7}
+ </nationalNumberPattern>
+ <possibleNumberPattern>\d{7,10}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>24099\d{3}|(?:3[2-79]|[479][2-689]|6[235-9])\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7,8}</possibleNumberPattern>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>2(?:[027]\d{7}|9\d{6,7}|1(?:0\d{5,7}|[12]\d{5,6}|[3-9]\d{5})|4[1-9]\d{6}|8\d{7,8})</nationalNumberPattern>
+ <possibleNumberPattern>\d{8,10}</possibleNumberPattern>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>800\d{6,7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9,10}</possibleNumberPattern>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>900\d{6,7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9,10}</possibleNumberPattern>
+ </premiumRate>
+ </territory>
+
+ <!-- Poland -->
+ <!-- http://en.wikipedia.org/wiki/%2B48 -->
+ <territory id="PL" countryCode="48" internationalPrefix="0~0"
+ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="(\d{2})(\d{3})(\d{2})(\d{2})">
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[1-9]\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ </generalDesc>
+ <mobile>
+ <nationalNumberPattern>(?:5[01]|6[069]|7[289]|88)\d{7}</nationalNumberPattern>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>800\d{6}</nationalNumberPattern>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>70\d{7}</nationalNumberPattern>
+ </premiumRate>
+ </territory>
+
+ <!-- Réunion (French Departments and Territories in the Indian Ocean) -->
+ <!-- Note this shares the same country code as La Mayotte and French
+ Southern Territories, and the formatting patterns here are used by all of
+ them. This is present to test leadingDigits. -->
+ <territory id="RE" countryCode="262" leadingDigits="262|6(?:9[23]|47)|8"
+ internationalPrefix="00" nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <availableFormats>
+ <numberFormat pattern="([268]\d{2})(\d{2})(\d{2})(\d{2})">
+ <format>$1 $2 $3 $4</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[268]\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <!-- 0876 numbers are mentioned in the plan, but none in use can be
+ found. -->
+ <nationalNumberPattern>262\d{6}</nationalNumberPattern>
+ <exampleNumber>262161234</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>6(?:9[23]|47)\d{6}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ <exampleNumber>692123456</exampleNumber>
+ </mobile>
+ <!-- 08* Numbers in Réunion are the same as those valid in France. -->
+ <tollFree>
+ <nationalNumberPattern>80\d{7}</nationalNumberPattern>
+ <exampleNumber>801234567</exampleNumber>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>8(?:1[01]|2[0156]|84|9[0-37-9])\d{6}</nationalNumberPattern>
+ <exampleNumber>810123456</exampleNumber>
+ </premiumRate>
+ </territory>
+
+ <!-- Singapore -->
+ <!-- http://www.ida.gov.sg/policies%20and%20regulation/20060508120124.aspx -->
+ <territory id="SG" countryCode="65" internationalPrefix="0[0-3][0-9]">
+ <availableFormats>
+ <numberFormat pattern="(\d{4})(\d{4})">
+ <leadingDigits>[369]|8[1-9]</leadingDigits>
+ <format>$1 $2</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{4})(\d{3})(\d{4})">
+ <leadingDigits>1[89]</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{3})(\d{4})">
+ <leadingDigits>800</leadingDigits>
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[13689]\d{7,10}</nationalNumberPattern>
+ <!-- This specific pattern with the | is used to unit-test IsPossibleNumberWithReason. -->
+ <possibleNumberPattern>
+ \d{8}|
+ \d{10,11}
+ </possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>[36]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>[89]\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{8}</possibleNumberPattern>
+ </mobile>
+ <tollFree>
+ <nationalNumberPattern>1?800\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10,11}</possibleNumberPattern>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>1900\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{11}</possibleNumberPattern>
+ </premiumRate>
+ </territory>
+
+ <!-- United States -->
+ <!-- http://www.nanpa.com/reports/reports_npa.html -->
+ <!-- For testing purposes, numbers starting with 24 are not considered US
+ numbers.-->
+ <territory id="US" countryCode="1" internationalPrefix="011"
+ preferredExtnPrefix=" extn. " nationalPrefix="1"
+ mainCountryForCode="true" >
+ <availableFormats>
+ <numberFormat pattern="(\d{3})(\d{3})(\d{4})">
+ <format>$1 $2 $3</format>
+ </numberFormat>
+ <numberFormat pattern="(\d{3})(\d{4})">
+ <format>$1 $2</format>
+ </numberFormat>
+ <intlNumberFormat pattern="(\d{3})(\d{3})(\d{4})">
+ <format>$1 $2 $3</format>
+ </intlNumberFormat>
+ </availableFormats>
+ <generalDesc>
+ <nationalNumberPattern>[13-9]\d{9}|2[0-35-9]\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{7}(?:\d{3})?</possibleNumberPattern>
+ <exampleNumber>1234567890</exampleNumber>
+ </generalDesc>
+ <noInternationalDialling>
+ <!-- This range is added for testing purposes only. -->
+ <nationalNumberPattern>800\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ </noInternationalDialling>
+ <tollFree>
+ <nationalNumberPattern>8(?:00|66|77|88)\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ </tollFree>
+ <premiumRate>
+ <nationalNumberPattern>900\d{7}</nationalNumberPattern>
+ <possibleNumberPattern>\d{10}</possibleNumberPattern>
+ </premiumRate>
+ </territory>
+
+ <!-- Mayotte -->
+ <territory id="YT" countryCode="262" leadingDigits="269|639"
+ internationalPrefix="00" nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
+ <!-- Formatting as per La Réunion. -->
+ <generalDesc>
+ <nationalNumberPattern>[268]\d{8}</nationalNumberPattern>
+ <possibleNumberPattern>\d{9}</possibleNumberPattern>
+ </generalDesc>
+ <fixedLine>
+ <nationalNumberPattern>2696[0-4]\d{4}</nationalNumberPattern>
+ <exampleNumber>269601234</exampleNumber>
+ </fixedLine>
+ <mobile>
+ <nationalNumberPattern>639\d{6}</nationalNumberPattern>
+ <exampleNumber>639123456</exampleNumber>
+ </mobile>
+ <!-- Same as in France. -->
+ <tollFree>
+ <nationalNumberPattern>80\d{7}</nationalNumberPattern>
+ <exampleNumber>801234567</exampleNumber>
+ </tollFree>
+ </territory>
+ </territories>
+</phoneNumberMetadata>
diff --git a/third_party/libphonenumber/resources/phonemetadata.proto b/third_party/libphonenumber/resources/phonemetadata.proto
new file mode 100644
index 0000000..fd9902a
--- /dev/null
+++ b/third_party/libphonenumber/resources/phonemetadata.proto
@@ -0,0 +1,235 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// Definition of protocol buffer for holding metadata for international
+// telephone numbers.
+// @author Shaopeng Jia
+
+syntax = "proto2";
+
+option java_package = "com.google.i18n.phonenumbers";
+option optimize_for = LITE_RUNTIME;
+
+package i18n.phonenumbers;
+
+message NumberFormat {
+ // pattern is a regex that is used to match the national (significant)
+ // number. For example, the pattern "(20)(\d{4})(\d{4})" will match number
+ // "2070313000", which is the national (significant) number for Google London.
+ // Note the presence of the parentheses, which are capturing groups what
+ // specifies the grouping of numbers.
+ required string pattern = 1;
+
+ // format specifies how the national (significant) number matched by
+ // pattern should be formatted.
+ // Using the same example as above, format could contain "$1 $2 $3",
+ // meaning that the number should be formatted as "20 7031 3000".
+ // Each $x are replaced by the numbers captured by group x in the
+ // regex specified by pattern.
+ required string format = 2;
+
+ // This field is a regex that is used to match a certain number of digits
+ // at the beginning of the national (significant) number. When the match is
+ // successful, the accompanying pattern and format should be used to format
+ // this number. For example, if leading_digits="[1-3]|44", then all the
+ // national numbers starting with 1, 2, 3 or 44 should be formatted using the
+ // accompanying pattern and format.
+ //
+ // The first leadingDigitsPattern matches up to the first three digits of the
+ // national (significant) number; the next one matches the first four digits,
+ // then the first five and so on, until the leadingDigitsPattern can uniquely
+ // identify one pattern and format to be used to format the number.
+ //
+ // In the case when only one formatting pattern exists, no
+ // leading_digits_pattern is needed.
+ repeated string leading_digits_pattern = 3;
+
+ // This field specifies how the national prefix ($NP) together with the first
+ // group ($FG) in the national significant number should be formatted in
+ // the NATIONAL format when a national prefix exists for a certain country.
+ // For example, when this field contains "($NP$FG)", a number from Beijing,
+ // China (whose $NP = 0), which would by default be formatted without
+ // national prefix as 10 1234 5678 in NATIONAL format, will instead be
+ // formatted as (010) 1234 5678; to format it as (0)10 1234 5678, the field
+ // would contain "($NP)$FG". Note $FG should always be present in this field,
+ // but $NP can be omitted. For example, having "$FG" could indicate the
+ // number should be formatted in NATIONAL format without the national prefix.
+ // This is commonly used to override the rule from generalDesc.
+ //
+ // When this field is missing, a number will be formatted without national
+ // prefix in NATIONAL format. This field does not affect how a number
+ // is formatted in other formats, such as INTERNATIONAL.
+ optional string national_prefix_formatting_rule = 4;
+
+ // This field specifies how any carrier code ($CC) together with the first
+ // group ($FG) in the national significant number should be formatted
+ // when formatWithCarrierCode is called, if carrier codes are used for a
+ // certain country.
+ optional string domestic_carrier_code_formatting_rule = 5;
+}
+
+message PhoneNumberDesc {
+ // The national_number_pattern is the pattern that a valid national
+ // significant number would match. This specifies information such as its
+ // total length and leading digits.
+ optional string national_number_pattern = 2;
+
+ // The possible_number_pattern represents what a potentially valid phone
+ // number for this region may be written as. This is a superset of the
+ // national_number_pattern above and includes numbers that have the area code
+ // omitted. Typically the only restrictions here are in the number of digits.
+ // This could be used to highlight tokens in a text that may be a phone
+ // number, or to quickly prune numbers that could not possibly be a phone
+ // number for this locale.
+ optional string possible_number_pattern = 3;
+
+ // An example national significant number for the specific type. It should
+ // not contain any formatting information.
+ optional string example_number = 6;
+}
+
+message PhoneMetadata {
+ // The general_desc contains information which is a superset of descriptions
+ // for all types of phone numbers. If any element is missing in the
+ // description of a specific type in the XML file, the element will inherit
+ // from its counterpart in the general_desc. Every locale is assumed to have
+ // fixed line and mobile numbers - if these types are missing in the XML
+ // file, they will inherit all fields from the general_desc. For all other
+ // types, if the whole type is missing in the xml file, it will be given a
+ // national_number_pattern of "NA" and a possible_number_pattern of "NA".
+ required PhoneNumberDesc general_desc = 1;
+ required PhoneNumberDesc fixed_line = 2;
+ required PhoneNumberDesc mobile = 3;
+ required PhoneNumberDesc toll_free = 4;
+ required PhoneNumberDesc premium_rate = 5;
+ required PhoneNumberDesc shared_cost = 6;
+ required PhoneNumberDesc personal_number = 7;
+ required PhoneNumberDesc voip = 8;
+ required PhoneNumberDesc pager = 21;
+ required PhoneNumberDesc uan = 25;
+ // The rules here distinguish the numbers that are only able to be dialled
+ // nationally.
+ required PhoneNumberDesc no_international_dialling = 24;
+
+ // The ISO 3166-1 alpha-2 representation of a country/region
+ required string id = 9;
+
+ // The country calling code that one would dial from overseas when trying to
+ // dial a phone number in this country. For example, this would be "64" for
+ // New Zealand.
+ required int32 country_code = 10;
+
+ // The international_prefix of country A is the number that needs to be
+ // dialled from country A to another country (country B). This is followed
+ // by the country code for country B. Note that some countries may have more
+ // than one international prefix, and for those cases, a regular expression
+ // matching the international prefixes will be stored in this field.
+ required string international_prefix = 11;
+
+ // If more than one international prefix is present, a preferred prefix can
+ // be specified here for out-of-country formatting purposes. If this field is
+ // not present, and multiple international prefixes are present, then "+"
+ // will be used instead.
+ optional string preferred_international_prefix = 17;
+
+ // The national prefix of country A is the number that needs to be dialled
+ // before the national significant number when dialling internally. This
+ // would not be dialled when dialling internationally. For example, in New
+ // Zealand, the number that would be locally dialled as 09 345 3456 would be
+ // dialled from overseas as +64 9 345 3456. In this case, 0 is the national
+ // prefix.
+ optional string national_prefix = 12;
+
+ // The preferred prefix when specifying an extension in this country. This is
+ // used for formatting only, and if this is not specified, a suitable default
+ // should be used instead. For example, if you wanted extensions to be
+ // formatted in the following way:
+ // 1 (365) 345 445 ext. 2345
+ // " ext. " should be the preferred extension prefix.
+ optional string preferred_extn_prefix = 13;
+
+ // This field is used for cases where the national prefix of a country
+ // contains a carrier selection code, and is written in the form of a
+ // regular expression. For example, to dial the number 2222-2222 in
+ // Fortaleza, Brazil (area code 85) using the long distance carrier Oi
+ // (selection code 31), one would dial 0 31 85 2222 2222. Assuming the
+ // only other possible carrier selection code is 32, the field will
+ // contain "03[12]".
+ //
+ // When it is missing from the XML file, this field inherits the value of
+ // national_prefix, if that is present.
+ optional string national_prefix_for_parsing = 15;
+
+ // This field is only populated and used under very rare situations.
+ // For example, mobile numbers in Argentina are written in two completely
+ // different ways when dialed in-country and out-of-country
+ // (e.g. 0343 15 555 1212 is exactly the same number as +54 9 343 555 1212).
+ // This field is used together with national_prefix_for_parsing to transform
+ // the number into a particular representation for storing in the phonenumber
+ // proto buffer in those rare cases.
+ optional string national_prefix_transform_rule = 16;
+
+ // Specifies whether the mobile and fixed-line patterns are the same or not.
+ // This is used to speed up determining phone number type in countries where
+ // these two types of phone numbers can never be distinguished.
+ optional bool same_mobile_and_fixed_line_pattern = 18 [default=false];
+
+ // Note that the number format here is used for formatting only, not parsing.
+ // Hence all the varied ways a user *may* write a number need not be recorded
+ // - just the ideal way we would like to format it for them. When this element
+ // is absent, the national significant number will be formatted as a whole
+ // without any formatting applied.
+ repeated NumberFormat number_format = 19;
+
+ // This field is populated only when the national significant number is
+ // formatted differently when it forms part of the INTERNATIONAL format
+ // and NATIONAL format. A case in point is mobile numbers in Argentina:
+ // The number, which would be written in INTERNATIONAL format as
+ // +54 9 343 555 1212, will be written as 0343 15 555 1212 for NATIONAL
+ // format. In this case, the prefix 9 is inserted when dialling from
+ // overseas, but otherwise the prefix 0 and the carrier selection code
+ // 15 (inserted after the area code of 343) is used.
+ repeated NumberFormat intl_number_format = 20;
+
+ // This field is set when this country is considered to be the main country
+ // for a calling code. It may not be set by more than one country with the
+ // same calling code, and it should not be set by countries with a unique
+ // calling code. This can be used to indicate that "GB" is the main country
+ // for the calling code "44" for example, rather than Jersey or the Isle of
+ // Man.
+ optional bool main_country_for_code = 22 [default=false];
+
+ // This field is populated only for countries or regions that share a country
+ // calling code. If a number matches this pattern, it could belong to this
+ // region. This is not intended as a replacement for IsValidForRegion, and
+ // does not mean the number must come from this region (for example, 800
+ // numbers are valid for all NANPA countries.) This field should be a regular
+ // expression of the expected prefix match.
+ optional string leading_digits = 23;
+
+ // The leading zero in a phone number is meaningful in some countries (e.g.
+ // Italy). This means they cannot be dropped from the national number when
+ // converting into international format. If leading zeros are possible for
+ // valid international numbers for this region/country then set this to true.
+ // This only needs to be set for the region that is the main_country_for_code
+ // and all regions associated with that calling code will use the same
+ // setting.
+ optional bool leading_zero_possible = 26 [default=false];
+}
+
+message PhoneMetadataCollection {
+ repeated PhoneMetadata metadata = 1;
+}
diff --git a/third_party/libphonenumber/resources/phonenumber.proto b/third_party/libphonenumber/resources/phonenumber.proto
new file mode 100644
index 0000000..8ea4288
--- /dev/null
+++ b/third_party/libphonenumber/resources/phonenumber.proto
@@ -0,0 +1,121 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// Definition of protocol buffer for representing international telephone numbers.
+// @author Shaopeng Jia
+
+syntax = "proto2";
+
+option java_package = "com.google.i18n.phonenumbers";
+option optimize_for = LITE_RUNTIME;
+
+package i18n.phonenumbers;
+
+message PhoneNumber {
+// The country calling code for this number, as defined by the International Telecommunication Union
+// (ITU). Fox example, this would be 1 for NANPA countries, and 33 for France.
+ required int32 country_code = 1;
+
+// National (significant) Number is defined in International Telecommunication Union Recommendation
+// E.164. It is a language/country-neutral representation of a phone number at a country level. For
+// countries which have the concept of Area Code, the National (significant) Number contains the
+// area code. It contains a maximum number of digits which equal to 15 - n, where n is the number of
+// digits of the country code. Take note that National (significant) Number does not contain
+// National(trunk) prefix. Obviously, as a uint64, it will never contain any formatting (hypens,
+// spaces, parentheses), nor any alphanumeric spellings.
+ required uint64 national_number = 2;
+
+// Extension is not standardized in ITU recommendations, except for being defined as a series of
+// numbers with a maximum length of 40 digits. It is defined as a string here to accommodate for the
+// possible use of a leading zero in the extension (organizations have complete freedom to do so,
+// as there is no standard defined). However, only ASCII digits should be stored here.
+ optional string extension = 3;
+
+// In some countries, the national (significant) number starts with a "0" without this being a
+// national prefix or trunk code of some kind. For example, the leading zero in the national
+// (significant) number of an Italian phone number indicates the number is a fixed-line number.
+// There have been plans to migrate fixed-line numbers to start with the digit two since December
+// 2000, but it has not happened yet. See http://en.wikipedia.org/wiki/%2B39 for more details.
+//
+// This field can be safely ignored (there is no need to set it) for most countries. Some limited
+// amount of countries behave like Italy - for these cases, if the leading zero of a number would be
+// retained even when dialling internationally, set this flag to true.
+//
+// Clients who use the parsing functionality of the i18n phone number libraries
+// will have this field set if necessary automatically.
+ optional bool italian_leading_zero = 4;
+
+// The next few fields are non-essential fields for a phone number. They retain extra information
+// about the form the phone number was in when it was provided to us to parse. They can be safely
+// ignored by most clients.
+
+// This field is used to store the raw input string containing phone numbers before it was
+// canonicalized by the library. For example, it could be used to store alphanumerical numbers
+// such as "1-800-GOOG-411".
+ optional string raw_input = 5;
+
+// The source from which the country_code is derived. This is not set in the general parsing method,
+// but in the method that parses and keeps raw_input. New fields could be added upon request.
+ enum CountryCodeSource {
+ // The country_code is derived based on a phone number with a leading "+", e.g. the French
+ // number "+33 (0)1 42 68 53 00".
+ FROM_NUMBER_WITH_PLUS_SIGN = 1;
+
+ // The country_code is derived based on a phone number with a leading IDD, e.g. the French
+ // number "011 33 (0)1 42 68 53 00", as it is dialled from US.
+ FROM_NUMBER_WITH_IDD = 5;
+
+ // The country_code is derived based on a phone number without a leading "+", e.g. the French
+ // number "33 (0)1 42 68 53 00" when defaultCountry is supplied as France.
+ FROM_NUMBER_WITHOUT_PLUS_SIGN = 10;
+
+ // The country_code is derived NOT based on the phone number itself, but from the defaultCountry
+ // parameter provided in the parsing function by the clients. This happens mostly for numbers
+ // written in the national format (without country code). For example, this would be set when
+ // parsing the French number "(0)1 42 68 53 00", when defaultCountry is supplied as France.
+ FROM_DEFAULT_COUNTRY = 20;
+ }
+
+// The source from which the country_code is derived.
+ optional CountryCodeSource country_code_source = 6;
+
+// The carrier selection code that is preferred when calling this phone number domestically. This
+// also includes codes that need to be dialed in some countries when calling from landlines to
+// mobiles or vice versa. For example, in Columbia, a "3" needs to be dialed before the phone number
+// itself when calling from a mobile phone to a domestic landline phone and vice versa.
+//
+// Note this is the "preferred" code, which means other codes may work as well.
+ optional string preferred_domestic_carrier_code = 7;
+}
+
+// Examples
+//
+// Google MTV, +1 650-253-0000, (650) 253-0000
+// country_code: 1
+// national_number: 6502530000
+//
+// Google Paris, +33 (0)1 42 68 53 00, 01 42 68 53 00
+// country_code: 33
+// national_number: 142685300
+//
+// Google Beijing, +86-10-62503000, (010) 62503000
+// country_code: 86
+// national_number: 1062503000
+//
+// Google Italy, +39 02-36618 300, 02-36618 300
+// country_code: 39
+// national_number: 236618300
+// italian_leading_zero: true